python-3.x 如何使用API在已有的grafana Jmeter 板上添加或删除面板?

5ktev3wc  于 2023-03-13  发布在  Python
关注(0)|答案(1)|浏览(146)

我有一个任务,动态添加面板,如果有任何新的主机添加到集群。我使用模板变量添加或重复面板的基础上变量输出。
但现在需要动态面板添加基于休息API或可编程。任何人都可以帮助我得到一些建议或想法动态添加面板?

ajsxfq5m

ajsxfq5m1#

如果您的 Jmeter 板中已经有面板,那么复制其中一个面板的结构,然后在代码中更改值,如“gridPos”、“title”等,以及您想要更改的任何内容。
面板的json看起来或多或少类似于Grafana中的json:

{
   "datasource": {...},
   "fieldConfig": {...},
   "gridPos": {...},
   "id": 1,
   "options": {...},
   "pluginVersion": "9.4.3",
   "targets": [...],
   "title": "Panel Title",
   "type": "stat"
}

为了进行测试,我使用了Python脚本。
使用UID方法从API检索您的 Jmeter 板。

import json
import requests

endpoint = f'{_url}/dashboards/uid/{uid}'
dashboard = requests.get(endpoint, headers=_headers, verify=False).json()

现在您可以注意到API返回类型的结构,其中包含两个dict:

  • meta
  • Jmeter 板

在dashboard dict中,您可以找到一个列表元素“panel”,它包含所有作为dict引用的panel信息。
a screenshot in the debugger
现在您可以将新面板添加到dict列表中(“new_panel”变量是您要添加的json格式面板):

dashboard['dashboard']['panels'].append(json.loads(new_panel))

从现在开始,您所要做的就是用API更新 Jmeter 板,为此,您必须创建预期的json结构:

{
   "dashboard": <the json model of your dashboard>,
   "message": <a message for the commit version>,
   "overwrite": True or False
}

在Python中:

json_model = {'dashboard': dashboard['dashboard'], 'message': '', 'overwrite': False}
requests.post(endpoint, data=json.dumps(json_model), headers=headers, verify=False).json()

如果您的 Jmeter 板在开始时没有任何面板,您必须首先在 Jmeter 板元素中创建面板列表:

dashboard['dashboard']['panels'] = json.loads(new_panel)
json_model = {'dashboard': dashboard['dashboard'], 'message': '', 'overwrite': False}
requests.post(endpoint, data=json.dumps(json_model), headers=headers, verify=False).json()

希望这能帮上忙。

相关问题