/** * <p>getConfigWrapper</p> * * @param baseDef a {@link org.opennms.netmgt.config.threshd.Basethresholddef} object. * @return a {@link org.opennms.netmgt.threshd.BaseThresholdDefConfigWrapper} object. * @throws org.opennms.netmgt.threshd.ThresholdExpressionException if any. */ public static BaseThresholdDefConfigWrapper getConfigWrapper(Basethresholddef baseDef) throws ThresholdExpressionException { if(baseDef instanceof Threshold) { return new ThresholdConfigWrapper((Threshold)baseDef); } else if(baseDef instanceof Expression) { return new ExpressionConfigWrapper((Expression)baseDef); } return null; }
public void testEvaluateEvaluateMultipleItemsSubtracted() throws Exception { expression.setExpression("dsname1-dsname2"); ExpressionConfigWrapper wrapper=new ExpressionConfigWrapper(expression); assertEquals(2, wrapper.getRequiredDatasources().size()); for (String ds : new String[] { "dsname1", "dsname2" }) { assertTrue("Could not find expected variable: " + ds, wrapper.getRequiredDatasources().contains(ds)); } Map<String, Double> values=new HashMap<String,Double>(); values.put("dsname1",20.0); values.put("dsname2",5.0); double result=wrapper.evaluate(values); assertEquals("Threshold Expression result", Double.valueOf(result), Double.valueOf(15.0)); }
public void testSemiComplexExpression() throws Exception { expression.setExpression("(hrStorageSize-hrStorageUsed)*hrStorageAllocationUnits"); ExpressionConfigWrapper wrapper=new ExpressionConfigWrapper(expression); assertEquals(3, wrapper.getRequiredDatasources().size()); for (String ds : new String[] { "hrStorageSize", "hrStorageUsed", "hrStorageAllocationUnits" }) { assertTrue("Could not find expected variable: " + ds, wrapper.getRequiredDatasources().contains(ds)); } Map<String, Double> values=new HashMap<String,Double>(); values.put("hrStorageAllocationUnits",1024.0); //1K units values.put("hrStorageSize",2048.0); //2MB total size values.put("hrStorageUsed",1024.0); //1MB used double result=wrapper.evaluate(values); //1MB free, hopefully assertEquals("Threshold Expression result", Double.valueOf(result), Double.valueOf(1024.0*1024.0)); }
public void testEvaluateEvaluateSingleItemWithDivision() throws Exception { expression.setExpression("dsname/10"); ExpressionConfigWrapper wrapper=new ExpressionConfigWrapper(expression); assertEquals(1, wrapper.getRequiredDatasources().size()); for (String ds : new String[] { "dsname" }) { assertTrue(wrapper.getRequiredDatasources().contains(ds)); } Map<String, Double> values=new HashMap<String,Double>(); values.put("dsname",1000.0); double result=wrapper.evaluate(values); assertEquals("Threshold Expression result", Double.valueOf(result), Double.valueOf(100.0)); }
public void testEvaluateEvaluateMultipleItemsDivided() throws Exception { expression.setExpression("dsname1/dsname2"); ExpressionConfigWrapper wrapper=new ExpressionConfigWrapper(expression); assertEquals(2, wrapper.getRequiredDatasources().size()); for (String ds : new String[] { "dsname1", "dsname2" }) { assertTrue("Could not find expected variable: " + ds, wrapper.getRequiredDatasources().contains(ds)); } Map<String, Double> values=new HashMap<String,Double>(); values.put("dsname1",100.0); values.put("dsname2",5.0); double result=wrapper.evaluate(values); assertEquals("Threshold Expression result", Double.valueOf(result), Double.valueOf(20.0)); }
public void testEvaluateEvaluateMultipleItemsAdded() throws Exception { expression.setExpression("dsname1+dsname2"); ExpressionConfigWrapper wrapper=new ExpressionConfigWrapper(expression); assertEquals(2, wrapper.getRequiredDatasources().size()); for (String ds : new String[] { "dsname1", "dsname2" }) { assertTrue("Could not find expected variable: " + ds, wrapper.getRequiredDatasources().contains(ds)); } Map<String, Double> values=new HashMap<String,Double>(); values.put("dsname1",20.0); values.put("dsname2",5.0); double result=wrapper.evaluate(values); assertEquals("Threshold Expression result", Double.valueOf(result), Double.valueOf(25.0)); }
public void testEvaluateEvaluateMultipleItemsMultiplied() throws Exception { expression.setExpression("dsname1*dsname2"); ExpressionConfigWrapper wrapper=new ExpressionConfigWrapper(expression); assertEquals(2, wrapper.getRequiredDatasources().size()); for (String ds : new String[] { "dsname1", "dsname2" }) { assertTrue("Could not find expected variable: " + ds, wrapper.getRequiredDatasources().contains(ds)); } Map<String, Double> values=new HashMap<String,Double>(); values.put("dsname1",20.0); values.put("dsname2",5.0); double result=wrapper.evaluate(values); assertEquals("Threshold Expression result", Double.valueOf(result), Double.valueOf(100.0)); }
public void testEvaluateEvaluateSingleItemWithSubtraction() throws Exception { expression.setExpression("dsname-10"); ExpressionConfigWrapper wrapper=new ExpressionConfigWrapper(expression); assertEquals(1, wrapper.getRequiredDatasources().size()); for (String ds : new String[] { "dsname" }) { assertTrue("Could not find expected variable: " + ds, wrapper.getRequiredDatasources().contains(ds)); } Map<String, Double> values=new HashMap<String,Double>(); values.put("dsname",100.0); double result=wrapper.evaluate(values); assertEquals("Threshold Expression result", Double.valueOf(result), Double.valueOf(90.0)); }
public void testEvaluateEvaluateSingleItemWithAddition() throws Exception { expression.setExpression("dsname+10"); ExpressionConfigWrapper wrapper=new ExpressionConfigWrapper(expression); assertEquals(1, wrapper.getRequiredDatasources().size()); for (String ds : new String[] { "dsname" }) { assertTrue("Could not find expected variable: " + ds, wrapper.getRequiredDatasources().contains(ds)); } Map<String, Double> values=new HashMap<String,Double>(); values.put("dsname",100.0); double result=wrapper.evaluate(values); assertEquals("Threshold Expression result", Double.valueOf(result), Double.valueOf(110.0)); }
public void testEvaluateEvaluateSingleItemWithMultiply() throws Exception { expression.setExpression("dsname*10"); ExpressionConfigWrapper wrapper=new ExpressionConfigWrapper(expression); assertEquals(1, wrapper.getRequiredDatasources().size()); for (String ds : new String[] { "dsname" }) { assertTrue(wrapper.getRequiredDatasources().contains(ds)); } Map<String, Double> values=new HashMap<String,Double>(); values.put("dsname",100.0); double result=wrapper.evaluate(values); assertEquals("Threshold Expression result", Double.valueOf(result), Double.valueOf(1000.0)); }
public void testEvaluateConditionalFalse() throws Exception { // Doesn't work because the expression is actually being evaluated to sniff // the variable names and trueval is never visited by the parser // expression.setExpression("a < b ? trueval : falseval"); // Force trueval to be visited by the parser expression.setExpression("(trueval == trueval && a < b) ? trueval : falseval"); ExpressionConfigWrapper wrapper=new ExpressionConfigWrapper(expression); assertEquals(4, wrapper.getRequiredDatasources().size()); for (String ds : new String[] { "a", "b", "trueval", "falseval" }) { assertTrue("Could not find expected variable: " + ds, wrapper.getRequiredDatasources().contains(ds)); } Map<String, Double> values=new HashMap<String,Double>(); values.put("a",20.0); values.put("b",5.0); values.put("trueval",3.0); values.put("falseval",7.0); double result=wrapper.evaluate(values); assertEquals("Conditional Expression result", Double.valueOf(result), Double.valueOf(7.0)); }
public void testEvaluateConditionalTrue() throws Exception { // Doesn't work because the expression is actually being evaluated to sniff // the variable names and trueval is never visited by the parser // expression.setExpression("a < b ? trueval : falseval"); // Force trueval to be visited by the parser expression.setExpression("(trueval == trueval && a < b) ? trueval : falseval"); ExpressionConfigWrapper wrapper=new ExpressionConfigWrapper(expression); assertEquals(4, wrapper.getRequiredDatasources().size()); for (String ds : new String[] { "a", "b", "trueval", "falseval" }) { assertTrue("Could not find expected variable: " + ds, wrapper.getRequiredDatasources().contains(ds)); } Map<String, Double> values=new HashMap<String,Double>(); values.put("a",2.0); values.put("b",5.0); values.put("trueval",3.0); values.put("falseval",7.0); double result=wrapper.evaluate(values); assertEquals("Conditional Expression result", Double.valueOf(result), Double.valueOf(3.0)); }
@Test public void testFunctions() throws Exception { Expression exp = new Expression(); exp.setExpression("math.max((ifInOctets*8/ifSpeed), (ifOutOctets*8/ifSpeed))"); ExpressionConfigWrapper wrapper = new ExpressionConfigWrapper(exp); Assert.assertEquals(3, wrapper.getRequiredDatasources().size()); Map<String, Double> values = new HashMap<String,Double>(); values.put("ifInOctets", 100.0); values.put("ifOutOctets", 200.0); values.put("ifSpeed", 10.0); Assert.assertEquals(160.0, wrapper.evaluate(values), 0.0); } }
@Test public void testMath() throws Exception { Expression exp = new Expression(); exp.setExpression("math.max(data, 5)"); wrapper = new ExpressionConfigWrapper(exp); Map<String, Double> values = new HashMap<String,Double>(); values.put("data", 10.0); Assert.assertTrue(10.0 == wrapper.evaluate(values)); }
@Test public void testHandleInvalidDsNames() throws Exception { Expression exp = new Expression(); exp.setExpression("datasources['ns-dskTotal'] - datasources['ns-dskUsed']"); ExpressionConfigWrapper wrapper = new ExpressionConfigWrapper(exp); Assert.assertEquals(2, wrapper.getRequiredDatasources().size()); Map<String, Double> values = new HashMap<String,Double>(); values.put("ns-dskTotal", 100.0); values.put("ns-dskUsed", 40.0); Assert.assertEquals(60.0, wrapper.evaluate(values), 0.0); }
public void testAbsoluteValues() throws Exception { expression.setExpression("math.abs(variable + 5)"); ExpressionConfigWrapper wrapper=new ExpressionConfigWrapper(expression); assertEquals(1, wrapper.getRequiredDatasources().size()); for (String ds : new String[] { "variable" }) { assertTrue("Could not find expected variable: " + ds, wrapper.getRequiredDatasources().contains(ds)); } Map<String,Double> values=new HashMap<String,Double>(); values.put("variable", -25.0); double result = wrapper.evaluate(values); assertEquals("Conditional Expression result", Double.valueOf(20.0), result); values.clear(); values.put("variable", 25.0); result = wrapper.evaluate(values); assertEquals("Conditional Expression result", Double.valueOf(30.0), result); } }
@Before public void setUp() throws Exception { MockLogAppender.setupLogging(true, "TRACE"); Expression exp = new Expression(); exp.setExpression(FORMULA); wrapper = new ExpressionConfigWrapper(exp); Assert.assertEquals(4, wrapper.getRequiredDatasources().size()); }
@Test public void testComplexExpression() throws Exception { Expression exp = new Expression(); exp.setExpression("jnxOperatingState == 2.0 || jnxOperatingState == 3.0 || jnxOperatingState == 7.0 ? 1.0 : 0.0"); ExpressionConfigWrapper wrapper = new ExpressionConfigWrapper(exp); Assert.assertEquals(1, wrapper.getRequiredDatasources().size()); Map<String, Double> values = new HashMap<String,Double>(); values.put("jnxOperatingState", 1.0); Assert.assertEquals(0.0, wrapper.evaluate(values), 0.0); values.put("jnxOperatingState", 2.0); Assert.assertEquals(1.0, wrapper.evaluate(values), 0.0); values.put("jnxOperatingState", 3.0); Assert.assertEquals(1.0, wrapper.evaluate(values), 0.0); values.put("jnxOperatingState", 4.0); Assert.assertEquals(0.0, wrapper.evaluate(values), 0.0); values.put("jnxOperatingState", 5.0); Assert.assertEquals(0.0, wrapper.evaluate(values), 0.0); values.put("jnxOperatingState", 6.0); Assert.assertEquals(0.0, wrapper.evaluate(values), 0.0); values.put("jnxOperatingState", 7.0); Assert.assertEquals(1.0, wrapper.evaluate(values), 0.0); }