From 574965b3ce8b90bb4ba23508e7d67769fddec8d6 Mon Sep 17 00:00:00 2001 From: David Trattnig <david.trattnig@o94.at> Date: Fri, 26 Jun 2020 16:42:56 +0200 Subject: [PATCH] Store sync state for playlogs. --- src/models.py | 7 +++++-- src/service.py | 12 +++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/models.py b/src/models.py index e3e1f28..a55fbcc 100644 --- a/src/models.py +++ b/src/models.py @@ -47,6 +47,7 @@ class PlayLog(db.Model): timeslot_id = Column(Integer) show_name = Column(String(256)) log_source = Column(Integer) + is_synced = Column(Boolean) @@ -62,7 +63,8 @@ class PlayLog(db.Model): self.track_type = data.track_type self.timeslot_id = data.timeslot_id self.show_name = data.show_name - self.log_source = data.log_source + self.log_source = data.log_source # The play-out source this log is coming from (e.g. engine1, engine2) + self.is_synced = False # Only relevant for main nodes, in a multi-node setup def save(self): @@ -177,6 +179,7 @@ class TrackSchema(ma.SQLAlchemySchema): class ActivityLog(db.Model): """ Table holding a log of play-out source active and sync states. + Only used in "SYNC" deployment mode. """ __tablename__ = 'activity_log' @@ -218,7 +221,7 @@ class HealthHistory(db.Model): health_info = Column(String(2048)) - def __init__(self, data): + def __init__(self, source_number): """ Initializes an health entry. """ diff --git a/src/service.py b/src/service.py index 1dec65b..d2073fd 100644 --- a/src/service.py +++ b/src/service.py @@ -139,24 +139,26 @@ class ApiService(): playlog = PlayLog(data) playlog.save() - self.logger.info("Stored playlog for '%s'" % playlog.track_start) + self.logger.debug("Stored playlog for '%s'" % playlog.track_start) - # Push to sync node if configured - if self.sync_host: + # Main Node: Push to Sync Node, if enabled + if self.node_type = NodeType.MAIN and self.sync_host: playlog_schema = PlayLogSchema() json_playlog = playlog_schema.dump(playlog) - + try: api_url = self.sync_host + self.config.get("sync_api_store_playlog") r = requests.post(api_url, json=json_playlog) if r.status_code == 200: self.logger.info("Successfully pushed playlog for '%s' to '%s'" % (playlog.track_start, self.sync_host)) + playlog.is_synced = True + playlog.save() else: self.logger.error("Error while pushing playlog to sync-node: " + r.json()) except Exception as e: self.logger.error("Error while posting to sync-node API '%s'!" % (api_url), e) - + def clock_info(self): """ Retrieves the currently playing playlist. -- GitLab