bundlewrap/bundles/grafana/items.py
Franzi 9021c6f853
All checks were successful
bundlewrap/pipeline/head This commit looks good
bundles/grafana: fix permissions for some files and directories
2021-07-04 20:06:35 +02:00

153 lines
4.3 KiB
Python

from itertools import count
from os import listdir
from os.path import isdir, isfile, join
from pathlib import Path
from uuid import UUID
from bundlewrap.metadata import metadata_to_json
for row in Path(join(repo.path, 'bundles', 'grafana', 'dashboard-rows')).rglob("*.py"):
with open(row, 'r') as f:
exec(f.read())
directories = {
# Don't ask me why these permissions are that weird. It's what the
# debian package sets them to after upgrades.
'/etc/grafana/provisioning/dashboards': {
'group': 'grafana',
'purge': True,
},
'/etc/grafana/provisioning/datasources': {
'group': 'grafana',
'purge': True,
},
'/etc/grafana/provisioning/notifiers': {
'group': 'grafana',
'purge': True,
},
'/etc/grafana/provisioning/plugins': {
'group': 'grafana',
'purge': True,
},
'/var/lib/grafana/dashboards': {
'group': 'grafana',
'purge': True,
'triggers': {
'svc_systemd:grafana-server:restart',
},
},
}
files = {
'/etc/grafana/grafana.ini': {
'content_type': 'mako',
'context': node.metadata['grafana'],
'owner': 'grafana',
'group': 'grafana',
'mode': '0640',
'triggers': {
'svc_systemd:grafana-server:restart',
},
},
'/etc/grafana/provisioning/dashboards/bundlewrap.yaml': {
'source': 'dashboards.yaml',
'owner': 'grafana',
'group': 'grafana',
'mode': '0640',
'triggers': {
'svc_systemd:grafana-server:restart',
},
},
}
svc_systemd = {
'grafana-server': {
'needs': {
'file:/etc/grafana/grafana.ini',
'pkg_apt:grafana',
},
},
}
### dashboard management starts here
for rnode in repo.nodes:
if not rnode.has_bundle('telegraf'):
continue
panel_id = count(start=1)
dashboard = {
'title': rnode.name,
'uid': UUID(int=rnode.magic_number).hex[:10],
'editable': False,
'graphTooltip': 1,
'refresh': '1m',
'schemaVersion': 12,
'style': 'dark',
'tags': {'bw'},
'time': {
'from': 'now-1d',
'to': 'now'
},
'version': 1,
'rows': [
dashboard_row_cpu(panel_id, rnode),
dashboard_row_ip_traffic(panel_id, rnode),
dashboard_row_memory(panel_id, rnode),
],
}
if rnode.has_bundle('lm-sensors'):
dashboard['rows'].append(dashboard_row_sensors(panel_id, rnode))
dashboard['tags'].add('lm-sensors')
dashboard['rows'].append(dashboard_row_disk_space(panel_id, rnode))
dashboard['rows'].append(dashboard_row_disk_iops(panel_id, rnode))
if rnode.has_bundle('nginx'):
dashboard['rows'].append(dashboard_row_nginx(panel_id, rnode))
dashboard['tags'].add('nginx')
if rnode.has_bundle('postfix'):
dashboard['rows'].append(dashboard_row_postfix(panel_id, rnode))
dashboard['tags'].add('postfix')
if rnode.has_bundle('postgresql'):
dashboard['rows'].append(dashboard_row_postgresql(panel_id, rnode))
dashboard['tags'].add('postgresql')
if rnode.has_bundle('wireguard'):
dashboard['rows'].append(dashboard_row_wireguard(panel_id, rnode))
dashboard['tags'].add('wireguard')
if rnode.has_bundle('zfs'):
dashboard['rows'].append(dashboard_row_zfs(panel_id, rnode))
dashboard['tags'].add('zfs')
files[f'/var/lib/grafana/dashboards/{rnode.name}.json'] = {
'owner': 'grafana',
'group': 'grafana',
# use metadata_to_json, because this supports sets
'content': metadata_to_json(dashboard),
'triggers': {
'svc_systemd:grafana-server:restart',
},
}
additional_path = join(repo.path, 'data', 'grafana', 'files', node.name, 'dashboards')
if isdir(additional_path):
for file in listdir(additional_path):
if not isfile(join(additional_path, file)) or file.startswith('.') or file.startswith('_'):
continue
files[f'/var/lib/grafana/dashboards/{file}'] = {
'owner': 'grafana',
'group': 'grafana',
'source': join(node.name, 'dashboards', file),
'triggers': {
'svc_systemd:grafana-server:restart',
},
}