def run(): # Instantiate Controller and EventStore mailer = Mailer(MAIL_BACKOFF_TIMEOUT_IN_SEC, SMTP_ADDRESS, SMTP_USERNAME, SMTP_PASSWORD, FROM_ADDRESS, TO_ADDRESS) sms_sender = SmsSender(SMS_BACKOFF_TIMEOUT_IN_SEC, SMS_API_KEY, FROM_NUMBER, TO_NUMBER) event_store = EventStore() event_controller = EventController( event_store, event_heartbeat_in_sec=HEARTBEAT_INTERVAL_SEC, mailer=mailer, sms_sender=sms_sender) log.info('Starting Monitor site on port %s...', MONITOR_PORT) httpd = ThreadedMonitorServer((MONITOR_HOST, MONITOR_PORT), MonitorRequestHandler, event_controller, mailer, sms_sender) _run_threaded(httpd) log.info('Starting Alarm Server on port %s...', ALARM_PORT) alarm_server = ThreadedTCPServer( (ALARM_HOST, ALARM_PORT), AlarmNotificationHandler, event_controller) _run_threaded(alarm_server) event_controller.start() try: while True: time.sleep(60) except KeyboardInterrupt: log.info('Ctrl-c pressed, exiting ...') alarm_server.shutdown() httpd.shutdown() event_store.close()
def run(): # Instantiate Controller and EventStore mailer = Mailer(MAIL_BACKOFF_TIMEOUT_IN_SEC, SMTP_ADDRESS, SMTP_USERNAME, SMTP_PASSWORD, FROM_ADDRESS, TO_ADDRESS) sms_sender = SmsSender(SMS_BACKOFF_TIMEOUT_IN_SEC, SMS_API_KEY, FROM_NUMBER, TO_NUMBER) event_store = EventStore() event_controller = EventController(event_store, event_heartbeat_in_sec=HEARTBEAT_INTERVAL_SEC, mailer=mailer, sms_sender=sms_sender) log.info('Starting Monitor site on port %s...', MONITOR_PORT) httpd = ThreadedMonitorServer((MONITOR_HOST, MONITOR_PORT), MonitorRequestHandler, event_controller, mailer, sms_sender) _run_threaded(httpd) log.info('Starting Alarm Server on port %s...', ALARM_PORT) alarm_server = ThreadedTCPServer((ALARM_HOST, ALARM_PORT), AlarmNotificationHandler, event_controller) _run_threaded(alarm_server) event_controller.start() try: while True: time.sleep(60) except KeyboardInterrupt: log.info('Ctrl-c pressed, exiting ...') alarm_server.shutdown() httpd.shutdown() event_store.close()
def run(): # Instantiate Controller and EventStore event_store = EventStore() event_controller = EventController(event_store, EVENT_HEARTBEAT_IN_SEC) log.info('Starting Server...') # Create the server, binding to HOST on PORT server = ThreadedTCPServer((HOST, PORT), AlarmNotificationHandler, event_controller) # Start a thread with the server -- that thread will then start one # more thread for each request server_thread = threading.Thread(target=server.serve_forever) # Exit the server thread when the main thread terminates server_thread.daemon = True server_thread.start() log.info('Server loop running in thread: %s', server_thread.name) event_controller.start() try: while True: time.sleep(60) except KeyboardInterrupt: log.info('Ctrl-c pressed, exiting ...') server.shutdown() event_store.close()
def test_do_nothing_if_delta_timestamps_within_expected_range(self, log_mock): event_store_mock = MagicMock(spec=EventStore) event_store_mock.find_last_events.return_value = datetime(2000, 1, 1, 12, 15, 33), datetime(2000, 1, 1, 12, 5, 31) sut_event_controller = EventController(event_store_mock, 600, self.mailer, self.sms_sender) sut_event_controller.trigger_alarm_event() self.assertFalse(log_mock.warning.called)
def test_storing_new_event_with_current_utc_timestamp(self, datetime_mock): mocked_utc_time = datetime(2000, 1, 1) datetime_mock.utcnow.return_value = mocked_utc_time event_store_mock = MagicMock(spec=EventStore) sut_event_controller = EventController(event_store_mock, 60) sut_event_controller.trigger_alarm_event() event_store_mock.store_event.assert_called_once_with(mocked_utc_time)
def test_do_nothing_if_less_than_two_events_returned(self, log_mock): event_store_mock = MagicMock(spec=EventStore) event_store_mock.find_last_events.return_value = datetime(2000, 1, 1), sut_event_controller = EventController(event_store_mock, 600, self.mailer, self.sms_sender) sut_event_controller.trigger_alarm_event() last_call_args = log_mock.info.call_args # Returns arguments of last call self.assertIn('Not enough events', last_call_args[0][0]) # last_call_args = tuple containing tuple
def test_storing_new_event_with_current_utc_timestamp(self, datetime_mock): mocked_utc_time = datetime(2000, 1, 1) datetime_mock.utcnow.return_value = mocked_utc_time event_store_mock = MagicMock(spec=EventStore) sut_event_controller = EventController(event_store_mock, 600, self.mailer, self.sms_sender) sut_event_controller.trigger_alarm_event() event_store_mock.store_event.assert_called_once_with(mocked_utc_time)
def test_do_nothing_if_delta_timestamps_within_expected_range( self, log_mock): event_store_mock = MagicMock(spec=EventStore) event_store_mock.find_last_events.return_value = datetime( 2000, 1, 1, 12, 6, 33), datetime(2000, 1, 1, 12, 5, 32) sut_event_controller = EventController(event_store_mock, 60) sut_event_controller.trigger_alarm_event() self.assertFalse(log_mock.warn.called)
def test_log_warning_if_events_too_close_together(self, log_mock): event_store_mock = MagicMock(spec=EventStore) event_store_mock.find_last_events.return_value = datetime(2000, 1, 1, 12, 6, 30), datetime(2000, 1, 1, 12, 5, 32) sut_event_controller = EventController(event_store_mock, 600, self.mailer, self.sms_sender) sut_event_controller.trigger_alarm_event() self.assertTrue(log_mock.warning.called) last_call_args = log_mock.warning.call_args # Returns arguments of last call self.assertIn('out of heartbeat range', last_call_args[0][0]) # last_call_args = tuple containing tuple
def test_do_nothing_if_less_than_two_events_returned(self, log_mock): event_store_mock = MagicMock(spec=EventStore) event_store_mock.find_last_events.return_value = datetime(2000, 1, 1), sut_event_controller = EventController(event_store_mock, 60) sut_event_controller.trigger_alarm_event() last_call_args = log_mock.info.call_args # Returns arguments of last call self.assertIn( 'Not enough events', last_call_args[0][0]) # last_call_args = tuple containing tuple
def test_log_warning_if_events_too_close_together(self, log_mock): event_store_mock = MagicMock(spec=EventStore) event_store_mock.find_last_events.return_value = datetime( 2000, 1, 1, 12, 6, 30), datetime(2000, 1, 1, 12, 5, 32) sut_event_controller = EventController(event_store_mock, 60) sut_event_controller.trigger_alarm_event() self.assertTrue(log_mock.warn.called) last_call_args = log_mock.warn.call_args # Returns arguments of last call self.assertIn( 'out of heartbeat range', last_call_args[0][0]) # last_call_args = tuple containing tuple