如何解决Grafana - 如何在 Grafana 中显示从外部 api 返回的数据?
我正在尝试创建一个从外部 API 获取数据然后在 Grafana 中显示的插件。但它不起作用。该插件可以从 API 获取数据,但无法在仪表板上显示。
我该如何解决问题?
像这样的java API。它从数据库中搜索数据,然后返回给插件。
public String getData(String start,String end,String type){
ArrayList<PCRC> list = new ArrayList<>();
JSONArray result = new JSONArray();
try{
JSONObject object = new JSONObject();
object.put("recordtime",new Date());
object.put("success",12);
object.put("fail",0);
object.put("total",12);
result.add(object);
object = new JSONObject();
object.put("recordtime",24);
object.put("fail",1);
object.put("total",25);
result.add(object);
log.info("-------------success get data");
}catch (Exception e){
log.error(e.getMessage());
e.printstacktrace();
}finally {
return result.toJSONString();
}
}
这样的 Grafana 插件 它从前端获取搜索参数,然后从Java API 请求数据。 它可以获取返回值。但它不显示它。不知道怎么回事。
async doRequest(url: string,param: string,query: MyQuery){
console.log(22);
var resultUrl = this.hostUrl + url;
const result = await getBackendSrv().datasourceRequest({
method: "GET",url: resultUrl,params: {
start: '2020-08-02 00:00:00',end: '2020-12-28 12:00:00',type: 'GET'
}
})
return result;
}
async query(options: DataQueryRequest<MyQuery>): Promise<DataQueryResponse> {
const { range } = options;
const from = dateTimeAsMoment(range!.from.valueOf()).format('YYYY-MM-DD HH:mm:ss');
const to = dateTimeAsMoment(range!.to.valueOf()).format('YYYY-MM-DD HH:mm:ss');
// Return a constant for each query.
const promise = options.targets.map(target => {
const query = defaults(target,defaultQuery);
const frame = new MutableDataFrame({
refId: query.refId,fields: [
{ name: 'Time',type: FieldType.time },{ name: 'value',type: FieldType.number },],});
const param = "?start=" + from + "&end=" + to + "&type=" + this.fileType;
this.doRequest(this.dataUrl,param,query).then((response) => {
console.log(response);
if (response.data.length > 0){
response.data.forEach((item: any) =>{
var time = dateTimeAsMoment(item.recordtime).format('YYYY-MM-DD HH:mm:ss')
frame.appendRow([time,item.success]);
console.log(frame);
})
}
return frame;
})
});
return Promise.all(promise).then((data) => ({ data }));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。