This is an automated email from the ASF dual-hosted git repository. akshayrai09 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 c3446ba [TE] polish the rca template in email (#5939) c3446ba is described below commit c3446bac9c5c0882e0855a77674fc4eb211dbdf1 Author: Akshay Rai <ak...@linkedin.com> AuthorDate: Fri Aug 28 16:15:18 2020 -0700 [TE] polish the rca template in email (#5939) * polished the rca table with line separators and text wrapping * fixed the rca url in the template * removed deprecated fields from configuration --- .../anomaly/ThirdEyeAnomalyApplication.java | 18 +++-- .../anomaly/ThirdEyeAnomalyConfiguration.java | 45 ------------ .../thirdeye/common/ThirdEyeConfiguration.java | 45 +++--------- .../dashboard/ThirdEyeDashboardConfiguration.java | 1 - .../dashboard/resources/v2/RootCauseResource.java | 2 +- .../detector/metric-anomalies-template.ftl | 72 +++++++++---------- ...rca-highlights-cube-algo-response-rendered.html | 84 ++++++++++------------ ...st-email-rca-highlights-cube-algo-response.json | 2 +- 8 files changed, 94 insertions(+), 175 deletions(-) diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/ThirdEyeAnomalyApplication.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/ThirdEyeAnomalyApplication.java index 0435848..e1a8ba5 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/ThirdEyeAnomalyApplication.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/ThirdEyeAnomalyApplication.java @@ -97,7 +97,7 @@ public class ThirdEyeAnomalyApplication } @Override - public void run(final ThirdEyeAnomalyConfiguration config, final Environment environment) + public void run(final ThirdEyeAnomalyConfiguration config, final Environment env) throws Exception { LOG.info("Starting ThirdeyeAnomalyApplication : Scheduler {} Worker {}", config.isScheduler(), config.isWorker()); super.initDAOs(); @@ -107,10 +107,14 @@ public class ThirdEyeAnomalyApplication LOG.error("Exception while loading caches", e); } - environment.getObjectMapper().enable(SerializationFeature.INDENT_OUTPUT); - environment.getObjectMapper().registerModule(makeMapperModule()); + env.getObjectMapper().enable(SerializationFeature.INDENT_OUTPUT); + env.getObjectMapper().registerModule(makeMapperModule()); - environment.lifecycle().manage(new Managed() { + env.lifecycle().manage(lifecycleManager(config, env)); + } + + private Managed lifecycleManager(ThirdEyeAnomalyConfiguration config, Environment env) { + return new Managed() { @Override public void start() throws Exception { @@ -140,14 +144,14 @@ public class ThirdEyeAnomalyApplication new HolidayEventsLoader(config.getHolidayEventsLoaderConfiguration(), config.getCalendarApiKeyPath(), DAORegistry.getInstance().getEventDAO()); holidayEventsLoader.start(); - environment.jersey().register(new HolidayEventResource(holidayEventsLoader)); + env.jersey().register(new HolidayEventResource(holidayEventsLoader)); } if (config.isMockEventsLoader()) { mockEventsLoader = new MockEventsLoader(config.getMockEventsLoaderConfiguration(), DAORegistry.getInstance().getEventDAO()); mockEventsLoader.run(); } if (config.isPinotProxy()) { - environment.jersey().register(new PinotDataSourceResource()); + env.jersey().register(new PinotDataSourceResource()); } if (config.isDetectionPipeline()) { detectionScheduler = new DetectionCronScheduler(DAORegistry.getInstance().getDetectionConfigManager()); @@ -206,7 +210,7 @@ public class ThirdEyeAnomalyApplication modelDownloaderManager.shutdown(); } } - }); + }; } private void updateAdminSession(String adminUser, String sessionKey) { diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/ThirdEyeAnomalyConfiguration.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/ThirdEyeAnomalyConfiguration.java index c46dea7..8a08bb0 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/ThirdEyeAnomalyConfiguration.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/anomaly/ThirdEyeAnomalyConfiguration.java @@ -32,8 +32,6 @@ public class ThirdEyeAnomalyConfiguration extends ThirdEyeConfiguration { private boolean alert = false; private boolean autoload = false; - private boolean classifier = false; - private boolean dataCompleteness = false; private boolean holidayEventsLoader = false; private boolean mockEventsLoader = false; private boolean monitor = false; @@ -47,7 +45,6 @@ public class ThirdEyeAnomalyConfiguration extends ThirdEyeConfiguration { private boolean dataAvailabilityTaskScheduler = false; private long id; - private String dashboardHost; private HolidayEventsLoaderConfiguration holidayEventsLoaderConfiguration = new HolidayEventsLoaderConfiguration(); private MockEventsLoaderConfiguration mockEventsLoaderConfiguration = new MockEventsLoaderConfiguration(); private MonitorConfiguration monitorConfiguration = new MonitorConfiguration(); @@ -56,8 +53,6 @@ public class ThirdEyeAnomalyConfiguration extends ThirdEyeConfiguration { private ThirdEyeRestClientConfiguration teRestConfig = new ThirdEyeRestClientConfiguration(); private DataAvailabilitySchedulingConfiguration dataAvailabilitySchedulingConfiguration = new DataAvailabilitySchedulingConfiguration(); - private String failureFromAddress; - private String failureToAddress; private List<String> holidayCountriesWhitelist; public ThirdEyeRestClientConfiguration getThirdEyeRestClientConfiguration() { @@ -116,14 +111,6 @@ public class ThirdEyeAnomalyConfiguration extends ThirdEyeConfiguration { this.holidayEventsLoader = holidayEventsLoader; } - public String getDashboardHost() { - return dashboardHost; - } - - public void setDashboardHost(String dashboardHost) { - this.dashboardHost = dashboardHost; - } - public long getId() { return id; } @@ -220,22 +207,6 @@ public class ThirdEyeAnomalyConfiguration extends ThirdEyeConfiguration { this.autoload = autoload; } - public boolean isDataCompleteness() { - return dataCompleteness; - } - - public void setDataCompleteness(boolean dataCompleteness) { - this.dataCompleteness = dataCompleteness; - } - - public boolean isClassifier() { - return classifier; - } - - public void setClassifier(boolean classifier) { - this.classifier = classifier; - } - public boolean isPinotProxy() { return pinotProxy; } @@ -244,22 +215,6 @@ public class ThirdEyeAnomalyConfiguration extends ThirdEyeConfiguration { this.pinotProxy = pinotProxy; } - public String getFailureFromAddress() { - return failureFromAddress; - } - - public void setFailureFromAddress(String failureFromAddress) { - this.failureFromAddress = failureFromAddress; - } - - public String getFailureToAddress() { - return failureToAddress; - } - - public void setFailureToAddress(String failureToAddress) { - this.failureToAddress = failureToAddress; - } - public List<String> getHolidayCountriesWhitelist() { return holidayCountriesWhitelist; } diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/common/ThirdEyeConfiguration.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/common/ThirdEyeConfiguration.java index 83b0dd8..37eee2a 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/common/ThirdEyeConfiguration.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/common/ThirdEyeConfiguration.java @@ -23,7 +23,6 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.federecio.dropwizard.swagger.SwaggerBundleConfiguration; import java.net.MalformedURLException; import java.net.URL; -import java.util.ArrayList; import java.util.List; import io.dropwizard.Configuration; @@ -39,8 +38,6 @@ public class ThirdEyeConfiguration extends Configuration { private String dataSources = "data-sources/data-sources-config.yml"; private String cacheDataSource = "data-sources/cache-config.yml"; - private List<String> whitelistDatasets = new ArrayList<>(); - private String dashboardHost; @JsonProperty("swagger") @@ -74,11 +71,6 @@ public class ThirdEyeConfiguration extends Configuration { return getSourceAsUrl(this.dataSources); } - // same as above but for cache config - public URL getCacheConfigAsUrl() { - return getSourceAsUrl(this.cacheDataSource); - } - private URL getSourceAsUrl(String path) { try { return new URL(path); @@ -98,6 +90,16 @@ public class ThirdEyeConfiguration extends Configuration { return dataSources; } + public void setDataSources(String dataSources) { + this.dataSources = dataSources; + } + + public URL getCacheConfigAsUrl() { + return getSourceAsUrl(this.cacheDataSource); + } + + public void setCacheDataSource(String cacheDataSource) { this.cacheDataSource = cacheDataSource; } + public String getRootDir() { return rootDir; } @@ -114,14 +116,6 @@ public class ThirdEyeConfiguration extends Configuration { this.cors = cors; } - public List<String> getWhitelistDatasets() { - return whitelistDatasets; - } - - public void setWhitelistDatasets(List<String> whitelistDatasets) { - this.whitelistDatasets = whitelistDatasets; - } - public String getFunctionConfigPath() { return getRootDir() + "/detector-config/anomaly-functions/functions.properties"; } @@ -131,19 +125,6 @@ public class ThirdEyeConfiguration extends Configuration { return getRootDir() + "/detector-config/anomaly-functions/alertFilter.properties"; } - //alertFilterAutotune.properties format: {auto tune type} = {path to auto tune implementation} - public String getFilterAutotuneConfigPath() { - return getRootDir() + "/detector-config/anomaly-functions/alertFilterAutotune.properties"; - } - - public String getAlertGroupRecipientProviderConfigPath() { - return getRootDir() + "/detector-config/anomaly-functions/alertGroupRecipientProvider.properties"; - } - - public String getAnomalyClassifierConfigPath() { - return getRootDir() + "/detector-config/anomaly-functions/anomalyClassifier.properties"; - } - public String getCalendarApiKeyPath(){ return getRootDir() + "/holiday-loader-key.json"; } @@ -180,12 +161,6 @@ public class ThirdEyeConfiguration extends Configuration { this.failureToAddress = failureToAddress; } - public void setDataSources(String dataSources) { - this.dataSources = dataSources; - } - - public void setCacheDataSource(String cacheDataSource) { this.cacheDataSource = cacheDataSource; } - public Map<String, Map<String, Object>> getAlerterConfiguration() { return alerterConfigurations; } diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/ThirdEyeDashboardConfiguration.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/ThirdEyeDashboardConfiguration.java index 51a142a..0563171 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/ThirdEyeDashboardConfiguration.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/ThirdEyeDashboardConfiguration.java @@ -20,7 +20,6 @@ package org.apache.pinot.thirdeye.dashboard; import org.apache.pinot.thirdeye.common.ThirdEyeConfiguration; -import org.apache.pinot.thirdeye.dashboard.RootCauseConfiguration; import org.apache.pinot.thirdeye.dashboard.configs.AuthConfiguration; import org.apache.pinot.thirdeye.dashboard.configs.ResourceConfiguration; import java.util.List; diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/RootCauseResource.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/RootCauseResource.java index 8dc2c53..53e2cb9 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/RootCauseResource.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/dashboard/resources/v2/RootCauseResource.java @@ -66,7 +66,7 @@ public class RootCauseResource { private static final long ANALYSIS_RANGE_MAX = TimeUnit.DAYS.toMillis(32); private static final long ANOMALY_RANGE_MAX = TimeUnit.DAYS.toMillis(32); private static final long BASELINE_RANGE_MAX = ANOMALY_RANGE_MAX; - private static final int DEFAULT_HIGHLIGHT_CUBE_SUMMARY_SIZE = 3; + private static final int DEFAULT_HIGHLIGHT_CUBE_SUMMARY_SIZE = 4; private static final int DEFAULT_HIGHLIGHT_CUBE_DEPTH = 3; private final List<RootCauseEntityFormatter> formatters; diff --git a/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/metric-anomalies-template.ftl b/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/metric-anomalies-template.ftl index defd0f3..9d469cf 100644 --- a/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/metric-anomalies-template.ftl +++ b/thirdeye/thirdeye-pinot/src/main/resources/org/apache/pinot/thirdeye/detector/metric-anomalies-template.ftl @@ -148,47 +148,43 @@ <!-- RCA --> <#if cubeDimensions?has_content && cubeResponseRows?has_content> - <@utils.addBlock title="Root Cause Analysis" align="left"> - <a href="${dashboardHost}/app/#/rootcause?anomalyId=${anomalyIds} style="text-decoration: none; color:#0073B1; font-size:12px; font-weight:bold;">(more)</a> + <@utils.addBlock title="Root Cause Analysis" align="left"> + <a href="${dashboardHost}/app/#/rootcause?anomalyId=${anomalyIds}" style="text-decoration: none; color:#0073B1; font-size:12px; font-weight:bold;">Top Anomalous Dimensions</a> <table border="0" align="center" style="table-layout: fixed; width:100%; padding:0; margin:0; border-collapse: collapse; text-align:left;"> - <tr style="border-bottom: 1px solid #C7D1D8; padding: 16px;"> - <div> - <table> - <thead> - <tr> - <th>Top Anomalous Dimensions</th> - </tr> - <tr> - <#list cubeDimensions as dimension> - <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">${dimension}</th> - </#list> - <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Baseline</th> - <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Current</th> - <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">% Change</th> - </tr> - </thead> - - <tbody> - <#list cubeResponseRows as dimSliceEntry> - <#if dimSliceEntry["names"]?has_content> - <tr> - <#list dimSliceEntry["names"] as dimensionName> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px;">${dimensionName}</td> - </#list> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">${dimSliceEntry["baselineValue"]}</td> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">${dimSliceEntry["currentValue"]}</td> - <#assign positive=true> - <#if dimSliceEntry["percentageChange"]?matches(r'-[0-9]\d*(\.\d+)?%')> - <#assign positive=false> - </#if> - <td style="color:${positive?string('#3A8C18','#ee1620')}; font-size:12px; line-height:20px; text-align:center;">${dimSliceEntry["percentageChange"]}</td> - </tr> + <thead> + <tr style="text-align:center; background-color: #F6F8FA; border-top: 2px solid #C7D1D8; border-bottom: 2px solid #C7D1D8;"> + <#list cubeDimensions as dimension> + <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">${dimension}</th> + </#list> + <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Baseline</th> + <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Current</th> + <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">% Change</th> + </tr> + </thead> + <tbody> + <#list cubeResponseRows as dimSliceEntry> + <tr style="border-bottom: 1px solid #C7D1D8;"> + <#list cubeDimensions as dimension> + <#if dimSliceEntry["names"]?has_content && dimSliceEntry["names"][dimension?counter - 1]?has_content> + <#if dimSliceEntry["names"][dimension?counter - 1] == "(ALL)-"> + <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:left;">Other</td> + <#else> + <td style="word-break: break-all; color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:left;">${dimSliceEntry["names"][dimension?counter - 1]}</td> + </#if> + <#else> + <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:left;">-</td> </#if> </#list> - </tbody> - </table> - </div> - </tr> + <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">${dimSliceEntry["baselineValue"]}</td> + <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">${dimSliceEntry["currentValue"]}</td> + <#assign positive=true> + <#if dimSliceEntry["percentageChange"]?matches(r'-[0-9]\d*(\.\d+)?%')> + <#assign positive=false> + </#if> + <td style="color:${positive?string('#3A8C18','#ee1620')}; font-size:12px; line-height:20px; text-align:center;">${dimSliceEntry["percentageChange"]}</td> + </tr> + </#list> + </tbody> </table> </@utils.addBlock> </#if> diff --git a/thirdeye/thirdeye-pinot/src/test/resources/test-email-rca-highlights-cube-algo-response-rendered.html b/thirdeye/thirdeye-pinot/src/test/resources/test-email-rca-highlights-cube-algo-response-rendered.html index b78b0fd..2f50d5e 100644 --- a/thirdeye/thirdeye-pinot/src/test/resources/test-email-rca-highlights-cube-algo-response-rendered.html +++ b/thirdeye/thirdeye-pinot/src/test/resources/test-email-rca-highlights-cube-algo-response-rendered.html @@ -42,54 +42,44 @@ <td style="border-bottom: 1px solid rgba(0,0,0,0.15); padding: 12px 24px; align:left"> <p style="font-size:20px; line-height:24px; color:#1D1D1D; font-weight: 500; margin:0; padding:0;">Root Cause Analysis</p> - <a href="http://localhost:8080/dashboard/app/#/rootcause?anomalyId= style="text-decoration: none; color:#0073B1; font-size:12px; font-weight:bold;">(more)</a> + <a href="http://localhost:8080/dashboard/app/#/rootcause?anomalyId=" style="text-decoration: none; color:#0073B1; font-size:12px; font-weight:bold;">Top Anomalous Dimensions</a> <table border="0" align="center" style="table-layout: fixed; width:100%; padding:0; margin:0; border-collapse: collapse; text-align:left;"> - <tr style="border-bottom: 1px solid #C7D1D8; padding: 16px;"> - <div> - <table> - <thead> - <tr> - <th>Top Anomalous Dimensions</th> - </tr> - <tr> - <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">country_code</th> - <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">industry</th> - <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">device</th> - <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Baseline</th> - <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Current</th> - <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">% Change</th> - </tr> - </thead> - - <tbody> - <tr> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px;">(ALL)-</td> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px;"></td> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px;"></td> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">189,072</td> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">188,105</td> - <td style="color:#ee1620; font-size:12px; line-height:20px; text-align:center;">-0.5114%</td> - </tr> - <tr> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px;">india</td> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px;">information technology and services</td> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px;">Android</td> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">3,907</td> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">15,598</td> - <td style="color:#3A8C18; font-size:12px; line-height:20px; text-align:center;">299.2321%</td> - </tr> - <tr> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px;">australia</td> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px;">computer and network security</td> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px;">Android</td> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">1</td> - <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">752</td> - <td style="color:#3A8C18; font-size:12px; line-height:20px; text-align:center;">75100.0000%</td> - </tr> - </tbody> - </table> - </div> - </tr> + <thead> + <tr style="text-align:center; background-color: #F6F8FA; border-top: 2px solid #C7D1D8; border-bottom: 2px solid #C7D1D8;"> + <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">country_code</th> + <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">industry</th> + <th style="text-align:left; padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">device</th> + <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Baseline</th> + <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">Current</th> + <th style="padding: 6px 12px; font-size: 12px; font-weight: bold; line-height: 20px;">% Change</th> + </tr> + </thead> + <tbody> + <tr style="border-bottom: 1px solid #C7D1D8;"> + <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:left;">Other</td> + <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:left;">-</td> + <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:left;">-</td> + <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">189,072</td> + <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">188,105</td> + <td style="color:#ee1620; font-size:12px; line-height:20px; text-align:center;">-0.5114%</td> + </tr> + <tr style="border-bottom: 1px solid #C7D1D8;"> + <td style="word-break: break-all; color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:left;">india</td> + <td style="word-break: break-all; color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:left;">information technology and services</td> + <td style="word-break: break-all; color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:left;">Android</td> + <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">3,907</td> + <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">15,598</td> + <td style="color:#3A8C18; font-size:12px; line-height:20px; text-align:center;">299.2321%</td> + </tr> + <tr style="border-bottom: 1px solid #C7D1D8;"> + <td style="word-break: break-all; color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:left;">australia</td> + <td style="word-break: break-all; color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:left;">computer and network security</td> + <td style="word-break: break-all; color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:left;">Android</td> + <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">1</td> + <td style="color: rgba(0,0,0,0.9); font-size:12px; line-height:20px; text-align:center;">752</td> + <td style="color:#3A8C18; font-size:12px; line-height:20px; text-align:center;">75100.0000%</td> + </tr> + </tbody> </table> </td> diff --git a/thirdeye/thirdeye-pinot/src/test/resources/test-email-rca-highlights-cube-algo-response.json b/thirdeye/thirdeye-pinot/src/test/resources/test-email-rca-highlights-cube-algo-response.json index e940ed0..b882488 100644 --- a/thirdeye/thirdeye-pinot/src/test/resources/test-email-rca-highlights-cube-algo-response.json +++ b/thirdeye/thirdeye-pinot/src/test/resources/test-email-rca-highlights-cube-algo-response.json @@ -16,7 +16,7 @@ "percentageChange":"-0.5114%", "contributionChange":"-5.9718%", "contributionToOverallChange":"-8.4270%", - "names":["(ALL)-","",""], + "names":["(ALL)-"], "otherDimensionValues":"united states, united kingdom, canada, germany, united arab emirates, france, israel, bangladesh, netherlands, brazil, and more...", "cost":0.0 },{ --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org