コード例 #1
0
    def test_marathon_event(self):
        """Test that we can process at least one kind of event."""
        payload = {
            "eventType":
            "status_update_event",
            "slaveId":
            "slave-01",
            "taskId":
            "task-01",
            "taskStatus":
            "TASK_RUNNING",
            "message":
            "Some message",
            "appId":
            "/foo/bar",
            "host":
            "host-01",
            "ipAddresses": [
                {
                    "ip_address": "127.0.0.1",
                    "protocol": "tcp"
                },
                {
                    "ip_address": "127.0.0.1",
                    "protocol": "udp"
                },
            ],
            "ports": [0, 1],
            "version":
            "1234",
            "timestamp":
            12345,
        }
        factory = EventFactory()
        event = factory.process(payload)

        expected_event = MarathonStatusUpdateEvent(
            event_type="status_update_event",
            timestamp=12345,
            slave_id="slave-01",
            task_id="task-01",
            task_status="TASK_RUNNING",
            message="Some message",
            app_id="/foo/bar",
            host="host-01",
            ports=[0, 1],
            version="1234",
        )
        expected_event.ip_addresses = [
            MarathonIpAddress(ip_address="127.0.0.1", protocol="tcp"),
            MarathonIpAddress(ip_address="127.0.0.1", protocol="udp"),
        ]

        self.assertEqual(event.to_json(), expected_event.to_json())
コード例 #2
0
 async def _stream_events(self, events_tx, event_types):
     ef = EventFactory()
     async with self._client() as client:
         headers = {"Accept": "text/event-stream"}
         params = {}
         if event_types:
             params["event_type"] = event_types
         async with client.stream(
             "GET", "/v2/events", headers=headers, params=params, timeout=60
         ) as response:
             async for line in response.aiter_lines():
                 _data = line.split(":", 1)
                 if _data[0] == "data":
                     event_data = json.loads(_data[1].strip())
                     if "eventType" not in event_data:
                         raise MarathonError("Invalid event data received.")
                     event = ef.process(event_data)
                     if event_types and event.event_type not in event_types:
                         # We're filtering events, but got an unwanted one
                         # anyway. Ignore it and move on.
                         continue
                     self.log.info(f"Received marathon event: {event}")
                     await events_tx.send(event)