package com.intrbiz.bergamot.worker.engine.script; import java.util.function.BiPredicate; import com.intrbiz.Util; import com.intrbiz.bergamot.model.message.check.ExecuteCheck; import com.intrbiz.bergamot.model.message.reading.ReadingParcelMO; import com.intrbiz.bergamot.model.message.result.ActiveResultMO; import com.intrbiz.bergamot.worker.engine.Executor; import com.intrbiz.gerald.polyakov.Reading; import com.intrbiz.gerald.polyakov.gauge.DoubleGaugeReading; import com.intrbiz.gerald.polyakov.gauge.FloatGaugeReading; import com.intrbiz.gerald.polyakov.gauge.IntegerGaugeReading; import com.intrbiz.gerald.polyakov.gauge.LongGaugeReading; public class ActiveCheckScriptContext { private final ExecuteCheck executeCheck; private final Executor<?> executor; private final long start = System.currentTimeMillis(); public ActiveCheckScriptContext(ExecuteCheck executeCheck, Executor<?> executor) { this.executeCheck = executeCheck; this.executor = executor; } public ExecuteCheck getExecuteCheck() { return executeCheck; } public ExecuteCheck getCheck() { return executeCheck; } public void info(String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).info(message)); } public void ok(String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).ok(message)); } public void warning(String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).warning(message)); } public void critical(String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).critical(message)); } public void unknown(String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).unknown(message)); } public void error(String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).error(message)); } public void error(Throwable error) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).error(error)); } public void timeout(String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).timeout(message)); } public void disconnected(String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).disconnected(message)); } public void action(String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).action(message)); } public <V,T> void applyThreshold(V value, BiPredicate<V,T> match, T warning, T critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyThreshold(value, match, warning, critical, message)); } public <V,T> void applyThresholds(Iterable<V> values, BiPredicate<V,T> match, T warning, T critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyThresholds(values, match, warning, critical, message)); } public void applyGreaterThanThreshold(Double value, Double warning, Double critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyGreaterThanThreshold(value, warning, critical, message)); } public void applyLessThanThreshold(Double value, Double warning, Double critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyLessThanThreshold(value, warning, critical, message)); } public void applyGreaterThanThreshold(Float value, Float warning, Float critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyGreaterThanThreshold(value, warning, critical, message)); } public void applyLessThanThreshold(Float value, Float warning, Float critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyLessThanThreshold(value, warning, critical, message)); } public void applyGreaterThanThreshold(Long value, Long warning, Long critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyGreaterThanThreshold(value, warning, critical, message)); } public void applyLessThanThreshold(Long value, Long warning, Long critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyLessThanThreshold(value, warning, critical, message)); } public void applyGreaterThanThreshold(Integer value, Integer warning, Integer critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyGreaterThanThreshold(value, warning, critical, message)); } public void applyLessThanThreshold(Integer value, Integer warning, Integer critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyLessThanThreshold(value, warning, critical, message)); } public void applyGreaterThanThresholds(Iterable<Double> values, Double warning, Double critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyGreaterThanThresholds(values, warning, critical, message)); } public void applyLessThanThresholds(Iterable<Double> values, Double warning, Double critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyLessThanThresholds(values, warning, critical, message)); } public void applyGreaterThanThresholds(Iterable<Float> values, Float warning, Float critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyGreaterThanThresholds(values, warning, critical, message)); } public void applyLessThanThresholds(Iterable<Float> values, Float warning, Float critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyLessThanThresholds(values, warning, critical, message)); } public void applyGreaterThanThresholds(Iterable<Long> values, Long warning, Long critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyGreaterThanThresholds(values, warning, critical, message)); } public void applyLessThanThresholds(Iterable<Long> values, Long warning, Long critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyLessThanThresholds(values, warning, critical, message)); } public void applyGreaterThanThresholds(Iterable<Integer> values, Integer warning, Integer critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyGreaterThanThresholds(values, warning, critical, message)); } public void applyLessThanThresholds(Iterable<Integer> values, Integer warning, Integer critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyLessThanThresholds(values, warning, critical, message)); } public <V,T> void applyRange(V value, BiPredicate<V,T> lowerMatch, BiPredicate<V,T> upperMatch, T[] warning, T[] critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyRange(value, lowerMatch, upperMatch, warning, critical, message)); } public void applyRange(Long value, Long[] warning, Long[] critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyRange(value, warning, critical, message)); } public void applyRange(Integer value, Integer[] warning, Integer[] critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyRange(value, warning, critical, message)); } public void applyRange(Double value, Double[] warning, Double[] critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyRange(value, warning, critical, message)); } public void applyRange(Float value, Float[] warning, Float[] critical, String message) { this.publish(new ActiveResultMO().fromCheck(this.executeCheck).applyRange(value, warning, critical, message)); } public void publish(ActiveResultMO resultMO) { resultMO.runtime(System.currentTimeMillis() - this.start); this.executor.publishActiveResult(this.executeCheck, resultMO); } public ActiveResultMO createResult() { return new ActiveResultMO().fromCheck(this.getCheck()); } public void require(String parameterName) { if (Util.isEmpty(this.getCheck().getParameter(parameterName))) throw new RuntimeException("The " + parameterName + " parameter must be defined!"); } public void require(boolean check, String message) { if (check) throw new RuntimeException(message); } // readings public void publishReadings(Reading... readings) { this.executor.publishReading(this.executeCheck, readings); } public void publishReadings(ReadingParcelMO readings) { this.executor.publishReading(this.executeCheck, readings); } public DoubleGaugeReading createDoubleGaugeReading(String name, String unit, Double value) { return new DoubleGaugeReading(name, unit, value); } public DoubleGaugeReading createDoubleGaugeReading(String name, String unit, Double value, Double warning, Double critical, Double min, Double max) { return new DoubleGaugeReading(name, unit, value, warning, critical, min, max); } public LongGaugeReading createLongGaugeReading(String name, String unit, Long value) { return new LongGaugeReading(name, unit, value); } public LongGaugeReading createLongGaugeReading(String name, String unit, Long value, Long warning, Long critical, Long min, Long max) { return new LongGaugeReading(name, unit, value, warning, critical, min, max); } public IntegerGaugeReading createIntegerGaugeReading(String name, String unit, Integer value) { return new IntegerGaugeReading(name, unit, value); } public IntegerGaugeReading createIntegerGaugeReading(String name, String unit, Integer value, Integer warning, Integer critical, Integer min, Integer max) { return new IntegerGaugeReading(name, unit, value, warning, critical, min, max); } public FloatGaugeReading createFloatGaugeReading(String name, String unit, Float value) { return new FloatGaugeReading(name, unit, value); } public FloatGaugeReading createFloatGaugeReading(String name, String unit, Float value, Float warning, Float critical, Float min, Float max) { return new FloatGaugeReading(name, unit, value, warning, critical, min, max); } }