package de.fspengler.hudson.plugin;
import hudson.Extension;
import hudson.Util;
import hudson.model.Hudson;
import hudson.model.Project;
import hudson.model.Result;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.model.listeners.RunListener;
import java.io.IOException;
import java.util.regex.Matcher;
import de.fspengler.hudson.plugin.LogActionProperty.LogActionDescriptor;
@Extension
public class LogItemListener extends RunListener<Run> {
@Override
public void onCompleted(Run r, TaskListener listener) {
LogActionDescriptor descriptor = LogActionProperty.DESCRIPTOR;
if (!descriptor.isEnabled()){
return;
}
if (r.getResult() == Result.FAILURE
&& descriptor.isRestartEnabled()
&& descriptor.getRestartPattern() != null) {
try {
String log = Util.loadFile(r.getLogFile(), r.getCharset());
Matcher matcher = descriptor
.getPatternForRestart().matcher(log);
if (matcher.find()) {
if ( descriptor.getRestartDescription().length() > 0){
r.setDescription(descriptor.getRestartDescription());
}
Project<?, ?> project = Hudson.getInstance()
.getItemByFullName(r.getParent().getFullName(),
Project.class);
project.scheduleBuild(descriptor.getRestartDelay(), new LogActionCause());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public LogItemListener() {
super(Run.class);
}
}