def users(): return "Disabled for now" page = request.args['page'] if 'page' in request.args else 1 try: page = int(page) except: page = 1 page = max(1, page) perPage = 200 g.dbsession = Config.ScopedSession() now = datetime.now(utc) total = g.dbsession.query(Credential).filter(Credential.expiration > now).count() pages = ceil(total / perPage) page = min(pages, page) pagerange = range(max(0, page - 3) + 1, min(pages, page + 2) + 1) members = g.dbsession.query(Credential).filter(Credential.expiration > now)\ .order_by(Credential.memberid)\ .order_by(Credential.priority)\ .order_by(Credential.expiration).offset((page - 1) * perPage).limit(perPage).all() membersgrouped = dict((k,list(v)) for k,v in groupby(members, lambda m : m.memberid)) for k,v in membersgrouped.items(): #blah = list(v) print(k,len(list(v))) return render_template('users.html', activity=activity, members=membersgrouped,ctx="users",page=page, pages=pages,pagerange=pagerange)
def export(): g.dbsession = Config.ScopedSession() activity = g.dbsession.query(Activity).order_by(Activity.timestamp.desc()) def generate(): yield f"Time,Facility,MemberId,Authcode,Result\r\n" a: Activity for a in activity: yield f"{a.timestamp.strftime('%c')},{a.facility},{a.memberid},{a.credentialref},{a.result}\r\n" return Response(stream_with_context(generate()),mimetype="text/csv")
def query_hardware(): #rapidly clicking query could cause problems. q: Queue = webpanel.config['squeue'] w: Queue = webpanel.config['wqueue'] q.put(("query",)) try: status = w.get(True, 10.0) except Empty: status = [] g.dbsession = Config.ScopedSession() return "<br />".join(status)
def activity(): page = request.args['page'] if 'page' in request.args else 1 try: page = int(page) except: page = 1 page = max(1,page) perPage = 200 g.dbsession = Config.ScopedSession() total = g.dbsession.query(Activity).count() pages = ceil(total / perPage) page = min(pages, page) pagerange = range(max(0,page-3)+1,min(pages, page+2)+1) activity = g.dbsession.query(Activity).order_by(Activity.timestamp.desc()).offset((page - 1) * perPage).limit(perPage) return render_template('activity.html',activity=activity,ctx="activity",page=page, pages=pages,pagerange=pagerange)
def diagnostics(): q: Queue = webpanel.config['squeue'] w: Queue = webpanel.config['wqueue'] q.put(("status",)) try: status = w.get(True,0.250) except Empty: status = {} g.dbsession = Config.ScopedSession() facility_map = {} for f in status: facility_map[f] = ( Config.Facilities[f].board, Config.Facilities[f].relay ) #requirements : List[AccessRequirement] = list(g.dbsession.query(AccessRequirement).order_by(AccessRequirement.requiredpriority.desc()).all()) #TODO requirements = [] requiredLevel = 0 for r in requirements: if r.is_active(): requiredLevel = max(requiredLevel,r.requiredpriority) return render_template('diagnostics.html',facility_status=status,facility_map=facility_map,requirements=requirements,rlevel=requiredLevel,ctx="diagnostics")
from models import Credential, Activity, AccessRequirement from random import randint, sample from uuid import uuid4 from datetime import datetime, timedelta from pytz import utc def randomId(size=6): return "".join([str(randint(0, 9)) for a in range(size)]) numUsers = 35 maxCredentialsPerUser = 8 now = datetime.now(utc) session = Config.ScopedSession() def makeUsers(numUsers, maxCredentialsPerUser, priority): Users = {} for u in range(numUsers): memberId = memberid = randomId(4) Users[memberId] = [] for un in range(1): #range(randint(0,maxCredentialsPerUser)): start = now - timedelta(days=randint(0, 12)) end = now + timedelta(days=randint(0, 36)) c = Credential(facility="frontdoor", memberid=memberId, credential=randomId(9), type="fob", effective=start,
def hardware(): g.dbsession = Config.ScopedSession() #boards = g.dbsession.query(Board).all() #facilities = g.dbsession.query(Facility).order_by(Facility.name).all() return render_template('configuration.html', ctx="hardware")