From 38590ddd5c9953ff8773feec12fee807b526acca Mon Sep 17 00:00:00 2001 From: David Trattnig <david.trattnig@o94.at> Date: Sat, 27 Jun 2020 14:34:04 +0200 Subject: [PATCH] Gracefull handle duplicate playlog entries. --- src/service.py | 13 ++++++++----- src/sync.py | 17 ++++++++++------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/service.py b/src/service.py index ddb5c49..9073025 100644 --- a/src/service.py +++ b/src/service.py @@ -147,9 +147,12 @@ class ApiService(): if self.node_type == NodeType.MAIN or \ (self.node_type == NodeType.SYNC and data.log_source == self.active_source): - playlog = PlayLog(data) - playlog.save() - self.logger.debug("Stored playlog for '%s'" % playlog.track_start) + try: + playlog = PlayLog(data) + playlog.save() + self.logger.debug("Stored playlog for '%s'" % playlog.track_start) + except sqlalchemy.exc.IntegrityError as e: + self.logger.info("Playlog for '%s' is already existing in local database. Skipping..." % playlog.track_start) # Main Node: Push to Sync Node, if enabled if self.node_type == NodeType.MAIN and self.sync_host and self.api_playlog: @@ -164,7 +167,7 @@ class ApiService(): playlog.is_synced = True playlog.save() else: - self.logger.error("Error while pushing playlog to sync-node: " + r.json()) + self.logger.error("Error while pushing playlog to sync-node: " + str(r.json())) except Exception as e: self.logger.error("Error while posting to sync-node API '%s'!\n%s" % (api_url, str(e))) else: @@ -253,7 +256,7 @@ class ApiService(): playlog.is_synced = True playlog.save() else: - self.logger.error("Error while pushing healthlog to sync-node: " + r.json()) + self.logger.error("Error while pushing healthlog to sync-node: " + str(r.json())) except Exception as e: self.logger.error("Error while posting to sync-node API '%s'!" % (api_url), e) else: diff --git a/src/sync.py b/src/sync.py index cfd189d..e5fd651 100644 --- a/src/sync.py +++ b/src/sync.py @@ -105,13 +105,16 @@ class SyncJob(threading.Thread): # Store unsynced entries locally for entry in entries: - playlog = PlayLog(entry) - self.Session.add(playlog) - self.Session.commit() - self.logger.info("Stored synced playlog for '%s'" % playlog.track_start) - synced_entries += 1 - + try: + playlog = PlayLog(entry) + self.Session.add(playlog) + self.Session.commit() + self.logger.info("Stored synced playlog for '%s'" % playlog.track_start) + synced_entries += 1 + except sqlalchemy.exc.IntegrityError as e: + self.logger.info("Playlog for '%s' is already existing in local database. Skipping..." % playlog.track_start) + # Sleep a little to keep the effective load down low time.sleep(self.config.get("sync_step_sleep")) @@ -152,7 +155,7 @@ class SyncJob(threading.Thread): to_time = next_source.log_time try: - params = { "page": "0", "limit": self.sync_batch_size, "skip_synced": "true", "from": source.log_time, "to": to_time} + params = { "page": "0", "limit": self.sync_batch_size, "skip_synced": "true", "from_date": source.log_time, "to_date": to_time} url = self.get_url(source.source_number) response = requests.get(url, params=params) if response.status_code == 200: -- GitLab