Cleanup prefill and edit flow. (#66105)
This commit is contained in:
parent
0802ccc262
commit
6d95b68c72
|
@ -74,6 +74,7 @@ export const Expressions: React.FC<Props> = props => {
|
||||||
fetch: alertsContext.http.fetch,
|
fetch: alertsContext.http.fetch,
|
||||||
toastWarning: alertsContext.toastNotifications.addWarning,
|
toastWarning: alertsContext.toastNotifications.addWarning,
|
||||||
});
|
});
|
||||||
|
|
||||||
const [timeSize, setTimeSize] = useState<number | undefined>(1);
|
const [timeSize, setTimeSize] = useState<number | undefined>(1);
|
||||||
const [timeUnit, setTimeUnit] = useState<TimeUnit>('m');
|
const [timeUnit, setTimeUnit] = useState<TimeUnit>('m');
|
||||||
const derivedIndexPattern = useMemo(() => createDerivedIndexPattern('metrics'), [
|
const derivedIndexPattern = useMemo(() => createDerivedIndexPattern('metrics'), [
|
||||||
|
@ -173,52 +174,57 @@ export const Expressions: React.FC<Props> = props => {
|
||||||
[alertParams.criteria, setAlertParams]
|
[alertParams.criteria, setAlertParams]
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
const preFillAlertCriteria = useCallback(() => {
|
||||||
const md = alertsContext.metadata;
|
const md = alertsContext.metadata;
|
||||||
if (md) {
|
if (md && md.currentOptions?.metrics) {
|
||||||
if (md.currentOptions?.metrics) {
|
setAlertParams(
|
||||||
setAlertParams(
|
'criteria',
|
||||||
'criteria',
|
md.currentOptions.metrics.map(metric => ({
|
||||||
md.currentOptions.metrics.map(metric => ({
|
metric: metric.field,
|
||||||
metric: metric.field,
|
comparator: Comparator.GT,
|
||||||
comparator: Comparator.GT,
|
threshold: [],
|
||||||
threshold: [],
|
timeSize,
|
||||||
timeSize,
|
timeUnit,
|
||||||
timeUnit,
|
aggType: metric.aggregation,
|
||||||
aggType: metric.aggregation,
|
}))
|
||||||
}))
|
);
|
||||||
);
|
|
||||||
} else {
|
|
||||||
setAlertParams('criteria', [defaultExpression]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (md.currentOptions) {
|
|
||||||
if (md.currentOptions.filterQuery) {
|
|
||||||
setAlertParams('filterQueryText', md.currentOptions.filterQuery);
|
|
||||||
setAlertParams(
|
|
||||||
'filterQuery',
|
|
||||||
convertKueryToElasticSearchQuery(md.currentOptions.filterQuery, derivedIndexPattern) ||
|
|
||||||
''
|
|
||||||
);
|
|
||||||
} else if (md.currentOptions.groupBy && md.series) {
|
|
||||||
const filter = `${md.currentOptions.groupBy}: "${md.series.id}"`;
|
|
||||||
setAlertParams('filterQueryText', filter);
|
|
||||||
setAlertParams(
|
|
||||||
'filterQuery',
|
|
||||||
convertKueryToElasticSearchQuery(filter, derivedIndexPattern) || ''
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
setAlertParams('groupBy', md.currentOptions.groupBy);
|
|
||||||
}
|
|
||||||
setAlertParams('sourceId', source?.id);
|
|
||||||
} else {
|
} else {
|
||||||
if (!alertParams.criteria) {
|
setAlertParams('criteria', [defaultExpression]);
|
||||||
setAlertParams('criteria', [defaultExpression]);
|
}
|
||||||
}
|
}, [alertsContext.metadata, setAlertParams, timeSize, timeUnit]);
|
||||||
if (!alertParams.sourceId) {
|
|
||||||
setAlertParams('sourceId', source?.id || 'default');
|
const preFillAlertFilter = useCallback(() => {
|
||||||
}
|
const md = alertsContext.metadata;
|
||||||
|
if (md && md.currentOptions?.filterQuery) {
|
||||||
|
setAlertParams('filterQueryText', md.currentOptions.filterQuery);
|
||||||
|
setAlertParams(
|
||||||
|
'filterQuery',
|
||||||
|
convertKueryToElasticSearchQuery(md.currentOptions.filterQuery, derivedIndexPattern) || ''
|
||||||
|
);
|
||||||
|
} else if (md && md.currentOptions?.groupBy && md.series) {
|
||||||
|
const filter = `${md.currentOptions?.groupBy}: "${md.series.id}"`;
|
||||||
|
setAlertParams('filterQueryText', filter);
|
||||||
|
setAlertParams(
|
||||||
|
'filterQuery',
|
||||||
|
convertKueryToElasticSearchQuery(filter, derivedIndexPattern) || ''
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}, [alertsContext.metadata, derivedIndexPattern, setAlertParams]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (alertParams.criteria && alertParams.criteria.length) {
|
||||||
|
setTimeSize(alertParams.criteria[0].timeSize);
|
||||||
|
setTimeUnit(alertParams.criteria[0].timeUnit);
|
||||||
|
} else {
|
||||||
|
preFillAlertCriteria();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!alertParams.filterQuery) {
|
||||||
|
preFillAlertFilter();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!alertParams.sourceId) {
|
||||||
|
setAlertParams('sourceId', source?.id || 'default');
|
||||||
}
|
}
|
||||||
}, [alertsContext.metadata, defaultExpression, source]); // eslint-disable-line react-hooks/exhaustive-deps
|
}, [alertsContext.metadata, defaultExpression, source]); // eslint-disable-line react-hooks/exhaustive-deps
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,11 @@ export const oneOfLiterals = (arrayOfLiterals: Readonly<string[]>) =>
|
||||||
});
|
});
|
||||||
|
|
||||||
export const validateIsStringElasticsearchJSONFilter = (value: string) => {
|
export const validateIsStringElasticsearchJSONFilter = (value: string) => {
|
||||||
|
if (value === '') {
|
||||||
|
// Allow clearing the filter.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const errorMessage = 'filterQuery must be a valid Elasticsearch filter expressed in JSON';
|
const errorMessage = 'filterQuery must be a valid Elasticsearch filter expressed in JSON';
|
||||||
try {
|
try {
|
||||||
const parsedValue = JSON.parse(value);
|
const parsedValue = JSON.parse(value);
|
||||||
|
|
Loading…
Reference in a new issue