def _inspect_inactive_children(sid): #print "inspection...{}".format(sid) s_obj = WebServerModel.objects(sid=sid) children = s_obj.get().children if children: for child in children: #logger.info(child.last_access) #logger.info(api._get_current_time()) if api._get_unix_from_datetime( api._get_current_time())-api._get_unix_from_datetime( child.last_access)>api.TIME_DETERMINE_INACTIVE: logger.info(child.nid+" -> user logged out") ## pull inactive user s_obj.update_one(pull__children__nid=child.nid) s_obj.get().save() ## notify all clients about inactive user message = json.dumps( { 'action':api._ACTION_KEYS[2], 'data':{ "nid":child.nid, } }) ## remove lock on shared resource if the inactive child is holding it if q.get(api.RES_HOLDER) == child.nid: logger.info("logging out user had locks") _coordinate_acc_to_res(sid, child.nid, api._ACTION_KEYS[6]) _broadcast_to_nodes(api.EXCHANGE_FOR_ALL, api.encrypt_msg(s_obj.scalar('common_key_public').get(), message)) _make_log(api._ACTION_KEYS[2], sid, child.nid) ## TODO: try deamon thread threading.Timer(api.INSPECTION_TIME_INTERVAL, _inspect_inactive_children, [sid]).start()
def get_user_list(sid): if _coordinate_acc_to_res(sid=sid): if _upload_user_sessions(): ## TODO: try with mongodb query but this requires to ## handle obtain 'modified' and convert into unix timestamp to compare ## within the query users = map(lambda x:{ 'user_name':json.loads(x.user_data)['user_name'], 'modified':x['modified'], 'ssid':x['ssid'] } if api._get_unix_from_datetime( api._get_current_time())-api._get_unix_from_datetime( x.modified)<api.TIME_DETERMINE_USER_ACTIVE else None, UserSessions.objects.all()) # release resource lock _coordinate_acc_to_res(sid, sid, api._ACTION_KEYS[6]) # return list of lately active users by removing None values return filter(None, users) else: # release resource lock _coordinate_acc_to_res(sid, sid, api._ACTION_KEYS[6]) else: users = map(lambda x:{ 'user_name':json.loads(x.user_data)['user_name'], 'modified':x['modified'], 'ssid':x['ssid'] } if api._get_unix_from_datetime( api._get_current_time())-api._get_unix_from_datetime( x.modified)<api.TIME_DETERMINE_USER_ACTIVE else None, Sessions.objects.all()) return filter(None, users) return None