我想编写一个不依赖外部后端的grafana数据源插件。
我基于simple-json数据源插件构建了我的插件:https://github.com/grafana/simple-json-datasource
我尝试更改datasource.js中的查询函数,如下所示:
原:
query(options) {
var query = this.buildQueryParameters(options);
if (query.targets.length <= 0) {
return this.q.when([]);
}
return this.backendSrv.datasourceRequest({
url: this.url + '/query',
data: query,
method: 'POST',
headers: { 'Content-Type': 'application/json' }
});
我的查询功能:
query(options) {
return [
{
"target":"upper_75",
"datapoints":[
[622,1450754160000],
[365,1450754220000]
]
},
{
"target":"upper_90",
"datapoints":[
[861,1450754160000],
[767,1450754220000]
]
}
];
}
当我实现我的查询功能并尝试在graphana面板中显示图形时,我收到错误消息:
“undefined不是对象(评估'dataList.map')”
不要担心数据格式我尝试了一切,但似乎grafana期望一些不同的回报,但我无法弄清楚是什么格式。
我追溯了原始实现返回并复制它的内容,但它不起作用。
我相信
this.backendSrv.datasourceRequest({
url: this.url + '/query',
data: query,
method: 'POST',
headers: { 'Content-Type': 'application/json' }
});
应该返回类似http响应的内容,但为什么我不能手动返回?
提前感谢您的帮助!
答案 0 :(得分:3)
看起来它需要包含在一个承诺中,不能直接返回。他们使用角度$ q组件。我让它回来了:
return this.q(function(resolve, reject) {
var result = {
data : [
{
"target":"upper_75",
"datapoints":[
[622,1450754160000],
[365,1450754220000]
]
},
{
"target":"upper_90",
"datapoints":[
[861,1450754160000],
[767,1450754220000]
]
}
]
}
resolve(result)
});
您将通过构造函数中的依赖注入获得$ q:
constructor(instanceSettings, $q, backendSrv) {
this.type = instanceSettings.type;
this.url = instanceSettings.url;
this.name = instanceSettings.name;
this.q = $q;
this.backendSrv = backendSrv;}