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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...