Grafana:从面板插件配置 InfluxDB 查询。在从 typescript 设置值后使用 html 输入元素出现问题

Posted

技术标签:

【中文标题】Grafana:从面板插件配置 InfluxDB 查询。在从 typescript 设置值后使用 html 输入元素出现问题【英文标题】:Grafana: Configure InfluxDB queries from panel plugin.Problem with html input element after setting value from typescript 【发布时间】:2020-04-05 13:41:21 【问题描述】:

我已经修改了现有的 Grafana 面板插件(Boom 表),以便它可以读取配置文件,并使用该文件中的数据更新模式和阈值。

现在我还想更新数据源查询和别名以匹配模式。我正在使用 InfluxDB。我已经设法从我修改过的面板插件中填写正确的查询和别名,但问题是我无法设法“应用”别名。我可以通过从打字稿代码中发出选择命令来应用查询字符串,但这不适用于别名输入。

我通过使用 document.getElementsByClassName("gf-form-input") 读取所有输入字段来做到这一点。从返回的带有 htmlInputElements 的数组中,我找出了哪些输入是查询和别名,并通过设置值来更新它。我已经尝试使用input.value = "<alias string>"input.setAttribute('value', <alias string>) 进行设置。

除了“选择”之外,我还尝试了各种其他命令,例如:“单击”、“聚焦”和“模糊”。我可以看到正确的文本被填写到了正确的输入框中,但是上面有数据的表格没有更新。如果我手动更改它应用的字符并且表格正确更新。有谁知道我怎么能做到这一点?感觉就像我非常接近实现我所需要的,这只是缺少的最后一块。如果我可以使用标准的 InfluxDB 数据源插件并且只修改面板插件,那就太好了。

【问题讨论】:

【参考方案1】:

事件需要通过angular触发。

请参阅以下内容: https://tommcfarlin.com/triggering-angular-events-with-jquery/

从上面的链接中获取的以下代码是解决问题的示例:


$('select[ng-model="schedule.payment_method"]').each(function() 

  // For the purposes of this example, we're going to select the first option.
  $(this)
    .children('option:eq(1)')
    .attr('selected', 'selected');

  // Make sure the select element reflects the change (as setting the option doesn't always do this properly).
  $(this).val($(this).children('option:selected').attr('value'));

  // Now use the Angular API's triggerHandler function to call the change.
  angular.element($(this)).triggerHandler('change');
);

将初始 jquery 选择器更新为别名框的选择器。

编辑: 只是做一些测试,你应该能够简单地执行

angular.element($0).triggerHandler("change")

改变值后,其中$0为别名框的dom对象。

【讨论】:

以上是关于Grafana:从面板插件配置 InfluxDB 查询。在从 typescript 设置值后使用 html 输入元素出现问题的主要内容,如果未能解决你的问题,请参考以下文章

InfluxDB 和 Grafana:在同一图形面板上比较两个具有不同时间戳的数据库

Grafana是一个可视化面板-安装配置介绍

Spring Boot Actutaur + Telegraf + InFluxDB + Grafana 构建监控平台

我应该如何让 grafana 知道安装在不同主机上的 telegraf 和 influxdb?

性能监控之Telegraf+InfluxDB+Grafana linux服务器实时监控

在 Grafana (InfluxDB) 中自动选择新行