Как программно скопировать макет панели мониторинга в другую в Grafana?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как программно скопировать макет панели мониторинга в другую в Grafana?

Сообщение Anonymous »


Моя цель — программно дублировать панель управления Grafana.

Мне не удалось найти эту функцию в документации API, поэтому я решил, что вставка JSON панели мониторинга1 в панель мониторинга2 даст тот же результат.

Вот что я делаю:

Python 3 в блокноте Jupyter:

1 – создать свою первую панель мониторинга:

first_dashboard = { "панель приборов": { "идентификатор": "", "uid": "", "title": "это первая панель мониторинга", "теги": ["автоматизированный"], "часовой пояс": "браузер", "схемаВерсия": 16, "обновить": "25 секунд" }, "folderUid": "", "сообщение": "", «перезаписать»: Ложь } first_dashboard = json.dumps(first_dashboard) r = s.post(api_create_dashboard, data=first_dashboard) r.status_code Первая панель мониторинга успешно создана.

2. Из графического интерфейса Grafana я вношу несколько изменений в свою первую панель мониторинга, и она выглядит следующим образом:


Изображение


3 – из URL-адреса информационной панели получите ее идентификатор и используйте его для получения JSON информационной панели:

r1 = s.get(api_get_dashboard_by_uid + first_dashboard_uid) first_dashboard_json = r1.json() first_dashboard_json Изменения, которые я внес в графический интерфейс, отображаются в возвращенном словаре:

{'meta': {'type': 'db', 'canSave': Правда, 'canEdit': Правда, 'canAdmin': Верно, 'canStar': Верно, 'canDelete': Правда, 'slug': 'это первая панель мониторинга', 'url': '/d/f26861d9-0ed9-44df-843c-578186f5d38f/это-первая-панель мониторинга', 'истекает': '0001-01-01T00:00:00Z', 'создано': '2023-11-22T08:41:09Z', 'обновлено': '2023-11-22T08:44:57Z', 'updatedBy': 'менеджер панели мониторинга', 'createdBy': 'Анонимный', 'версия': 2, 'hasAcl': Ложь, 'isFolder': Ложь, 'идентификатор папки': 0, 'folderUid': '', 'folderTitle': 'Общие', 'folderUrl': '', 'предоставлено': Ложь, 'provisionedExternalId': '', 'annotationsPermissions': {'dashboard': {'canAdd': True, 'canEdit': Правда, 'canDelete': True}, 'организация': {'canAdd': True, 'canEdit': True, 'canDelete': True}}}, 'dashboard': {'annotations': {'list': [{'builtIn': 1, 'datasource': {'type': 'grafana', 'uid': '-- Grafana --'}, 'включить': Правда, 'скрыть': Правда, 'iconColor': 'rgba(0, 211, 255, 1)', 'name': 'Аннотации и оповещения', 'type': 'dashboard'}]}, 'редактируемый': Правда, 'фискальныйГодСтартМесяц': 0, 'графиктултип': 0, 'идентификатор': 44, 'ссылки': [], «liveNow»: Ложь, 'панели': [{'источник данных': {'тип': 'mysql', 'uid': 'b204da61-c9be-4556-87ed-2c875554dfb3'}, 'fieldConfig': {'defaults': {'color': {'mode': 'thresholds'}, 'custom': {'align': 'auto', 'cellOptions': {'тип': 'авто'}, 'проверить': Ложь}, 'сопоставления': [], 'пороги': {'режим': 'абсолютный', 'шаги': [{'цвет': 'зеленый', 'значение': нет}, {'цвет': 'красный', 'значение': 80}]}}, 'переопределяет': []}, 'gridPos': {'h': 8, 'w': 12, 'x': 0, 'y': 0}, 'идентификатор': 2, 'options': {'cellHeight': 'sm', 'footer': {'countRows': Ложь, 'поля': '', 'редуктор': ['сумма'], 'показать': Ложь}, 'showHeader': True}, 'pluginVersion': '10.2.0', 'targets': [{'dataset': 'poc_finops_db_rec', 'источник данных': {'тип': 'mysql', 'uid': 'b204da61-c9be-4556-87ed-2c875554dfb3'}, 'editorMode': 'строитель', «формат»: «таблица», 'rawSql': 'SELECT COUNT(Валюта) FROM poc_finops_db_rec.`012021` LIMIT 50 ', 'refId': 'А', 'sql': {'columns': [{'name': 'COUNT', 'параметры': [{'имя': 'Валюта', 'тип': 'functionParameter'}], 'тип': 'функция'}], 'groupBy': [{'property': {'type': 'string'}, 'type': 'groupBy'}], 'предел': 50}, 'таблица': '`012021`'}], 'title': 'это новый заголовок', 'тип': 'таблица'}, {'свернуто': Правда, 'gridPos': {'h': 1, 'w': 24, 'x': 0, 'y': 8}, 'идентификатор': 1, 'панели': [], 'title': 'это первая строка', 'тип': 'строка'}], «обновить»: «25 секунд», 'схемаВерсия': 38, 'теги': ['автоматизировано'], 'шаблон': {'список': []}, 'время': {'от': 'сейчас-6ч', 'до': 'сейчас'}, 'выбор времени': {}, «часовой пояс»: «браузер», 'title': 'это первая панель мониторинга', 'uid': 'f26861d9-0ed9-44df-843c-578186f5d38f', 'версия': 2, 'weekStart': ''}} ОК, теперь давайте создадим вторую панель мониторинга:

Second_dashboard = { "панель приборов": { "идентификатор": "", "uid": "", "title": "это вторая пустая панель мониторинга", "теги": [ "автоматизированный" ], "часовой пояс": "браузер", "схемаВерсия": 16, "обновить": "25 секунд" }, "folderUid": "", "сообщение": "", «перезаписать»: Ложь } Second_dashboard = json.dumps( Second_dashboard) r = s.post(api_create_dashboard, data= Second_dashboard) r.status_code Теперь давайте попробуем вставить JSON первой информационной панели во вторую информационную панель, чтобы вторая информационная панель стала «копией» первой. Вот где я застрял. Вот что я делаю:

# Получить json второй информационной панели r2 = s.get(api_get_dashboard_by_uid + Second_dashboard_uid) Second_dashboard_json = r2.json() # скопируйте узел "dashboard", который содержит uid первой панели мониторинга Second_dashboard_json['dashboard'] = first_dashboard_json['dashboard'] # заменяем uid на uid второй панели управления Second_dashboard_json['uid'] = Second_dashboard_uid на этом этапе Second_dashboard_json выглядит так:

{'meta': {'type': 'db', 'canSave': Правда, 'canEdit': Правда, 'canAdmin': Верно, 'canStar': Верно, 'canDelete': Правда, 'slug': 'это-вторая-пустая-панель', 'url': '/d/a27120af-2f98-4775-8db6-6b746be64d32/это-вторая-пустая-панель', 'истекает': '0001-01-01T00:00:00Z', 'создано': '2023-11-22T08:48:03Z', 'обновлено': '2023-11-22T08:48:03Z', 'updatedBy': 'Анонимный', 'createdBy': 'Анонимный', 'версия': 1, 'hasAcl': Ложь, 'isFolder': Ложь, 'идентификатор папки': 0, 'folderUid': '', 'folderTitle': 'Общие', 'folderUrl': '', 'предоставлено': Ложь, 'provisionedExternalId': '', 'annotationsPermissions': {'dashboard': {'canAdd': True, 'canEdit': Правда, 'canDelete': True}, 'организация': {'canAdd': True, 'canEdit': True, 'canDelete': True}}}, 'dashboard': {'annotations': {'list': [{'builtIn': 1, 'datasource': {'type': 'grafana', 'uid': '-- Grafana --'}, 'включить': Правда, 'скрыть': Правда, 'iconColor': 'rgba(0, 211, 255, 1)', 'name': 'Аннотации и оповещения', 'type': 'dashboard'}]}, 'редактируемый': Правда, 'фискальныйГодСтартМесяц': 0, 'графиктултип': 0, 'идентификатор': 44, 'ссылки': [], «liveNow»: Ложь, 'панели': [{'источник данных': {'тип': 'mysql', 'uid': 'b204da61-c9be-4556-87ed-2c875554dfb3'}, 'fieldConfig': {'defaults': {'color': {'mode': 'thresholds'}, 'custom': {'align': 'auto', 'cellOptions': {'тип': 'авто'}, 'проверить': Ложь}, 'сопоставления': [], 'пороги': {'режим': 'абсолютный', 'шаги': [{'цвет': 'зеленый', 'значение': нет}, {'цвет': 'красный', 'значение': 80}]}}, 'переопределяет': []}, 'gridPos': {'h': 8, 'w': 12, 'x': 0, 'y': 0}, 'идентификатор': 2, 'options': {'cellHeight': 'sm', 'footer': {'countRows': Ложь, 'поля': '', 'редуктор': ['сумма'], 'показать': Ложь}, 'showHeader': True}, 'pluginVersion': '10.2.0', 'targets': [{'dataset': 'poc_finops_db_rec', 'источник данных': {'тип': 'mysql', 'uid': 'b204da61-c9be-4556-87ed-2c875554dfb3'}, 'editorMode': 'строитель', «формат»: «таблица», 'rawSql': 'SELECT COUNT(Валюта) FROM poc_finops_db_rec.`012021` LIMIT 50 ', 'refId': 'А', 'sql': {'columns': [{'name': 'COUNT', 'параметры': [{'имя': 'Валюта', 'тип': 'functionParameter'}], 'тип': 'функция'}], 'groupBy': [{'property': {'type': 'string'}, 'type': 'groupBy'}], 'предел': 50}, 'таблица': '`012021`'}], 'title': 'это новый заголовок', 'тип': 'таблица'}, {'свернуто': Правда, 'gridPos': {'h': 1, 'w': 24, 'x': 0, 'y': 8}, 'идентификатор': 1, 'панели': [], 'title': 'это первая строка', 'тип': 'строка'}], «обновить»: «25 секунд», 'схемаВерсия': 38, 'теги': ['автоматизировано'], 'шаблон': {'список': []}, 'время': {'от': 'сейчас-6ч', 'до': 'сейчас'}, 'выбор времени': {}, «часовой пояс»: «браузер», 'title': 'это первая панель мониторинга', 'uid': 'a27120af-2f98-4775-8db6-6b746be64d32', 'версия': 2, 'weekStart': ''}} Затем я ПУБЛИКУЮ это:

# Теперь давайте отправим обновленные данные на нашу вторую панель мониторинга. r3 = s.post(api_create_dashboard, data = json.dumps( Second_dashboard_json)) r3.status_code Он возвращает 400. Я попытался удалить мета-узел Second_dashboard_json, но все равно получаю 400.

Что я делаю не так? Любая помощь приветствуется. Спасибо!
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Наиболее подходящая функция PROMQL и соответствующий тип панели на Grafana для методов с @Timed
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Как правильно захватить обновленный макет с панели панели потоков.
    Anonymous » » в форуме Python
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Как правильно захватить обновленный макет с панели панели потоков.
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Веб-очистка панели мониторинга PowerBI с помощью Python
    Гость » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Гость
  • Как обновить метки осей на панели мониторинга Plotly?
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»