initial commit poc
This commit is contained in:
parent
acbf8fa6ef
commit
2b5856ee30
6
Makefile
Normal file
6
Makefile
Normal file
@ -0,0 +1,6 @@
|
||||
env:
|
||||
virtualenv -p python3 env
|
||||
./env/bin/pip install -r requirements.txt
|
||||
|
||||
run: env
|
||||
./env/bin/python -m minitor.main
|
0
minitor/__init__.py
Normal file
0
minitor/__init__.py
Normal file
39
minitor/main.py
Normal file
39
minitor/main.py
Normal file
@ -0,0 +1,39 @@
|
||||
from subprocess import CalledProcessError
|
||||
from subprocess import check_call
|
||||
|
||||
import yamlenv
|
||||
|
||||
# TODO: validate on start
|
||||
|
||||
def get_config(path):
|
||||
"""Loads config from a YAML file with env interpolation"""
|
||||
with open(path, 'r') as yaml:
|
||||
contents = yaml.read()
|
||||
return yamlenv.load(contents)
|
||||
|
||||
|
||||
def check_monitor(monitor):
|
||||
cmd = monitor.get('command', [])
|
||||
if cmd:
|
||||
check_call(cmd, shell=isinstance(cmd, str))
|
||||
|
||||
|
||||
def alert_for_monitor(monitor, alerts):
|
||||
for alert_name in monitor.get('alerts', []):
|
||||
cmd = alerts.get(alert_name, {}).get('command', [])
|
||||
if cmd:
|
||||
check_call(cmd, shell=isinstance(cmd, str))
|
||||
|
||||
|
||||
def main():
|
||||
# TODO: get config file off command line
|
||||
config = get_config('./sample-config.yml')
|
||||
alerts = config.get('alerts', {})
|
||||
for monitor in config.get('monitors', []):
|
||||
try:
|
||||
check_monitor(monitor)
|
||||
except CalledProcessError:
|
||||
alert_for_monitor(monitor, alerts)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
1
requirements.txt
Normal file
1
requirements.txt
Normal file
@ -0,0 +1 @@
|
||||
yamlenv
|
19
sample-config.yml
Normal file
19
sample-config.yml
Normal file
@ -0,0 +1,19 @@
|
||||
monitors:
|
||||
- name: View
|
||||
command: [ 'curl', 'https://localhost:5000' ]
|
||||
# environment:
|
||||
# PATH: ${PATH}
|
||||
alerts: [ email, sms ]
|
||||
# other settings from other health check apps like interval and back off
|
||||
|
||||
alerts:
|
||||
email:
|
||||
command: echo 'Send an email'
|
||||
sms:
|
||||
command: echo 'Send an SMS'
|
||||
|
||||
federation:
|
||||
- location: https://host1.com
|
||||
client_key: keyfromhost1
|
||||
server_key: keyhost1uses
|
||||
alerts: [ sms ]
|
Loading…
Reference in New Issue
Block a user