diff --git a/warden3/warden_server/warden_server.py b/warden3/warden_server/warden_server.py index b2e5b3a8c23e0142c0da86a6a1d45e1dc2ab66c8..4f3cdb9074d2583db45fe9eb743f8118915d9e7c 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):