f0cf74353e
[ROCm/rocprofiler-compute commit: 62d130b458]
148 lines
4.7 KiB
JavaScript
148 lines
4.7 KiB
JavaScript
// ################################################################################
|
|
// # Copyright (c) 2018 JamesOsgood
|
|
// #
|
|
// # Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// # of this software and associated documentation files (the "Software"), to deal
|
|
// # in the Software without restriction, including without limitation the rights
|
|
// # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// # copies of the Software, and to permit persons to whom the Software is
|
|
// # furnished to do so, subject to the following conditions:
|
|
// #
|
|
// # The above copyright notice and this permission notice shall be included in all
|
|
// # copies or substantial portions of the Software.
|
|
// #
|
|
// # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
// # SOFTWARE.
|
|
// ################################################################################
|
|
|
|
import _ from "lodash";
|
|
|
|
export class GenericDatasource {
|
|
|
|
constructor(instanceSettings, $q, backendSrv, templateSrv) {
|
|
this.type = instanceSettings.type;
|
|
this.url = instanceSettings.url;
|
|
this.name = instanceSettings.name;
|
|
this.db = { 'url' : instanceSettings.jsonData.mongodb_url, 'db' : instanceSettings.jsonData.mongodb_db }
|
|
this.q = $q;
|
|
this.backendSrv = backendSrv;
|
|
this.templateSrv = templateSrv;
|
|
this.withCredentials = instanceSettings.withCredentials;
|
|
this.headers = {'Content-Type': 'application/json'};
|
|
// Assert valid sign in parameter
|
|
if (typeof instanceSettings.basicAuth === 'string' && instanceSettings.basicAuth.length > 0) {
|
|
this.headers['Authorization'] = instanceSettings.basicAuth;
|
|
}
|
|
}
|
|
|
|
query(options) {
|
|
var query = this.buildQueryParameters(options);
|
|
query.targets = query.targets.filter(t => !t.hide);
|
|
query.db = this.db
|
|
|
|
if (query.targets.length <= 0) {
|
|
return this.q.when({data: []});
|
|
}
|
|
|
|
return this.doRequest({
|
|
url: this.url + '/query',
|
|
data: query,
|
|
method: 'POST'
|
|
});
|
|
}
|
|
|
|
// Testing whether connection is valid
|
|
testDatasource() {
|
|
return this.doRequest({
|
|
url: this.url + '/',
|
|
data : { db : this.db },
|
|
method: 'POST',
|
|
}).then(response => {
|
|
if (response.status === 200) {
|
|
return { status: response.data.status, message: response.data.message, title: response.data.display_status };
|
|
}
|
|
});
|
|
}
|
|
|
|
annotationQuery(options) {
|
|
var query = this.templateSrv.replace(options.annotation.query, {}, 'glob');
|
|
var annotationQuery = {
|
|
range: options.range,
|
|
annotation: {
|
|
name: options.annotation.name,
|
|
datasource: options.annotation.datasource,
|
|
enable: options.annotation.enable,
|
|
iconColor: options.annotation.iconColor,
|
|
query: query
|
|
},
|
|
rangeRaw: options.rangeRaw
|
|
};
|
|
|
|
return this.doRequest({
|
|
url: this.url + '/annotations',
|
|
method: 'POST',
|
|
data: annotationQuery
|
|
}).then(result => {
|
|
response.data.$$status = result.status;
|
|
response.data.$$config = result.config;
|
|
return result.data;
|
|
});
|
|
}
|
|
|
|
metricFindQuery(query) {
|
|
var interpolated = {
|
|
target: this.templateSrv.replace(query, null, '')
|
|
};
|
|
interpolated.db = this.db
|
|
|
|
return this.doRequest({
|
|
url: this.url + '/search',
|
|
data: interpolated,
|
|
method: 'POST',
|
|
}).then(this.mapToTextValue);
|
|
}
|
|
|
|
mapToTextValue(result) {
|
|
return _.map(result.data, (d, i) => {
|
|
if (d && d.text && d.value) {
|
|
return { text: d.text, value: d.value };
|
|
} else if (_.isObject(d)) {
|
|
return { text: d, value: i};
|
|
}
|
|
return { text: d, value: d };
|
|
});
|
|
}
|
|
|
|
doRequest(options) {
|
|
options.withCredentials = this.withCredentials;
|
|
options.headers = this.headers;
|
|
|
|
return this.backendSrv.datasourceRequest(options);
|
|
}
|
|
|
|
buildQueryParameters(options) {
|
|
//remove place holder targets
|
|
options.targets = _.filter(options.targets, target => {
|
|
return target.target !== 'select metric';
|
|
});
|
|
|
|
var targets = _.map(options.targets, target => {
|
|
return {
|
|
target: this.templateSrv.replace(target.target, options.scopedVars, ''),
|
|
refId: target.refId,
|
|
hide: target.hide,
|
|
type: target.type || 'timeserie'
|
|
};
|
|
});
|
|
|
|
options.targets = targets;
|
|
|
|
return options;
|
|
}
|
|
}
|