utils.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import type {MRI} from 'sentry/types';
  2. import {NO_QUERY_ID} from 'sentry/utils/metrics/constants';
  3. import {parseField} from 'sentry/utils/metrics/mri';
  4. import {MetricDisplayType, MetricQueryType} from 'sentry/utils/metrics/types';
  5. import type {MetricsQueryApiRequestQuery} from 'sentry/utils/metrics/useMetricsQuery';
  6. import type {DashboardFilters, Widget} from 'sentry/views/dashboards/types';
  7. import {getQuerySymbol} from 'sentry/views/ddm/querySymbol';
  8. function extendQuery(query = '', dashboardFilters?: DashboardFilters) {
  9. if (!dashboardFilters?.release?.length) {
  10. return query;
  11. }
  12. const releaseQuery = getReleaseQuery(dashboardFilters);
  13. return `${query} ${releaseQuery}`.trim();
  14. }
  15. function getReleaseQuery(dashboardFilters: DashboardFilters) {
  16. const {release} = dashboardFilters;
  17. if (!release?.length) {
  18. return '';
  19. }
  20. if (release.length === 1) {
  21. return `release:${release[0]}`;
  22. }
  23. return `release:[${release.join(',')}]`;
  24. }
  25. export function getMetricQueries(
  26. widget: Widget,
  27. dashboardFilters?: DashboardFilters
  28. ): MetricsQueryApiRequestQuery[] {
  29. return widget.queries.map((query, index) => {
  30. const parsed = parseField(query.aggregates[0]) || {mri: '' as MRI, op: ''};
  31. return {
  32. type: MetricQueryType.QUERY,
  33. id: NO_QUERY_ID,
  34. mri: parsed.mri,
  35. op: parsed.op,
  36. query: extendQuery(query.conditions, dashboardFilters),
  37. groupBy: query.columns,
  38. name: query.name || getQuerySymbol(index),
  39. };
  40. });
  41. }
  42. export function toMetricDisplayType(displayType: unknown): MetricDisplayType {
  43. if (Object.values(MetricDisplayType).includes(displayType as MetricDisplayType)) {
  44. return displayType as MetricDisplayType;
  45. }
  46. return MetricDisplayType.LINE;
  47. }