utils.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. function extendQuery(query = '', dashboardFilters?: DashboardFilters) {
  8. if (!dashboardFilters?.release?.length) {
  9. return query;
  10. }
  11. const releaseQuery = getReleaseQuery(dashboardFilters);
  12. return `${query} ${releaseQuery}`.trim();
  13. }
  14. function getReleaseQuery(dashboardFilters: DashboardFilters) {
  15. const {release} = dashboardFilters;
  16. if (!release?.length) {
  17. return '';
  18. }
  19. if (release.length === 1) {
  20. return `release:${release[0]}`;
  21. }
  22. return `release:[${release.join(',')}]`;
  23. }
  24. export function getMetricQueries(
  25. widget: Widget,
  26. dashboardFilters?: DashboardFilters
  27. ): MetricsQueryApiRequestQuery[] {
  28. return widget.queries.map((query, index) => {
  29. const parsed = parseField(query.aggregates[0]) || {mri: '' as MRI, op: ''};
  30. return {
  31. type: MetricQueryType.QUERY,
  32. id: NO_QUERY_ID,
  33. mri: parsed.mri,
  34. op: parsed.op,
  35. query: extendQuery(query.conditions, dashboardFilters),
  36. groupBy: query.columns,
  37. name: query.name || `query_${index + 1}`,
  38. };
  39. });
  40. }
  41. export function toMetricDisplayType(displayType: unknown): MetricDisplayType {
  42. if (Object.values(MetricDisplayType).includes(displayType as MetricDisplayType)) {
  43. return displayType as MetricDisplayType;
  44. }
  45. return MetricDisplayType.LINE;
  46. }