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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]