| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { extractServicesFromMetricDescriptors, getMetricTypesByService } from './functions';
- import has from 'lodash/has';
- export default class StackdriverMetricFindQuery {
- constructor(private datasource) {}
- async query(query: any) {
- switch (query.type) {
- case 'services':
- return this.handleServiceQueryType();
- case 'metricTypes':
- return this.handleMetricTypesQueryType(query);
- case 'metricLabels':
- case 'resourceLabels':
- return this.handleLabelQueryType(query);
- case 'resourceTypes':
- return this.handleResourceType(query);
- default:
- return [];
- }
- }
- async handleServiceQueryType() {
- const metricDescriptors = await this.datasource.getMetricTypes(this.datasource.projectName);
- const services = extractServicesFromMetricDescriptors(metricDescriptors);
- return services.map(s => ({
- text: s.serviceShortName,
- value: s.name,
- expandable: true,
- }));
- }
- async handleMetricTypesQueryType({ service }) {
- if (!service) {
- return [];
- }
- const metricDescriptors = await this.datasource.getMetricTypes(this.datasource.projectName);
- return getMetricTypesByService(metricDescriptors, service).map(s => ({
- text: s.displayName,
- value: s.name,
- expandable: true,
- }));
- }
- getLabelKey({ type, metricLabelKey, resourceLabelKey }) {
- switch (type) {
- case 'metricLabels':
- return metricLabelKey;
- break;
- case 'resourceLabels':
- return resourceLabelKey;
- default:
- return '';
- }
- }
- async handleLabelQueryType({ type, metricType, metricLabelKey, resourceLabelKey, resourceTypeKey }) {
- if (!metricType) {
- return [];
- }
- const key = this.getLabelKey({ type, metricLabelKey, resourceLabelKey });
- const refId = 'handleLabelsQueryType';
- const response = await this.datasource.getLabels(metricType, refId);
- if (!has(response, `meta.${type}.${key}`)) {
- return [];
- }
- return response.meta[type][key].map(s => ({
- text: s,
- expandable: true,
- }));
- }
- async handleResourceType({ metricType }) {
- if (!metricType) {
- return [];
- }
- try {
- const refId = 'handleResourceTypeQueryType';
- const response = await this.datasource.getLabels(metricType, refId);
- return response.meta.resourceTypes.map(s => ({
- text: s,
- expandable: true,
- }));
- } catch (error) {
- return [];
- }
- }
- }
|