diff --git a/README.md b/README.md new file mode 100644 index 0000000..fb013e1 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Status + +cachet-url-monitor +======================== +Python plugin for [cachet](cachethq.io) that monitors an URL, verifying it's response status and latency. \ No newline at end of file diff --git a/cachet_url_monitor/configuration.py b/cachet_url_monitor/configuration.py index 622fa5e..ab44ecb 100644 --- a/cachet_url_monitor/configuration.py +++ b/cachet_url_monitor/configuration.py @@ -12,6 +12,8 @@ class Configuration(object): """ def __init__(self, config_file): #TODO(mtakaki|2016-04-26): Needs validation if the config is correct. + #TODO(mtakaki|2016-04-28): Accept overriding settings using environment + # variables so we have a more docker-friendly approach. self.config_file = config_file self.data = load(file(self.config_file, 'r')) self.expectations = [Expectaction.create(expectation) for expectation diff --git a/cachet_url_monitor/scheduler.py b/cachet_url_monitor/scheduler.py index 122604e..1377eb6 100644 --- a/cachet_url_monitor/scheduler.py +++ b/cachet_url_monitor/scheduler.py @@ -1,10 +1,33 @@ #!/usr/bin/env python -from threading import Timer -import configuration +from configuration import Configuration +import logging +import schedule +import sys +import time class Agent(object): def __init__(self, configuration): self.configuration = configuration + def execute(self): + self.configuration.evaluate() + self.configuration.push_status_and_metrics() + def start(self): + schedule.every(self.configuration.data['frequency']).seconds.do(self.execute) + + +if __name__ == "__main__": + if len(sys.argv) <= 1: + logging.fatal('Missing configuration file argument') + sys.exit(1) + + configuration = Configuration(sys.argv[1]) + agent = Agent(configuration) + + agent.start() + logging.info('Starting monitor agent...') + while True: + schedule.run_pending() + time.sleep(configuration.data['frequency']) diff --git a/dev_requirements.txt b/dev_requirements.txt index 2792593..07e2a84 100644 --- a/dev_requirements.txt +++ b/dev_requirements.txt @@ -2,3 +2,4 @@ PyYAML==3.11 ipython==4.2.0 pudb==2016.1 requests==2.9.1 +schedule==0.3.2 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..37bcb9b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +PyYAML==3.11 +requests==2.9.1 +schedule==0.3.2