def test_handle_ressurrection_to_alive(self):
     ressurrection_state = deadman_state_machine.RessurrectionState()
     timeout = 1
     context = deadman_state_machine.DeadmanStateMachine(
         ressurrection_state, timeout)
     # before transition
     self.assertEqual(
         True,
         isinstance(context.get_state(),
                    deadman_state_machine.RessurrectionState))
     # process request & state transition
     context.request()
     self.assertEqual(
         True,
         isinstance(context.get_state(), deadman_state_machine.AliveState))
     self.assertEqual(
         True,
         isinstance(context.get_last_state(),
                    deadman_state_machine.RessurrectionState))
 def test_handle_alive_to_alive(self):
     alive_state = deadman_state_machine.AliveState()
     timeout = 30
     context = deadman_state_machine.DeadmanStateMachine(
         alive_state, timeout)
     # set last_ping more recent than timeout to simulate a received ping
     context.set_last_ping(datetime.datetime.now() -
                           datetime.timedelta(seconds=1))
     # before transition
     self.assertEqual(
         True,
         isinstance(context.get_state(), deadman_state_machine.AliveState))
     # process request & state transition
     context.request()
     self.assertEqual(
         True,
         isinstance(context.get_state(), deadman_state_machine.AliveState))
     self.assertEqual(
         True,
         isinstance(context.get_last_state(),
                    deadman_state_machine.AliveState))
 def test_handle_dead_to_dead(self):
     dead_state = deadman_state_machine.DeadState()
     timeout = 1
     context = deadman_state_machine.DeadmanStateMachine(
         dead_state, timeout)
     # set last_ping older than timeout to simulate blackout
     context.set_last_ping(datetime.datetime.now() -
                           datetime.timedelta(seconds=30))
     # before transition
     self.assertEqual(
         True,
         isinstance(context.get_state(), deadman_state_machine.DeadState))
     # process request & state transition
     context.request()
     self.assertEqual(
         True,
         isinstance(context.get_state(), deadman_state_machine.DeadState))
     self.assertEqual(
         True,
         isinstance(context.get_last_state(),
                    deadman_state_machine.DeadState))
Example #4
0
def main():
    FORMAT = '%(asctime)-15s %(message)s'
    logging.basicConfig(level=logging.DEBUG, format=FORMAT)
    logger = logging.getLogger(__name__)
    alive_state = deadman_state_machine.AliveState()
    alert_dict = {
        'status': 'firing',
        'alertname': 'DeadMansSwitch',
        'message': 'SOS All is explosing',
    }
    resolve_dict = {
        'status': 'resolved',
        'alertname': 'DeadMansSwitch',
        'message': 'PHEW All is resolving',
    }
    receiver_list = [
        #receivers.HttpPostJsonReceiver('http://localhost:8000/hello'),
        receivers.HttpPostJsonReceiver('http://localhost:8000/deadman',
                                       alert_dict=alert_dict,
                                       resolve_dict=resolve_dict)
    ]
    context = deadman_state_machine.DeadmanStateMachine(
        alive_state, timeout=10, receivers=receiver_list)

    while (datetime.datetime.now() -
           context.get_last_ping()) < datetime.timedelta(seconds=30):
        context.request()

        # randomize last ping
        random_number = random.randint(1, 10)
        if random_number < 2:

            logger.debug("Ping")

            context.set_last_ping(datetime.datetime.now())

        time.sleep(1)