mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
68 lines
1.6 KiB
TypeScript
68 lines
1.6 KiB
TypeScript
import {t} from 'sentry/locale';
|
|
import type {Organization} from 'sentry/types';
|
|
import {canUseMetricsData} from 'sentry/utils/performance/contexts/metricsEnhancedSetting';
|
|
|
|
const AGGREGATE_ALIAS_VALUE_EXTRACT_PATTERN = /(\d+)$/;
|
|
const FUNCTION_FIELD_VALUE_EXTRACT_PATTERN = /(\d+)\)$/;
|
|
|
|
/**
|
|
* Convert a discover response into a barchart compatible series
|
|
*/
|
|
export function transformData(
|
|
data: Record<string, number>[],
|
|
useAggregateAlias: boolean = true
|
|
) {
|
|
const extractedData = Object.keys(data[0])
|
|
.map((key: string) => {
|
|
const nameMatch = (
|
|
useAggregateAlias
|
|
? AGGREGATE_ALIAS_VALUE_EXTRACT_PATTERN
|
|
: FUNCTION_FIELD_VALUE_EXTRACT_PATTERN
|
|
).exec(key);
|
|
if (!nameMatch) {
|
|
return [-1, -1];
|
|
}
|
|
let nameValue = Number(nameMatch[1]);
|
|
if (nameValue > 100) {
|
|
nameValue /= 10;
|
|
}
|
|
return [nameValue, data[0][key]];
|
|
})
|
|
.filter(i => i[0] > 0);
|
|
|
|
extractedData.sort((a, b) => {
|
|
if (a[0] > b[0]) {
|
|
return 1;
|
|
}
|
|
if (a[0] < b[0]) {
|
|
return -1;
|
|
}
|
|
return 0;
|
|
});
|
|
|
|
return [
|
|
{
|
|
seriesName: t('Duration'),
|
|
data: extractedData.map(i => ({value: i[1], name: `${i[0].toLocaleString()}%`})),
|
|
},
|
|
];
|
|
}
|
|
|
|
export function getPercentiles(organization: Organization) {
|
|
const isUsingMetrics = canUseMetricsData(organization);
|
|
const METRICS_PERCENTILES = ['0.25', '0.50', '0.75', '0.90', '0.95', '0.99', '1'];
|
|
const INDEXED_PERCENTILES = [
|
|
'0.10',
|
|
'0.25',
|
|
'0.50',
|
|
'0.75',
|
|
'0.90',
|
|
'0.95',
|
|
'0.99',
|
|
'0.995',
|
|
'0.999',
|
|
'1',
|
|
];
|
|
return isUsingMetrics ? METRICS_PERCENTILES : INDEXED_PERCENTILES;
|
|
}
|