StackdriverMetricFindQuery.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { extractServicesFromMetricDescriptors, getMetricTypesByService } from './functions';
  2. import has from 'lodash/has';
  3. export default class StackdriverMetricFindQuery {
  4. constructor(private datasource) {}
  5. async query(query: any) {
  6. switch (query.type) {
  7. case 'services':
  8. return this.handleServiceQueryType();
  9. case 'metricTypes':
  10. return this.handleMetricTypesQueryType(query);
  11. case 'metricLabels':
  12. return this.handleMetricLabelsQueryType(query);
  13. default:
  14. return [];
  15. }
  16. }
  17. async handleServiceQueryType() {
  18. const metricDescriptors = await this.datasource.getMetricTypes(this.datasource.projectName);
  19. const services = extractServicesFromMetricDescriptors(metricDescriptors);
  20. return services.map(s => ({
  21. text: s.name,
  22. expandable: true,
  23. }));
  24. }
  25. async handleMetricTypesQueryType({ service }) {
  26. if (!service) {
  27. return [];
  28. }
  29. const metricDescriptors = await this.datasource.getMetricTypes(this.datasource.projectName);
  30. return getMetricTypesByService(metricDescriptors, service).map(s => ({
  31. text: s.name,
  32. expandable: true,
  33. }));
  34. }
  35. async handleMetricLabelsQueryType({ metricType, metricLabelKey }) {
  36. if (!metricType || !metricLabelKey) {
  37. return [];
  38. }
  39. const refId = 'handleMetricLabelsQueryType';
  40. const response = await this.datasource.getLabels(metricType, refId);
  41. return has(response, `meta.metricLabels.${metricLabelKey}`)
  42. ? response.meta.metricLabels[metricLabelKey].map(s => ({
  43. text: s,
  44. expandable: true,
  45. }))
  46. : [];
  47. }
  48. }