Skip to content
Snippets Groups Projects
Commit 6b3abb76 authored by Erik Reid's avatar Erik Reid
Browse files

Finished feature use-statsd-for-counts.

parents 12c0fcb2 aa8247ed
No related branches found
No related tags found
No related merge requests found
...@@ -29,6 +29,7 @@ from typing import Union ...@@ -29,6 +29,7 @@ from typing import Union
import click import click
import jsonschema import jsonschema
from statsd import StatsClient
from brian_polling_manager import inventory, interfaces, environment from brian_polling_manager import inventory, interfaces, environment
...@@ -60,7 +61,12 @@ _DEFAULT_CONFIG = { ...@@ -60,7 +61,12 @@ _DEFAULT_CONFIG = {
} }
}, },
'statedir': '/tmp/', 'statedir': '/tmp/',
'logging': environment.DEFAULT_LOGGING_FILENAME 'logging': environment.DEFAULT_LOGGING_FILENAME,
'statsd': {
'hostname': 'localhost',
'port': 8125,
'prefix': 'brian_polling'
}
} }
CONFIG_SCHEMA = { CONFIG_SCHEMA = {
...@@ -102,6 +108,16 @@ CONFIG_SCHEMA = { ...@@ -102,6 +108,16 @@ CONFIG_SCHEMA = {
}, },
'required': ['api-base', 'token', 'interface-check'], 'required': ['api-base', 'token', 'interface-check'],
'additionalProperties': False 'additionalProperties': False
},
'statsd': {
'type': 'object',
'properties': {
'hostname': {'type': 'string'},
'port': {'type': 'integer'},
'prefix': {'type': 'string'}
},
'required': ['hostname', 'port', 'prefix'],
'additionalProperties': False
} }
}, },
'type': 'object', 'type': 'object',
...@@ -113,7 +129,8 @@ CONFIG_SCHEMA = { ...@@ -113,7 +129,8 @@ CONFIG_SCHEMA = {
}, },
'sensu': {'$ref': '#/definitions/sensu'}, 'sensu': {'$ref': '#/definitions/sensu'},
'statedir': {'type': 'string'}, 'statedir': {'type': 'string'},
'logging': {'type': 'string'} 'logging': {'type': 'string'},
'statsd': {'$ref': '#/definitions/statsd'}
}, },
'required': ['inventory', 'sensu', 'statedir'], 'required': ['inventory', 'sensu', 'statedir'],
'additionalProperties': False 'additionalProperties': False
...@@ -237,7 +254,16 @@ def main(config, force): ...@@ -237,7 +254,16 @@ def main(config, force):
state.last = last state.last = last
state.interfaces = inventory.load_interfaces(config['inventory']) state.interfaces = inventory.load_interfaces(config['inventory'])
interfaces.refresh(config['sensu'], state) statsd_config = config.get('statsd', None)
if statsd_config:
statsd = StatsClient(
host=statsd_config['hostname'],
port=statsd_config['port'],
prefix=statsd_config['prefix'])
else:
statsd = None
interfaces.refresh(config['sensu'], state, statsd=statsd)
if __name__ == '__main__': if __name__ == '__main__':
......
...@@ -68,22 +68,35 @@ def _checks_match(a, b) -> bool: ...@@ -68,22 +68,35 @@ def _checks_match(a, b) -> bool:
return True return True
def refresh(sensu_params, state): def refresh(sensu_params, state, statsd=None):
ifc_checks = load_ifc_checks(sensu_params) ifc_checks = load_ifc_checks(sensu_params)
created = 0
updated = 0
interfaces = 0
for interface in state.interfaces: for interface in state.interfaces:
interfaces += 1
expected_check = _make_check( expected_check = _make_check(
sensu_params['interface-check'], interface) sensu_params['interface-check'], interface)
expected_name = _check_name(interface) expected_name = _check_name(interface)
if expected_name not in ifc_checks: if expected_name not in ifc_checks:
created += 1
sensu.create_check(sensu_params, expected_check) sensu.create_check(sensu_params, expected_check)
elif not _checks_match(ifc_checks[expected_name], expected_check): elif not _checks_match(ifc_checks[expected_name], expected_check):
updated += 1
sensu.update_check(sensu_params, expected_check) sensu.update_check(sensu_params, expected_check)
wanted_checks = {_check_name(ifc) for ifc in state.interfaces} wanted_checks = {_check_name(ifc) for ifc in state.interfaces}
extra_checks = set(ifc_checks.keys()) - wanted_checks extra_checks = set(ifc_checks.keys()) - wanted_checks
for name in extra_checks: for name in extra_checks:
sensu.delete_check(sensu_params, name) sensu.delete_check(sensu_params, name)
if statsd:
statsd.guage('checks', len(ifc_checks))
statsd.guage('interfaces', interfaces)
statsd.guage('created', created)
statsd.guage('updated', updated)
...@@ -11,7 +11,8 @@ setup( ...@@ -11,7 +11,8 @@ setup(
install_requires=[ install_requires=[
'click', 'click',
'requests', 'requests',
'jsonschema' 'jsonschema',
'statsd'
], ],
entry_points={ entry_points={
'console_scripts': [ 'console_scripts': [
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment