StackdriverMetricFindQuery.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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.serviceShortName,
  22. value: s.name,
  23. expandable: true,
  24. }));
  25. }
  26. async handleMetricTypesQueryType({ service }) {
  27. if (!service) {
  28. return [];
  29. }
  30. const metricDescriptors = await this.datasource.getMetricTypes(this.datasource.projectName);
  31. return getMetricTypesByService(metricDescriptors, service).map(s => ({
  32. text: s.displayName,
  33. value: s.name,
  34. expandable: true,
  35. }));
  36. }
  37. async handleMetricLabelsQueryType({ metricType, metricLabelKey }) {
  38. if (!metricType || !metricLabelKey) {
  39. return [];
  40. }
  41. const refId = 'handleMetricLabelsQueryType';
  42. const response = await this.datasource.getLabels(metricType, refId);
  43. return has(response, `meta.metricLabels.${metricLabelKey}`)
  44. ? response.meta.metricLabels[metricLabelKey].map(s => ({
  45. text: s,
  46. expandable: true,
  47. }))
  48. : [];
  49. }
  50. }