diff --git a/warden3/warden_server/warden_server.py b/warden3/warden_server/warden_server.py index 582aa962a120ed94fd0296d2dbc6b9f699631806..ffbe6512e68616118a4f9078d15c3d2b583a1d0d 100755 --- a/warden3/warden_server/warden_server.py +++ b/warden3/warden_server/warden_server.py @@ -649,7 +649,18 @@ class MySQL(ObjectReq): else: maxid = self.getLastEventId() - events = [json.loads(r["data"]) for r in row] + events = [] + for r in row: + try: + e = json.loads(r["data"]) + except Exception: + # Note that we use Error object just for proper formatting, + # but do not raise it; from client perspective invalid + # events get skipped silently. + err = self.req.error(message="Unable to deserialize JSON event from db, id=%s" % r["id"], error=500, + exc=sys.exc_info(), id=r["id"]) + err.log(logging.getLogger(), prio=logging.WARNING) + events.append(e) return { "lastid": maxid,