public void evaluate() { // check for changes in metric rules RulesConfigurationChangeRequest tempNewChangeRequest = newChangeRequest; if (tempNewChangeRequest != null && tempNewChangeRequest != currentChangeRequest) { this.currentChangeRequest = tempNewChangeRequest; for (String alertId : currentChangeRequest.getMetricAlertsToRemove()) { MetricsConfigurator.removeGauge(metrics, AlertsUtil.getAlertGaugeName(alertId), name, rev); } } if (currentChangeRequest != null) { List<MetricsRuleDefinition> metricsRuleDefinitions = currentChangeRequest.getRuleDefinitions().getMetricsRuleDefinitions(); if (metricsRuleDefinitions != null) { for (MetricsRuleDefinition metricsRuleDefinition : metricsRuleDefinitions) { MetricRuleEvaluator metricAlertsHelper = new MetricRuleEvaluator( metricsRuleDefinition, metrics, alertManager, currentChangeRequest.getRuleDefinitions().getEmailIds()); metricAlertsHelper.checkForAlerts(); } } } }
@Test public void testHistogramDisabled() { // create timer with id "testMetricAlerts" and register with metric registry, bump up value to // 4. Histogram h = MetricsConfigurator.createHistogram5Min( metrics, "testHistogramDisabled", PIPELINE_NAME, REVISION); h.update(1000); MetricsRuleDefinition metricsRuleDefinition = new MetricsRuleDefinition( "testHistogramDisabled", "testHistogramDisabled", "testHistogramDisabled", MetricType.HISTOGRAM, MetricElement.HISTOGRAM_COUNT, "${value()==1}", false, false); MetricRuleEvaluator metricRuleEvaluator = new MetricRuleEvaluator( metricsRuleDefinition, metrics, new AlertManager( PIPELINE_NAME, REVISION, null, metrics, runtimeInfo, new EventListenerManager()), Collections.<String>emptyList()); metricRuleEvaluator.checkForAlerts(); // get alert gauge Gauge<Object> gauge = MetricsConfigurator.getGauge( metrics, AlertsUtil.getAlertGaugeName(metricsRuleDefinition.getId())); Assert.assertNull(gauge); }
@Test public void testTimerMatch() { // create timer with id "testMetricAlerts" and register with metric registry, bump up value to // 4. Timer t = MetricsConfigurator.createTimer(metrics, "testTimerMatch", PIPELINE_NAME, REVISION); t.update(1000, TimeUnit.MILLISECONDS); t.update(2000, TimeUnit.MILLISECONDS); t.update(3000, TimeUnit.MILLISECONDS); MetricsRuleDefinition metricsRuleDefinition = new MetricsRuleDefinition( "testTimerMatch", "testTimerMatch", "testTimerMatch", MetricType.TIMER, MetricElement.TIMER_COUNT, "${value()>2}", false, true); MetricRuleEvaluator metricRuleEvaluator = new MetricRuleEvaluator( metricsRuleDefinition, metrics, new AlertManager( PIPELINE_NAME, REVISION, null, metrics, runtimeInfo, new EventListenerManager()), Collections.<String>emptyList()); metricRuleEvaluator.checkForAlerts(); // get alert gauge Gauge<Object> gauge = MetricsConfigurator.getGauge( metrics, AlertsUtil.getAlertGaugeName(metricsRuleDefinition.getId())); Assert.assertNotNull(gauge); Assert.assertEquals((long) 3, ((Map<String, Object>) gauge.getValue()).get("currentValue")); }
@Test public void testMeterNoMatch() { // create timer with id "testMetricAlerts" and register with metric registry, bump up value to // 4. Meter m = MetricsConfigurator.createMeter(metrics, "testMeterNoMatch", PIPELINE_NAME, REVISION); m.mark(1000); MetricsRuleDefinition metricsRuleDefinition = new MetricsRuleDefinition( "testMeterNoMatch", "testMeterNoMatch", "testMeterNoMatch", MetricType.METER, MetricElement.METER_COUNT, "${value()>1001}", false, true); MetricRuleEvaluator metricRuleEvaluator = new MetricRuleEvaluator( metricsRuleDefinition, metrics, new AlertManager( PIPELINE_NAME, REVISION, null, metrics, runtimeInfo, new EventListenerManager()), Collections.<String>emptyList()); metricRuleEvaluator.checkForAlerts(); // get alert gauge Gauge<Object> gauge = MetricsConfigurator.getGauge( metrics, AlertsUtil.getAlertGaugeName(metricsRuleDefinition.getId())); Assert.assertNull(gauge); }