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