"""Chartmetric Monitor Events in Datadog.""" import os from garcon import activity from garcon import runner import raven from swf_monitoring import logger from swf_monitoring.flows import base from swf_monitoring.flows.chartmetric_monitor import config from swf_monitoring.flows.chartmetric_monitor import tasks class Flow(base.FlowBaseMixin): """Class representing the workflow.""" def __init__(self): """Initialize flow object.""" self.name = self.generate_feed_name(config.FEED_NAME) self.feed_name = config.FEED_NAME self.version = '1.0' self.domain = os.environ.get('SWF_DOMAIN', 'dev') self.timeout = 60 * 5 self.sentry_dsn = config.SENTRY_DSN if self.sentry_dsn: self.sentry_client = raven.Client() self.create = activity.create( self.domain, self.name, version=self.version, on_exception=self.on_exception) def on_exception(self, actor, exception): """Capture an exception that has occurred in the application. Args: actor (ActivityWorker, DeciderWorker): The actor that has received the exception. exception (Exception): The exception to capture. """ if self.sentry_dsn: self.sentry_client.captureException() if isinstance(actor, activity.Activity): actor.logger.error(exception, exc_info=True) else: logger.error(exception, exc_info=True) def decider(self, schedule): """Activity decider. Args: schedule (callable): The scheduler method. """ schedule('check_tables', self.check_tables) @property def check_tables(self): """Check if tables are present.""" return self.create( name='check_tables', retry=0, tasks=runner.Sync( tasks.check_tables.fill(namespace='check_tables')))