Skip to content
Snippets Groups Projects
Commit 17d065f0 authored by Bjarke Madsen's avatar Bjarke Madsen
Browse files

update to provision datasources and dashboards

parent 08bcc139
No related branches found
No related tags found
No related merge requests found
import logging
import os
import json
from functools import reduce
from typing import List
from brian_dashboard_manager.grafana.utils.request import AdminRequest, TokenRequest
from brian_dashboard_manager.grafana.organization import get_organizations, create_organization, delete_organization, create_api_token, delete_api_token, delete_expired_api_tokens
from brian_dashboard_manager.grafana.dashboard import provision_dashboard
from brian_dashboard_manager.grafana.organization import get_organizations, create_organization, create_api_token, delete_api_token, delete_expired_api_tokens
from brian_dashboard_manager.grafana.dashboard import get_dashboard_definitions, create_dashboard
from brian_dashboard_manager.grafana.datasource import get_missing_datasource_definitions, create_datasource
logger = logging.getLogger(__name__)
def provision(config):
hostname = config.get('hostname')
port = config.get('grafana_port')
username = config.get('admin_username')
password = config.get('admin_password')
request = AdminRequest(hostname, port, username, password)
request = AdminRequest(**config)
all_orgs = get_organizations(request)
organizations_to_provision = config.get('organizations', [])
missing = [name for name in organizations_to_provision
if name not in [org['name'] for org in all_orgs]]
missing = (name for name in organizations_to_provision
if name not in [org['name'] for org in all_orgs])
for org in missing:
org_data = create_organization(request, org)
......@@ -34,15 +25,20 @@ def provision(config):
org_id = org['id']
delete_expired_api_tokens(request, org_id)
token = create_api_token(request, org_id)
token_request = TokenRequest(hostname, port, token['key'])
# TODO: (de)provision datasources and remove all existing dashboards in an organization before attempting to provision new dashboards.
for (dirpath, dirnames, filenames) in os.walk(config.get('dashboard_directory', 'dashboards')):
for file in filenames:
if file.endswith('.json'):
filename = os.path.join(dirpath, file)
logger.info(f'Provisioning dashboard: {file.strip(".json")}')
provision_dashboard(token_request, json.load(open(filename, 'r')))
token_request = TokenRequest(token=token['key'], **config)
logger.info(f'--- Provisioning org {org["name"]} (ID #{org_id}) ---')
# Provision missing data sources
for datasource in get_missing_datasource_definitions(token_request):
ds = create_datasource(
token_request, datasource, config.get('BRIAN_ENVIRONMENT', 'test'))
if ds:
logger.info(f'Provisioned datasource: {datasource["name"]}')
# Provision dashboards, overwriting existing ones.
for dashboard in get_dashboard_definitions():
create_dashboard(token_request, dashboard)
delete_api_token(request, org_id, token['id'])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment