diff --git a/x-pack/plugins/ml/common/types/anomaly_detection_jobs/summary_job.ts b/x-pack/plugins/ml/common/types/anomaly_detection_jobs/summary_job.ts
index bb6b331c10fc1..09f5c37ac9aea 100644
--- a/x-pack/plugins/ml/common/types/anomaly_detection_jobs/summary_job.ts
+++ b/x-pack/plugins/ml/common/types/anomaly_detection_jobs/summary_job.ts
@@ -49,6 +49,7 @@ export type MlSummaryJobs = MlSummaryJob[];
export interface MlJobWithTimeRange extends CombinedJobWithStats {
id: string;
+ isRunning?: boolean;
isNotSingleMetricViewerJobMessage?: string;
timeRange: {
from: number;
diff --git a/x-pack/plugins/ml/public/application/explorer/components/explorer_no_results_found/__snapshots__/explorer_no_results_found.test.js.snap b/x-pack/plugins/ml/public/application/explorer/components/explorer_no_results_found/__snapshots__/explorer_no_results_found.test.js.snap
index dc7e567380fdf..388e2f590edf2 100644
--- a/x-pack/plugins/ml/public/application/explorer/components/explorer_no_results_found/__snapshots__/explorer_no_results_found.test.js.snap
+++ b/x-pack/plugins/ml/public/application/explorer/components/explorer_no_results_found/__snapshots__/explorer_no_results_found.test.js.snap
@@ -14,14 +14,6 @@ exports[`ExplorerNoInfluencersFound snapshot 1`] = `
}
iconType="iInCircle"
- title={
-
-
-
- }
+ title={}
/>
`;
diff --git a/x-pack/plugins/ml/public/application/explorer/components/explorer_no_results_found/explorer_no_results_found.js b/x-pack/plugins/ml/public/application/explorer/components/explorer_no_results_found/explorer_no_results_found.js
index 6e058a8fc8c61..799437e1799f0 100644
--- a/x-pack/plugins/ml/public/application/explorer/components/explorer_no_results_found/explorer_no_results_found.js
+++ b/x-pack/plugins/ml/public/application/explorer/components/explorer_no_results_found/explorer_no_results_found.js
@@ -14,26 +14,48 @@ import { FormattedMessage } from '@kbn/i18n/react';
import { EuiEmptyPrompt } from '@elastic/eui';
-export const ExplorerNoResultsFound = () => (
-
-
-
- }
- body={
-
-
-
-
-
- }
- />
-);
+export const ExplorerNoResultsFound = ({ hasResults, selectedJobsRunning }) => {
+ const resultsHaveNoAnomalies = hasResults === true;
+ const noResults = hasResults === false;
+ return (
+
+ {resultsHaveNoAnomalies && (
+
+ )}
+ {noResults && (
+
+ )}
+
+ }
+ body={
+
+ {selectedJobsRunning && noResults && (
+
+
+
+ )}
+ {!selectedJobsRunning && (
+
+
+
+ )}
+
+ }
+ />
+ );
+};
diff --git a/x-pack/plugins/ml/public/application/explorer/components/no_overall_data.tsx b/x-pack/plugins/ml/public/application/explorer/components/no_overall_data.tsx
index fe77fdf235b58..65935050ee218 100644
--- a/x-pack/plugins/ml/public/application/explorer/components/no_overall_data.tsx
+++ b/x-pack/plugins/ml/public/application/explorer/components/no_overall_data.tsx
@@ -12,7 +12,7 @@ export const NoOverallData: FC = () => {
return (
);
};
diff --git a/x-pack/plugins/ml/public/application/explorer/explorer.js b/x-pack/plugins/ml/public/application/explorer/explorer.js
index 9f77260ab3320..abf8197f51634 100644
--- a/x-pack/plugins/ml/public/application/explorer/explorer.js
+++ b/x-pack/plugins/ml/public/application/explorer/explorer.js
@@ -142,6 +142,7 @@ export class Explorer extends React.Component {
setSelectedCells: PropTypes.func.isRequired,
severity: PropTypes.number.isRequired,
showCharts: PropTypes.bool.isRequired,
+ selectedJobsRunning: PropTypes.bool.isRequired,
};
state = { filterIconTriggeredQuery: undefined, language: DEFAULT_QUERY_LANG };
@@ -223,7 +224,7 @@ export class Explorer extends React.Component {
updateLanguage = (language) => this.setState({ language });
render() {
- const { showCharts, severity, stoppedPartitions } = this.props;
+ const { showCharts, severity, stoppedPartitions, selectedJobsRunning } = this.props;
const {
annotations,
@@ -248,6 +249,9 @@ export class Explorer extends React.Component {
const noJobsFound = selectedJobs === null || selectedJobs.length === 0;
const hasResults = overallSwimlaneData.points && overallSwimlaneData.points.length > 0;
+ const hasResultsWithAnomalies =
+ (hasResults && overallSwimlaneData.points.some((v) => v.value > 0)) ||
+ tableData.anomalies?.length > 0;
if (noJobsFound && !loading) {
return (
@@ -257,10 +261,13 @@ export class Explorer extends React.Component {
);
}
- if (noJobsFound && hasResults === false && !loading) {
+ if (hasResultsWithAnomalies === false && !loading) {
return (
-
+
);
}
diff --git a/x-pack/plugins/ml/public/application/routing/routes/explorer.tsx b/x-pack/plugins/ml/public/application/routing/routes/explorer.tsx
index 052be41ca1eb7..e65ca22effd76 100644
--- a/x-pack/plugins/ml/public/application/routing/routes/explorer.tsx
+++ b/x-pack/plugins/ml/public/application/routing/routes/explorer.tsx
@@ -87,6 +87,9 @@ const ExplorerUrlStateManager: FC = ({ jobsWithTim
const timefilter = useTimefilter({ timeRangeSelector: true, autoRefreshSelector: true });
const { jobIds } = useJobSelection(jobsWithTimeRange);
+ const selectedJobsRunning = jobsWithTimeRange.some(
+ (job) => jobIds.includes(job.id) && job.isRunning === true
+ );
const explorerAppState = useObservable(explorerService.appState$);
const explorerState = useObservable(explorerService.state$);
@@ -261,6 +264,7 @@ const ExplorerUrlStateManager: FC = ({ jobsWithTim
severity: tableSeverity.val,
stoppedPartitions,
invalidTimeRangeError,
+ selectedJobsRunning,
}}
/>
diff --git a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js
index 33e5183fa7949..06a0f7e17e164 100644
--- a/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js
+++ b/x-pack/plugins/ml/public/application/timeseriesexplorer/timeseriesexplorer.js
@@ -1000,7 +1000,6 @@ export class TimeSeriesExplorer extends React.Component {
}}
/>
}
- color="warning"
iconType="help"
size="s"
/>