diff --git a/framework/python/src/common/mqtt.py b/framework/python/src/common/mqtt.py index b98b4ab1b..f71f2f584 100644 --- a/framework/python/src/common/mqtt.py +++ b/framework/python/src/common/mqtt.py @@ -17,6 +17,13 @@ import typing as t import paho.mqtt.client as mqtt_client from common import logger +from enum import Enum + +class MQTTTopic(str, Enum): + INFO = "info" + INTERNET_CONNECTION_TOPIC = "events/internet" + NETWORK_ADAPTERS_TOPIC = "events/adapter" + STATUS_TOPIC = "status" LOGGER = logger.get_logger("mqtt") WEBSOCKETS_HOST = "localhost" @@ -47,7 +54,7 @@ def disconnect(self): LOGGER.debug("Disconnecting from broker") self._client.disconnect() - def send_message(self, topic: str, message: t.Union[str, dict]) -> None: + def send_message(self, topic: MQTTTopic, message: t.Union[str, dict]) -> None: """Send message to specific topic Args: @@ -57,4 +64,4 @@ def send_message(self, topic: str, message: t.Union[str, dict]) -> None: self._connect() if isinstance(message, dict): message = json.dumps(message) - self._client.publish(topic, str(message)) + self._client.publish(topic.value, str(message)) diff --git a/framework/python/src/core/session.py b/framework/python/src/core/session.py index 3fc373793..80f5db7ce 100644 --- a/framework/python/src/core/session.py +++ b/framework/python/src/core/session.py @@ -42,7 +42,6 @@ ALLOW_DISCONNECT_KEY='allow_disconnect' CERTS_PATH = 'local/root_certs' CONFIG_FILE_PATH = 'local/system.json' -STATUS_TOPIC = 'status' MAKE_CONTROL_DIR = 'make/DEBIAN/control' @@ -66,7 +65,7 @@ def wrapper(self, *args, **kwargs): if self.get_status() != TestrunStatus.IDLE and not self.pause_message: self.get_mqtt_client().send_message( - STATUS_TOPIC, + mqtt.MQTTTopic.STATUS_TOPIC, jsonable_encoder(self.to_json()) ) if self.get_status() in STATUSES_COMPLETE: diff --git a/framework/python/src/core/tasks.py b/framework/python/src/core/tasks.py index 5da0b40c9..ce40bf310 100644 --- a/framework/python/src/core/tasks.py +++ b/framework/python/src/core/tasks.py @@ -20,14 +20,12 @@ from apscheduler.schedulers.asyncio import AsyncIOScheduler from fastapi import FastAPI -from common import logger +from common import logger, mqtt # Check adapters period seconds # Check adapters period seconds CHECK_NETWORK_ADAPTERS_PERIOD = 5 CHECK_INTERNET_PERIOD = 2 -INTERNET_CONNECTION_TOPIC = 'events/internet' -NETWORK_ADAPTERS_TOPIC = 'events/adapter' LOGGER = logger.get_logger('tasks') @@ -49,7 +47,7 @@ def __init__( func=self._testrun.get_net_orc().network_adapters_checker, kwargs={ 'mqtt_client': self._mqtt_client, - 'topic': NETWORK_ADAPTERS_TOPIC + 'topic': mqtt.MQTTTopic.NETWORK_ADAPTERS_TOPIC }, trigger='interval', seconds=CHECK_NETWORK_ADAPTERS_PERIOD, @@ -60,7 +58,7 @@ def __init__( func=self._testrun.get_net_orc().internet_conn_checker, kwargs={ 'mqtt_client': self._mqtt_client, - 'topic': INTERNET_CONNECTION_TOPIC + 'topic': mqtt.MQTTTopic.INTERNET_CONNECTION_TOPIC }, trigger='interval', seconds=CHECK_INTERNET_PERIOD, diff --git a/framework/python/src/core/testrun.py b/framework/python/src/core/testrun.py index 069552320..2e81aa1c1 100644 --- a/framework/python/src/core/testrun.py +++ b/framework/python/src/core/testrun.py @@ -467,8 +467,12 @@ def _device_discovered(self, mac_addr): if device is not None: if mac_addr != device.mac_addr: - LOGGER.info(f'Found device with mac addr: {mac_addr} but was ignored') - LOGGER.info(f'Expected device mac address is {device.mac_addr}') + msg = f'Found device with mac addr: {mac_addr} but was ignored' + self._mqtt_client.send_message(mqtt.MQTTTopic.INFO, {'message': msg}) + LOGGER.info(msg) + msg = f'Expected device mac address is {device.mac_addr}' + self._mqtt_client.send_message(mqtt.MQTTTopic.INFO, {'message': msg}) + LOGGER.info(msg) # Ignore discovered device because it is not the target device return else: