summaryrefslogtreecommitdiff
path: root/roles/monitoring/grafana/filter_plugins/grafana.py
blob: b380c7ea758dcc3d226cc2022d58ad91d41042b3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

import os
from functools import partial

from ansible import errors
from ansible.module_utils.common.text import formatters


def resolve_grafana_url(url, config):
    try:
        protocol = config.get('protocol', 'http')
        addr = config.get('http_addr', '127.0.0.1')
        port = config.get('http_port', '3000')
        serve_from_sub_path = config.get('serve_from_sub_path', False)

        if not serve_from_sub_path:
            return "%s://%s:%s" % (protocol, addr, port)

        return url.replace('%(protocol)s', str(protocol)).replace('%(domain)s', str(addr)).replace('%(http_port)s', str(port))
    except Exception as e:
        raise errors.AnsibleFilterError("resolve_grafana_url(): %s" % str(e))


def grafana_dashboard_subdirs(dashboards):
    try:
        dirs = []
        for dashboard in dashboards:
            if 'file' in dashboard:
                if '/' in dashboard['file']:
                    dirs.append(os.path.dirname(dashboard['file']))
            else:
                if '/' in dashboard['name']:
                    dirs.append(os.path.dirname(dashboard['name']))
        return dirs
    except Exception as e:
        raise errors.AnsibleFilterError("grafana_dashboard_subdirs(): %s" % str(e))


def grafana_dashboard_dest(dashboard):
    try:
        key = 'name'
        if 'file' in dashboard:
            key = 'file'

        if '/' in dashboard[key]:
            return "%s/%s_%s" % (os.path.dirname(dashboard[key]), dashboard['datasource'], os.path.basename(dashboard[key]))
        return "%s_%s" % (dashboard['datasource'], dashboard[key])
    except Exception as e:
        raise errors.AnsibleFilterError("grafana_dashboard_dest(): %s" % str(e))


class FilterModule(object):

    filter_map = {
        'resolve_grafana_url': resolve_grafana_url,
        'grafana_dashboard_subdirs': grafana_dashboard_subdirs,
        'grafana_dashboard_dest': grafana_dashboard_dest,
    }

    def filters(self):
        return self.filter_map