exec_command/exec_command.py

59 lines
1.8 KiB
Python
Raw Normal View History

2022-09-21 14:38:35 +01:00
import config
2022-09-22 09:32:43 +01:00
import json
2022-09-21 14:38:35 +01:00
import logging
import mqtt
import report
2022-09-22 10:19:04 +01:00
import subprocess
2022-09-21 14:38:35 +01:00
import time
try:
from config import APP_NAME as ROOT_LOGGER_NAME
except ImportError:
ROOT_LOGGER_NAME = 'root'
logger = logging.getLogger(ROOT_LOGGER_NAME).getChild('main')
2022-09-22 10:19:04 +01:00
class exec_command(mqtt.mqtt_client):
2022-09-21 14:38:35 +01:00
def __init__(self):
self.__block_execution__ = False
mqtt.mqtt_client.__init__(self, config.APP_NAME, config.MQTT_SERVER, 1883, config.MQTT_USER, config.MQTT_PASS)
self.add_callback(config.TOPIC, self.mqtt_rx)
2022-09-22 10:19:04 +01:00
# Start a pseudo process
self.process = subprocess.Popen(["sleep", "0"])
2022-09-21 14:38:35 +01:00
2022-09-22 10:19:04 +01:00
def exec_command(self):
self.process = subprocess.Popen(config.COMMAND.split(" "))
2022-09-21 14:38:35 +01:00
def mqtt_rx(self, client, userdate, message):
2022-09-22 10:19:04 +01:00
data = None
if config.PAYLOAD_KEY is None:
try:
data = message.payload.decode('utf-8')
except:
logger.exception("Error decoding mqtt message")
2022-09-21 14:38:35 +01:00
else:
2022-09-22 10:19:04 +01:00
try:
payload = json.loads(message.payload)
except:
logger.exception("Error decoding json mqtt message")
else:
data = payload.get(config.PAYLOAD_KEY)
if config.PAYLOAD_DATA is None or data == config.PAYLOAD_DATA:
if self.process.poll() is None:
self.process.kill()
logger.debug("Starting execution in background...")
self.exec_command()
2022-09-21 14:38:35 +01:00
if __name__ == '__main__':
report.appLoggingConfigure(config.__BASEPATH__, config.LOGTARGET, ((config.APP_NAME, config.LOGLVL), ), fmt=config.formatter, host=config.LOGHOST, port=config.LOGPORT)
#
ec = exec_command()
#
while True:
time.sleep(30)
try:
ec.join()
finally:
ec.stop()