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