fix: update request payload for span metrics queries (#6323)

This commit is contained in:
Srikanth Chekuri 2024-11-12 22:52:42 +05:30 committed by GitHub
parent fd9e9f0fb3
commit 85ac21f253
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 62 additions and 6 deletions

View File

@ -58,12 +58,17 @@ export const databaseCallsRPS = ({
const legends = [legend]; const legends = [legend];
const dataSource = DataSource.METRICS; const dataSource = DataSource.METRICS;
const timeAggregateOperators = [MetricAggregateOperator.RATE];
const spaceAggregateOperators = [MetricAggregateOperator.SUM];
return getQueryBuilderQueries({ return getQueryBuilderQueries({
autocompleteData, autocompleteData,
groupBy, groupBy,
legends, legends,
filterItems, filterItems,
dataSource, dataSource,
timeAggregateOperators,
spaceAggregateOperators,
}); });
}; };

View File

@ -213,12 +213,17 @@ export const externalCallRpsByAddress = ({
const legends = [legend]; const legends = [legend];
const dataSource = DataSource.METRICS; const dataSource = DataSource.METRICS;
const timeAggregateOperators = [MetricAggregateOperator.RATE];
const spaceAggregateOperators = [MetricAggregateOperator.SUM];
return getQueryBuilderQueries({ return getQueryBuilderQueries({
autocompleteData, autocompleteData,
groupBy, groupBy,
legends, legends,
filterItems, filterItems,
dataSource, dataSource,
timeAggregateOperators,
spaceAggregateOperators,
}); });
}; };

View File

@ -25,6 +25,8 @@ export const getQueryBuilderQueries = ({
aggregateOperator, aggregateOperator,
dataSource, dataSource,
queryNameAndExpression, queryNameAndExpression,
timeAggregateOperators,
spaceAggregateOperators,
}: BuilderQueriesProps): QueryBuilderData => ({ }: BuilderQueriesProps): QueryBuilderData => ({
queryFormulas: [], queryFormulas: [],
queryData: autocompleteData.map((item, index) => { queryData: autocompleteData.map((item, index) => {
@ -50,6 +52,8 @@ export const getQueryBuilderQueries = ({
op: 'AND', op: 'AND',
}, },
reduceTo: 'avg', reduceTo: 'avg',
spaceAggregation: spaceAggregateOperators[index],
timeAggregation: timeAggregateOperators[index],
dataSource, dataSource,
}; };

View File

@ -83,6 +83,17 @@ export const latency = ({
const dataSource = isSpanMetricEnable ? DataSource.METRICS : DataSource.TRACES; const dataSource = isSpanMetricEnable ? DataSource.METRICS : DataSource.TRACES;
const queryNameAndExpression = QUERYNAME_AND_EXPRESSION; const queryNameAndExpression = QUERYNAME_AND_EXPRESSION;
const timeAggregateOperators = [
MetricAggregateOperator.EMPTY,
MetricAggregateOperator.EMPTY,
MetricAggregateOperator.EMPTY,
];
const spaceAggregateOperators = [
MetricAggregateOperator.P50,
MetricAggregateOperator.P90,
MetricAggregateOperator.P99,
];
return getQueryBuilderQueries({ return getQueryBuilderQueries({
autocompleteData, autocompleteData,
legends, legends,
@ -90,6 +101,8 @@ export const latency = ({
aggregateOperator, aggregateOperator,
dataSource, dataSource,
queryNameAndExpression, queryNameAndExpression,
timeAggregateOperators,
spaceAggregateOperators,
}); });
}; };
@ -510,11 +523,16 @@ export const operationPerSec = ({
const legends = OPERATION_LEGENDS; const legends = OPERATION_LEGENDS;
const dataSource = DataSource.METRICS; const dataSource = DataSource.METRICS;
const timeAggregateOperators = [MetricAggregateOperator.RATE];
const spaceAggregateOperators = [MetricAggregateOperator.SUM];
return getQueryBuilderQueries({ return getQueryBuilderQueries({
autocompleteData, autocompleteData,
legends, legends,
filterItems, filterItems,
dataSource, dataSource,
timeAggregateOperators,
spaceAggregateOperators,
}); });
}; };

View File

@ -29,6 +29,8 @@ export interface BuilderQueriesProps {
aggregateOperator?: string[]; aggregateOperator?: string[];
dataSource: DataSource; dataSource: DataSource;
queryNameAndExpression?: string[]; queryNameAndExpression?: string[];
timeAggregateOperators: MetricAggregateOperator[];
spaceAggregateOperators: MetricAggregateOperator[];
} }
export interface BuilderQuerieswithFormulaProps { export interface BuilderQuerieswithFormulaProps {

View File

@ -2,18 +2,27 @@
import { DownloadOptions } from 'container/Download/Download.types'; import { DownloadOptions } from 'container/Download/Download.types';
import { MenuItemKeys } from 'container/GridCardLayout/WidgetHeader/contants'; import { MenuItemKeys } from 'container/GridCardLayout/WidgetHeader/contants';
import {
MetricAggregateOperator,
TracesAggregatorOperator,
} from 'types/common/queryBuilder';
export const legend = { export const legend = {
address: '{{address}}', address: '{{address}}',
}; };
export const QUERYNAME_AND_EXPRESSION = ['A', 'B', 'C']; export const QUERYNAME_AND_EXPRESSION = ['A', 'B', 'C'];
export const LATENCY_AGGREGATEOPERATOR = ['p50', 'p90', 'p99']; export const LATENCY_AGGREGATEOPERATOR = [
export const LATENCY_AGGREGATEOPERATOR_SPAN_METRICS = [ TracesAggregatorOperator.P50,
'hist_quantile_50', TracesAggregatorOperator.P90,
'hist_quantile_90', TracesAggregatorOperator.P99,
'hist_quantile_99',
]; ];
export const LATENCY_AGGREGATEOPERATOR_SPAN_METRICS = [
MetricAggregateOperator.P50,
MetricAggregateOperator.P90,
MetricAggregateOperator.P99,
];
export const OPERATION_LEGENDS = ['Operations']; export const OPERATION_LEGENDS = ['Operations'];
export const MENU_ITEMS = [MenuItemKeys.View, MenuItemKeys.CreateAlerts]; export const MENU_ITEMS = [MenuItemKeys.View, MenuItemKeys.CreateAlerts];
@ -21,8 +30,21 @@ export const MENU_ITEMS = [MenuItemKeys.View, MenuItemKeys.CreateAlerts];
export enum FORMULA { export enum FORMULA {
ERROR_PERCENTAGE = 'A*100/B', ERROR_PERCENTAGE = 'A*100/B',
DATABASE_CALLS_AVG_DURATION = 'A/B', DATABASE_CALLS_AVG_DURATION = 'A/B',
// The apdex formula is (satisfied_count + 0.5 * tolerating_count + 0 * frustating_count) / total_count
// The satisfied_count is B, tolerating_count is C, total_count is A
// But why do we have (B+C)/2 instead of B + C/2?
// The way we issue the query is latency <= threshold, which means we over count i.e
// query B => durationNano <= 500ms
// query C => durationNano <= 2000ms
// Since <= 2000ms includes <= 500ms, we over count, to correct we subtract B/2
// so the full expression would be (B + C/2) - B/2 = (B+C)/2
APDEX_TRACES = '((B + C)/2)/A', APDEX_TRACES = '((B + C)/2)/A',
APDEX_DELTA_SPAN_METRICS = '((B + C)/2)/A', // Does the same not apply for delta span metrics?
// No, because the delta metrics store the counts just for the current bucket
// so we don't need to subtract anything
APDEX_DELTA_SPAN_METRICS = '(B + C)/A',
// Cumulative span metrics store the counts for all buckets
// so we need to subtract B/2 to correct the over counting
APDEX_CUMULATIVE_SPAN_METRICS = '((B + C)/2)/A', APDEX_CUMULATIVE_SPAN_METRICS = '((B + C)/2)/A',
} }