1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import omit from 'lodash/omit';
- import {MetricsApiResponse, SessionApiResponse} from 'sentry/types';
- import {TableData} from 'sentry/utils/discover/discoverQuery';
- import {aggregateOutputType} from 'sentry/utils/discover/fields';
- import {
- DERIVED_STATUS_METRICS_PATTERN,
- SESSIONS_TAGS,
- } from 'sentry/views/dashboardsV2/widgetBuilder/releaseWidget/fields';
- import {derivedMetricsToField} from './releaseWidgetQueries';
- export function changeObjectValuesToTypes(
- obj: Record<string, number | string | null> | undefined
- ) {
- return Object.keys(obj ?? {}).reduce((acc, key) => {
- acc[key] = SESSIONS_TAGS.includes(key) ? 'string' : aggregateOutputType(key);
- return acc;
- }, {});
- }
- export function mapDerivedMetricsToFields(results: Record<string, number | null>) {
- const mappedResults: Record<string, number | null> = {};
- for (const [key, value] of Object.entries(results)) {
- mappedResults[derivedMetricsToField(key)] = value;
- }
- return mappedResults;
- }
- export function getDerivedMetrics(groupBy, totals, requestedStatusMetrics) {
- const derivedTotals = {};
- if (!requestedStatusMetrics.length) {
- return derivedTotals;
- }
- if (groupBy['session.status'] === undefined) {
- return derivedTotals;
- }
- requestedStatusMetrics.forEach(status => {
- const result = status.match(DERIVED_STATUS_METRICS_PATTERN);
- if (result) {
- if (groupBy['session.status'] === result[1]) {
- if (result[2] === 'session') {
- derivedTotals[status] = totals['sum(session)'];
- } else if (result[2] === 'user') {
- derivedTotals[status] = totals['count_unique(user)'];
- }
- } else {
- derivedTotals[status] = 0;
- }
- }
- });
- return derivedTotals;
- }
- export function transformSessionsResponseToTable(
- response: SessionApiResponse | MetricsApiResponse | null,
- requestedStatusMetrics: string[],
- injectedFields: string[]
- ): TableData {
- const data =
- response?.groups.map((group, index) => ({
- id: String(index),
- ...mapDerivedMetricsToFields(group.by),
-
-
-
-
-
- ...omit(mapDerivedMetricsToFields(group.totals), injectedFields),
-
-
-
- ...getDerivedMetrics(group.by, group.totals, requestedStatusMetrics),
- })) ?? [];
- const singleRow = data[0];
-
- const meta = {
- ...changeObjectValuesToTypes(omit(singleRow, 'id')),
- };
- return {meta, data};
- }
|