This is an automated email from the ASF dual-hosted git repository.

jihao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new 7a40f11  [TE] show alert health on the alerts page (#6072)
7a40f11 is described below

commit 7a40f11cd4ee4aba6c30ec8197ffd2f08c2c9d39
Author: Jihao Zhang <jihzh...@linkedin.com>
AuthorDate: Wed Sep 30 10:17:54 2020 -0700

    [TE] show alert health on the alerts page (#6072)
    
    This PR brings consistent detection health to the alerts page. Previously, 
the health is fetched from the offline results, which cannot be generated if 
there are too many alerts because out of memory issues. This PR changes it to 
generate it online while keeping the performance the same.
---
 .../app/pods/manage/alerts/index/controller.js     | 13 ++++++
 .../acceptance/self-serve-alert-tuning-test.js     | 47 ----------------------
 .../anomaly/monitor/MonitorTaskRunner.java         | 28 -------------
 3 files changed, 13 insertions(+), 75 deletions(-)

diff --git 
a/thirdeye/thirdeye-frontend/app/pods/manage/alerts/index/controller.js 
b/thirdeye/thirdeye-frontend/app/pods/manage/alerts/index/controller.js
index 314dcfc..aae52e9 100644
--- a/thirdeye/thirdeye-frontend/app/pods/manage/alerts/index/controller.js
+++ b/thirdeye/thirdeye-frontend/app/pods/manage/alerts/index/controller.js
@@ -31,6 +31,7 @@ import {
 
 export default Controller.extend({
   queryParams: ['testMode'],
+  detectionHealthQueryTimeRange: [moment().add(1, 'day').subtract(30, 
'day').startOf('day').valueOf(), moment().add(1, 
'day').startOf('day').valueOf()],
 
   /**
    * One-way CP to store all sub groups
@@ -228,6 +229,11 @@ export default Controller.extend({
           break;
         }
       }
+
+      for (const alert of alerts) {
+        this._fetchDetectionHealth(alert);
+      }
+
       // Return one page of sorted alerts
       return alerts;
     }
@@ -335,6 +341,13 @@ export default Controller.extend({
     return this.get('_getAlerts').perform(paramsForAlerts);
   },
 
+  async _fetchDetectionHealth(alert) {
+    const healthQueryTimeRange = get(this, 'detectionHealthQueryTimeRange');
+    const healthUrl = 
`/detection/health/${alert.id}?start=${healthQueryTimeRange[0]}&end=${healthQueryTimeRange[1]}`;
+    const health_result = await fetch(healthUrl).then(checkStatus);
+    set(alert, 'health', health_result);
+  },
+
   _handlePrimaryFilter(primaryFilter, paramsForAlerts) {
     switch(primaryFilter) {
       case 'Alerts I subscribe to': {
diff --git 
a/thirdeye/thirdeye-frontend/tests/acceptance/self-serve-alert-tuning-test.js 
b/thirdeye/thirdeye-frontend/tests/acceptance/self-serve-alert-tuning-test.js
deleted file mode 100644
index 1220632..0000000
--- 
a/thirdeye/thirdeye-frontend/tests/acceptance/self-serve-alert-tuning-test.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import $ from 'jquery';
-import { module, test } from 'qunit';
-import { setupApplicationTest } from 'ember-qunit';
-import { selfServeConst } from 'thirdeye-frontend/tests/utils/constants';
-import { visit, fillIn, click, currentURL, triggerKeyEvent, waitUntil } from 
'@ember/test-helpers';
-import { filters, dimensions, granularities } from 
'thirdeye-frontend/mocks/metricPeripherals';
-import { selectChoose, clickTrigger } from 
'thirdeye-frontend/tests/helpers/ember-power-select';
-
-module('Acceptance | tune alert settings', function(hooks) {
-  setupApplicationTest(hooks);
-
-  const alertLinkTitle = 'test_function_1';
-  const alertProps = [
-    'Metric',
-    'Dataset',
-    'Granularity',
-    'Application',
-    'Created By',
-    'Filtered By',
-    'Breakdown By',
-    'Detection Type',
-    'Subscription Group'
-  ];
-
-  test(`check whether alerts page shows correct number of alerts`, async 
(assert) => {
-    server.createList('alert', 5);
-    await visit(`/manage/alerts`);
-
-    // Verify default search results
-    assert.equal(
-      $(selfServeConst.RESULTS_TITLE).get(0).innerText.trim(),
-      'Alerts (5)',
-      'Number of alerts displayed and title are correct.'
-    );
-  });
-
-  /**
-   * TODO: extend this test with the following flow:
-   * - click "preview performance", verify expected alert performance results, 
verify anomaly table results
-   * - click "reset", verify clean slate
-   * - click preview on custom settings, verify expected alert performance 
results
-   * - save a custom MTTD, verify banner
-   * - change date time range
-   * - navigate back to alert page, verify mttd % is consistent and time range 
is persisted
-   * - click report missing anomaly, enter time range, verify success banner 
and closed modal
-   */
-});
diff --git 
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/monitor/MonitorTaskRunner.java
 
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/monitor/MonitorTaskRunner.java
index 7e47f3b..1749318 100644
--- 
a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/monitor/MonitorTaskRunner.java
+++ 
b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/monitor/MonitorTaskRunner.java
@@ -132,9 +132,6 @@ public class MonitorTaskRunner implements TaskRunner {
         }
       }
 
-      // update detection health
-      updateDetectionHealth();
-
       // disable alerts that failed consecutively for a long time
       disableLongFailedAlerts();
 
@@ -190,31 +187,6 @@ public class MonitorTaskRunner implements TaskRunner {
         textBody, thirdeyeConfig.getFailureFromAddress(), new 
DetectionAlertFilterRecipients(recipients));
   }
 
-  private void updateDetectionHealth() {
-    DetectionConfigManager detectionDAO = 
DAO_REGISTRY.getDetectionConfigManager();
-    List<DetectionConfigDTO> detectionConfigs = detectionDAO.findAllActive();
-    for (DetectionConfigDTO config : detectionConfigs) {
-      // update detection health status
-      try {
-        DateTime healthStatusWindowEnd = DateTime.now();
-        DetectionHealth health = new DetectionHealth.Builder(config.getId(), 
healthStatusWindowEnd.minusDays(30).getMillis(),
-            
healthStatusWindowEnd.getMillis()).addRegressionStatus(DAO_REGISTRY.getEvaluationManager())
-            .addAnomalyCoverageStatus(DAO_REGISTRY.getMergedAnomalyResultDAO())
-            .addDetectionTaskStatus(DAO_REGISTRY.getTaskDAO())
-            .addOverallHealth()
-            .addOriginalDetectionHealth(config.getHealth())
-            .build();
-        // fetch the config again before saving to DB to avoid overriding 
config that is updated by other threads
-        config = detectionDAO.findById(config.getId());
-        config.setHealth(health);
-        detectionDAO.update(config);
-        LOG.info("Updated detection health for {}", config.getId());
-      } catch (Exception e) {
-        LOG.info("Update detection health for {} failed", config.getId(), e);
-      }
-    }
-  }
-
   private void executeMonitorExpire(MonitorTaskInfo monitorTaskInfo) {
     LOG.info("Execute monitor expire {}", monitorTaskInfo);
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to