~axino/charms/xenial/prometheus-snmp-exporter/layer-prometheus-snmp-exporter

« back to all changes in this revision

Viewing changes to reactive/prometheus-snmp-exporter.py

  • Committer: Jacek Nykis
  • Date: 2016-05-18 15:27:05 UTC
  • Revision ID: jacek.nykis@canonical.com-20160518152705-sresiz67cd95cv2p
FirstĀ attempt

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import yaml
 
2
 
 
3
from charmhelpers import fetch
 
4
from charmhelpers.core import host, hookenv
 
5
from charmhelpers.core.templating import render
 
6
from charms.reactive import (
 
7
    when, when_not, set_state, remove_state
 
8
)
 
9
from charms.reactive.helpers import any_file_changed, data_changed
 
10
 
 
11
 
 
12
SVCNAME = 'prometheus-snmp-exporter'
 
13
PKGNAMES = ['prometheus-snmp-exporter']
 
14
PORT_DEF = 9116
 
15
SNMP_EXPORTER_YML = '/etc/prometheus/snmp.yaml'
 
16
SNMP_EXPORTER_YML_TMPL = 'snmp.yaml.j2'
 
17
 
 
18
 
 
19
def templates_changed(tmpl_list):
 
20
    return any_file_changed(['templates/{}'.format(x) for x in tmpl_list])
 
21
 
 
22
 
 
23
@when('snmp-exporter.do-install')
 
24
def install_packages():
 
25
    fetch.configure_sources()
 
26
    fetch.apt_update()
 
27
    fetch.apt_install(PKGNAMES)
 
28
    remove_state('snmp-exporter.do-install')
 
29
 
 
30
 
 
31
def validate_config():
 
32
    return yaml.safe_load(open(SNMP_EXPORTER_YML))
 
33
 
 
34
 
 
35
@when('alertmanager.do-reconfig-yaml')
 
36
def write_alertmanager_config_yaml():
 
37
    config = hookenv.config()
 
38
    render(source=SNMP_EXPORTER_YML_TMPL,
 
39
           target=SNMP_EXPORTER_YML,
 
40
           context={'config': config}
 
41
           )
 
42
    validate_config()
 
43
    hookenv.open_port(PORT_DEF)
 
44
    set_state('snmp-exporter.do-restart')
 
45
    remove_state('snmp-exporter.do-reconfig-yaml')
 
46
 
 
47
 
 
48
@when_not('snmp-exporter.started')
 
49
def setup_alertmanager():
 
50
    hookenv.status_set('maintenance', 'Installing software')
 
51
    install_packages()
 
52
    set_state('snmp-exporter.do-check-reconfig')
 
53
 
 
54
 
 
55
@when('snmp-exporter.started')
 
56
def check_config():
 
57
    set_state('snmp-exporter.do-check-reconfig')
 
58
 
 
59
 
 
60
@when('snmp-exporter.do-check-reconfig')
 
61
def check_reconfig_alertmanager():
 
62
    config = hookenv.config()
 
63
    install_opts = ('install_sources', 'install_keys')
 
64
    if any(config.changed(opt) for opt in install_opts):
 
65
        set_state('snmp-exporter.do-install')
 
66
 
 
67
    if data_changed('snmp-exporter.config', config):
 
68
        set_state('alertmanager.do-reconfig-yaml')
 
69
 
 
70
    if templates_changed([SNMP_EXPORTER_YML_TMPL]):
 
71
        set_state('snmp-exporter.do-reconfig-yaml')
 
72
 
 
73
    remove_state('snmp-exporter.do-check-reconfig')
 
74
 
 
75
 
 
76
@when('snmp-exporter.do-restart')
 
77
def restart_alertmanager():
 
78
    if not host.service_running(SVCNAME):
 
79
        hookenv.log('Starting {}...'.format(SVCNAME))
 
80
        host.service_start(SVCNAME)
 
81
    else:
 
82
        hookenv.log('Restarting {}, config file changed...'.format(SVCNAME))
 
83
        host.service_restart(SVCNAME)
 
84
    hookenv.status_set('active', 'Ready')
 
85
    set_state('snmp-exporter.started')
 
86
    remove_state('snmp-exporter.do-restart')
 
87
 
 
88
 
 
89
# Relations
 
90
@when('snmp-exporter.started')
 
91
@when('target.available')
 
92
def configure_snmp_exporter_relation(target):
 
93
    target.configure(PORT_DEF)