def reprocess_orphaned_sms(self): # Read and filter SMS with status 0 but statustime < our own start time # This can happen when wis failed and restarted - so definitely no sending happened # So mark SMS as NOPossibleRoutes - they will be reprocessed next run of reprocess_sms job zero_status_sms = self.db.read_sms(status=0) orphaned_sms = [ sms for sms in zero_status_sms if datetime.strptime(sms["statustime"], '%Y-%m-%d %H:%M:%S.%f') < wisglobals.scriptstarttime ] if orphaned_sms: for sms in orphaned_sms: smsgwglobals.wislogger.debug( "REPROCESS_ORPHANED_SMS job: processing: " + str(sms)) #wisglobals.rdb.descrease_sms_count(sms.get('modemid')) smstrans = Smstransfer(content=sms.get('content'), targetnr=sms.get('targetnr'), priority=sms.get('priority'), appid=sms.get('appid'), sourceip=sms.get('sourceip'), xforwardedfor=sms.get('xforwardedfor'), smsid=sms.get('smsid')) smstrans.smsdict["status"] = 104 smstrans.smsdict["modemid"] = "NoPossibleRoutes" smstrans.smsdict["imsi"] = "" smstrans.smsdict["statustime"] = datetime.utcnow() smstrans.writetodb() else: smsgwglobals.wislogger.debug( "REPROCESS_ORPHANED_SMS job: skipping. NO OPRHANED SMS to process" )
def api(self, arg, **params): cl = cherrypy.request.headers['Content-Length'] rawbody = cherrypy.request.body.read(int(cl)) smsgwglobals.wislogger.debug(rawbody) plaintext = GlobalHelper.decodeAES(rawbody) smsgwglobals.wislogger.debug(plaintext) data = json.loads(plaintext) if arg == "watchdog": if data["run"] == "True": self.triggerwatchdog() else: cherrypy.response.status = 400 if arg == "heartbeat": if "routingid" in data: smsgwglobals.wislogger.debug(data["routingid"]) try: count = wisglobals.rdb.raise_heartbeat(data["routingid"]) if count == 0: smsgwglobals.wislogger.debug("COUNT: " + str(count)) cherrypy.response.status = 400 except error.DatabaseError: cherrypy.response.status = 400 else: cherrypy.response.status = 400 if arg == "receiverouting": try: wisglobals.rdb.merge_routing(data) except error.DatabaseError as e: smsgwglobals.wislogger.debug(e.message) if arg == "requestrouting": if data["get"] != "peers": cherrypy.response.status = 400 return smsgwglobals.wislogger.debug("Sending routing table to you") try: erg = wisglobals.rdb.read_routing() jerg = json.dumps(erg) data = GlobalHelper.encodeAES(jerg) return data except error.DatabaseError as e: smsgwglobals.wislogger.debug(e.message) if arg == "managemodem": try: if data["action"] == "register": smsgwglobals.wislogger.debug("managemodem register") smsgwglobals.wislogger.debug(wisglobals.wisid) # add wisid to data object data["wisid"] = wisglobals.wisid # store date in routing table wisglobals.rdb.write_routing(data) # call receiverouting to distribute routing Helper.receiverouting() elif data["action"] == "unregister": smsgwglobals.wislogger.debug("managemodem unregister") routingid = data["routingid"] wisglobals.rdb.change_obsolete(routingid, 14) if routingid in wisglobals.watchdogRouteThread: wisglobals.watchdogRouteThread[routingid].terminate() wisglobals.watchdogRouteThread.pop(routingid) wisglobals.watchdogRouteThreadNotify.pop(routingid) wisglobals.watchdogRouteThreadQueue.pop(routingid) Helper.receiverouting() else: return False except error.DatabaseError as e: smsgwglobals.wislogger.debug(e.message) if arg == "deligatesms": if "sms" in data: smsgwglobals.wislogger.debug(data["sms"]) try: sms = Smstransfer(**data["sms"]) sms.smsdict["status"] = -1 sms.writetodb() self.triggerwatchdog() except error.DatabaseError: cherrypy.response.status = 400 else: cherrypy.response.status = 400 if arg == "router": if data["action"] == "status": smsgwglobals.wislogger.debug("API: " + data["action"]) if wisglobals.routerThread is None: cherrypy.response.status = 200 data = GlobalHelper.encodeAES('{"ROUTER":"noobject"}') return data if wisglobals.routerThread.isAlive(): cherrypy.response.status = 200 data = GlobalHelper.encodeAES('{"ROUTER":"alive"}') return data else: cherrypy.response.status = 200 data = GlobalHelper.encodeAES('{"ROUTER":"dead"}') return data if arg == "getsms": if data["get"] != "sms": cherrypy.response.status = 400 return if "date" in data: date = data["date"] smsgwglobals.wislogger.debug("API: " + date) else: date = None smsgwglobals.wislogger.debug("Sending SMS Table") smsgwglobals.wislogger.debug("Sending SMS Table date: " + str(date)) try: db = Database() erg = db.read_sms_date(date=date) jerg = json.dumps(erg) data = GlobalHelper.encodeAES(jerg) return data except error.DatabaseError as e: smsgwglobals.wislogger.debug(e.message) if arg == "get_sms_stats": if data["get"] != "sms": cherrypy.response.status = 400 return try: db = Database() erg = db.read_sms_stats() jerg = json.dumps(erg) data = GlobalHelper.encodeAES(jerg) return data except error.DatabaseError as e: smsgwglobals.wislogger.debug(e.message)
def api(self, arg, **params): cl = cherrypy.request.headers['Content-Length'] rawbody = cherrypy.request.body.read(int(cl)) smsgwglobals.wislogger.debug(rawbody) plaintext = GlobalHelper.decodeAES(rawbody) smsgwglobals.wislogger.debug(plaintext) data = json.loads(plaintext) if arg == "watchdog": if data["run"] == "True": self.triggerwatchdog() else: cherrypy.response.status = 400 if arg == "heartbeat": if "routingid" in data: smsgwglobals.wislogger.debug(data["routingid"]) try: count = wisglobals.rdb.raise_heartbeat(data["routingid"]) if count == 0: smsgwglobals.wislogger.debug("COUNT: " + str(count)) cherrypy.response.status = 400 except error.DatabaseError: cherrypy.response.status = 400 else: cherrypy.response.status = 400 if arg == "receiverouting": try: wisglobals.rdb.merge_routing(data) except error.DatabaseError as e: smsgwglobals.wislogger.debug(e.message) if arg == "requestrouting": if data["get"] != "peers": cherrypy.response.status = 400 return smsgwglobals.wislogger.debug("Sending routing table to you") try: erg = wisglobals.rdb.read_routing() jerg = json.dumps(erg) data = GlobalHelper.encodeAES(jerg) return data except error.DatabaseError as e: smsgwglobals.wislogger.debug(e.message) if arg == "managemodem": try: if data["action"] == "register": smsgwglobals.wislogger.debug("managemodem register") smsgwglobals.wislogger.debug(wisglobals.wisid) # add wisid to data object data["wisid"] = wisglobals.wisid # store date in routing table wisglobals.rdb.write_routing(data) # call receiverouting to distribute routing Helper.receiverouting() elif data["action"] == "unregister": smsgwglobals.wislogger.debug("managemodem unregister") wisglobals.rdb.change_obsolete(data["routingid"], 14) Helper.receiverouting() else: return False except error.DatabaseError as e: smsgwglobals.wislogger.debug(e.message) if arg == "deligatesms": if "sms" in data: smsgwglobals.wislogger.debug(data["sms"]) try: sms = Smstransfer(**data["sms"]) sms.smsdict["status"] = 1 sms.writetodb() self.triggerwatchdog() except error.DatabaseError: cherrypy.response.status = 400 else: cherrypy.response.status = 400 if arg == "router": if data["action"] == "status": smsgwglobals.wislogger.debug("API: " + data["action"]) if wisglobals.routerThread is None: cherrypy.response.status = 200 data = GlobalHelper.encodeAES('{"ROUTER":"noobject"}') return data if wisglobals.routerThread.isAlive(): cherrypy.response.status = 200 data = GlobalHelper.encodeAES('{"ROUTER":"alive"}') return data else: cherrypy.response.status = 200 data = GlobalHelper.encodeAES('{"ROUTER":"dead"}') return data if arg == "getsms": if data["get"] != "sms": cherrypy.response.status = 400 return if "date" in data: date = data["date"] smsgwglobals.wislogger.debug("API: " + date) else: date = None smsgwglobals.wislogger.debug("Sending SMS Table") smsgwglobals.wislogger.debug("Sending SMS Table date: " + str(date)) try: db = Database() erg = db.read_sms_date(date=date) jerg = json.dumps(erg) data = GlobalHelper.encodeAES(jerg) return data except error.DatabaseError as e: smsgwglobals.wislogger.debug(e.message)