Files
rocm-systems/projects/rocprofiler-compute/grafana_plugins/omniperfData_plugin/src/datasource.js
T
colramos-amd f0cf74353e Initial commit
[ROCm/rocprofiler-compute commit: 62d130b458]
2022-11-04 14:49:36 -05:00

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;
}
}