diff --git a/.changeset/shaggy-peas-shop.md b/.changeset/shaggy-peas-shop.md new file mode 100644 index 00000000..48ccfea8 --- /dev/null +++ b/.changeset/shaggy-peas-shop.md @@ -0,0 +1,5 @@ +--- +'@hyperdx/api': patch +--- + +Adjust time window for sum-rate alerts diff --git a/packages/api/src/clickhouse/index.ts b/packages/api/src/clickhouse/index.ts index 9bd89008..f0e12b4a 100644 --- a/packages/api/src/clickhouse/index.ts +++ b/packages/api/src/clickhouse/index.ts @@ -689,7 +689,7 @@ const getMetricsTagsCached = async (teamId: string) => { } }; -const isRateAggFn = (aggFn: AggFn) => { +export const isRateAggFn = (aggFn: AggFn) => { return ( aggFn === AggFn.SumRate || aggFn === AggFn.AvgRate || diff --git a/packages/api/src/tasks/checkAlerts.ts b/packages/api/src/tasks/checkAlerts.ts index f0bd70d4..e0ccd1a5 100644 --- a/packages/api/src/tasks/checkAlerts.ts +++ b/packages/api/src/tasks/checkAlerts.ts @@ -421,12 +421,21 @@ export const processAlert = async (now: Date, alert: AlertDocument) => { series.field ) { targetDashboard = dashboard; - const startTimeMs = fns.getTime(checkStartTime); + let startTimeMs = fns.getTime(checkStartTime); const endTimeMs = fns.getTime(checkEndTime); const [metricName, rawMetricDataType] = series.field.split(' - '); const metricDataType = z .nativeEnum(clickhouse.MetricsDataType) .parse(rawMetricDataType); + if ( + metricDataType === clickhouse.MetricsDataType.Sum && + clickhouse.isRateAggFn(series.aggFn) + ) { + // adjust the time so that we have enough data points to calculate a rate + startTimeMs = fns + .subMinutes(startTimeMs, windowSizeInMins) + .getTime(); + } checksData = await clickhouse.getMetricsChart({ aggFn: series.aggFn, dataType: metricDataType,