diff options
Diffstat (limited to 'vnfs/DAaaS/prometheus-operator/hack/sync_grafana_dashboards.py')
-rwxr-xr-x | vnfs/DAaaS/prometheus-operator/hack/sync_grafana_dashboards.py | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/vnfs/DAaaS/prometheus-operator/hack/sync_grafana_dashboards.py b/vnfs/DAaaS/prometheus-operator/hack/sync_grafana_dashboards.py deleted file mode 100755 index f548d0b7..00000000 --- a/vnfs/DAaaS/prometheus-operator/hack/sync_grafana_dashboards.py +++ /dev/null @@ -1,143 +0,0 @@ -#!/usr/bin/env python3 -"""Fetch dashboards from provided urls into this chart.""" -import json -import textwrap -from os import makedirs, path - -import requests -import yaml -from yaml.representer import SafeRepresenter - - -# https://stackoverflow.com/a/20863889/961092 -class LiteralStr(str): - pass - - -def change_style(style, representer): - def new_representer(dumper, data): - scalar = representer(dumper, data) - scalar.style = style - return scalar - - return new_representer - - -# Source files list -charts = [ - { - 'source': 'https://raw.githubusercontent.com/coreos/prometheus-operator/master/contrib/kube-prometheus/manifests/grafana-dashboardDefinitions.yaml', - 'destination': '../templates/grafana/dashboards', - 'type': 'yaml', - }, - { - 'source': 'https://raw.githubusercontent.com/etcd-io/etcd/master/Documentation/op-guide/grafana.json', - 'destination': '../templates/grafana/dashboards', - 'type': 'json', - }, - { - 'source': 'https://raw.githubusercontent.com/helm/charts/master/stable/prometheus-operator/dashboards/grafana-coredns-k8s.json', - 'destination': '../templates/grafana/dashboards', - 'type': 'json', - }, -] - -# Additional conditions map -condition_map = { - 'grafana-coredns-k8s': ' .Values.coreDns.enabled', - 'etcd': ' .Values.kubeEtcd.enabled', -} - -# standard header -header = '''# Generated from '%(name)s' from %(url)s -{{- if and .Values.grafana.enabled .Values.grafana.defaultDashboardsEnabled%(condition)s }} -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ printf "%%s-%%s" (include "prometheus-operator.fullname" $) "%(name)s" | trunc 63 | trimSuffix "-" }} - labels: - {{- if $.Values.grafana.sidecar.dashboards.label }} - {{ $.Values.grafana.sidecar.dashboards.label }}: "1" - {{- end }} - app: {{ template "prometheus-operator.name" $ }}-grafana -{{ include "prometheus-operator.labels" $ | indent 4 }} -data: -''' - - -def init_yaml_styles(): - represent_literal_str = change_style('|', SafeRepresenter.represent_str) - yaml.add_representer(LiteralStr, represent_literal_str) - - -def escape(s): - return s.replace("{{", "{{`{{").replace("}}", "}}`}}") - - -def yaml_str_repr(struct, indent=2): - """represent yaml as a string""" - text = yaml.dump( - struct, - width=1000, # to disable line wrapping - default_flow_style=False # to disable multiple items on single line - ) - text = escape(text) # escape {{ and }} for helm - text = textwrap.indent(text, ' ' * indent) - return text - - -def write_group_to_file(resource_name, content, url, destination): - # initialize header - lines = header % { - 'name': resource_name, - 'url': url, - 'condition': condition_map.get(resource_name, ''), - } - - filename_struct = {resource_name + '.json': (LiteralStr(content))} - # rules themselves - lines += yaml_str_repr(filename_struct) - - # footer - lines += '{{- end }}' - - filename = resource_name + '.yaml' - new_filename = "%s/%s" % (destination, filename) - - # make sure directories to store the file exist - makedirs(destination, exist_ok=True) - - # recreate the file - with open(new_filename, 'w') as f: - f.write(lines) - - print("Generated %s" % new_filename) - - -def main(): - init_yaml_styles() - # read the rules, create a new template file per group - for chart in charts: - print("Generating rules from %s" % chart['source']) - raw_text = requests.get(chart['source']).text - if chart['type'] == 'yaml': - yaml_text = yaml.load(raw_text) - groups = yaml_text['items'] - for group in groups: - for resource, content in group['data'].items(): - write_group_to_file(resource.replace('.json', ''), content, chart['source'], chart['destination']) - elif chart['type'] == 'json': - json_text = json.loads(raw_text) - # is it already a dashboard structure or is it nested (etcd case)? - flat_structure = bool(json_text.get('annotations')) - if flat_structure: - resource = path.basename(chart['source']).replace('.json', '') - write_group_to_file(resource, json.dumps(json_text, indent=4), chart['source'], chart['destination']) - else: - for resource, content in json_text.items(): - write_group_to_file(resource.replace('.json', ''), json.dumps(content, indent=4), chart['source'], chart['destination']) - print("Finished") - - -if __name__ == '__main__': - main() |