Fixing log format and extracting main logic to a separate class.

This commit is contained in:
Mitsuo Takaki
2016-04-30 13:39:02 -07:00
parent c7a28edac2
commit f254bddd0f
4 changed files with 35 additions and 16 deletions

View File

@@ -15,6 +15,7 @@ class Configuration(object):
#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.logger = logging.getLogger('cachet_url_monitor.configuration.Configuration')
self.config_file = config_file
self.data = load(file(self.config_file, 'r'))
self.expectations = [Expectaction.create(expectation) for expectation
@@ -30,17 +31,17 @@ class Configuration(object):
self.data['endpoint']['url'],
timeout=self.data['endpoint']['timeout'])
except requests.ConnectionError:
logging.warning('The URL is unreachable: %s %s' %
self.logger.warning('The URL is unreachable: %s %s' %
(self.data['endpoint']['method'],
self.data['endpoint']['url']))
self.status = 3
return
except requests.HTTPError:
logging.exception('Unexpected HTTP response')
self.logger.exception('Unexpected HTTP response')
self.status = 3
return
except requests.Timeout:
logging.warning('Request timed out')
self.logger.warning('Request timed out')
self.status = 3
return
@@ -63,10 +64,10 @@ class Configuration(object):
params=params, headers=headers)
if component_request.status_code == 200:
# Successful update
logging.info('Component update: status [%d]' % (self.status,))
self.logger.info('Component update: status [%d]' % (self.status,))
else:
# Failed to update the API status
logging.warning('Component update failed with status [%d]: API'
self.logger.warning('Component update failed with status [%d]: API'
' status: [%d]' % (component_request.status_code, self.status))
class Expectaction(object):

View File

@@ -25,16 +25,27 @@ class Agent(object):
schedule.every(self.configuration.data['frequency']).seconds.do(self.execute)
class Scheduler(object):
def __init__(self, config_file):
self.logger = logging.getLogger('cachet_url_monitor.scheduler.Scheduler')
self.configuration = Configuration(config_file)
self.agent = Agent(self.configuration)
def start(self):
self.agent.start()
self.logger.info('Starting monitor agent...')
while True:
schedule.run_pending()
time.sleep(self.configuration.data['frequency'])
if __name__ == "__main__":
FORMAT = "%(levelname)9s [%(asctime)-15s] %(name)s - %(message)s"
logging.basicConfig(format=FORMAT, level=logging.INFO)
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'])
scheduler = Scheduler(sys.argv[1])
scheduler.start()