mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
noImplicitAny: 1670 errors (#18035)
* Sub 2000 errors * Down to 1670 errors * Minor fixes
This commit is contained in:
committed by
Torkel Ödegaard
parent
6aa58182c7
commit
e1cec1069c
@@ -4,7 +4,7 @@ import { variableRegex } from 'app/features/templating/variable';
|
||||
import { ScopedVars } from '@grafana/ui';
|
||||
import { TimeRange } from '@grafana/data';
|
||||
|
||||
function luceneEscape(value) {
|
||||
function luceneEscape(value: string) {
|
||||
return value.replace(/([\!\*\+\-\=<>\s\&\|\(\)\[\]\{\}\^\~\?\:\\/"])/g, '\\$1');
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@ export class TemplateSrv {
|
||||
variables: any[];
|
||||
|
||||
private regex = variableRegex;
|
||||
private index = {};
|
||||
private grafanaVariables = {};
|
||||
private index: any = {};
|
||||
private grafanaVariables: any = {};
|
||||
private builtIns: any = {};
|
||||
private timeRange: TimeRange = null;
|
||||
|
||||
@@ -23,7 +23,7 @@ export class TemplateSrv {
|
||||
this.variables = [];
|
||||
}
|
||||
|
||||
init(variables, timeRange?: TimeRange) {
|
||||
init(variables: any, timeRange?: TimeRange) {
|
||||
this.variables = variables;
|
||||
this.timeRange = timeRange;
|
||||
this.updateIndex();
|
||||
@@ -34,7 +34,7 @@ export class TemplateSrv {
|
||||
}
|
||||
|
||||
updateIndex() {
|
||||
const existsOrEmpty = value => value || value === '';
|
||||
const existsOrEmpty = (value: any) => value || value === '';
|
||||
|
||||
this.index = this.variables.reduce((acc, currentValue) => {
|
||||
if (currentValue.current && (currentValue.current.isNone || existsOrEmpty(currentValue.current.value))) {
|
||||
@@ -64,12 +64,12 @@ export class TemplateSrv {
|
||||
this.updateIndex();
|
||||
}
|
||||
|
||||
variableInitialized(variable) {
|
||||
variableInitialized(variable: any) {
|
||||
this.index[variable.name] = variable;
|
||||
}
|
||||
|
||||
getAdhocFilters(datasourceName) {
|
||||
let filters = [];
|
||||
getAdhocFilters(datasourceName: string) {
|
||||
let filters: any = [];
|
||||
|
||||
if (this.variables) {
|
||||
for (let i = 0; i < this.variables.length; i++) {
|
||||
@@ -92,7 +92,7 @@ export class TemplateSrv {
|
||||
return filters;
|
||||
}
|
||||
|
||||
luceneFormat(value) {
|
||||
luceneFormat(value: any) {
|
||||
if (typeof value === 'string') {
|
||||
return luceneEscape(value);
|
||||
}
|
||||
@@ -108,7 +108,7 @@ export class TemplateSrv {
|
||||
// encode string according to RFC 3986; in contrast to encodeURIComponent()
|
||||
// also the sub-delims "!", "'", "(", ")" and "*" are encoded;
|
||||
// unicode handling uses UTF-8 as in ECMA-262.
|
||||
encodeURIComponentStrict(str) {
|
||||
encodeURIComponentStrict(str: string) {
|
||||
return encodeURIComponent(str).replace(/[!'()*]/g, c => {
|
||||
return (
|
||||
'%' +
|
||||
@@ -120,7 +120,7 @@ export class TemplateSrv {
|
||||
});
|
||||
}
|
||||
|
||||
formatValue(value, format, variable) {
|
||||
formatValue(value: any, format: any, variable: any) {
|
||||
// for some scopedVars there is no variable
|
||||
variable = variable || {};
|
||||
|
||||
@@ -180,11 +180,11 @@ export class TemplateSrv {
|
||||
}
|
||||
}
|
||||
|
||||
setGrafanaVariable(name, value) {
|
||||
setGrafanaVariable(name: string, value: any) {
|
||||
this.grafanaVariables[name] = value;
|
||||
}
|
||||
|
||||
getVariableName(expression) {
|
||||
getVariableName(expression: string) {
|
||||
this.regex.lastIndex = 0;
|
||||
const match = this.regex.exec(expression);
|
||||
if (!match) {
|
||||
@@ -194,12 +194,12 @@ export class TemplateSrv {
|
||||
return variableName;
|
||||
}
|
||||
|
||||
variableExists(expression) {
|
||||
variableExists(expression: string) {
|
||||
const name = this.getVariableName(expression);
|
||||
return name && this.index[name] !== void 0;
|
||||
}
|
||||
|
||||
highlightVariablesAsHtml(str) {
|
||||
highlightVariablesAsHtml(str: string) {
|
||||
if (!str || !_.isString(str)) {
|
||||
return str;
|
||||
}
|
||||
@@ -214,7 +214,7 @@ export class TemplateSrv {
|
||||
});
|
||||
}
|
||||
|
||||
getAllValue(variable) {
|
||||
getAllValue(variable: any) {
|
||||
if (variable.allValue) {
|
||||
return variable.allValue;
|
||||
}
|
||||
@@ -225,7 +225,7 @@ export class TemplateSrv {
|
||||
return values;
|
||||
}
|
||||
|
||||
replace(target: string, scopedVars?: ScopedVars, format?: string | Function) {
|
||||
replace(target: string, scopedVars?: ScopedVars, format?: string | Function): any {
|
||||
if (!target) {
|
||||
return target;
|
||||
}
|
||||
@@ -266,11 +266,11 @@ export class TemplateSrv {
|
||||
});
|
||||
}
|
||||
|
||||
isAllValue(value) {
|
||||
isAllValue(value: any) {
|
||||
return value === '$__all' || (Array.isArray(value) && value[0] === '$__all');
|
||||
}
|
||||
|
||||
replaceWithText(target, scopedVars) {
|
||||
replaceWithText(target: string, scopedVars: ScopedVars) {
|
||||
if (!target) {
|
||||
return target;
|
||||
}
|
||||
@@ -278,7 +278,7 @@ export class TemplateSrv {
|
||||
let variable;
|
||||
this.regex.lastIndex = 0;
|
||||
|
||||
return target.replace(this.regex, (match, var1, var2, fmt2, var3) => {
|
||||
return target.replace(this.regex, (match: any, var1: any, var2: any, fmt2: any, var3: any) => {
|
||||
if (scopedVars) {
|
||||
const option = scopedVars[var1 || var2 || var3];
|
||||
if (option) {
|
||||
@@ -297,7 +297,7 @@ export class TemplateSrv {
|
||||
});
|
||||
}
|
||||
|
||||
fillVariableValuesForUrl(params, scopedVars?) {
|
||||
fillVariableValuesForUrl(params: any, scopedVars?: ScopedVars) {
|
||||
_.each(this.variables, variable => {
|
||||
if (scopedVars && scopedVars[variable.name] !== void 0) {
|
||||
if (scopedVars[variable.name].skipUrlSync) {
|
||||
@@ -313,7 +313,7 @@ export class TemplateSrv {
|
||||
});
|
||||
}
|
||||
|
||||
distributeVariable(value, variable) {
|
||||
distributeVariable(value: any, variable: any) {
|
||||
value = _.map(value, (val: any, index: number) => {
|
||||
if (index !== 0) {
|
||||
return variable + '=' + val;
|
||||
|
||||
@@ -16,12 +16,12 @@ export const variableRegexExec = (variableString: string) => {
|
||||
};
|
||||
|
||||
export interface Variable {
|
||||
setValue(option);
|
||||
updateOptions();
|
||||
dependsOn(variable);
|
||||
setValueFromUrl(urlValue);
|
||||
getValueForUrl();
|
||||
getSaveModel();
|
||||
setValue(option: any): any;
|
||||
updateOptions(): any;
|
||||
dependsOn(variable: any): any;
|
||||
setValueFromUrl(urlValue: any): any;
|
||||
getValueForUrl(): any;
|
||||
getSaveModel(): any;
|
||||
}
|
||||
|
||||
export let variableTypes = {};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Libaries
|
||||
import angular from 'angular';
|
||||
import angular, { IQService, ILocationService, auto, IPromise } from 'angular';
|
||||
import _ from 'lodash';
|
||||
|
||||
// Utils & Services
|
||||
@@ -19,9 +19,9 @@ export class VariableSrv {
|
||||
|
||||
/** @ngInject */
|
||||
constructor(
|
||||
private $q,
|
||||
private $location,
|
||||
private $injector,
|
||||
private $q: IQService,
|
||||
private $location: ILocationService,
|
||||
private $injector: auto.IInjectorService,
|
||||
private templateSrv: TemplateSrv,
|
||||
private timeSrv: TimeSrv
|
||||
) {}
|
||||
@@ -71,7 +71,7 @@ export class VariableSrv {
|
||||
});
|
||||
}
|
||||
|
||||
processVariable(variable, queryParams) {
|
||||
processVariable(variable: any, queryParams: any) {
|
||||
const dependencies = [];
|
||||
|
||||
for (const otherVariable of this.variables) {
|
||||
@@ -100,7 +100,8 @@ export class VariableSrv {
|
||||
});
|
||||
}
|
||||
|
||||
createVariableFromModel(model) {
|
||||
createVariableFromModel(model: any) {
|
||||
// @ts-ignore
|
||||
const ctor = variableTypes[model.type].ctor;
|
||||
if (!ctor) {
|
||||
throw {
|
||||
@@ -112,24 +113,24 @@ export class VariableSrv {
|
||||
return variable;
|
||||
}
|
||||
|
||||
addVariable(variable) {
|
||||
addVariable(variable: any) {
|
||||
this.variables.push(variable);
|
||||
this.templateSrv.updateIndex();
|
||||
this.dashboard.updateSubmenuVisibility();
|
||||
}
|
||||
|
||||
removeVariable(variable) {
|
||||
removeVariable(variable: any) {
|
||||
const index = _.indexOf(this.variables, variable);
|
||||
this.variables.splice(index, 1);
|
||||
this.templateSrv.updateIndex();
|
||||
this.dashboard.updateSubmenuVisibility();
|
||||
}
|
||||
|
||||
updateOptions(variable) {
|
||||
updateOptions(variable: any) {
|
||||
return variable.updateOptions();
|
||||
}
|
||||
|
||||
variableUpdated(variable, emitChangeEvents?) {
|
||||
variableUpdated(variable: any, emitChangeEvents?: any) {
|
||||
// if there is a variable lock ignore cascading update because we are in a boot up scenario
|
||||
if (variable.initLock) {
|
||||
return this.$q.when();
|
||||
@@ -152,7 +153,7 @@ export class VariableSrv {
|
||||
});
|
||||
}
|
||||
|
||||
selectOptionsForCurrentValue(variable) {
|
||||
selectOptionsForCurrentValue(variable: any) {
|
||||
let i, y, value, option;
|
||||
const selected: any = [];
|
||||
|
||||
@@ -176,7 +177,7 @@ export class VariableSrv {
|
||||
return selected;
|
||||
}
|
||||
|
||||
validateVariableSelectionState(variable) {
|
||||
validateVariableSelectionState(variable: any) {
|
||||
if (!variable.current) {
|
||||
variable.current = {};
|
||||
}
|
||||
@@ -221,7 +222,7 @@ export class VariableSrv {
|
||||
* @param variable Instance of Variable
|
||||
* @param urlValue Value of the query parameter
|
||||
*/
|
||||
setOptionFromUrl(variable: any, urlValue: string | string[]): Promise<any> {
|
||||
setOptionFromUrl(variable: any, urlValue: string | string[]): IPromise<any> {
|
||||
let promise = this.$q.when();
|
||||
|
||||
if (variable.refresh) {
|
||||
@@ -268,7 +269,7 @@ export class VariableSrv {
|
||||
});
|
||||
}
|
||||
|
||||
setOptionAsCurrent(variable, option) {
|
||||
setOptionAsCurrent(variable: any, option: any) {
|
||||
variable.current = _.cloneDeep(option);
|
||||
|
||||
if (_.isArray(variable.current.text) && variable.current.text.length > 0) {
|
||||
@@ -298,7 +299,7 @@ export class VariableSrv {
|
||||
this.$location.search(params);
|
||||
}
|
||||
|
||||
setAdhocFilter(options) {
|
||||
setAdhocFilter(options: any) {
|
||||
let variable: any = _.find(this.variables, {
|
||||
type: 'adhoc',
|
||||
datasource: options.datasource,
|
||||
|
||||
@@ -78,7 +78,7 @@ export class UsersActionBar extends PureComponent<Props> {
|
||||
}
|
||||
}
|
||||
|
||||
function mapStateToProps(state) {
|
||||
function mapStateToProps(state: any) {
|
||||
return {
|
||||
searchQuery: getUsersSearchQuery(state.users),
|
||||
pendingInvitesCount: getInviteesCount(state.users),
|
||||
|
||||
@@ -34,7 +34,7 @@ export interface State {
|
||||
export class UsersListPage extends PureComponent<Props, State> {
|
||||
externalUserMngInfoHtml: string;
|
||||
|
||||
constructor(props) {
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
|
||||
if (this.props.externalUserMngInfo) {
|
||||
@@ -59,13 +59,13 @@ export class UsersListPage extends PureComponent<Props, State> {
|
||||
return await this.props.loadInvitees();
|
||||
}
|
||||
|
||||
onRoleChange = (role, user) => {
|
||||
onRoleChange = (role: string, user: OrgUser) => {
|
||||
const updatedUser = { ...user, role: role };
|
||||
|
||||
this.props.updateUser(updatedUser);
|
||||
};
|
||||
|
||||
onRemoveUser = user => {
|
||||
onRemoveUser = (user: OrgUser) => {
|
||||
appEvents.emit('confirm-modal', {
|
||||
title: 'Delete',
|
||||
text: 'Are you sure you want to delete user ' + user.login + '?',
|
||||
@@ -119,7 +119,7 @@ export class UsersListPage extends PureComponent<Props, State> {
|
||||
}
|
||||
}
|
||||
|
||||
function mapStateToProps(state) {
|
||||
function mapStateToProps(state: any) {
|
||||
return {
|
||||
navModel: getNavModel(state.navIndex, 'users'),
|
||||
users: getUsers(state.users),
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
export const getUsers = state => {
|
||||
import { UsersState } from 'app/types';
|
||||
|
||||
export const getUsers = (state: UsersState) => {
|
||||
const regex = new RegExp(state.searchQuery, 'i');
|
||||
|
||||
return state.users.filter(user => {
|
||||
@@ -6,7 +8,7 @@ export const getUsers = state => {
|
||||
});
|
||||
};
|
||||
|
||||
export const getInvitees = state => {
|
||||
export const getInvitees = (state: UsersState) => {
|
||||
const regex = new RegExp(state.searchQuery, 'i');
|
||||
|
||||
return state.invitees.filter(invitee => {
|
||||
@@ -14,5 +16,5 @@ export const getInvitees = state => {
|
||||
});
|
||||
};
|
||||
|
||||
export const getInviteesCount = state => state.invitees.length;
|
||||
export const getUsersSearchQuery = state => state.searchQuery;
|
||||
export const getInviteesCount = (state: UsersState) => state.invitees.length;
|
||||
export const getUsersSearchQuery = (state: UsersState) => state.searchQuery;
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import _ from 'lodash';
|
||||
import DatasourceSrv from 'app/features/plugins/datasource_srv';
|
||||
import CloudWatchDatasource from './datasource';
|
||||
export class CloudWatchConfigCtrl {
|
||||
static templateUrl = 'partials/config.html';
|
||||
current: any;
|
||||
@@ -8,7 +10,7 @@ export class CloudWatchConfigCtrl {
|
||||
secretKeyExist = false;
|
||||
|
||||
/** @ngInject */
|
||||
constructor($scope, datasourceSrv) {
|
||||
constructor($scope: any, datasourceSrv: DatasourceSrv) {
|
||||
this.current.jsonData.timeField = this.current.jsonData.timeField || '@timestamp';
|
||||
this.current.jsonData.authType = this.current.jsonData.authType || 'credentials';
|
||||
|
||||
@@ -32,7 +34,7 @@ export class CloudWatchConfigCtrl {
|
||||
{ name: 'ARN', value: 'arn' },
|
||||
];
|
||||
|
||||
indexPatternTypes = [
|
||||
indexPatternTypes: any = [
|
||||
{ name: 'No pattern', value: undefined },
|
||||
{ name: 'Hourly', value: 'Hourly', example: '[logstash-]YYYY.MM.DD.HH' },
|
||||
{ name: 'Daily', value: 'Daily', example: '[logstash-]YYYY.MM.DD' },
|
||||
@@ -71,14 +73,14 @@ export class CloudWatchConfigCtrl {
|
||||
getRegions() {
|
||||
this.datasourceSrv
|
||||
.loadDatasource(this.current.name)
|
||||
.then(ds => {
|
||||
.then((ds: CloudWatchDatasource) => {
|
||||
return ds.getRegions();
|
||||
})
|
||||
.then(
|
||||
regions => {
|
||||
(regions: any) => {
|
||||
this.regions = _.map(regions, 'value');
|
||||
},
|
||||
err => {
|
||||
(err: any) => {
|
||||
console.error('failed to get latest regions');
|
||||
}
|
||||
);
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import angular from 'angular';
|
||||
import angular, { IQService } from 'angular';
|
||||
import _ from 'lodash';
|
||||
import { dateMath } from '@grafana/data';
|
||||
import kbn from 'app/core/utils/kbn';
|
||||
import { CloudWatchQuery } from './types';
|
||||
import { DataSourceApi, DataQueryRequest, DataSourceInstanceSettings } from '@grafana/ui';
|
||||
import { DataSourceApi, DataQueryRequest, DataSourceInstanceSettings, ScopedVars } from '@grafana/ui';
|
||||
import { BackendSrv } from 'app/core/services/backend_srv';
|
||||
import { TemplateSrv } from 'app/features/templating/template_srv';
|
||||
import { TimeSrv } from 'app/features/dashboard/services/TimeSrv';
|
||||
@@ -18,7 +18,7 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
/** @ngInject */
|
||||
constructor(
|
||||
private instanceSettings: DataSourceInstanceSettings,
|
||||
private $q,
|
||||
private $q: IQService,
|
||||
private backendSrv: BackendSrv,
|
||||
private templateSrv: TemplateSrv,
|
||||
private timeSrv: TimeSrv
|
||||
@@ -96,7 +96,7 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
return this.performTimeSeriesQuery(request);
|
||||
}
|
||||
|
||||
getPeriod(target, options, now?) {
|
||||
getPeriod(target: any, options: any, now?: number) {
|
||||
const start = this.convertToCloudWatchTime(options.range.from, false);
|
||||
const end = this.convertToCloudWatchTime(options.range.to, true);
|
||||
now = Math.round((now || Date.now()) / 1000);
|
||||
@@ -142,8 +142,8 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
return period;
|
||||
}
|
||||
|
||||
performTimeSeriesQuery(request) {
|
||||
return this.awsRequest('/api/tsdb/query', request).then(res => {
|
||||
performTimeSeriesQuery(request: any) {
|
||||
return this.awsRequest('/api/tsdb/query', request).then((res: any) => {
|
||||
const data = [];
|
||||
|
||||
if (res.results) {
|
||||
@@ -165,7 +165,7 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
});
|
||||
}
|
||||
|
||||
transformSuggestDataFromTable(suggestData) {
|
||||
transformSuggestDataFromTable(suggestData: any) {
|
||||
return _.map(suggestData.results['metricFindQuery'].tables[0].rows, v => {
|
||||
return {
|
||||
text: v[0],
|
||||
@@ -174,7 +174,7 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
});
|
||||
}
|
||||
|
||||
doMetricQueryRequest(subtype, parameters) {
|
||||
doMetricQueryRequest(subtype: any, parameters: any) {
|
||||
const range = this.timeSrv.timeRange();
|
||||
return this.awsRequest('/api/tsdb/query', {
|
||||
from: range.from.valueOf().toString(),
|
||||
@@ -192,7 +192,7 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
parameters
|
||||
),
|
||||
],
|
||||
}).then(r => {
|
||||
}).then((r: any) => {
|
||||
return this.transformSuggestDataFromTable(r);
|
||||
});
|
||||
}
|
||||
@@ -205,21 +205,27 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
return this.doMetricQueryRequest('namespaces', null);
|
||||
}
|
||||
|
||||
getMetrics(namespace, region) {
|
||||
getMetrics(namespace: string, region: string) {
|
||||
return this.doMetricQueryRequest('metrics', {
|
||||
region: this.templateSrv.replace(this.getActualRegion(region)),
|
||||
namespace: this.templateSrv.replace(namespace),
|
||||
});
|
||||
}
|
||||
|
||||
getDimensionKeys(namespace, region) {
|
||||
getDimensionKeys(namespace: string, region: string) {
|
||||
return this.doMetricQueryRequest('dimension_keys', {
|
||||
region: this.templateSrv.replace(this.getActualRegion(region)),
|
||||
namespace: this.templateSrv.replace(namespace),
|
||||
});
|
||||
}
|
||||
|
||||
getDimensionValues(region, namespace, metricName, dimensionKey, filterDimensions) {
|
||||
getDimensionValues(
|
||||
region: string,
|
||||
namespace: string,
|
||||
metricName: string,
|
||||
dimensionKey: string,
|
||||
filterDimensions: {}
|
||||
) {
|
||||
return this.doMetricQueryRequest('dimension_values', {
|
||||
region: this.templateSrv.replace(this.getActualRegion(region)),
|
||||
namespace: this.templateSrv.replace(namespace),
|
||||
@@ -229,14 +235,14 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
});
|
||||
}
|
||||
|
||||
getEbsVolumeIds(region, instanceId) {
|
||||
getEbsVolumeIds(region: string, instanceId: string) {
|
||||
return this.doMetricQueryRequest('ebs_volume_ids', {
|
||||
region: this.templateSrv.replace(this.getActualRegion(region)),
|
||||
instanceId: this.templateSrv.replace(instanceId),
|
||||
});
|
||||
}
|
||||
|
||||
getEc2InstanceAttribute(region, attributeName, filters) {
|
||||
getEc2InstanceAttribute(region: string, attributeName: string, filters: any) {
|
||||
return this.doMetricQueryRequest('ec2_instance_attribute', {
|
||||
region: this.templateSrv.replace(this.getActualRegion(region)),
|
||||
attributeName: this.templateSrv.replace(attributeName),
|
||||
@@ -244,7 +250,7 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
});
|
||||
}
|
||||
|
||||
getResourceARNs(region, resourceType, tags) {
|
||||
getResourceARNs(region: string, resourceType: string, tags: any) {
|
||||
return this.doMetricQueryRequest('resource_arns', {
|
||||
region: this.templateSrv.replace(this.getActualRegion(region)),
|
||||
resourceType: this.templateSrv.replace(resourceType),
|
||||
@@ -252,7 +258,7 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
});
|
||||
}
|
||||
|
||||
metricFindQuery(query) {
|
||||
metricFindQuery(query: string) {
|
||||
let region;
|
||||
let namespace;
|
||||
let metricName;
|
||||
@@ -324,7 +330,7 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
return this.$q.when([]);
|
||||
}
|
||||
|
||||
annotationQuery(options) {
|
||||
annotationQuery(options: any) {
|
||||
const annotation = options.annotation;
|
||||
const statistics = _.map(annotation.statistics, s => {
|
||||
return this.templateSrv.replace(s);
|
||||
@@ -359,7 +365,7 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
parameters
|
||||
),
|
||||
],
|
||||
}).then(r => {
|
||||
}).then((r: any) => {
|
||||
return _.map(r.results['annotationQuery'].tables[0].rows, v => {
|
||||
return {
|
||||
annotation: annotation,
|
||||
@@ -372,7 +378,7 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
});
|
||||
}
|
||||
|
||||
targetContainsTemplate(target) {
|
||||
targetContainsTemplate(target: any) {
|
||||
return (
|
||||
this.templateSrv.variableExists(target.region) ||
|
||||
this.templateSrv.variableExists(target.namespace) ||
|
||||
@@ -395,14 +401,14 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
});
|
||||
}
|
||||
|
||||
awsRequest(url, data) {
|
||||
awsRequest(url: string, data: any) {
|
||||
const options = {
|
||||
method: 'POST',
|
||||
url: url,
|
||||
data: data,
|
||||
url,
|
||||
data,
|
||||
};
|
||||
|
||||
return this.backendSrv.datasourceRequest(options).then(result => {
|
||||
return this.backendSrv.datasourceRequest(options).then((result: any) => {
|
||||
return result.data;
|
||||
});
|
||||
}
|
||||
@@ -411,14 +417,14 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
return this.defaultRegion;
|
||||
}
|
||||
|
||||
getActualRegion(region) {
|
||||
getActualRegion(region: string) {
|
||||
if (region === 'default' || _.isEmpty(region)) {
|
||||
return this.getDefaultRegion();
|
||||
}
|
||||
return region;
|
||||
}
|
||||
|
||||
getExpandedVariables(target, dimensionKey, variable, templateSrv) {
|
||||
getExpandedVariables(target: any, dimensionKey: any, variable: any, templateSrv: TemplateSrv) {
|
||||
/* if the all checkbox is marked we should add all values to the targets */
|
||||
const allSelected: any = _.find(variable.options, { selected: true, text: 'All' });
|
||||
const selectedVariables = _.filter(variable.options, v => {
|
||||
@@ -430,7 +436,7 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
});
|
||||
const currentVariables = !_.isArray(variable.current.value)
|
||||
? [variable.current]
|
||||
: variable.current.value.map(v => {
|
||||
: variable.current.value.map((v: any) => {
|
||||
return {
|
||||
text: v,
|
||||
value: v,
|
||||
@@ -440,9 +446,9 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
selectedVariables.some((s: any) => {
|
||||
return s.value === currentVariables[0].value;
|
||||
}) || currentVariables[0].value === '$__all';
|
||||
return (useSelectedVariables ? selectedVariables : currentVariables).map(v => {
|
||||
return (useSelectedVariables ? selectedVariables : currentVariables).map((v: any) => {
|
||||
const t = angular.copy(target);
|
||||
const scopedVar = {};
|
||||
const scopedVar: any = {};
|
||||
scopedVar[variable.name] = v;
|
||||
t.refId = target.refId + '_' + v.value;
|
||||
t.dimensions[dimensionKey] = templateSrv.replace(t.dimensions[dimensionKey], scopedVar);
|
||||
@@ -455,7 +461,7 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
});
|
||||
}
|
||||
|
||||
expandTemplateVariable(targets, scopedVars, templateSrv) {
|
||||
expandTemplateVariable(targets: any, scopedVars: ScopedVars, templateSrv: TemplateSrv) {
|
||||
// Datasource and template srv logic uber-complected. This should be cleaned up.
|
||||
return _.chain(targets)
|
||||
.map(target => {
|
||||
@@ -480,15 +486,15 @@ export default class CloudWatchDatasource extends DataSourceApi<CloudWatchQuery>
|
||||
.value();
|
||||
}
|
||||
|
||||
convertToCloudWatchTime(date, roundUp) {
|
||||
convertToCloudWatchTime(date: any, roundUp: any) {
|
||||
if (_.isString(date)) {
|
||||
date = dateMath.parse(date, roundUp);
|
||||
}
|
||||
return Math.round(date.valueOf() / 1000);
|
||||
}
|
||||
|
||||
convertDimensionFormat(dimensions, scopedVars) {
|
||||
const convertedDimensions = {};
|
||||
convertDimensionFormat(dimensions: any, scopedVars: ScopedVars) {
|
||||
const convertedDimensions: any = {};
|
||||
_.each(dimensions, (value, key) => {
|
||||
convertedDimensions[this.templateSrv.replace(key, scopedVars)] = this.templateSrv.replace(value, scopedVars);
|
||||
});
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import './query_parameter_ctrl';
|
||||
import { QueryCtrl } from 'app/plugins/sdk';
|
||||
import { auto } from 'angular';
|
||||
|
||||
export class CloudWatchQueryCtrl extends QueryCtrl {
|
||||
static templateUrl = 'partials/query.editor.html';
|
||||
@@ -7,7 +8,7 @@ export class CloudWatchQueryCtrl extends QueryCtrl {
|
||||
aliasSyntax: string;
|
||||
|
||||
/** @ngInject */
|
||||
constructor($scope, $injector) {
|
||||
constructor($scope: any, $injector: auto.IInjectorService) {
|
||||
super($scope, $injector);
|
||||
this.aliasSyntax = '{{metric}} {{stat}} {{namespace}} {{region}} {{<dimension name>}}';
|
||||
}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
import angular from 'angular';
|
||||
import angular, { IQService } from 'angular';
|
||||
import coreModule from 'app/core/core_module';
|
||||
import _ from 'lodash';
|
||||
import { TemplateSrv } from 'app/features/templating/template_srv';
|
||||
import DatasourceSrv from 'app/features/plugins/datasource_srv';
|
||||
|
||||
export class CloudWatchQueryParameterCtrl {
|
||||
/** @ngInject */
|
||||
constructor($scope, templateSrv, uiSegmentSrv, datasourceSrv, $q) {
|
||||
constructor($scope: any, templateSrv: TemplateSrv, uiSegmentSrv: any, datasourceSrv: DatasourceSrv, $q: IQService) {
|
||||
$scope.init = () => {
|
||||
const target = $scope.target;
|
||||
target.namespace = target.namespace || '';
|
||||
@@ -69,7 +71,7 @@ export class CloudWatchQueryParameterCtrl {
|
||||
);
|
||||
};
|
||||
|
||||
$scope.statSegmentChanged = (segment, index) => {
|
||||
$scope.statSegmentChanged = (segment: any, index: number) => {
|
||||
if (segment.value === $scope.removeStatSegment.value) {
|
||||
$scope.statSegments.splice(index, 1);
|
||||
} else {
|
||||
@@ -91,7 +93,7 @@ export class CloudWatchQueryParameterCtrl {
|
||||
$scope.onChange();
|
||||
};
|
||||
|
||||
$scope.ensurePlusButton = segments => {
|
||||
$scope.ensurePlusButton = (segments: any) => {
|
||||
const count = segments.length;
|
||||
const lastSegment = segments[Math.max(count - 1, 0)];
|
||||
|
||||
@@ -100,7 +102,7 @@ export class CloudWatchQueryParameterCtrl {
|
||||
}
|
||||
};
|
||||
|
||||
$scope.getDimSegments = (segment, $index) => {
|
||||
$scope.getDimSegments = (segment: any, $index: number) => {
|
||||
if (segment.type === 'operator') {
|
||||
return $q.when([]);
|
||||
}
|
||||
@@ -130,7 +132,7 @@ export class CloudWatchQueryParameterCtrl {
|
||||
});
|
||||
};
|
||||
|
||||
$scope.dimSegmentChanged = (segment, index) => {
|
||||
$scope.dimSegmentChanged = (segment: any, index: number) => {
|
||||
$scope.dimSegments[index] = segment;
|
||||
|
||||
if (segment.value === $scope.removeDimSegment.value) {
|
||||
@@ -148,7 +150,7 @@ export class CloudWatchQueryParameterCtrl {
|
||||
};
|
||||
|
||||
$scope.syncDimSegmentsWithModel = () => {
|
||||
const dims = {};
|
||||
const dims: any = {};
|
||||
const length = $scope.dimSegments.length;
|
||||
|
||||
for (let i = 0; i < length - 2; i += 3) {
|
||||
@@ -165,7 +167,7 @@ export class CloudWatchQueryParameterCtrl {
|
||||
$scope.getRegions = () => {
|
||||
return $scope.datasource
|
||||
.metricFindQuery('regions()')
|
||||
.then(results => {
|
||||
.then((results: any) => {
|
||||
results.unshift({ text: 'default' });
|
||||
return results;
|
||||
})
|
||||
@@ -197,8 +199,8 @@ export class CloudWatchQueryParameterCtrl {
|
||||
$scope.onChange();
|
||||
};
|
||||
|
||||
$scope.transformToSegments = addTemplateVars => {
|
||||
return results => {
|
||||
$scope.transformToSegments = (addTemplateVars: any) => {
|
||||
return (results: any) => {
|
||||
const segments = _.map(results, segment => {
|
||||
return uiSegmentSrv.newSegment({
|
||||
value: segment.text,
|
||||
|
||||
@@ -32,7 +32,7 @@ describe('CloudWatchDatasource', () => {
|
||||
} as any;
|
||||
|
||||
beforeEach(() => {
|
||||
ctx.ds = new CloudWatchDatasource(instanceSettings, {}, backendSrv, templateSrv, timeSrv);
|
||||
ctx.ds = new CloudWatchDatasource(instanceSettings, {} as any, backendSrv, templateSrv, timeSrv);
|
||||
});
|
||||
|
||||
describe('When performing CloudWatch query', () => {
|
||||
@@ -56,7 +56,7 @@ describe('CloudWatchDatasource', () => {
|
||||
],
|
||||
};
|
||||
|
||||
const response = {
|
||||
const response: any = {
|
||||
timings: [null],
|
||||
results: {
|
||||
A: {
|
||||
@@ -156,7 +156,7 @@ describe('CloudWatchDatasource', () => {
|
||||
});
|
||||
|
||||
it('should return series list', done => {
|
||||
ctx.ds.query(query).then(result => {
|
||||
ctx.ds.query(query).then((result: any) => {
|
||||
expect(result.data[0].target).toBe(response.results.A.series[0].name);
|
||||
expect(result.data[0].datapoints[0][0]).toBe(response.results.A.series[0].points[0][0]);
|
||||
done();
|
||||
@@ -204,7 +204,7 @@ describe('CloudWatchDatasource', () => {
|
||||
],
|
||||
};
|
||||
|
||||
ctx.ds.query(query).then(result => {
|
||||
ctx.ds.query(query).then((result: any) => {
|
||||
expect(requestParams.queries[0].region).toBe(instanceSettings.jsonData.defaultRegion);
|
||||
done();
|
||||
});
|
||||
@@ -231,7 +231,7 @@ describe('CloudWatchDatasource', () => {
|
||||
],
|
||||
};
|
||||
|
||||
const response = {
|
||||
const response: any = {
|
||||
timings: [null],
|
||||
results: {
|
||||
A: {
|
||||
@@ -259,7 +259,7 @@ describe('CloudWatchDatasource', () => {
|
||||
});
|
||||
|
||||
it('should return series list', done => {
|
||||
ctx.ds.query(query).then(result => {
|
||||
ctx.ds.query(query).then((result: any) => {
|
||||
expect(result.data[0].target).toBe(response.results.A.series[0].name);
|
||||
expect(result.data[0].datapoints[0][0]).toBe(response.results.A.series[0].points[0][0]);
|
||||
done();
|
||||
@@ -411,7 +411,7 @@ describe('CloudWatchDatasource', () => {
|
||||
});
|
||||
|
||||
it('should generate the correct query for multilple template variables with expression', done => {
|
||||
const query = {
|
||||
const query: any = {
|
||||
range: { from: 'now-1h', to: 'now' },
|
||||
rangeRaw: { from: 1483228800, to: 1483232400 },
|
||||
targets: [
|
||||
@@ -466,17 +466,17 @@ describe('CloudWatchDatasource', () => {
|
||||
});
|
||||
});
|
||||
|
||||
function describeMetricFindQuery(query, func) {
|
||||
function describeMetricFindQuery(query: any, func: any) {
|
||||
describe('metricFindQuery ' + query, () => {
|
||||
const scenario: any = {};
|
||||
scenario.setup = setupCallback => {
|
||||
scenario.setup = (setupCallback: any) => {
|
||||
beforeEach(() => {
|
||||
setupCallback();
|
||||
ctx.backendSrv.datasourceRequest = jest.fn(args => {
|
||||
scenario.request = args.data;
|
||||
return Promise.resolve({ data: scenario.requestResponse });
|
||||
});
|
||||
ctx.ds.metricFindQuery(query).then(args => {
|
||||
ctx.ds.metricFindQuery(query).then((args: any) => {
|
||||
scenario.result = args;
|
||||
});
|
||||
});
|
||||
@@ -486,7 +486,7 @@ describe('CloudWatchDatasource', () => {
|
||||
});
|
||||
}
|
||||
|
||||
describeMetricFindQuery('regions()', scenario => {
|
||||
describeMetricFindQuery('regions()', (scenario: any) => {
|
||||
scenario.setup(() => {
|
||||
scenario.requestResponse = {
|
||||
results: {
|
||||
@@ -504,7 +504,7 @@ describe('CloudWatchDatasource', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describeMetricFindQuery('namespaces()', scenario => {
|
||||
describeMetricFindQuery('namespaces()', (scenario: any) => {
|
||||
scenario.setup(() => {
|
||||
scenario.requestResponse = {
|
||||
results: {
|
||||
@@ -522,7 +522,7 @@ describe('CloudWatchDatasource', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describeMetricFindQuery('metrics(AWS/EC2)', scenario => {
|
||||
describeMetricFindQuery('metrics(AWS/EC2)', (scenario: any) => {
|
||||
scenario.setup(() => {
|
||||
scenario.requestResponse = {
|
||||
results: {
|
||||
@@ -540,7 +540,7 @@ describe('CloudWatchDatasource', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describeMetricFindQuery('dimension_keys(AWS/EC2)', scenario => {
|
||||
describeMetricFindQuery('dimension_keys(AWS/EC2)', (scenario: any) => {
|
||||
scenario.setup(() => {
|
||||
scenario.requestResponse = {
|
||||
results: {
|
||||
@@ -558,7 +558,7 @@ describe('CloudWatchDatasource', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describeMetricFindQuery('dimension_values(us-east-1,AWS/EC2,CPUUtilization,InstanceId)', scenario => {
|
||||
describeMetricFindQuery('dimension_values(us-east-1,AWS/EC2,CPUUtilization,InstanceId)', (scenario: any) => {
|
||||
scenario.setup(() => {
|
||||
scenario.requestResponse = {
|
||||
results: {
|
||||
@@ -576,7 +576,7 @@ describe('CloudWatchDatasource', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describeMetricFindQuery('dimension_values(default,AWS/EC2,CPUUtilization,InstanceId)', scenario => {
|
||||
describeMetricFindQuery('dimension_values(default,AWS/EC2,CPUUtilization,InstanceId)', (scenario: any) => {
|
||||
scenario.setup(() => {
|
||||
scenario.requestResponse = {
|
||||
results: {
|
||||
@@ -594,7 +594,7 @@ describe('CloudWatchDatasource', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describeMetricFindQuery('resource_arns(default,ec2:instance,{"environment":["production"]})', scenario => {
|
||||
describeMetricFindQuery('resource_arns(default,ec2:instance,{"environment":["production"]})', (scenario: any) => {
|
||||
scenario.setup(() => {
|
||||
scenario.requestResponse = {
|
||||
results: {
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import coreModule from 'app/core/core_module';
|
||||
import _ from 'lodash';
|
||||
import * as queryDef from './query_def';
|
||||
import { IQService } from 'angular';
|
||||
|
||||
export class ElasticBucketAggCtrl {
|
||||
/** @ngInject */
|
||||
constructor($scope, uiSegmentSrv, $q, $rootScope) {
|
||||
constructor($scope: any, uiSegmentSrv: any, $q: IQService, $rootScope: any) {
|
||||
const bucketAggs = $scope.target.bucketAggs;
|
||||
|
||||
$scope.orderByOptions = [];
|
||||
@@ -158,7 +159,7 @@ export class ElasticBucketAggCtrl {
|
||||
$scope.agg.settings.filters.push({ query: '*' });
|
||||
};
|
||||
|
||||
$scope.removeFiltersQuery = filter => {
|
||||
$scope.removeFiltersQuery = (filter: any) => {
|
||||
$scope.agg.settings.filters = _.without($scope.agg.settings.filters, filter);
|
||||
};
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ export class ElasticConfigCtrl {
|
||||
current: DataSourceInstanceSettings<ElasticsearchOptions>;
|
||||
|
||||
/** @ngInject */
|
||||
constructor($scope) {
|
||||
constructor($scope: any) {
|
||||
this.current.jsonData.timeField = this.current.jsonData.timeField || '@timestamp';
|
||||
this.current.jsonData.esVersion = this.current.jsonData.esVersion || 5;
|
||||
const defaultMaxConcurrentShardRequests = this.current.jsonData.esVersion >= 70 ? 5 : 256;
|
||||
@@ -18,7 +18,7 @@ export class ElasticConfigCtrl {
|
||||
this.current.jsonData.logLevelField = this.current.jsonData.logLevelField || '';
|
||||
}
|
||||
|
||||
indexPatternTypes = [
|
||||
indexPatternTypes: any = [
|
||||
{ name: 'No pattern', value: undefined },
|
||||
{ name: 'Hourly', value: 'Hourly', example: '[logstash-]YYYY.MM.DD.HH' },
|
||||
{ name: 'Daily', value: 'Daily', example: '[logstash-]YYYY.MM.DD' },
|
||||
|
||||
@@ -63,7 +63,7 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
}
|
||||
}
|
||||
|
||||
private request(method, url, data?) {
|
||||
private request(method: string, url: string, data?: undefined) {
|
||||
const options: any = {
|
||||
url: this.url + '/' + url,
|
||||
method: method,
|
||||
@@ -82,29 +82,29 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
return this.backendSrv.datasourceRequest(options);
|
||||
}
|
||||
|
||||
private get(url) {
|
||||
private get(url: string) {
|
||||
const range = this.timeSrv.timeRange();
|
||||
const indexList = this.indexPattern.getIndexList(range.from.valueOf(), range.to.valueOf());
|
||||
if (_.isArray(indexList) && indexList.length) {
|
||||
return this.request('GET', indexList[0] + url).then(results => {
|
||||
return this.request('GET', indexList[0] + url).then((results: any) => {
|
||||
results.data.$$config = results.config;
|
||||
return results.data;
|
||||
});
|
||||
} else {
|
||||
return this.request('GET', this.indexPattern.getIndexForToday() + url).then(results => {
|
||||
return this.request('GET', this.indexPattern.getIndexForToday() + url).then((results: any) => {
|
||||
results.data.$$config = results.config;
|
||||
return results.data;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private post(url, data) {
|
||||
private post(url: string, data: any) {
|
||||
return this.request('POST', url, data)
|
||||
.then(results => {
|
||||
.then((results: any) => {
|
||||
results.data.$$config = results.config;
|
||||
return results.data;
|
||||
})
|
||||
.catch(err => {
|
||||
.catch((err: any) => {
|
||||
if (err.data && err.data.error) {
|
||||
throw {
|
||||
message: 'Elasticsearch error: ' + err.data.error.reason,
|
||||
@@ -116,14 +116,14 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
});
|
||||
}
|
||||
|
||||
annotationQuery(options) {
|
||||
annotationQuery(options: any) {
|
||||
const annotation = options.annotation;
|
||||
const timeField = annotation.timeField || '@timestamp';
|
||||
const queryString = annotation.query || '*';
|
||||
const tagsField = annotation.tagsField || 'tags';
|
||||
const textField = annotation.textField || null;
|
||||
|
||||
const range = {};
|
||||
const range: any = {};
|
||||
range[timeField] = {
|
||||
from: options.range.from.valueOf(),
|
||||
to: options.range.to.valueOf(),
|
||||
@@ -144,8 +144,8 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
},
|
||||
};
|
||||
|
||||
const data = {
|
||||
query: query,
|
||||
const data: any = {
|
||||
query,
|
||||
size: 10000,
|
||||
};
|
||||
|
||||
@@ -168,11 +168,11 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
|
||||
const payload = angular.toJson(header) + '\n' + angular.toJson(data) + '\n';
|
||||
|
||||
return this.post('_msearch', payload).then(res => {
|
||||
return this.post('_msearch', payload).then((res: any) => {
|
||||
const list = [];
|
||||
const hits = res.responses[0].hits.hits;
|
||||
|
||||
const getFieldFromSource = (source, fieldName) => {
|
||||
const getFieldFromSource = (source: any, fieldName: any) => {
|
||||
if (!fieldName) {
|
||||
return;
|
||||
}
|
||||
@@ -229,7 +229,7 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
testDatasource() {
|
||||
// validate that the index exist and has date field
|
||||
return this.getFields({ type: 'date' }).then(
|
||||
dateFields => {
|
||||
(dateFields: any) => {
|
||||
const timeField: any = _.find(dateFields, { text: this.timeField });
|
||||
if (!timeField) {
|
||||
return {
|
||||
@@ -239,7 +239,7 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
}
|
||||
return { status: 'success', message: 'Index OK. Time field name OK.' };
|
||||
},
|
||||
err => {
|
||||
(err: any) => {
|
||||
console.log(err);
|
||||
if (err.data && err.data.error) {
|
||||
let message = angular.toJson(err.data.error);
|
||||
@@ -254,7 +254,7 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
);
|
||||
}
|
||||
|
||||
getQueryHeader(searchType, timeFrom, timeTo) {
|
||||
getQueryHeader(searchType: any, timeFrom: any, timeTo: any) {
|
||||
const queryHeader: any = {
|
||||
search_type: searchType,
|
||||
ignore_unavailable: true,
|
||||
@@ -319,7 +319,7 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
|
||||
const url = this.getMultiSearchUrl();
|
||||
|
||||
return this.post(url, payload).then(res => {
|
||||
return this.post(url, payload).then((res: any) => {
|
||||
const er = new ElasticResponse(sentTargets, res);
|
||||
if (sentTargets.some(target => target.isLogsQuery)) {
|
||||
return er.getLogs(this.logMessageField, this.logLevelField);
|
||||
@@ -329,10 +329,10 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
});
|
||||
}
|
||||
|
||||
getFields(query) {
|
||||
getFields(query: any) {
|
||||
const configuredEsVersion = this.esVersion;
|
||||
return this.get('/_mapping').then(result => {
|
||||
const typeMap = {
|
||||
return this.get('/_mapping').then((result: any) => {
|
||||
const typeMap: any = {
|
||||
float: 'number',
|
||||
double: 'number',
|
||||
integer: 'number',
|
||||
@@ -344,7 +344,7 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
nested: 'nested',
|
||||
};
|
||||
|
||||
function shouldAddField(obj, key, query) {
|
||||
function shouldAddField(obj: any, key: any, query: any) {
|
||||
if (key[0] === '_') {
|
||||
return false;
|
||||
}
|
||||
@@ -358,10 +358,10 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
}
|
||||
|
||||
// Store subfield names: [system, process, cpu, total] -> system.process.cpu.total
|
||||
const fieldNameParts = [];
|
||||
const fields = {};
|
||||
const fieldNameParts: any = [];
|
||||
const fields: any = {};
|
||||
|
||||
function getFieldsRecursively(obj) {
|
||||
function getFieldsRecursively(obj: any) {
|
||||
for (const key in obj) {
|
||||
const subObj = obj[key];
|
||||
|
||||
@@ -415,7 +415,7 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
});
|
||||
}
|
||||
|
||||
getTerms(queryDef) {
|
||||
getTerms(queryDef: any) {
|
||||
const range = this.timeSrv.timeRange();
|
||||
const searchType = this.esVersion >= 5 ? 'query_then_fetch' : 'count';
|
||||
const header = this.getQueryHeader(searchType, range.from, range.to);
|
||||
@@ -427,7 +427,7 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
|
||||
const url = this.getMultiSearchUrl();
|
||||
|
||||
return this.post(url, esQuery).then(res => {
|
||||
return this.post(url, esQuery).then((res: any) => {
|
||||
if (!res.responses[0].aggregations) {
|
||||
return [];
|
||||
}
|
||||
@@ -450,7 +450,7 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
return '_msearch';
|
||||
}
|
||||
|
||||
metricFindQuery(query) {
|
||||
metricFindQuery(query: any) {
|
||||
query = angular.fromJson(query);
|
||||
if (!query) {
|
||||
return this.$q.when([]);
|
||||
@@ -472,11 +472,11 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
return this.getFields({});
|
||||
}
|
||||
|
||||
getTagValues(options) {
|
||||
getTagValues(options: any) {
|
||||
return this.getTerms({ field: options.key, query: '*' });
|
||||
}
|
||||
|
||||
targetContainsTemplate(target) {
|
||||
targetContainsTemplate(target: any) {
|
||||
if (this.templateSrv.variableExists(target.query) || this.templateSrv.variableExists(target.alias)) {
|
||||
return true;
|
||||
}
|
||||
@@ -500,7 +500,7 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
return false;
|
||||
}
|
||||
|
||||
private isPrimitive(obj) {
|
||||
private isPrimitive(obj: any) {
|
||||
if (obj === null || obj === undefined) {
|
||||
return true;
|
||||
}
|
||||
@@ -511,7 +511,7 @@ export class ElasticDatasource extends DataSourceApi<ElasticsearchQuery, Elastic
|
||||
return false;
|
||||
}
|
||||
|
||||
private objectContainsTemplate(obj) {
|
||||
private objectContainsTemplate(obj: any) {
|
||||
if (!obj) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -4,14 +4,15 @@ import * as queryDef from './query_def';
|
||||
import TableModel from 'app/core/table_model';
|
||||
import { DataFrame, toDataFrame, FieldType } from '@grafana/data';
|
||||
import { DataQueryResponse } from '@grafana/ui';
|
||||
import { ElasticsearchAggregation } from './types';
|
||||
|
||||
export class ElasticResponse {
|
||||
constructor(private targets, private response) {
|
||||
constructor(private targets: any, private response: any) {
|
||||
this.targets = targets;
|
||||
this.response = response;
|
||||
}
|
||||
|
||||
processMetrics(esAgg, target, seriesList, props) {
|
||||
processMetrics(esAgg: any, target: any, seriesList: any, props: any) {
|
||||
let metric, y, i, newSeries, bucket, value;
|
||||
|
||||
for (y = 0; y < target.metrics.length; y++) {
|
||||
@@ -113,7 +114,7 @@ export class ElasticResponse {
|
||||
}
|
||||
}
|
||||
|
||||
processAggregationDocs(esAgg, aggDef, target, table, props) {
|
||||
processAggregationDocs(esAgg: any, aggDef: ElasticsearchAggregation, target: any, table: any, props: any) {
|
||||
// add columns
|
||||
if (table.columns.length === 0) {
|
||||
for (const propKey of _.keys(props)) {
|
||||
@@ -123,7 +124,7 @@ export class ElasticResponse {
|
||||
}
|
||||
|
||||
// helper func to add values to value array
|
||||
const addMetricValue = (values, metricName, value) => {
|
||||
const addMetricValue = (values: any[], metricName: string, value: any) => {
|
||||
table.addColumn({ text: metricName });
|
||||
values.push(value);
|
||||
};
|
||||
@@ -188,8 +189,8 @@ export class ElasticResponse {
|
||||
|
||||
// This is quite complex
|
||||
// need to recurse down the nested buckets to build series
|
||||
processBuckets(aggs, target, seriesList, table, props, depth) {
|
||||
let bucket, aggDef, esAgg, aggId;
|
||||
processBuckets(aggs: any, target: any, seriesList: any, table: any, props: any, depth: any) {
|
||||
let bucket, aggDef: any, esAgg, aggId;
|
||||
const maxDepth = target.bucketAggs.length - 1;
|
||||
|
||||
for (aggId in aggs) {
|
||||
@@ -224,7 +225,7 @@ export class ElasticResponse {
|
||||
}
|
||||
}
|
||||
|
||||
private getMetricName(metric) {
|
||||
private getMetricName(metric: any) {
|
||||
let metricDef: any = _.find(queryDef.metricAggTypes, { value: metric });
|
||||
if (!metricDef) {
|
||||
metricDef = _.find(queryDef.extendedStats, { value: metric });
|
||||
@@ -233,13 +234,13 @@ export class ElasticResponse {
|
||||
return metricDef ? metricDef.text : metric;
|
||||
}
|
||||
|
||||
private getSeriesName(series, target, metricTypeCount) {
|
||||
private getSeriesName(series: any, target: any, metricTypeCount: any) {
|
||||
let metricName = this.getMetricName(series.metric);
|
||||
|
||||
if (target.alias) {
|
||||
const regex = /\{\{([\s\S]+?)\}\}/g;
|
||||
|
||||
return target.alias.replace(regex, (match, g1, g2) => {
|
||||
return target.alias.replace(regex, (match: any, g1: any, g2: any) => {
|
||||
const group = g1 || g2;
|
||||
|
||||
if (group.indexOf('term ') === 0) {
|
||||
@@ -303,7 +304,7 @@ export class ElasticResponse {
|
||||
return name.trim() + ' ' + metricName;
|
||||
}
|
||||
|
||||
nameSeries(seriesList, target) {
|
||||
nameSeries(seriesList: any, target: any) {
|
||||
const metricTypeCount = _.uniq(_.map(seriesList, 'metric')).length;
|
||||
|
||||
for (let i = 0; i < seriesList.length; i++) {
|
||||
@@ -312,17 +313,17 @@ export class ElasticResponse {
|
||||
}
|
||||
}
|
||||
|
||||
processHits(hits, seriesList) {
|
||||
processHits(hits: { total: { value: any }; hits: any[] }, seriesList: any[]) {
|
||||
const hitsTotal = typeof hits.total === 'number' ? hits.total : hits.total.value; // <- Works with Elasticsearch 7.0+
|
||||
|
||||
const series = {
|
||||
const series: any = {
|
||||
target: 'docs',
|
||||
type: 'docs',
|
||||
datapoints: [],
|
||||
total: hitsTotal,
|
||||
filterable: true,
|
||||
};
|
||||
let propName, hit, doc, i;
|
||||
let propName, hit, doc: any, i;
|
||||
|
||||
for (i = 0; i < hits.hits.length; i++) {
|
||||
hit = hits.hits[i];
|
||||
@@ -347,7 +348,7 @@ export class ElasticResponse {
|
||||
seriesList.push(series);
|
||||
}
|
||||
|
||||
trimDatapoints(aggregations, target) {
|
||||
trimDatapoints(aggregations: any, target: any) {
|
||||
const histogram: any = _.find(target.bucketAggs, { type: 'date_histogram' });
|
||||
|
||||
const shouldDropFirstAndLast = histogram && histogram.settings && histogram.settings.trimEdges;
|
||||
@@ -362,7 +363,7 @@ export class ElasticResponse {
|
||||
}
|
||||
}
|
||||
|
||||
getErrorFromElasticResponse(response, err) {
|
||||
getErrorFromElasticResponse(response: any, err: any) {
|
||||
const result: any = {};
|
||||
result.data = JSON.stringify(err, null, 4);
|
||||
if (err.root_cause && err.root_cause.length > 0 && err.root_cause[0].reason) {
|
||||
@@ -394,7 +395,7 @@ export class ElasticResponse {
|
||||
if (response.aggregations) {
|
||||
const aggregations = response.aggregations;
|
||||
const target = this.targets[i];
|
||||
const tmpSeriesList = [];
|
||||
const tmpSeriesList: any[] = [];
|
||||
const table = new TableModel();
|
||||
|
||||
this.processBuckets(aggregations, target, tmpSeriesList, table, {}, 0);
|
||||
@@ -426,7 +427,7 @@ export class ElasticResponse {
|
||||
|
||||
const hits = response.hits;
|
||||
let propNames: string[] = [];
|
||||
let propName, hit, doc, i;
|
||||
let propName, hit, doc: any, i;
|
||||
|
||||
for (i = 0; i < hits.hits.length; i++) {
|
||||
hit = hits.hits[i];
|
||||
@@ -534,7 +535,7 @@ export class ElasticResponse {
|
||||
if (response.aggregations) {
|
||||
const aggregations = response.aggregations;
|
||||
const target = this.targets[n];
|
||||
const tmpSeriesList = [];
|
||||
const tmpSeriesList: any[] = [];
|
||||
const table = new TableModel();
|
||||
|
||||
this.processBuckets(aggregations, target, tmpSeriesList, table, {}, 0);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { toUtc, dateTime } from '@grafana/data';
|
||||
|
||||
const intervalMap = {
|
||||
const intervalMap: any = {
|
||||
Hourly: { startOf: 'hour', amount: 'hours' },
|
||||
Daily: { startOf: 'day', amount: 'days' },
|
||||
Weekly: { startOf: 'isoWeek', amount: 'weeks' },
|
||||
@@ -9,7 +9,7 @@ const intervalMap = {
|
||||
};
|
||||
|
||||
export class IndexPattern {
|
||||
constructor(private pattern, private interval: string | null) {}
|
||||
constructor(private pattern: any, private interval: string | null) {}
|
||||
|
||||
getIndexForToday() {
|
||||
if (this.interval) {
|
||||
@@ -19,7 +19,7 @@ export class IndexPattern {
|
||||
}
|
||||
}
|
||||
|
||||
getIndexList(from, to) {
|
||||
getIndexList(from: any, to: any) {
|
||||
if (!this.interval) {
|
||||
return this.pattern;
|
||||
}
|
||||
|
||||
@@ -2,10 +2,11 @@ import coreModule from 'app/core/core_module';
|
||||
import _ from 'lodash';
|
||||
import * as queryDef from './query_def';
|
||||
import { ElasticsearchAggregation } from './types';
|
||||
import { IQService } from 'angular';
|
||||
|
||||
export class ElasticMetricAggCtrl {
|
||||
/** @ngInject */
|
||||
constructor($scope, uiSegmentSrv, $q, $rootScope) {
|
||||
constructor($scope: any, uiSegmentSrv: any, $q: IQService, $rootScope: any) {
|
||||
const metricAggs: ElasticsearchAggregation[] = $scope.target.metrics;
|
||||
$scope.metricAggTypes = queryDef.getMetricAggTypes($scope.esVersion);
|
||||
$scope.extendedStats = queryDef.extendedStats;
|
||||
|
||||
@@ -14,7 +14,7 @@ export function elasticPipelineVariables() {
|
||||
};
|
||||
}
|
||||
|
||||
const newVariable = index => {
|
||||
const newVariable = (index: any) => {
|
||||
return {
|
||||
name: 'var' + index,
|
||||
pipelineAgg: 'select metric',
|
||||
@@ -23,7 +23,7 @@ const newVariable = index => {
|
||||
|
||||
export class ElasticPipelineVariablesCtrl {
|
||||
/** @ngInject */
|
||||
constructor($scope) {
|
||||
constructor($scope: any) {
|
||||
$scope.variables = $scope.variables || [newVariable(1)];
|
||||
|
||||
$scope.onChangeInternal = () => {
|
||||
@@ -35,7 +35,7 @@ export class ElasticPipelineVariablesCtrl {
|
||||
$scope.onChange();
|
||||
};
|
||||
|
||||
$scope.remove = index => {
|
||||
$scope.remove = (index: number) => {
|
||||
$scope.variables.splice(index, 1);
|
||||
$scope.onChange();
|
||||
};
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
import * as queryDef from './query_def';
|
||||
import { ElasticsearchAggregation } from './types';
|
||||
|
||||
export class ElasticQueryBuilder {
|
||||
timeField: string;
|
||||
esVersion: number;
|
||||
|
||||
constructor(options) {
|
||||
constructor(options: any) {
|
||||
this.timeField = options.timeField;
|
||||
this.esVersion = options.esVersion;
|
||||
}
|
||||
|
||||
getRangeFilter() {
|
||||
const filter = {};
|
||||
const filter: any = {};
|
||||
filter[this.timeField] = {
|
||||
gte: '$timeFrom',
|
||||
lte: '$timeTo',
|
||||
@@ -20,7 +21,7 @@ export class ElasticQueryBuilder {
|
||||
return filter;
|
||||
}
|
||||
|
||||
buildTermsAgg(aggDef, queryNode, target) {
|
||||
buildTermsAgg(aggDef: ElasticsearchAggregation, queryNode: { terms?: any; aggs?: any }, target: { metrics: any[] }) {
|
||||
let metricRef, metric, y;
|
||||
queryNode.terms = { field: aggDef.field };
|
||||
|
||||
@@ -63,7 +64,7 @@ export class ElasticQueryBuilder {
|
||||
return queryNode;
|
||||
}
|
||||
|
||||
getDateHistogramAgg(aggDef) {
|
||||
getDateHistogramAgg(aggDef: ElasticsearchAggregation) {
|
||||
const esAgg: any = {};
|
||||
const settings = aggDef.settings || {};
|
||||
esAgg.interval = settings.interval;
|
||||
@@ -87,7 +88,7 @@ export class ElasticQueryBuilder {
|
||||
return esAgg;
|
||||
}
|
||||
|
||||
getHistogramAgg(aggDef) {
|
||||
getHistogramAgg(aggDef: ElasticsearchAggregation) {
|
||||
const esAgg: any = {};
|
||||
const settings = aggDef.settings || {};
|
||||
esAgg.interval = settings.interval;
|
||||
@@ -100,8 +101,8 @@ export class ElasticQueryBuilder {
|
||||
return esAgg;
|
||||
}
|
||||
|
||||
getFiltersAgg(aggDef) {
|
||||
const filterObj = {};
|
||||
getFiltersAgg(aggDef: ElasticsearchAggregation) {
|
||||
const filterObj: any = {};
|
||||
for (let i = 0; i < aggDef.settings.filters.length; i++) {
|
||||
const query = aggDef.settings.filters[i].query;
|
||||
let label = aggDef.settings.filters[i].label;
|
||||
@@ -117,7 +118,7 @@ export class ElasticQueryBuilder {
|
||||
return filterObj;
|
||||
}
|
||||
|
||||
documentQuery(query, size) {
|
||||
documentQuery(query: any, size: number) {
|
||||
query.size = size;
|
||||
query.sort = {};
|
||||
query.sort[this.timeField] = { order: 'desc', unmapped_type: 'boolean' };
|
||||
@@ -136,12 +137,12 @@ export class ElasticQueryBuilder {
|
||||
return query;
|
||||
}
|
||||
|
||||
addAdhocFilters(query, adhocFilters) {
|
||||
addAdhocFilters(query: any, adhocFilters: any) {
|
||||
if (!adhocFilters) {
|
||||
return;
|
||||
}
|
||||
|
||||
let i, filter, condition, queryCondition;
|
||||
let i, filter, condition: any, queryCondition: any;
|
||||
|
||||
for (i = 0; i < adhocFilters.length; i++) {
|
||||
filter = adhocFilters[i];
|
||||
@@ -183,7 +184,7 @@ export class ElasticQueryBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
build(target, adhocFilters?, queryString?) {
|
||||
build(target: any, adhocFilters?: any, queryString?: string) {
|
||||
// make sure query has defaults;
|
||||
target.metrics = target.metrics || [queryDef.defaultMetricAgg()];
|
||||
target.bucketAggs = target.bucketAggs || [queryDef.defaultBucketAgg()];
|
||||
@@ -224,7 +225,7 @@ export class ElasticQueryBuilder {
|
||||
|
||||
for (i = 0; i < target.bucketAggs.length; i++) {
|
||||
const aggDef = target.bucketAggs[i];
|
||||
const esAgg = {};
|
||||
const esAgg: any = {};
|
||||
|
||||
switch (aggDef.type) {
|
||||
case 'date_histogram': {
|
||||
@@ -265,8 +266,8 @@ export class ElasticQueryBuilder {
|
||||
continue;
|
||||
}
|
||||
|
||||
const aggField = {};
|
||||
let metricAgg = null;
|
||||
const aggField: any = {};
|
||||
let metricAgg: any = null;
|
||||
|
||||
if (queryDef.isPipelineAgg(metric.type)) {
|
||||
if (queryDef.isPipelineAggWithMultipleBucketPaths(metric.type)) {
|
||||
@@ -323,7 +324,7 @@ export class ElasticQueryBuilder {
|
||||
return query;
|
||||
}
|
||||
|
||||
getTermsQuery(queryDef) {
|
||||
getTermsQuery(queryDef: any) {
|
||||
const query: any = {
|
||||
size: 0,
|
||||
query: {
|
||||
@@ -368,7 +369,7 @@ export class ElasticQueryBuilder {
|
||||
return query;
|
||||
}
|
||||
|
||||
getLogsQuery(target, querystring) {
|
||||
getLogsQuery(target: any, querystring: string) {
|
||||
let query: any = {
|
||||
size: 0,
|
||||
query: {
|
||||
|
||||
@@ -2,7 +2,7 @@ import './bucket_agg';
|
||||
import './metric_agg';
|
||||
import './pipeline_variables';
|
||||
|
||||
import angular from 'angular';
|
||||
import angular, { auto } from 'angular';
|
||||
import _ from 'lodash';
|
||||
import * as queryDef from './query_def';
|
||||
import { QueryCtrl } from 'app/plugins/sdk';
|
||||
@@ -15,7 +15,7 @@ export class ElasticQueryCtrl extends QueryCtrl {
|
||||
rawQueryOld: string;
|
||||
|
||||
/** @ngInject */
|
||||
constructor($scope, $injector, private $rootScope, private uiSegmentSrv) {
|
||||
constructor($scope: any, $injector: auto.IInjectorService, private $rootScope: any, private uiSegmentSrv: any) {
|
||||
super($scope, $injector);
|
||||
|
||||
this.esVersion = this.datasource.esVersion;
|
||||
@@ -35,7 +35,7 @@ export class ElasticQueryCtrl extends QueryCtrl {
|
||||
this.queryUpdated();
|
||||
}
|
||||
|
||||
getFields(type) {
|
||||
getFields(type: any) {
|
||||
const jsonStr = angular.toJson({ find: 'fields', type: type });
|
||||
return this.datasource
|
||||
.metricFindQuery(jsonStr)
|
||||
@@ -98,7 +98,7 @@ export class ElasticQueryCtrl extends QueryCtrl {
|
||||
return text;
|
||||
}
|
||||
|
||||
handleQueryError(err) {
|
||||
handleQueryError(err: any): any[] {
|
||||
this.error = err.message || 'Failed to issue metric query';
|
||||
return [];
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ export const movingAvgModelOptions = [
|
||||
{ text: 'Holt Winters', value: 'holt_winters' },
|
||||
];
|
||||
|
||||
export const pipelineOptions = {
|
||||
export const pipelineOptions: any = {
|
||||
moving_avg: [
|
||||
{ text: 'window', default: 5 },
|
||||
{ text: 'model', default: 'simple' },
|
||||
@@ -139,7 +139,7 @@ export const pipelineOptions = {
|
||||
bucket_script: [],
|
||||
};
|
||||
|
||||
export const movingAvgModelSettings = {
|
||||
export const movingAvgModelSettings: any = {
|
||||
simple: [],
|
||||
linear: [],
|
||||
ewma: [{ text: 'Alpha', value: 'alpha', default: undefined }],
|
||||
@@ -153,7 +153,7 @@ export const movingAvgModelSettings = {
|
||||
],
|
||||
};
|
||||
|
||||
export function getMetricAggTypes(esVersion) {
|
||||
export function getMetricAggTypes(esVersion: any) {
|
||||
return _.filter(metricAggTypes, f => {
|
||||
if (f.minVersion) {
|
||||
return f.minVersion <= esVersion;
|
||||
@@ -163,7 +163,7 @@ export function getMetricAggTypes(esVersion) {
|
||||
});
|
||||
}
|
||||
|
||||
export function getPipelineOptions(metric) {
|
||||
export function getPipelineOptions(metric: any) {
|
||||
if (!isPipelineAgg(metric.type)) {
|
||||
return [];
|
||||
}
|
||||
@@ -171,7 +171,7 @@ export function getPipelineOptions(metric) {
|
||||
return pipelineOptions[metric.type];
|
||||
}
|
||||
|
||||
export function isPipelineAgg(metricType) {
|
||||
export function isPipelineAgg(metricType: any) {
|
||||
if (metricType) {
|
||||
const po = pipelineOptions[metricType];
|
||||
return po !== null && po !== undefined;
|
||||
@@ -180,7 +180,7 @@ export function isPipelineAgg(metricType) {
|
||||
return false;
|
||||
}
|
||||
|
||||
export function isPipelineAggWithMultipleBucketPaths(metricType) {
|
||||
export function isPipelineAggWithMultipleBucketPaths(metricType: any) {
|
||||
if (metricType) {
|
||||
return metricAggTypes.find(t => t.value === metricType && t.supportsMultipleBucketPaths) !== undefined;
|
||||
}
|
||||
@@ -188,8 +188,8 @@ export function isPipelineAggWithMultipleBucketPaths(metricType) {
|
||||
return false;
|
||||
}
|
||||
|
||||
export function getPipelineAggOptions(targets) {
|
||||
const result = [];
|
||||
export function getPipelineAggOptions(targets: any) {
|
||||
const result: any[] = [];
|
||||
_.each(targets.metrics, metric => {
|
||||
if (!isPipelineAgg(metric.type)) {
|
||||
result.push({ text: describeMetric(metric), value: metric.id });
|
||||
@@ -199,8 +199,8 @@ export function getPipelineAggOptions(targets) {
|
||||
return result;
|
||||
}
|
||||
|
||||
export function getMovingAvgSettings(model, filtered) {
|
||||
const filteredResult = [];
|
||||
export function getMovingAvgSettings(model: any, filtered: boolean) {
|
||||
const filteredResult: any[] = [];
|
||||
if (filtered) {
|
||||
_.each(movingAvgModelSettings[model], setting => {
|
||||
if (!setting.isCheckbox) {
|
||||
@@ -212,8 +212,8 @@ export function getMovingAvgSettings(model, filtered) {
|
||||
return movingAvgModelSettings[model];
|
||||
}
|
||||
|
||||
export function getOrderByOptions(target) {
|
||||
const metricRefs = [];
|
||||
export function getOrderByOptions(target: any) {
|
||||
const metricRefs: any[] = [];
|
||||
_.each(target.metrics, metric => {
|
||||
if (metric.type !== 'count') {
|
||||
metricRefs.push({ text: describeMetric(metric), value: metric.id });
|
||||
@@ -223,12 +223,12 @@ export function getOrderByOptions(target) {
|
||||
return orderByOptions.concat(metricRefs);
|
||||
}
|
||||
|
||||
export function describeOrder(order) {
|
||||
export function describeOrder(order: string) {
|
||||
const def: any = _.find(orderOptions, { value: order });
|
||||
return def.text;
|
||||
}
|
||||
|
||||
export function describeMetric(metric) {
|
||||
export function describeMetric(metric: { type: string; field: string }) {
|
||||
const def: any = _.find(metricAggTypes, { value: metric.type });
|
||||
if (!def.requiresField && !isPipelineAgg(metric.type)) {
|
||||
return def.text;
|
||||
@@ -236,7 +236,7 @@ export function describeMetric(metric) {
|
||||
return def.text + ' ' + metric.field;
|
||||
}
|
||||
|
||||
export function describeOrderBy(orderBy, target) {
|
||||
export function describeOrderBy(orderBy: any, target: any) {
|
||||
const def: any = _.find(orderByOptions, { value: orderBy });
|
||||
if (def) {
|
||||
return def.text;
|
||||
|
||||
@@ -69,7 +69,7 @@ describe('ElasticDatasource', function(this: any) {
|
||||
});
|
||||
|
||||
it('should translate index pattern to current day', () => {
|
||||
let requestOptions;
|
||||
let requestOptions: any;
|
||||
ctx.backendSrv.datasourceRequest = jest.fn(options => {
|
||||
requestOptions = options;
|
||||
return Promise.resolve({ data: {} });
|
||||
@@ -83,7 +83,7 @@ describe('ElasticDatasource', function(this: any) {
|
||||
});
|
||||
|
||||
describe('When issuing metric query with interval pattern', () => {
|
||||
let requestOptions, parts, header, query, result;
|
||||
let requestOptions: any, parts: any, header: any, query: any, result: any;
|
||||
|
||||
beforeEach(async () => {
|
||||
createDatasource({
|
||||
@@ -154,7 +154,7 @@ describe('ElasticDatasource', function(this: any) {
|
||||
});
|
||||
|
||||
describe('When issuing logs query with interval pattern', () => {
|
||||
let query, queryBuilderSpy;
|
||||
let query, queryBuilderSpy: any;
|
||||
|
||||
beforeEach(async () => {
|
||||
createDatasource({
|
||||
@@ -249,7 +249,7 @@ describe('ElasticDatasource', function(this: any) {
|
||||
});
|
||||
|
||||
describe('When issuing document query', () => {
|
||||
let requestOptions, parts, header;
|
||||
let requestOptions: any, parts: any, header: any;
|
||||
|
||||
beforeEach(() => {
|
||||
createDatasource({
|
||||
@@ -539,7 +539,7 @@ describe('ElasticDatasource', function(this: any) {
|
||||
});
|
||||
|
||||
describe('When issuing aggregation query on es5.x', () => {
|
||||
let requestOptions, parts, header;
|
||||
let requestOptions: any, parts: any, header: any;
|
||||
|
||||
beforeEach(() => {
|
||||
createDatasource({
|
||||
@@ -582,7 +582,7 @@ describe('ElasticDatasource', function(this: any) {
|
||||
});
|
||||
|
||||
describe('When issuing metricFind query on es5.x', () => {
|
||||
let requestOptions, parts, header, body, results;
|
||||
let requestOptions: any, parts, header: any, body: any, results: any;
|
||||
|
||||
beforeEach(() => {
|
||||
createDatasource({
|
||||
@@ -615,7 +615,7 @@ describe('ElasticDatasource', function(this: any) {
|
||||
});
|
||||
});
|
||||
|
||||
ctx.ds.metricFindQuery('{"find": "terms", "field": "test"}').then(res => {
|
||||
ctx.ds.metricFindQuery('{"find": "terms", "field": "test"}').then((res: any) => {
|
||||
results = res;
|
||||
});
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@ import { ElasticResponse } from '../elastic_response';
|
||||
|
||||
describe('ElasticResponse', () => {
|
||||
let targets;
|
||||
let response;
|
||||
let result;
|
||||
let response: any;
|
||||
let result: any;
|
||||
|
||||
describe('simple query and count', () => {
|
||||
beforeEach(() => {
|
||||
@@ -48,7 +48,7 @@ describe('ElasticResponse', () => {
|
||||
});
|
||||
|
||||
describe('simple query count & avg aggregation', () => {
|
||||
let result;
|
||||
let result: any;
|
||||
|
||||
beforeEach(() => {
|
||||
targets = [
|
||||
@@ -97,7 +97,7 @@ describe('ElasticResponse', () => {
|
||||
});
|
||||
|
||||
describe('single group by query one metric', () => {
|
||||
let result;
|
||||
let result: any;
|
||||
|
||||
beforeEach(() => {
|
||||
targets = [
|
||||
@@ -149,7 +149,7 @@ describe('ElasticResponse', () => {
|
||||
});
|
||||
|
||||
describe('single group by query two metrics', () => {
|
||||
let result;
|
||||
let result: any;
|
||||
|
||||
beforeEach(() => {
|
||||
targets = [
|
||||
@@ -209,7 +209,7 @@ describe('ElasticResponse', () => {
|
||||
});
|
||||
|
||||
describe('with percentiles ', () => {
|
||||
let result;
|
||||
let result: any;
|
||||
|
||||
beforeEach(() => {
|
||||
targets = [
|
||||
@@ -257,7 +257,7 @@ describe('ElasticResponse', () => {
|
||||
});
|
||||
|
||||
describe('with extended_stats', () => {
|
||||
let result;
|
||||
let result: any;
|
||||
|
||||
beforeEach(() => {
|
||||
targets = [
|
||||
@@ -333,7 +333,7 @@ describe('ElasticResponse', () => {
|
||||
});
|
||||
|
||||
describe('single group by with alias pattern', () => {
|
||||
let result;
|
||||
let result: any;
|
||||
|
||||
beforeEach(() => {
|
||||
targets = [
|
||||
@@ -394,7 +394,7 @@ describe('ElasticResponse', () => {
|
||||
});
|
||||
|
||||
describe('histogram response', () => {
|
||||
let result;
|
||||
let result: any;
|
||||
|
||||
beforeEach(() => {
|
||||
targets = [
|
||||
@@ -426,7 +426,7 @@ describe('ElasticResponse', () => {
|
||||
});
|
||||
|
||||
describe('with two filters agg', () => {
|
||||
let result;
|
||||
let result: any;
|
||||
|
||||
beforeEach(() => {
|
||||
targets = [
|
||||
@@ -583,7 +583,7 @@ describe('ElasticResponse', () => {
|
||||
});
|
||||
|
||||
describe('No group by time with percentiles ', () => {
|
||||
let result;
|
||||
let result: any;
|
||||
|
||||
beforeEach(() => {
|
||||
targets = [
|
||||
@@ -720,7 +720,7 @@ describe('ElasticResponse', () => {
|
||||
});
|
||||
|
||||
describe('with bucket_script ', () => {
|
||||
let result;
|
||||
let result: any;
|
||||
|
||||
beforeEach(() => {
|
||||
targets = [
|
||||
@@ -861,7 +861,7 @@ describe('ElasticResponse', () => {
|
||||
expect(result.data[0].fields).toContainEqual({ name: '@timestamp', type: 'time' });
|
||||
expect(result.data[0].fields).toContainEqual({ name: 'host', type: 'string' });
|
||||
expect(result.data[0].fields).toContainEqual({ name: 'message', type: 'string' });
|
||||
result.data[0].rows.forEach((row, i) => {
|
||||
result.data[0].rows.forEach((row: any, i: number) => {
|
||||
expect(row).toContain(response.responses[0].hits.hits[i]._id);
|
||||
expect(row).toContain(response.responses[0].hits.hits[i]._type);
|
||||
expect(row).toContain(response.responses[0].hits.hits[i]._index);
|
||||
@@ -869,7 +869,7 @@ describe('ElasticResponse', () => {
|
||||
});
|
||||
|
||||
expect(result.data[1]).toHaveProperty('name', 'Count');
|
||||
response.responses[0].aggregations['2'].buckets.forEach(bucket => {
|
||||
response.responses[0].aggregations['2'].buckets.forEach((bucket: any) => {
|
||||
expect(result.data[1].rows).toContainEqual([bucket.doc_count, bucket.key]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { ElasticQueryBuilder } from '../query_builder';
|
||||
|
||||
describe('ElasticQueryBuilder', () => {
|
||||
let builder;
|
||||
let builder: any;
|
||||
|
||||
beforeEach(() => {
|
||||
builder = new ElasticQueryBuilder({ timeField: '@timestamp' });
|
||||
@@ -103,6 +103,7 @@ describe('ElasticQueryBuilder', () => {
|
||||
],
|
||||
},
|
||||
100,
|
||||
// @ts-ignore
|
||||
1000
|
||||
);
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { auto } from 'angular';
|
||||
|
||||
export class QueryCtrl {
|
||||
target: any;
|
||||
datasource: any;
|
||||
@@ -6,7 +8,7 @@ export class QueryCtrl {
|
||||
hasRawMode: boolean;
|
||||
error: string;
|
||||
|
||||
constructor(public $scope, _$injector) {
|
||||
constructor(public $scope: any, _$injector: auto.IInjectorService) {
|
||||
this.panelCtrl = this.panelCtrl || { panel: {} };
|
||||
this.target = this.target || { target: '' };
|
||||
this.panel = this.panelCtrl.panel;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { TemplateSrv } from 'app/features/templating/template_srv';
|
||||
|
||||
export class AzureMonitorAnnotationsQueryCtrl {
|
||||
static templateUrl = 'partials/annotations.editor.html';
|
||||
datasource: any;
|
||||
@@ -9,7 +11,7 @@ export class AzureMonitorAnnotationsQueryCtrl {
|
||||
'<your table>\n| where $__timeFilter() \n| project TimeGenerated, Text=YourTitleColumn, Tags="tag1,tag2"';
|
||||
|
||||
/** @ngInject */
|
||||
constructor(private templateSrv) {
|
||||
constructor(private templateSrv: TemplateSrv) {
|
||||
this.annotation.queryType = this.annotation.queryType || 'Azure Log Analytics';
|
||||
this.annotation.rawQuery = this.annotation.rawQuery || this.defaultQuery;
|
||||
this.initDropdowns();
|
||||
@@ -25,7 +27,7 @@ export class AzureMonitorAnnotationsQueryCtrl {
|
||||
return;
|
||||
}
|
||||
|
||||
return this.datasource.azureMonitorDatasource.getSubscriptions().then(subs => {
|
||||
return this.datasource.azureMonitorDatasource.getSubscriptions().then((subs: any[]) => {
|
||||
this.subscriptions = subs;
|
||||
|
||||
if (!this.annotation.subscription && this.annotation.queryType === 'Azure Log Analytics') {
|
||||
@@ -45,7 +47,7 @@ export class AzureMonitorAnnotationsQueryCtrl {
|
||||
|
||||
return this.datasource
|
||||
.getAzureLogAnalyticsWorkspaces(this.annotation.subscription)
|
||||
.then(list => {
|
||||
.then((list: any[]) => {
|
||||
this.workspaces = list;
|
||||
if (list.length > 0 && !this.annotation.workspace) {
|
||||
this.annotation.workspace = list[0].value;
|
||||
@@ -72,6 +74,6 @@ export class AzureMonitorAnnotationsQueryCtrl {
|
||||
};
|
||||
|
||||
get templateVariables() {
|
||||
return this.templateSrv.variables.map(t => '$' + t.name);
|
||||
return this.templateSrv.variables.map((t: any) => '$' + t.name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import AzureMonitorDatasource from '../datasource';
|
||||
// @ts-ignore
|
||||
import Q from 'q';
|
||||
import { TemplateSrv } from 'app/features/templating/template_srv';
|
||||
import { toUtc } from '@grafana/data';
|
||||
@@ -46,7 +47,7 @@ describe('AppInsightsDatasource', () => {
|
||||
});
|
||||
|
||||
it('should return success status', () => {
|
||||
return ctx.ds.testDatasource().then(results => {
|
||||
return ctx.ds.testDatasource().then((results: any) => {
|
||||
expect(results.status).toEqual('success');
|
||||
});
|
||||
});
|
||||
@@ -71,7 +72,7 @@ describe('AppInsightsDatasource', () => {
|
||||
});
|
||||
|
||||
it('should return error status and a detailed error message', () => {
|
||||
return ctx.ds.testDatasource().then(results => {
|
||||
return ctx.ds.testDatasource().then((results: any) => {
|
||||
expect(results.status).toEqual('error');
|
||||
expect(results.message).toEqual(
|
||||
'1. Application Insights: Not Found: Invalid Application Id for Application Insights service. '
|
||||
@@ -99,7 +100,7 @@ describe('AppInsightsDatasource', () => {
|
||||
});
|
||||
|
||||
it('should return error status and a detailed error message', () => {
|
||||
return ctx.ds.testDatasource().then(results => {
|
||||
return ctx.ds.testDatasource().then((results: any) => {
|
||||
expect(results.status).toEqual('error');
|
||||
expect(results.message).toEqual('1. Application Insights: Error: SomeOtherError. An error message. ');
|
||||
});
|
||||
@@ -149,7 +150,7 @@ describe('AppInsightsDatasource', () => {
|
||||
});
|
||||
|
||||
it('should return a single datapoint', () => {
|
||||
return ctx.ds.query(options).then(results => {
|
||||
return ctx.ds.query(options).then((results: any) => {
|
||||
expect(results.data.length).toBe(1);
|
||||
expect(results.data[0].datapoints.length).toBe(1);
|
||||
expect(results.data[0].target).toEqual('exceptions/server');
|
||||
@@ -196,7 +197,7 @@ describe('AppInsightsDatasource', () => {
|
||||
});
|
||||
|
||||
it('should return a list of datapoints', () => {
|
||||
return ctx.ds.query(options).then(results => {
|
||||
return ctx.ds.query(options).then((results: any) => {
|
||||
expect(results.data.length).toBe(1);
|
||||
expect(results.data[0].datapoints.length).toBe(2);
|
||||
expect(results.data[0].target).toEqual('exceptions/server');
|
||||
@@ -267,7 +268,7 @@ describe('AppInsightsDatasource', () => {
|
||||
});
|
||||
|
||||
it('should return a list of datapoints', () => {
|
||||
return ctx.ds.query(options).then(results => {
|
||||
return ctx.ds.query(options).then((results: any) => {
|
||||
expect(results.data.length).toBe(3);
|
||||
expect(results.data[0].datapoints.length).toBe(2);
|
||||
expect(results.data[0].target).toEqual('exceptions/server{client/city="Miami"}');
|
||||
@@ -292,7 +293,7 @@ describe('AppInsightsDatasource', () => {
|
||||
});
|
||||
|
||||
it('should return a list of datapoints', () => {
|
||||
return ctx.ds.query(options).then(results => {
|
||||
return ctx.ds.query(options).then((results: any) => {
|
||||
expect(results.data.length).toBe(3);
|
||||
expect(results.data[0].datapoints.length).toBe(2);
|
||||
expect(results.data[0].target).toEqual('exceptions/server + client/city + Miami');
|
||||
@@ -323,7 +324,7 @@ describe('AppInsightsDatasource', () => {
|
||||
});
|
||||
|
||||
it('should return a list of metric names', () => {
|
||||
return ctx.ds.metricFindQuery('appInsightsMetricNames()').then(results => {
|
||||
return ctx.ds.metricFindQuery('appInsightsMetricNames()').then((results: any) => {
|
||||
expect(results.length).toBe(2);
|
||||
expect(results[0].text).toBe('exceptions/server');
|
||||
expect(results[0].value).toBe('exceptions/server');
|
||||
@@ -361,7 +362,7 @@ describe('AppInsightsDatasource', () => {
|
||||
});
|
||||
|
||||
it('should return a list of group bys', () => {
|
||||
return ctx.ds.metricFindQuery('appInsightsGroupBys(requests/count)').then(results => {
|
||||
return ctx.ds.metricFindQuery('appInsightsGroupBys(requests/count)').then((results: any) => {
|
||||
expect(results[0].text).toContain('client/os');
|
||||
expect(results[0].value).toContain('client/os');
|
||||
expect(results[1].text).toContain('client/city');
|
||||
@@ -389,7 +390,7 @@ describe('AppInsightsDatasource', () => {
|
||||
});
|
||||
|
||||
it('should return a list of metric names', () => {
|
||||
return ctx.ds.getAppInsightsMetricNames().then(results => {
|
||||
return ctx.ds.getAppInsightsMetricNames().then((results: any) => {
|
||||
expect(results.length).toBe(2);
|
||||
expect(results[0].text).toBe('exceptions/server');
|
||||
expect(results[0].value).toBe('exceptions/server');
|
||||
@@ -427,7 +428,7 @@ describe('AppInsightsDatasource', () => {
|
||||
});
|
||||
|
||||
it('should return a list of group bys', () => {
|
||||
return ctx.ds.getAppInsightsMetricMetadata('requests/count').then(results => {
|
||||
return ctx.ds.getAppInsightsMetricMetadata('requests/count').then((results: any) => {
|
||||
expect(results.primaryAggType).toEqual('avg');
|
||||
expect(results.supportedAggTypes).toContain('avg');
|
||||
expect(results.supportedAggTypes).toContain('sum');
|
||||
|
||||
@@ -6,6 +6,7 @@ import { DataSourceInstanceSettings } from '@grafana/ui';
|
||||
import { AzureDataSourceJsonData } from '../types';
|
||||
import { BackendSrv } from 'app/core/services/backend_srv';
|
||||
import { TemplateSrv } from 'app/features/templating/template_srv';
|
||||
import { IQService } from 'angular';
|
||||
|
||||
export interface LogAnalyticsColumn {
|
||||
text: string;
|
||||
@@ -24,7 +25,7 @@ export default class AppInsightsDatasource {
|
||||
instanceSettings: DataSourceInstanceSettings<AzureDataSourceJsonData>,
|
||||
private backendSrv: BackendSrv,
|
||||
private templateSrv: TemplateSrv,
|
||||
private $q
|
||||
private $q: IQService
|
||||
) {
|
||||
this.id = instanceSettings.id;
|
||||
this.applicationId = instanceSettings.jsonData.appInsightsAppId;
|
||||
@@ -36,7 +37,7 @@ export default class AppInsightsDatasource {
|
||||
return !!this.applicationId && this.applicationId.length > 0;
|
||||
}
|
||||
|
||||
query(options) {
|
||||
query(options: any) {
|
||||
const queries = _.filter(options.targets, item => {
|
||||
return item.hide !== true;
|
||||
}).map(target => {
|
||||
@@ -106,6 +107,7 @@ export default class AppInsightsDatasource {
|
||||
});
|
||||
|
||||
if (!queries || queries.length === 0) {
|
||||
// @ts-ignore
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -130,16 +132,16 @@ export default class AppInsightsDatasource {
|
||||
});
|
||||
}
|
||||
|
||||
doQueries(queries) {
|
||||
doQueries(queries: any) {
|
||||
return _.map(queries, query => {
|
||||
return this.doRequest(query.url)
|
||||
.then(result => {
|
||||
.then((result: any) => {
|
||||
return {
|
||||
result: result,
|
||||
query: query,
|
||||
};
|
||||
})
|
||||
.catch(err => {
|
||||
.catch((err: any) => {
|
||||
throw {
|
||||
error: err,
|
||||
query: query,
|
||||
@@ -148,7 +150,7 @@ export default class AppInsightsDatasource {
|
||||
});
|
||||
}
|
||||
|
||||
annotationQuery(options) {}
|
||||
annotationQuery(options: any) {}
|
||||
|
||||
metricFindQuery(query: string) {
|
||||
const appInsightsMetricNameQuery = query.match(/^AppInsightsMetricNames\(\)/i);
|
||||
@@ -168,7 +170,7 @@ export default class AppInsightsDatasource {
|
||||
testDatasource() {
|
||||
const url = `${this.baseUrl}/metrics/metadata`;
|
||||
return this.doRequest(url)
|
||||
.then(response => {
|
||||
.then((response: any) => {
|
||||
if (response.status === 200) {
|
||||
return {
|
||||
status: 'success',
|
||||
@@ -182,7 +184,7 @@ export default class AppInsightsDatasource {
|
||||
message: 'Returned http status code ' + response.status,
|
||||
};
|
||||
})
|
||||
.catch(error => {
|
||||
.catch((error: any) => {
|
||||
let message = 'Application Insights: ';
|
||||
message += error.statusText ? error.statusText + ': ' : '';
|
||||
|
||||
@@ -201,13 +203,13 @@ export default class AppInsightsDatasource {
|
||||
});
|
||||
}
|
||||
|
||||
doRequest(url, maxRetries = 1) {
|
||||
doRequest(url: any, maxRetries = 1) {
|
||||
return this.backendSrv
|
||||
.datasourceRequest({
|
||||
url: this.url + url,
|
||||
method: 'GET',
|
||||
})
|
||||
.catch(error => {
|
||||
.catch((error: any) => {
|
||||
if (maxRetries > 0) {
|
||||
return this.doRequest(url, maxRetries - 1);
|
||||
}
|
||||
@@ -223,20 +225,20 @@ export default class AppInsightsDatasource {
|
||||
|
||||
getMetricMetadata(metricName: string) {
|
||||
const url = `${this.baseUrl}/metrics/metadata`;
|
||||
return this.doRequest(url).then(result => {
|
||||
return this.doRequest(url).then((result: any) => {
|
||||
return new ResponseParser(result).parseMetadata(metricName);
|
||||
});
|
||||
}
|
||||
|
||||
getGroupBys(metricName: string) {
|
||||
return this.getMetricMetadata(metricName).then(result => {
|
||||
return this.getMetricMetadata(metricName).then((result: any) => {
|
||||
return new ResponseParser(result).parseGroupBys();
|
||||
});
|
||||
}
|
||||
|
||||
getQuerySchema() {
|
||||
const url = `${this.baseUrl}/query/schema`;
|
||||
return this.doRequest(url).then(result => {
|
||||
return this.doRequest(url).then((result: any) => {
|
||||
const schema = new ResponseParser(result).parseQuerySchema();
|
||||
// console.log(schema);
|
||||
return schema;
|
||||
|
||||
@@ -162,7 +162,7 @@ export default class FakeSchemaData {
|
||||
};
|
||||
}
|
||||
|
||||
static getlogAnalyticsFakeMetadata() {
|
||||
static getlogAnalyticsFakeMetadata(): any {
|
||||
return {
|
||||
tables: [
|
||||
{
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
export default class SupportedNamespaces {
|
||||
supportedMetricNamespaces = {
|
||||
supportedMetricNamespaces: any = {
|
||||
azuremonitor: [
|
||||
'Microsoft.AnalysisServices/servers',
|
||||
'Microsoft.ApiManagement/service',
|
||||
|
||||
@@ -43,7 +43,7 @@ const defaultSchema: any = () => ({
|
||||
},
|
||||
});
|
||||
|
||||
const cleanText = s => s.replace(/[{}[\]="(),!~+\-*/^%]/g, '').trim();
|
||||
const cleanText = (s: string) => s.replace(/[{}[\]="(),!~+\-*/^%]/g, '').trim();
|
||||
const wrapText = (text: string) => ({ text });
|
||||
|
||||
export default class KustoQueryField extends QueryField {
|
||||
@@ -353,11 +353,13 @@ export default class KustoQueryField extends QueryField {
|
||||
}
|
||||
|
||||
getTableSuggestions(db = 'Default'): SuggestionGroup[] {
|
||||
// @ts-ignore
|
||||
if (this.schema.Databases[db]) {
|
||||
return [
|
||||
{
|
||||
prefixMatch: true,
|
||||
label: 'Tables',
|
||||
// @ts-ignore
|
||||
items: _.map(this.schema.Databases[db].Tables, (t: any) => ({ text: t.Name })),
|
||||
},
|
||||
];
|
||||
|
||||
@@ -10,6 +10,7 @@ describe('Graphite query model', () => {
|
||||
waitForFuncDefsLoaded: jest.fn().mockReturnValue(Promise.resolve(null)),
|
||||
createFuncInstance: gfunc.createFuncInstance,
|
||||
},
|
||||
// @ts-ignore
|
||||
templateSrv: new TemplateSrvStub(),
|
||||
targets: [],
|
||||
};
|
||||
|
||||
@@ -111,7 +111,7 @@ describe('Request URL', () => {
|
||||
};
|
||||
|
||||
const datasourceWithLabels = {
|
||||
metadataRequest: url => {
|
||||
metadataRequest: (url: string) => {
|
||||
if (url.slice(0, 15) === '/api/prom/label') {
|
||||
return { data: { data: ['other'] } };
|
||||
} else {
|
||||
@@ -154,7 +154,7 @@ describe('Query imports', () => {
|
||||
|
||||
it('returns empty query from selector query if label is not available', async () => {
|
||||
const datasourceWithLabels = {
|
||||
metadataRequest: url =>
|
||||
metadataRequest: (url: string) =>
|
||||
url.slice(0, 15) === '/api/prom/label'
|
||||
? { data: { data: ['other'] } }
|
||||
: { data: { data: [] as DataQueryResponseData[] } },
|
||||
@@ -166,7 +166,7 @@ describe('Query imports', () => {
|
||||
|
||||
it('returns selector query from selector query with common labels', async () => {
|
||||
const datasourceWithLabels = {
|
||||
metadataRequest: url =>
|
||||
metadataRequest: (url: string) =>
|
||||
url.slice(0, 15) === '/api/prom/label'
|
||||
? { data: { data: ['foo'] } }
|
||||
: { data: { data: [] as DataQueryResponseData[] } },
|
||||
@@ -178,7 +178,7 @@ describe('Query imports', () => {
|
||||
|
||||
it('returns selector query from selector query with all labels if logging label list is empty', async () => {
|
||||
const datasourceWithLabels = {
|
||||
metadataRequest: url =>
|
||||
metadataRequest: (url: string) =>
|
||||
url.slice(0, 15) === '/api/prom/label'
|
||||
? { data: { data: [] as DataQueryResponseData[] } }
|
||||
: { data: { data: [] as DataQueryResponseData[] } },
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
echo -e "Collecting code stats (typescript errors & more)"
|
||||
|
||||
|
||||
ERROR_COUNT_LIMIT=2350
|
||||
ERROR_COUNT_LIMIT=1670
|
||||
DIRECTIVES_LIMIT=172
|
||||
CONTROLLERS_LIMIT=139
|
||||
|
||||
|
||||
Reference in New Issue
Block a user