diff --git a/engine-api.py b/engine-api.py index 0ee133581d69aaf284f57aa0221cfe8502bd6965..34e83e36d75bbee3a0ba89b56632303410c449d2 100644 --- a/engine-api.py +++ b/engine-api.py @@ -21,6 +21,8 @@ import logging import os, os.path +import subprocess +import json from datetime import datetime, date, timedelta @@ -109,6 +111,7 @@ class EngineApi: spec.components.schema("Report", schema=ReportSchema) spec.components.schema("Schedule", schema=ScheduleSchema) spec.components.schema("Clock", schema=ClockDataSchema) + spec.components.schema("Status", schema=StatusSchema) # TODO Generates HTML for specification #self.logger.info(spec.to_yaml()) @@ -129,7 +132,7 @@ class EngineApi: self.api.add_resource(ReportResource, config.api_prefix + "/report/<string:year_month>") self.api.add_resource(UpcomingSchedulesResource, config.api_prefix + "/schedule/upcoming") self.api.add_resource(ClockDataResource, config.api_prefix + "/clock") - self.api.add_resource(ClockDataResource, config.api_prefix + "/status") + self.api.add_resource(StatusResource, config.api_prefix + "/status") self.logger.info("Engine API routes successfully set!") @@ -283,8 +286,11 @@ class ReportSchema(ma.Schema): class StatusSchema(ma.Schema): class Meta: fields = ( - "is_liquidsoap_running", - "is_core_running" + "engine", + "soundsystem", + "api", + "redis_ready", + "audio_store" ) @@ -420,12 +426,9 @@ class StatusResource(Resource): self.logger = logging.getLogger("engine-api") def get(self): - - # FIXME Not yet implemented! - - # #ss = SoundSystem(cr) - # return "check removed!" #ss.auraengine_state() - status = None + status = subprocess.check_output(["python3", "guru.py", "-s", "-q"]) + status = status.decode("utf-8").replace("'", '"') + status = json.loads(status, strict=False) if not status: return abort(204) # No content available diff --git a/modules/communication/redis/adapter.py b/modules/communication/redis/adapter.py index 06eefd546bf743830f242a7bb37e6815d75ed542..07fbde3bd8011afe3295a83969b09490b353435b 100644 --- a/modules/communication/redis/adapter.py +++ b/modules/communication/redis/adapter.py @@ -24,6 +24,7 @@ import sys import time +import json import redis import logging import threading @@ -159,7 +160,7 @@ class ServerRedisAdapter(threading.Thread, RedisMessenger): elif item["data"] == "get_status": def get_status_string(): status = self.soundsystem.monitoring.get_status() - return str(status) + return json.dumps(status) self.execute(RedisChannel.GS_REPLY.value, get_status_string) @@ -186,6 +187,8 @@ class ServerRedisAdapter(threading.Thread, RedisMessenger): elif item["data"] == "recreate_db": self.execute(RedisChannel.RDB_REPLY.value, self.scheduler.recreate_database) + elif item["data"] == "status": + return True else: raise RedisConnectionException("ServerRedisAdapter Cannot understand command: " + item["data"])