@Test public void testConstructorThresholdNull() { ThrowableAnticipator ta = new ThrowableAnticipator(); ta.anticipate(new IllegalArgumentException("threshold argument cannot be null")); try { new ThresholdEvaluatorStateAbsoluteChange(null); } catch (Throwable t) { ta.throwableReceived(t); } ta.verifyAnticipated(); }
private Event createBasicEvent(String uei, Date date, double dsValue, CollectionResourceWrapper resource) { Map<String,String> params = new HashMap<String,String>(); params.put("previousValue", formatValue(getPreviousTriggeringSample())); params.put("changeThreshold", Double.toString(getThresholdConfig().getValue())); params.put("trigger", Integer.toString(getThresholdConfig().getTrigger())); return createBasicEvent(uei, date, dsValue, resource, params); }
@Override public Status evaluate(double dsValue) { if(!Double.isNaN(getLastSample())) { double threshold = getLastSample()+getChange(); if (getChange() < 0.0) { //Negative change; care if the value is *below* the threshold if (dsValue <= threshold) { setPreviousTriggeringSample(getLastSample()); setLastSample(dsValue); LOG.debug("evaluate: absolute negative change threshold triggered"); return Status.TRIGGERED; } } else { //Positive change; care if the current value is *above* the threshold if (dsValue >= threshold) { setPreviousTriggeringSample(getLastSample()); setLastSample(dsValue); LOG.debug("evaluate: absolute positive change threshold triggered"); return Status.TRIGGERED; } } } setLastSample(dsValue); return Status.NO_CHANGE; }
threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateAbsoluteChange evaluator = new ThresholdEvaluatorStateAbsoluteChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(8.0)); assertEquals("should trigger", Status.TRIGGERED, evaluator.evaluate(10.0)); Event event = evaluator.getEventForState(Status.TRIGGERED, new Date(), 10.0, null); assertNotNull("should have created an event", event); assertEquals("UEIs should be the same", EventConstants.ABSOLUTE_CHANGE_THRESHOLD_EVENT_UEI, event.getUei()); event = evaluator.getEventForState(Status.TRIGGERED, new Date(), 10.0, new MockCollectionResourceWrapper("testInstance")); assertNotNull("should have created an event", event); assertEquals("UEIs should be the same", EventConstants.ABSOLUTE_CHANGE_THRESHOLD_EVENT_UEI, event.getUei());
@Test public void testGetEventForStateCustomUEIS() { String triggeredUEI="uei.opennms.org/custom/absoluteChangeThresholdTriggered"; Threshold threshold = new Threshold(); threshold.setType(ThresholdType.ABSOLUTE_CHANGE); threshold.setDsName("ds-name"); threshold.setDsType("node"); threshold.setValue(99.0); threshold.setRearm(95.0); threshold.setTrigger(1); threshold.setTriggeredUEI(triggeredUEI); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateAbsoluteChange item = new ThresholdEvaluatorStateAbsoluteChange(wrapper); Event event=item.getEventForState(Status.TRIGGERED, new Date(), 100.0, null); assertEquals("UEI should be the "+triggeredUEI, triggeredUEI, event.getUei()); } }
public void setThresholdConfig(BaseThresholdDefConfigWrapper thresholdConfig) { Assert.notNull(thresholdConfig.getType(), "threshold must have a 'type' value set"); Assert.notNull(thresholdConfig.getDatasourceExpression(), "threshold must have a 'ds-name' value set"); Assert.notNull(thresholdConfig.getDsType(), "threshold must have a 'ds-type' value set"); Assert.isTrue(thresholdConfig.hasValue(), "threshold must have a 'value' value set"); Assert.isTrue(thresholdConfig.hasRearm(), "threshold must have a 'rearm' value set"); Assert.isTrue(thresholdConfig.hasTrigger(), "threshold must have a 'trigger' value set"); Assert.isTrue(TYPE.equals(thresholdConfig.getType()), "threshold for ds-name '" + thresholdConfig.getDatasourceExpression() + "' has type of '" + thresholdConfig.getType() + "', but this evaluator only supports thresholds with a 'type' value of '" + TYPE + "'"); Assert.isTrue(!Double.isNaN(thresholdConfig.getValue()), "threshold must have a 'value' value that is a number"); Assert.isTrue(thresholdConfig.getValue() != Double.POSITIVE_INFINITY && thresholdConfig.getValue() != Double.NEGATIVE_INFINITY, "threshold must have a 'value' value that is not positive or negative infinity"); Assert.isTrue(thresholdConfig.getValue() != 0.0, "threshold must not be 0 for absolute change"); m_thresholdConfig = thresholdConfig; setChange(thresholdConfig.getValue()); }
@Test public void testEvaluateTwiceTriggerHighEqual() { Threshold threshold = new Threshold(); threshold.setType(ThresholdType.ABSOLUTE_CHANGE); threshold.setDsName("ds-name"); threshold.setDsType("node"); threshold.setValue(1.0); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateAbsoluteChange evaluator = new ThresholdEvaluatorStateAbsoluteChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should trigger", Status.TRIGGERED, evaluator.evaluate(11.0)); }
@Test public void testEvaluateTwiceNoTriggerLowAbove() { Threshold threshold = new Threshold(); threshold.setType(ThresholdType.ABSOLUTE_CHANGE); threshold.setDsName("ds-name"); threshold.setDsType("node"); threshold.setValue(-1.0); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateAbsoluteChange evaluator = new ThresholdEvaluatorStateAbsoluteChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(9.5)); }
@Test public void testGetEventForStateDefaultUEIS() { Threshold threshold = new Threshold(); threshold.setType(ThresholdType.ABSOLUTE_CHANGE); threshold.setDsName("ds-name"); threshold.setDsType("node"); threshold.setValue(99.0); threshold.setRearm(95.0); threshold.setTrigger(1); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateAbsoluteChange item = new ThresholdEvaluatorStateAbsoluteChange(wrapper); Event event=item.getEventForState(Status.TRIGGERED, new Date(), 100.0, null); assertEquals("UEI should be the absoluteChangeThresholdTriggered", EventConstants.ABSOLUTE_CHANGE_THRESHOLD_EVENT_UEI, event.getUei()); }
@Test public void testEvaluateTwiceTriggerLowEqual() { Threshold threshold = new Threshold(); threshold.setType(ThresholdType.ABSOLUTE_CHANGE); threshold.setDsName("ds-name"); threshold.setDsType("node"); threshold.setValue(-1.0); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateAbsoluteChange evaluator = new ThresholdEvaluatorStateAbsoluteChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should trigger", Status.TRIGGERED, evaluator.evaluate(9.0)); }
@Test public void testEvaluateTwiceTriggerLowBelow() { Threshold threshold = new Threshold(); threshold.setType(ThresholdType.ABSOLUTE_CHANGE); threshold.setDsName("ds-name"); threshold.setDsType("node"); threshold.setValue(-1.0); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateAbsoluteChange evaluator = new ThresholdEvaluatorStateAbsoluteChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should trigger", Status.TRIGGERED, evaluator.evaluate(8.0)); }
@Test public void testEvaluateTwiceNoTrigger() { Threshold threshold = new Threshold(); threshold.setType(ThresholdType.ABSOLUTE_CHANGE); threshold.setDsName("ds-name"); threshold.setDsType("node"); threshold.setValue(0.9); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateAbsoluteChange evaluator = new ThresholdEvaluatorStateAbsoluteChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); }
@Test public void testGetEventForStateNoChange() { Threshold threshold = new Threshold(); threshold.setType(ThresholdType.ABSOLUTE_CHANGE); threshold.setDsName("ds-name"); threshold.setDsType("node"); threshold.setValue(1.1); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateAbsoluteChange evaluator = new ThresholdEvaluatorStateAbsoluteChange(wrapper); assertNull("should not have created an event", evaluator.getEventForState(Status.NO_CHANGE, new Date(), 10.0, null)); }
@Test public void testEvaluateTwiceNoTriggerHighBelow() { Threshold threshold = new Threshold(); threshold.setType(ThresholdType.ABSOLUTE_CHANGE); threshold.setDsName("ds-name"); threshold.setDsType("node"); threshold.setValue(1.0); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateAbsoluteChange evaluator = new ThresholdEvaluatorStateAbsoluteChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.5)); }
/** {@inheritDoc} */ @Override public ThresholdEvaluatorState getThresholdEvaluatorState(BaseThresholdDefConfigWrapper threshold) { return new ThresholdEvaluatorStateAbsoluteChange(threshold); }
@Override public ThresholdEvaluatorState getCleanClone() { return new ThresholdEvaluatorStateAbsoluteChange(m_thresholdConfig); }
@Test public void testEvaluateOnce() { Threshold threshold = new Threshold(); threshold.setType(ThresholdType.ABSOLUTE_CHANGE); threshold.setDsName("ds-name"); threshold.setDsType("node"); threshold.setValue(0.9); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateAbsoluteChange evaluator = new ThresholdEvaluatorStateAbsoluteChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); }
@Test public void testEvaluateTwiceTriggerHighAbove() { Threshold threshold = new Threshold(); threshold.setType(ThresholdType.ABSOLUTE_CHANGE); threshold.setDsName("ds-name"); threshold.setDsType("node"); threshold.setValue(1.0); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); ThresholdEvaluatorStateAbsoluteChange evaluator = new ThresholdEvaluatorStateAbsoluteChange(wrapper); assertEquals("should not trigger", Status.NO_CHANGE, evaluator.evaluate(10.0)); assertEquals("should trigger", Status.TRIGGERED, evaluator.evaluate(12.0)); }
@Test public void testConstructor() { Threshold threshold = new Threshold(); threshold.setType(ThresholdType.ABSOLUTE_CHANGE); threshold.setDsName("ds-name"); threshold.setDsType("interface"); threshold.setValue(0.9); threshold.setRearm(0.5); threshold.setTrigger(3); ThresholdConfigWrapper wrapper=new ThresholdConfigWrapper(threshold); new ThresholdEvaluatorStateAbsoluteChange(wrapper); }
@Override public Event getEventForState(Status status, Date date, double dsValue, CollectionResourceWrapper resource) { if (status == Status.TRIGGERED) { final String uei=getThresholdConfig().getTriggeredUEI().orElse(EventConstants.ABSOLUTE_CHANGE_THRESHOLD_EVENT_UEI); return createBasicEvent(uei, date, dsValue, resource); } else { return null; } }