def deletenotification(userid, entityid, name, uid, recordtodelete): con, cur = db.mydbopncon() if recordtodelete == 'both' or recordtodelete == 'master': command = cur.mogrify( "DELETE FROM notifimaster WHERE nfmuserid = %s AND nfmentityid = %s AND nfname= %s AND nfmid = %s;", ( userid, entityid, name, uid, )) cur, dbqerr = db.mydbfunc(con, cur, command) print(dbqerr['natstatus']) if cur.closed == True: if (dbqerr['natstatus'] == "error" or dbqerr['natstatus'] == "warning"): dbqerr['statusdetails'] = "loginuser Fetch failed" db.mydbcloseall(con, cur) resp = make_response(jsonify(dbqerr), 400) return (resp) else: pass if recordtodelete == 'both' or recordtodelete == 'notiuser': command = cur.mogrify( "DELETE FROM notifiuser WHERE nfuuserid = %s AND nfuentityid = %s AND nfuname= %s AND nfumid = %s;", ( userid, entityid, name, uid, )) cur, dbqerr = db.mydbfunc(con, cur, command) print(dbqerr['natstatus']) if cur.closed == True: if (dbqerr['natstatus'] == "error" or dbqerr['natstatus'] == "warning"): dbqerr['statusdetails'] = "loginuser Fetch failed" db.mydbcloseall(con, cur) resp = make_response(jsonify(dbqerr), 400) return (resp) else: pass con.commit() db.mydbcloseall(con, cur)
def chkifalldone(con,cur,command,lazyloadid,userid,entityid): command = cur.mogrify("select count(*) FROM notifiuser WHERE nfuuserid = %s AND nfuentityid = %s AND nfulazyldidstatus != 'S' and nfulazyldid = %s;",(userid,entityid,lazyloadid,) ) print('--------------------------------') print(command) cur, dbqerr = db.mydbfunc(con,cur,command) record=cur.fetchall() print(record[0][0]) print('--------------------------------') if record: return lazyloadid else: return ''
def getuserstatus(userid, entityid): #This is to be moved to a configurable place #conn_string = "host='localhost' dbname='postgres' user='******' password='******'" #This is to be moved to a configurable place #con=psycopg2.connect(conn_string) #cur = con.cursor() print('inside getuserstatus') con, cur = db.mydbopncon() print('inside getuserstatus') command = cur.mogrify( "SELECT lguserstatus FROM userlogin WHERE lguserid = %s AND lgentityid = %s;", ( userid, entityid, )) print(command) cur, dbqerr = db.mydbfunc(con, cur, command) print(cur) print(dbqerr) print(type(dbqerr)) print(dbqerr['natstatus']) if cur.closed == True: if (dbqerr['natstatus'] == "error" or dbqerr['natstatus'] == "warning"): dbqerr['statusdetails'] = "Userstatus Fetch failed" resp = make_response(jsonify(dbqerr), 400) return (resp) else: pass records = [] for record in cur: print('inside for') print(record) records.append(record) if len(records) == 1: db.mydbcloseall(con, cur) print('returning record :', records[0][0]) return records[0][0] else: dbqerr['statusdetails'] = "Userstatus Fetch returned no records" dbqerr['natstatus'] == "error" db.mydbcloseall(con, cur) resp = make_response(jsonify(dbqerr), 400) return (resp)
def updatenotificationstatus(userid, entityid, uid): con, cur = db.mydbopncon() command = cur.mogrify( "UPDATE notifiuser SET nfustatus = 'C', nfulmtime = CURRENT_TIMESTAMP WHERE nfuuserid = %s AND nfuentityid = %s AND nfumid = %s;", ( userid, entityid, uid, )) cur, dbqerr = db.mydbfunc(con, cur, command) print(dbqerr['natstatus']) if cur.closed == True: if (dbqerr['natstatus'] == "error" or dbqerr['natstatus'] == "warning"): dbqerr['statusdetails'] = "pf Fetch failed" resp = make_response(jsonify(dbqerr), 400) return (resp) con.commit() print(cur) print('consider insert or update is successful') db.mydbcloseall(con, cur)
def mainnotification(): #This is called by notification service if request.method=='OPTIONS': print("inside notification options") return 'ok' elif request.method=='GET': print("inside notification GET") print((request)) lazyloadid=request.args.get('lazldid') print('value of lazyload',lazyloadid) module=request.args.get('module') print('value of module',module) userid,entityid = jwtdecode.validatetoken(request) print(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) #This is to be moved to a configurable place #conn_string = "host='localhost' dbname='postgres' user='******' password='******'" #This is to be moved to a configurable place #con=psycopg2.connect(conn_string) #cur = con.cursor() con,cur=db.mydbopncon() print(lazyloadid) if module == 'signin': print('inside sigin') #move this code inside notificationprocessing ''' r = requests.post("http://0.0.0.0:8001/notiprocess", data=json.dumps({'module':'signin','lazyloadid': lazyloadid,'userid':userid,'entityid':entityid})) print(r.text) #isnotiusrup2dt=cknotiusrup2dt(userid,entityid,con,cur) #start the processing multiprocess ''' return 'ok' elif module == 'dashboard': print('inside dashboard') if lazyloadid =='': lazyloadid = datetime.now().strftime('%Y%m%d%H%M%S') print(lazyloadid) #Calling notiprocess to start processing rt=np.notiprocess(module,lazyloadid,userid,entityid) ''' # to be deleted this is for testing only isnotiusrup2dt=np.cknotiusrup2dt('dashboard',userid,entityid,con,cur) command = cur.mogrify("UPDATE notifiuser SET nfulazyldid = %s, nfulazyldidstatus = 'P';",(lazyloadid,)) print(command) cur, dbqerr = db.mydbfunc(con,cur,command) con.commit() print('commiting notifiuser') time.sleep(10) # to be deleted this is for testing only ''' elif lazyloadid != 'dashboard' or lazyloadid != 'signin': pass #command=command1 command = cur.mogrify("select json_agg(c) from (SELECT nfumid,nfumessage,nfumsgtype,nfunxtactmsg,nfunxtactnavdest FROM notifiuser WHERE nfuuserid = %s AND nfuentityid = %s AND nfuscreenid='dashboard' AND nfustatus = 'C' and nfulazyldidstatus != 'S' and nfulazyldid = %s) as c;",(userid,entityid,lazyloadid) ) #command = cur.mogrify(";",(userid,entityid,lazyloadid) ) print(command) cur, dbqerr = db.mydbfunc(con,cur,command) rowcount = cur.rowcount print(rowcount) if rowcount != 0: records=[] for record in cur: print('inside for') print(record) print(record[0]) print(json.dumps(record[0])) records.append(record[0]) #this is to be returned start print(records[0]) print(json.dumps(records[0])) notifyrecrods=records[0] #this is to be returned end print('going into ') if record[0]: for key in records[0]: value=key['nfumid'] print(type(value)) qryst = value + """','""" qryst=qryst[:-3] #qryst="""'"""+qryst+"""'""" print(qryst) print(type(qryst)) hvrecordstosend = True elif record[0]==0: hvrecordstosend = False else: hvrecordstosend = False #lazyloadid=chkifalldone(con,cur,command,lazyloadid,userid,entityid) print(userid) print(lazyloadid) print(hvrecordstosend) if hvrecordstosend == True: command = cur.mogrify("UPDATE notifiuser SET nfulazyldidstatus = 'S' WHERE nfuuserid = %s AND nfuentityid = %s AND nfumid in (%s) and nfulazyldid = %s",(userid,entityid,qryst,lazyloadid,) ) print(command) print('after final lazid update') cur, dbqerr = db.mydbfunc(con,cur,command) print(dbqerr['natstatus']) if cur.closed == True: if(dbqerr['natstatus'] == "error" or dbqerr['natstatus'] == "warning"): dbqerr['statusdetails']="pf Fetch failed" resp = make_response(jsonify(dbqerr), 400) return(resp) con.commit() print(cur) print('consider insert or update is successful') else: pass lazyloadid=chkifalldone(con,cur,command,lazyloadid,userid,entityid) print(notifyrecrods,'for lazyldid',lazyloadid) db.mydbcloseall(con,cur) return json.dumps({'data':notifyrecrods,'lazyloadid':lazyloadid})
def cknotiusrup2dt(screenid, userid, entityid, con, cur): print('inside cknotiusrup2dt') command = cur.mogrify( "select distinct nfuoctime from notifiuser where nfuuserid = %s and nfuentityid = %s;", ( userid, entityid, )) cur, dbqerr = db.mydbfunc(con, cur, command) print(cur) print(dbqerr) print(type(dbqerr)) print(dbqerr['natstatus']) rowcount = cur.rowcount if rowcount != 0: records = [] for record in cur: print('inside for') print(record) records.append(record) datetimenf, = records[0] elif rowcount == 0: #just to make sure the if condition fails datetimenf = datetime.now() - timedelta(1) else: pass print('current time : ', datetime.utcnow().date()) print('datetimemnf', datetimenf.date()) if datetimenf.date() == datetime.utcnow().date(): print('notification user table is done today') #delete entries in notiuser that are changed in master after the previous run of this code today #command = cur.mogrify("DELETE FROM notifiuser WHERE nfuuserid = %s AND nfuentityid = %s ",(userid,entityid,)) query = "DELETE FROM notifiuser WHERE nfuuserid = %s AND nfuentityid = %s " query = query + "AND nfuname IN (SELECT DISTINCT(nfname) FROM notifimaster WHERE nfmuserid IN (%s,'ALL') AND nfmentityid = %s " query = query + "AND nfmlmtime > (SELECT nfuoctime FROM notifiuser WHERE nfuuserid IN (%s,'ALL') AND nfuentityid = %s ORDER BY nfuoctime DESC LIMIT 1) )" command = cur.mogrify(query, ( userid, entityid, userid, entityid, userid, entityid, )) print(command) cur, dbqerr = db.mydbfunc(con, cur, command) print(cur) print(dbqerr) print(type(dbqerr)) print(dbqerr['natstatus']) if cur.closed == True: if (dbqerr['natstatus'] == "error" or dbqerr['natstatus'] == "warning"): dbqerr['statusdetails'] = "usernotify delete failed" resp = make_response(jsonify(dbqerr), 400) return (resp) con.commit() print(cur) print('consider delete is successful') #notification user table is done today so no action required query = "INSERT INTO notifiuser (nfumid,nfuname,nfuuserid,nfuscreenid,nfumessage,nfumsgtype,nfprocessscope,nfuhvnxtact,nfunxtactmsg,nfunxtactnavtyp,nfunxtactnavdest,nfulazyldidstatus,nfustatus,nfuprocesbypgldsvc,nfutodayshowncount,nfuoctime,nfulmtime,nfuentityid) " query = query + "(SELECT nfmid,nfname,nfmuserid,nfmscreenid,nfmessage,nfmsgtype,nfmprocessscope,nfmnxtact,nfmnxtactmsg,nfmnxtactnavtyp,nfmnxtactnavdest,'N','P','Y',0,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,%s" query = query + "FROM notifimaster WHERE nfmuserid IN (%s,'ALL') AND nfmentityid = %s " query = query + "AND nfmlmtime > (SELECT nfuoctime FROM notifiuser WHERE nfuuserid IN (%s,'ALL') AND nfuentityid = %s ORDER BY nfuoctime DESC LIMIT 1) " query = query + "AND nfname NOT IN (SELECT DISTINCT(nfuname) FROM notifiuser WHERE nfuuserid IN (%s,'ALL') AND nfuentityid = %s) )" command = cur.mogrify(query, ( entityid, userid, entityid, userid, entityid, userid, entityid, )) else: print('inside else') #notification user table is old, create from master now command = cur.mogrify( "DELETE FROM notifiuser WHERE nfuuserid = %s AND nfuentityid = %s", ( userid, entityid, )) print(command) cur, dbqerr = db.mydbfunc(con, cur, command) print(cur) print(dbqerr) print(type(dbqerr)) print(dbqerr['natstatus']) if cur.closed == True: if (dbqerr['natstatus'] == "error" or dbqerr['natstatus'] == "warning"): dbqerr['statusdetails'] = "usernotify delete failed" resp = make_response(jsonify(dbqerr), 400) return (resp) con.commit() print(cur) print('consider delete is successful') query = "INSERT INTO notifiuser (nfumid,nfuname,nfuuserid,nfuscreenid,nfumessage,nfumsgtype,nfprocessscope,nfuhvnxtact,nfunxtactmsg,nfunxtactnavtyp,nfunxtactnavdest,nfulazyldidstatus,nfustatus,nfutodayshowncount,nfuoctime,nfulmtime,nfuentityid) " query = query + "(SELECT nfmid,nfname,nfmuserid,nfmscreenid,nfmessage,nfmsgtype,nfmprocessscope,nfmnxtact,nfmnxtactmsg,nfmnxtactnavtyp,nfmnxtactnavdest,'N','P',0,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP,%s " query = query + "FROM notifimaster WHERE nfmuserid IN (%s,'ALL') AND nfmentityid = %s)" command = cur.mogrify(query, ( entityid, userid, entityid, )) print(command) cur, dbqerr = db.mydbfunc(con, cur, command) print(cur) print(dbqerr) print(type(dbqerr)) print(dbqerr['natstatus']) if cur.closed == True: if (dbqerr['natstatus'] == "error" or dbqerr['natstatus'] == "warning"): dbqerr['statusdetails'] = "pf Fetch failed" resp = make_response(jsonify(dbqerr), 400) return (resp) con.commit() print(cur) print('consider insert or update is successful') #Update nfprocessscope = P records as topick for processing and not sent to ui as part of lazyid yet START query = "UPDATE notifiuser SET nfustatus = 'P' WHERE nfuuserid = %s AND nfuentityid = %s AND nfuscreenid = %s AND nfprocessscope IN ('P');" command = cur.mogrify(query, (userid, entityid, screenid)) print(command) cur, dbqerr = db.mydbfunc(con, cur, command) print(cur) print(dbqerr) print(type(dbqerr)) print(dbqerr['natstatus']) if cur.closed == True: if (dbqerr['natstatus'] == "error" or dbqerr['natstatus'] == "warning"): dbqerr['statusdetails'] = "pf Fetch failed" resp = make_response(jsonify(dbqerr), 400) return (resp) con.commit() print(cur) print('consider insert or update is successful') #Update nfprocessscope = P records as topick for processing and not sent to ui as part of lazyid yet END print('cknotiusrup2dt completed') return True
def notiprocess(module, lazyloadid, userid, entityid): #pending logics to be written #This is called by notification service print("inside notiprocessing") lazyloadid = lazyloadid screenid = module userid = userid entityid = entityid print('value of lazyload', lazyloadid) print('value of screenid', screenid) print('value of userid', userid) print('value of entityid', entityid) print(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) #This is to be moved to a configurable place #conn_string = "host='localhost' dbname='postgres' user='******' password='******'" #This is to be moved to a configurable place #con=psycopg2.connect(conn_string) #cur = con.cursor() con, cur = db.mydbopncon() print(lazyloadid) isnotiusrup2dt = cknotiusrup2dt(screenid, userid, entityid, con, cur) if screenid == 'signin': pass ''' #processes day and session items here print('inside sigin') #start the processing multiprocess #QUERY THAT FETCHES ALL TO BE PROCESSED. PASS nfuuid,nfuuserid,nfuentityid TO THE SPAWNED PROCESS TO PROCESS THEM command = cur.mogrify("SELECT nfuuid,nfuuserid,nfuentityid FROM notifiuser WHERE nfustatus = 'P' AND nfprocessscope IN ('D','S') AND nfuuserid = %s AND nfuentityid = %s;" ,(userid,entityid,)) cur, dbqerr = db.mydbfunc(con,cur,command) print(cur) print(dbqerr) print(type(dbqerr)) print(dbqerr['natstatus']) if cur.closed == True: if(dbqerr['natstatus'] == "error" or dbqerr['natstatus'] == "warning"): dbqerr['statusdetails']="loginuser Fetch failed" resp = make_response(jsonify(dbqerr), 400) return(resp) else: pass records=[] for record in cur: print('inside for') print(record) records.append(record) print(len(records)) if len(records) == 0: #NO RECORDS TO PROCESS pass else: #HAVE RECORDS TO PROCESS pass #start the processing multiprocess #return 'ok' ''' elif screenid == 'dashboard': #process the everypage load items + Newly added day and session(flag to find this is nfuprocesbypgldsvc = 'Y') print('inside dashboard') command = cur.mogrify( "UPDATE notifiuser SET nfulazyldid = %s, nfulazyldidstatus = 'N' WHERE nfuuserid = %s AND nfuentityid = %s AND nfuscreenid = %s;", ( lazyloadid, userid, entityid, screenid, )) #command1 = cur.mogrify("select json_agg(c) from (SELECT nfuuid,nfumessage,nfumsgtype FROM notifiuser WHERE nfuuserid = %s AND nfuentityid = %s AND nfuscreenid='dashboard' AND nfustatus = 'C' and nfulazyldid = %s) as c;",(userid,entityid,lazyloadid) ) print(command) print('after lazid update') cur, dbqerr = db.mydbfunc(con, cur, command) print(dbqerr['natstatus']) if cur.closed == True: if (dbqerr['natstatus'] == "error" or dbqerr['natstatus'] == "warning"): dbqerr['statusdetails'] = "pf Fetch failed" resp = make_response(jsonify(dbqerr), 400) return (resp) con.commit() print(cur) print('consider insert or update is successful') # Send the response back and continue processing #start the processing multiprocess START #QUERY THAT FETCHES ALL TO BE PROCESSED. PASS nfuuid,nfuuserid,nfuentityid TO THE SPAWNED PROCESS TO PROCESS THEM cmdqry = "SELECT nfumid,nfuname,nfuuserid,nfuentityid FROM notifiuser WHERE nfustatus = 'P' AND nfprocessscope NOT IN ('D','S') AND nfuuserid = %s AND nfuentityid = %s" cmdqry = cmdqry + " UNION " cmdqry = cmdqry + "SELECT nfumid,nfuname,nfuuserid,nfuentityid FROM notifiuser WHERE nfustatus = 'P' AND nfprocessscope IN ('D','S') AND nfuprocesbypgldsvc = 'Y' AND nfuuserid = %s AND nfuentityid = %s;" command = cur.mogrify(cmdqry, ( userid, entityid, userid, entityid, )) print(command) cur, dbqerr = db.mydbfunc(con, cur, command) rowcount = cur.rowcount records = [] if rowcount != 0: for record in cur: print('inside for') print(record) records.append(record) print(records) if len(records) != 0: jobs = [] for i in records: uid, name, userid, entityid = i print('uid :', uid, 'name :', name, ' userid : ', userid, ' entityid : ', entityid) #prosta=notiprocessingfunctions(uid,name,userid,entityid) p = multiprocessing.Process(name=name, target=notiprocessingfunctions, args=( uid, name, userid, entityid, )) jobs.append(p) p.start() p.join() #start the processing multiprocess END elif lazyloadid != 'dashboard' or lazyloadid != 'signin': pass print('returning ok while i still process') db.mydbcloseall(con, cur) return True