Merge ~jacekn/prometheus-charm:blackbox-relation into prometheus-charm:master

Proposed by Jacek Nykis
Status: Merged
Merge reported by: Jamon Camisso
Merged at revision: 0e2729a7f9ebdcfddaaba6c3d3124f6b46af5388
Proposed branch: ~jacekn/prometheus-charm:blackbox-relation
Merge into: prometheus-charm:master
Diff against target: 86 lines (+28/-3)
3 files modified
config.yaml (+2/-1)
metadata.yaml (+2/-0)
reactive/prometheus.py (+24/-2)
Reviewer Review Type Date Requested Status
Prometheus Charmers Pending
Review via email: mp+326083@code.launchpad.net

Description of the change

Add blackbox-exporter relation support

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/config.yaml b/config.yaml
2index 0cf42bb..c61f50a 100644
3--- a/config.yaml
4+++ b/config.yaml
5@@ -55,7 +55,8 @@ options:
6 description: |
7 Can be used to add custom scrape jobs, for example SNMP exporter config.
8 This will be parsed as YAML, format is a list of dicts as shown in the example.
9- For convenience "{{ snmp_exporter }}" will be replaced with SNMP exporter address.
10+ For convenience "{{ snmp_exporter }}" and "{{ blackbox_exporter }}" will be
11+ replaced with SNMP and blackbox exporter addresses respectively.
12 Example:
13 - job_name: 'snmp'
14 scrape_interval: 1m
15diff --git a/metadata.yaml b/metadata.yaml
16index dc5d651..c06eee2 100644
17--- a/metadata.yaml
18+++ b/metadata.yaml
19@@ -29,6 +29,8 @@ requires:
20 interface: http
21 snmp-exporter:
22 interface: http
23+ blackbox-exporter:
24+ interface: http
25 storage:
26 metrics-filesystem:
27 type: filesystem
28diff --git a/reactive/prometheus.py b/reactive/prometheus.py
29index 667158e..e56d5bf 100644
30--- a/reactive/prometheus.py
31+++ b/reactive/prometheus.py
32@@ -276,8 +276,9 @@ def get_manual_jobs():
33 return None
34 else:
35 snmp_exporter = unitdata.kv().get('snmp_exporter_address', '127.0.0.1:9116')
36+ blackbox_exporter = unitdata.kv().get('blackbox_exporter_address', '127.0.0.1:9115')
37 t = Template(config.get('scrape-jobs'))
38- return t.render(snmp_exporter=snmp_exporter)
39+ return t.render(snmp_exporter=snmp_exporter, blackbox_exporter=blackbox_exporter)
40
41
42 @when('prometheus.do-reconfig-yml')
43@@ -287,7 +288,6 @@ def write_prometheus_config_yml():
44
45 ver_major, ver_minor, ver_patch = get_version()
46 target_jobs = unitdata.kv().get('target_jobs', [])
47- target_juju_units = unitdata.kv().get('target_juju_units', {})
48 scrape_jobs = unitdata.kv().get('scrape_jobs', [])
49 manual_jobs = get_manual_jobs()
50
51@@ -593,6 +593,13 @@ def update_prometheus_no_snmp_exporter():
52
53
54 @when('prometheus.started')
55+@when_not('blackbox-exporter.available')
56+def update_prometheus_no_blackbox_exporter():
57+ unitdata.kv().unset('blackbox_exporter_address')
58+ set_state('prometheus.do-check-reconfig')
59+
60+
61+@when('prometheus.started')
62 @when('snmp-exporter.available')
63 def update_prometheus_snmp_exporter(snmp_exporter):
64 services = snmp_exporter.services()
65@@ -608,6 +615,21 @@ def update_prometheus_snmp_exporter(snmp_exporter):
66
67
68 @when('prometheus.started')
69+@when('blackbox-exporter.available')
70+def update_prometheus_blackbox_exporter(blackbox_exporter):
71+ services = blackbox_exporter.services()
72+ if not (data_changed('blackbox-exporter.related_services', services)):
73+ return
74+ # At this point we only support single blackbox exporter target
75+ for service in services:
76+ for unit in service['hosts']:
77+ hookenv.log('{} has a unit {}:{}'.format(
78+ service['service_name'], unit['hostname'], unit['port']))
79+ unitdata.kv().set('blackbox_exporter_address', '{hostname}:{port}'.format(**unit))
80+ set_state('prometheus.do-check-reconfig')
81+
82+
83+@when('prometheus.started')
84 @when('nrpe-external-master.available')
85 def update_nrpe_config(svc):
86 hostname = nrpe.get_nagios_hostname()

Subscribers

People subscribed via source and target branches