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