From ddf5e8e9235346dd13910932549f0106e5cb0e16 Mon Sep 17 00:00:00 2001
From: David Trattnig <david.trattnig@o94.at>
Date: Fri, 28 Aug 2020 10:10:17 +0200
Subject: [PATCH] Ability to disable federation.

---
 config/sample/sample-development.engine-api.ini |  2 ++
 config/sample/sample-docker.engine-api.ini      |  2 ++
 config/sample/sample-production.engine-api.ini  |  2 ++
 src/app.py                                      |  7 +++++--
 src/service.py                                  | 11 ++++++++++-
 src/sync.py                                     |  2 +-
 test/config/engine-0-api.ini                    |  2 ++
 test/config/engine-1-api.ini                    |  2 ++
 test/config/engine-2-api.ini                    |  2 ++
 9 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/config/sample/sample-development.engine-api.ini b/config/sample/sample-development.engine-api.ini
index 61f2546..eff6651 100644
--- a/config/sample/sample-development.engine-api.ini
+++ b/config/sample/sample-development.engine-api.ini
@@ -23,6 +23,8 @@ api_port=8008
 
 [federation]
 
+enable_federation="false"
+
 # Defines the engine number id for identification of record sources. Default values are:
 # 
 #   1 ... Engine 1 (main node)
diff --git a/config/sample/sample-docker.engine-api.ini b/config/sample/sample-docker.engine-api.ini
index e039e80..28e2d22 100644
--- a/config/sample/sample-docker.engine-api.ini
+++ b/config/sample/sample-docker.engine-api.ini
@@ -23,6 +23,8 @@ api_port=8008
 
 [federation]
 
+enable_federation="false"
+
 # Defines the engine number id for identification of record sources. Default values are:
 # 
 #   1 ... Engine 1 (main node)
diff --git a/config/sample/sample-production.engine-api.ini b/config/sample/sample-production.engine-api.ini
index e039e80..28e2d22 100644
--- a/config/sample/sample-production.engine-api.ini
+++ b/config/sample/sample-production.engine-api.ini
@@ -23,6 +23,8 @@ api_port=8008
 
 [federation]
 
+enable_federation="false"
+
 # Defines the engine number id for identification of record sources. Default values are:
 # 
 #   1 ... Engine 1 (main node)
diff --git a/src/app.py b/src/app.py
index c70122f..29cecd1 100644
--- a/src/app.py
+++ b/src/app.py
@@ -95,8 +95,11 @@ with app.app_context():
 
     # Run sync job only in SYNC NODE mode
     if node_type == NodeType.SYNC:
-        sync_job = SyncJob(config, logger, app)
-        sync_job.start()
+        if config.get("enable_federation") == "false":
+            logger.info("Node synchronization disabled")
+        else:
+            sync_job = SyncJob(config, logger, app)
+            sync_job.start()
 
     atexit.register(shutdown)
     logger.info("Engine API server initialized.")
diff --git a/src/service.py b/src/service.py
index 3e1ea49..234809e 100644
--- a/src/service.py
+++ b/src/service.py
@@ -150,6 +150,9 @@ class ApiService():
         if not data.log_source:
             data.log_source = self.config.get("host_id")
 
+        if self.config.get("enable_federation") == "false":
+            return
+
         # Main Node: Alway log entry, independed of the source
         # Sync Node: Only log entry when it's coming from an active source
         if self.node_type == NodeType.MAIN or \
@@ -205,6 +208,9 @@ class ApiService():
         clock_info = ClockInfo(body.engine_source, body.current_playlist, body.current_schedule, body.next_schedule)
         clock_info.merge()
 
+        if self.config.get("enable_federation") == "false":
+            return
+
         # Main Node: Push to Sync Node, if enabled
         if self.node_type == NodeType.MAIN and self.sync_host and self.api_clockinfo:
             try:
@@ -215,7 +221,7 @@ class ApiService():
                 else:
                     self.logger.error("HTTP %s | Error while pushing clock info to sync-node: " % (r.status_code, str(r.json())))
             except Exception as e:
-                self.logger.error("Error while putting clock info to sync-node API '%s'!\n%s" % (api_url, str(e)))
+                self.logger.error("Error while putting clock info to sync-node API '%s'!\n%s" % (api_url, str(e)))              
 
 
     def set_default_source(self, source_number):
@@ -287,6 +293,9 @@ class ApiService():
         if not data.log_source:
             data.log_source = self.host_id
 
+        if self.config.get("enable_federation") == "false":
+            return
+
         # Main Node: Alway log entry, independed of the source
         # Sync Node: Only log entry when it's coming from an active source
         if self.node_type == NodeType.MAIN or \
diff --git a/src/sync.py b/src/sync.py
index e2c0cb1..52b5224 100644
--- a/src/sync.py
+++ b/src/sync.py
@@ -73,7 +73,7 @@ class SyncJob(threading.Thread):
     def run(self):
         """
         Starts the Job.
-        """
+        """        
         self.synchronize()
         while not self.exit_event.wait(self.sync_interval):
             try:            
diff --git a/test/config/engine-0-api.ini b/test/config/engine-0-api.ini
index 67018e4..00b71d0 100644
--- a/test/config/engine-0-api.ini
+++ b/test/config/engine-0-api.ini
@@ -23,6 +23,8 @@ api_port=8010
 
 [federation]
 
+enable_federation="false"
+
 # Defines the engine number id for identification of record sources. Default values are:
 # 
 #   1 ... Engine 1 (main node)
diff --git a/test/config/engine-1-api.ini b/test/config/engine-1-api.ini
index a42c198..5b1f60f 100644
--- a/test/config/engine-1-api.ini
+++ b/test/config/engine-1-api.ini
@@ -23,6 +23,8 @@ api_port=8008
 
 [federation]
 
+enable_federation="false"
+
 # Defines the engine number id for identification of record sources. Default values are:
 # 
 #   1 ... Engine 1 (main node)
diff --git a/test/config/engine-2-api.ini b/test/config/engine-2-api.ini
index 3feb1d0..30c3c08 100644
--- a/test/config/engine-2-api.ini
+++ b/test/config/engine-2-api.ini
@@ -23,6 +23,8 @@ api_port=8009
 
 [federation]
 
+enable_federation="false"
+
 # Defines the engine number id for identification of record sources. Default values are:
 # 
 #   1 ... Engine 1 (main node)
-- 
GitLab