From 1ddd03e611102b5df2c7d8f824ae09df8f9d95c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20K=C3=A1cha?= <ph@cesnet.cz>
Date: Tue, 23 Feb 2016 16:17:27 +0100
Subject: [PATCH] getEvents - id<=0 now resets server's notion of client's id
 to last N events (and starts sending there)

---
 warden3/warden_server/warden_server.py | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/warden3/warden_server/warden_server.py b/warden3/warden_server/warden_server.py
index b2e5b3a..4f3cdb9 100755
--- a/warden3/warden_server/warden_server.py
+++ b/warden3/warden_server/warden_server.py
@@ -713,7 +713,7 @@ class MySQL(ObjectReq):
 
 
     def getLastReceivedId(self, client):
-        row = self.query("SELECT MAX(event_id) as id FROM last_events WHERE client_id = %s", client.id)[0]
+        row = self.query("SELECT event_id as id FROM last_events WHERE client_id = %s ORDER BY last_events.id DESC LIMIT 1", client.id)[0]
 
         id = row['id'] if row is not None else 0
         logging.debug("getLastReceivedId: id %i for client %i(%s)" % (id, client.id, client.hostname))
@@ -965,13 +965,14 @@ class WardenHandler(ObjectReq):
             id = None
 
         if id is None:
+            # If client was already here, fetch server notion of his last id
             try:
                 id = self.db.getLastReceivedId(self.req.client)
             except Exception, e:
                 logging.info("cannot getLastReceivedId - " + type(e).__name__ + ": " + str(e))
                 
         if id is None:
-            # First access, remember the guy and get him last event
+            # First access, remember the guy and get him last id
             id = self.db.getLastEventId()
             self.db.insertLastReceivedId(self.req.client, id)
             return {
@@ -979,6 +980,11 @@ class WardenHandler(ObjectReq):
                 "events": []
             }
 
+        if id<=0:
+            # Client wants to get only last N events and reset server notion of last id
+            id += self.db.getLastEventId()
+            if id<0: id=0
+
         try:
             count = int(count[0])
         except (ValueError, TypeError, IndexError):
-- 
GitLab