stackdriver: extract common function

This commit is contained in:
Erik Sundell
2018-11-09 13:55:11 +01:00
parent c993a4d296
commit 9872ea7d8c
2 changed files with 39 additions and 32 deletions
@@ -1,7 +1,7 @@
import React, { PureComponent } from 'react';
import SimpleDropdown from './SimpleDropdown';
import { TemplateQueryProps } from 'app/types/plugins';
import { getMetricTypesByService, extractServicesFromMetricDescriptors } from '../functions';
import { getMetricTypes, extractServicesFromMetricDescriptors } from '../functions';
import defaultsDeep from 'lodash/defaultsDeep';
import { MetricFindQueryTypes } from '../types';
@@ -43,12 +43,8 @@ export class StackdriverTemplateQueryComponent extends PureComponent<TemplateQue
value: m.service,
name: m.serviceShortName,
}));
const service = this.state.service || services[0].value;
const metricTypes = getMetricTypesByService(metricDescriptors, service).map(m => ({
value: m.type,
name: m.displayName,
}));
const metricType = this.state.metricType || metricTypes[0].value;
const service = services.some(s => s.value === this.state.service) ? this.state.service : services[0].value;
const { metricTypes, metricType } = getMetricTypes(metricDescriptors, this.state.metricType, service);
const state: any = {
services,
service,
@@ -66,13 +62,17 @@ export class StackdriverTemplateQueryComponent extends PureComponent<TemplateQue
}
async onServiceChange(event) {
const metricTypes = getMetricTypesByService(this.state.metricDescriptors, event.target.value).map(m => ({
value: m.type,
name: m.displayName,
}));
const metricTypeExistInArray = metricTypes.find(m => m.value === this.state.metricType);
const metricType = metricTypeExistInArray ? metricTypeExistInArray.value : metricTypes[0].value;
const state: any = { service: event.target.value, metricTypes, metricType, ...await this.getLabels(metricType) };
const { metricTypes, metricType } = getMetricTypes(
this.state.metricDescriptors,
this.state.metricType,
event.target.value
);
const state: any = {
service: event.target.value,
metricTypes,
metricType,
...await this.getLabels(metricType),
};
this.setState(state);
}
@@ -81,24 +81,6 @@ export class StackdriverTemplateQueryComponent extends PureComponent<TemplateQue
this.setState(state);
}
async getLabelKeys(metricType, type = this.state.type) {
const refId = 'StackdriverTemplateQueryComponent';
const response = await this.props.datasource.getLabels(metricType, refId);
return Object.keys(response.meta[type]);
}
async getLabels(metricType, type = this.state.type) {
let result = { labels: this.state.labels, labelKey: this.state.labelKey };
if (this.isLabelQuery(type)) {
const refId = 'StackdriverTemplateQueryComponent';
const response = await this.props.datasource.getLabels(metricType, refId);
const labels = Object.keys(response.meta[type]);
const labelKey = labels.indexOf(this.state.labelKey) !== -1 ? this.state.labelKey : labels[0];
result = { labels, labelKey };
}
return result;
}
onLabelKeyChange(event) {
this.setState({ labelKey: event.target.value });
}
@@ -112,6 +94,18 @@ export class StackdriverTemplateQueryComponent extends PureComponent<TemplateQue
return [MetricFindQueryTypes.MetricLabels, MetricFindQueryTypes.ResourceLabels].indexOf(queryType) !== -1;
}
async getLabels(metricType, type = this.state.type) {
let result = { labels: this.state.labels, labelKey: this.state.labelKey };
if (this.isLabelQuery(type)) {
const refId = 'StackdriverTemplateQueryComponent';
const response = await this.props.datasource.getLabels(metricType, refId);
const labels = Object.keys(response.meta[type]);
const labelKey = labels.indexOf(this.state.labelKey) !== -1 ? this.state.labelKey : labels[0];
result = { labels, labelKey };
}
return result;
}
renderQueryTypeSwitch(queryType) {
switch (queryType) {
case MetricFindQueryTypes.MetricTypes:
@@ -6,6 +6,19 @@ export const extractServicesFromMetricDescriptors = metricDescriptors => uniqBy(
export const getMetricTypesByService = (metricDescriptors, service) =>
metricDescriptors.filter(m => m.service === service);
export const getMetricTypes = (metricDescriptors, selectedMetricType, service) => {
const metricTypes = getMetricTypesByService(metricDescriptors, service).map(m => ({
value: m.type,
name: m.displayName,
}));
const metricTypeExistInArray = metricTypes.some(m => m.value === selectedMetricType);
const metricType = metricTypeExistInArray ? metricTypeExistInArray.value : metricTypes[0].value;
return {
metricTypes,
metricType,
};
};
export const getAlignmentOptionsByMetric = (metricValueType, metricKind) => {
return !metricValueType
? []