From 2f3106da60f40d0d480f5684263bb406d89dfe1f Mon Sep 17 00:00:00 2001 From: Mitsuo Takaki Date: Thu, 28 Apr 2016 01:51:59 -0700 Subject: [PATCH] Creating agent that schedules the monitoring task. --- README.md | 5 +++++ cachet_url_monitor/configuration.py | 2 ++ cachet_url_monitor/scheduler.py | 27 +++++++++++++++++++++++++-- dev_requirements.txt | 1 + requirements.txt | 3 +++ 5 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 README.md create mode 100644 requirements.txt 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