Exemplo n.º 1
0
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()
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
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)
Exemplo n.º 5
0
    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)
Exemplo n.º 8
0
    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
Exemplo n.º 10
0
    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
Exemplo n.º 11
0
    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