package com.intrbiz.bergamot.worker.engine.dummy;
import java.util.Calendar;
import com.intrbiz.bergamot.model.message.check.ExecuteCheck;
import com.intrbiz.bergamot.model.message.result.ActiveResultMO;
import com.intrbiz.bergamot.model.timeperiod.TimeRange;
import com.intrbiz.bergamot.timerange.TimeRangeParser;
import com.intrbiz.bergamot.worker.engine.AbstractExecutor;
/**
* Execute a timed dummy check, which changes state based on time ranges
*/
public class TimedExecutor extends AbstractExecutor<DummyEngine>
{
public static final String NAME = "timed";
public TimedExecutor()
{
super();
}
@Override
public boolean accept(ExecuteCheck task)
{
return DummyEngine.NAME.equals(task.getEngine()) && NAME.equals(task.getExecutor());
}
@Override
public void execute(ExecuteCheck executeCheck)
{
long start = System.nanoTime();
ActiveResultMO result = new ActiveResultMO().fromCheck(executeCheck);
String output = executeCheck.getParameter("output", "");
// parse time ranges
TimeRange warning = TimeRangeParser.parseTimeRange(executeCheck.getParameter("warning", "01:00-02:00, 05:00-06:00, 08:00-09:00, 11:00-12:00, 14:00-15:00, 17:00-18:00, 20:00-21:00, 23:00-24:00"));
TimeRange critical = TimeRangeParser.parseTimeRange(executeCheck.getParameter("critical", "02:00-03:00, 06:00-07:00, 09:00-10:00, 12:00-13:00, 15:00-16:00, 18:00-19:00, 21:00-22:00"));
Calendar now = Calendar.getInstance();
// compute the check state
if (critical.isInTimeRange(now))
{
result.critical(output);
}
else if (warning.isInTimeRange(now))
{
result.warning(output);
}
else
{
result.ok(output);
}
this.publishActiveResult(executeCheck, result.runtime(((double)(System.nanoTime() - start)) / 1_000_000D));
}
}