def expire_cache(self): """Continuously examine cached objects, expiring stale ones. This function is designed to be run in its own daemon thread, referenced at ``self.expiration_thread``. """ # It's possible that "time" will be set to None # arbitrarily, so we check "while time" to avoid exceptions. # See tickets #99 and #180 for more information. while time: now = time.time() # Must make a copy of expirations so it doesn't change size # during iteration for expiration_time, objects in copyitems(self.expirations): if expiration_time <= now: for obj_size, uri, sel_header_values in objects: try: del self.store[uri][tuple(sel_header_values)] self.tot_expires += 1 self.cursize -= obj_size except KeyError: # the key may have been deleted elsewhere pass del self.expirations[expiration_time] time.sleep(self.expire_freq)
def page(self): changemsg = [] if cherrypy.session.id != cherrypy.session.originalid: if cherrypy.session.originalid is None: changemsg.append('Created new session because no session id was given.') if cherrypy.session.missing: changemsg.append('Created new session due to missing (expired or malicious) session.') if cherrypy.session.regenerated: changemsg.append('Application generated a new session.') try: expires = cherrypy.response.cookie['session_id']['expires'] except KeyError: expires = '' return page % { 'sessionid': cherrypy.session.id, 'changemsg': '<br>'.join(changemsg), 'respcookie': cherrypy.response.cookie.output(), 'reqcookie': cherrypy.request.cookie.output(), 'sessiondata': copyitems(cherrypy.session), 'servertime': datetime.utcnow().strftime("%Y/%m/%d %H:%M") + " UTC", 'serverunixtime': calendar.timegm(datetime.utcnow().timetuple()), 'cpversion': cherrypy.__version__, 'pyversion': sys.version, 'expires': expires, }
def clean_up(self): """Clean up expired sessions.""" now = self.now() try: for id, (data, expiration_time) in copyitems(self.cache): if expiration_time <= now: try: del self.cache[id] except KeyError: pass try: del self.locks[id] except KeyError: pass # added to remove obsolete lock objects for id in list(self.locks): if id not in self.cache: self.locks.pop(id, None) except RuntimeError: # RuntimeError: dictionary changed size during iteration # Do nothig. Keep cleanup thread running and maybe next time lucky. pass
def stop(self): td = getattr(self, 'teardown', None) if td: td() cherrypy.engine.exit() for name, server in copyitems(getattr(cherrypy, 'servers', {})): server.unsubscribe() del cherrypy.servers[name]
def clean_up(self): """Clean up expired sessions.""" now = datetime.datetime.now() for id, (data, expiration_time) in copyitems(self.cache): if expiration_time <= now: try: del self.cache[id] except KeyError: pass try: del self.locks[id] except KeyError: pass
def expire_cache(self): while time: now = time.time() for expiration_time, objects in copyitems(self.expirations): if expiration_time <= now: for obj_size, uri, sel_header_values in objects: try: del self.store[uri][tuple(sel_header_values)] self.tot_expires += 1 self.cursize -= obj_size except KeyError: pass del self.expirations[expiration_time] time.sleep(self.expire_freq)
def clean_up(self): """Clean up expired sessions.""" now = self.now() for id, (data, expiration_time) in copyitems(self.cache): if expiration_time <= now: try: del self.cache[id] except KeyError: pass try: del self.locks[id] except KeyError: pass # added to remove obsolete lock objects for id in list(self.locks): if id not in self.cache: self.locks.pop(id, None)
def ram_clean_up(self): """Clean up expired sessions.""" from cherrypy._cpcompat import copyitems now = datetime.datetime.now() for id, (data, expiration_time) in copyitems(self.cache): if expiration_time <= now: # если uid is None, то пользователь ещё не залогинился или уже разлогинился и протоколировать сессии в БД не нужно # если терминальный браузер или fti, то не закрываем сессию в БД # иначе закрываем PC-сессию auto_close_pc_session(data) try: del self.cache[id] except KeyError: pass try: del self.locks[id] except KeyError: pass
def expire_cache(self): """Continuously examine cached objects, expiring stale ones. This function is designed to be run in its own daemon thread, referenced at ``self.expiration_thread``. """ while time: now = time.time() for expiration_time, objects in copyitems(self.expirations): if expiration_time <= now: for obj_size, uri, sel_header_values in objects: try: del self.store[uri][tuple(sel_header_values)] self.tot_expires += 1 self.cursize -= obj_size except KeyError: pass del self.expirations[expiration_time] time.sleep(self.expire_freq)
def clean_up(self): """Clean up expired sessions.""" now = self.now() for _id, (data, expiration_time) in copyitems(self.cache): if expiration_time <= now: try: del self.cache[_id] except KeyError: pass try: if self.locks[_id].acquire(blocking=False): lock = self.locks.pop(_id) lock.release() except KeyError: pass # added to remove obsolete lock objects for _id in list(self.locks): if _id not in self.cache and self.locks[_id].acquire(blocking=False): lock = self.locks.pop(_id) lock.release()
def clean_up(self): """Clean up expired sessions.""" now = self.now() for id, (data, expiration_time) in copyitems(self.cache): if expiration_time <= now: try: active = Mongo(ActiveSession).find_one("wop", self.cache["wop"]) Mongo(ActiveSession).remove(active) except: print "Failed to remove active session object." try: del self.cache[id] except KeyError: pass try: del self.locks[id] except KeyError: pass # added to remove obsolete lock objects for id in list(self.locks): if id not in self.cache: self.locks.pop(id, None)
def clean_up(self): """Clean up expired sessions.""" now = self.now() for id, (data, expiration_time) in copyitems(self.cache): if expiration_time <= now: try: active = Mongo(ActiveSession).find_one( 'wop', self.cache['wop']) Mongo(ActiveSession).remove(active) except: print "Failed to remove active session object." try: del self.cache[id] except KeyError: pass try: del self.locks[id] except KeyError: pass # added to remove obsolete lock objects for id in list(self.locks): if id not in self.cache: self.locks.pop(id, None)
def makemap(): m = self._merged_args().get('map', {}) cherrypy.request.numerify_map = copyitems(m)
def clean_up(self): """Clean up expired sessions.""" sList = [] N = 0 now = self.now() for _id, (data, expiration_time) in copyitems(self.cache): f=open('/Users/i325009/Documents/python/cherrypy-project/logtool/out.txt','w') print >> f,_id print >> f,expiration_time f.close() if expiration_time <= now: try: abbb = self.cache.get(_id) filename1 = data f=open('/Users/i325009/Documents/python/cherrypy-project/logtool/out.txt','w') print >> f,filename1 print >> f,abbb f.close() sessiontop = data['top'] count = 1 while count <= sessiontop : datastr = data['pid' + str(count)] if datastr != 0 : sList.append(datastr) count = count + 1 N = N + 1 #data['pid' + str(count-1)] = 0 data['flag'] = 0 # n = 2 # sesspid2 = data['pid' + str(n)] # f=open('/Users/i325009/Documents/python/cherrypy-project/logtool/out.txt','w') # print >> f,sesspid2 # f.close() # pidkillnow = sesspid2 # killnumber = pidkillnow #if os.kill(pidkillnow,0)!=0: # os.kill(pidkillnow,9) # f=open('/Users/i325009/Documents/python/cherrypy-project/logtool/out.txt','w') # successkill = "kill success" # print >> f,successkill # f.close() del self.cache[_id] self.cache.pop(_id, None) abab = self.cache.get(_id) acac = "clean_up_434" f=open('/Users/i325009/Documents/python/cherrypy-project/logtool/out.txt','w') print >> f,acac #print >> f,abab f.close() except KeyError: pass try: f=open('/Users/i325009/Documents/python/cherrypy-project/logtool/out.txt','w') # print >> f,"xxx" f.close() if self.locks[_id].acquire(blocking=False): lock = self.locks.pop(_id) lock.release() except KeyError: f=open('/Users/i325009/Documents/python/cherrypy-project/logtool/out.txt','w') # print >> f,"yyy" f.close() pass # f=open('/Users/i325009/Documents/python/cherrypy-project/logtool/out.txt','w') # print >> f,killnumber # f.close() # added to remove obsolete lock objects for _id in list(self.locks): if _id not in self.cache and self.locks[_id].acquire(blocking=False): lock = self.locks.pop(_id) lock.release() cn = 1 if N > 0 : for element in sList: killnumber = element os.kill(killnumber,9) del sList[:]
def handler(req): from mod_python import apache try: global _isSetUp if not _isSetUp: setup(req) _isSetUp = True # Obtain a Request object from CherryPy local = req.connection.local_addr local = httputil.Host(local[0], local[1], req.connection.local_host or "") remote = req.connection.remote_addr remote = httputil.Host(remote[0], remote[1], req.connection.remote_host or "") scheme = req.parsed_uri[0] or 'http' req.get_basic_auth_pw() try: # apache.mpm_query only became available in mod_python 3.1 q = apache.mpm_query threaded = q(apache.AP_MPMQ_IS_THREADED) forked = q(apache.AP_MPMQ_IS_FORKED) except AttributeError: bad_value = ("You must provide a PythonOption '%s', " "either 'on' or 'off', when running a version " "of mod_python < 3.1") threaded = options.get('multithread', '').lower() if threaded == 'on': threaded = True elif threaded == 'off': threaded = False else: raise ValueError(bad_value % "multithread") forked = options.get('multiprocess', '').lower() if forked == 'on': forked = True elif forked == 'off': forked = False else: raise ValueError(bad_value % "multiprocess") sn = cherrypy.tree.script_name(req.uri or "/") if sn is None: send_response(req, '404 Not Found', [], '') else: app = cherrypy.tree.apps[sn] method = req.method path = req.uri qs = req.args or "" reqproto = req.protocol headers = copyitems(req.headers_in) rfile = _ReadOnlyRequest(req) prev = None try: redirections = [] while True: request, response = app.get_serving(local, remote, scheme, "HTTP/1.1") request.login = req.user request.multithread = bool(threaded) request.multiprocess = bool(forked) request.app = app request.prev = prev # Run the CherryPy Request object and obtain the response try: request.run(method, path, qs, reqproto, headers, rfile) break except cherrypy.InternalRedirect: ir = sys.exc_info()[1] app.release_serving() prev = request if not recursive: if ir.path in redirections: raise RuntimeError("InternalRedirector visited the " "same URL twice: %r" % ir.path) else: # Add the *previous* path_info + qs to redirections. if qs: qs = "?" + qs redirections.append(sn + path + qs) # Munge environment and try again. method = "GET" path = ir.path qs = ir.query_string rfile = BytesIO() send_response(req, response.output_status, response.header_list, response.body, response.stream) finally: app.release_serving() except: tb = format_exc() cherrypy.log(tb, 'MOD_PYTHON', severity=logging.ERROR) s, h, b = bare_error() send_response(req, s, h, b) return apache.OK
def handler(req): from mod_python import apache try: global _isSetUp if not _isSetUp: setup(req) _isSetUp = True # Obtain a Request object from CherryPy local = req.connection.local_addr local = httputil.Host( local[0], local[1], req.connection.local_host or '') remote = req.connection.remote_addr remote = httputil.Host( remote[0], remote[1], req.connection.remote_host or '') scheme = req.parsed_uri[0] or 'http' req.get_basic_auth_pw() try: # apache.mpm_query only became available in mod_python 3.1 q = apache.mpm_query threaded = q(apache.AP_MPMQ_IS_THREADED) forked = q(apache.AP_MPMQ_IS_FORKED) except AttributeError: bad_value = ("You must provide a PythonOption '%s', " "either 'on' or 'off', when running a version " 'of mod_python < 3.1') options = req.get_options() threaded = options.get('multithread', '').lower() if threaded == 'on': threaded = True elif threaded == 'off': threaded = False else: raise ValueError(bad_value % 'multithread') forked = options.get('multiprocess', '').lower() if forked == 'on': forked = True elif forked == 'off': forked = False else: raise ValueError(bad_value % 'multiprocess') sn = cherrypy.tree.script_name(req.uri or '/') if sn is None: send_response(req, '404 Not Found', [], '') else: app = cherrypy.tree.apps[sn] method = req.method path = req.uri qs = req.args or '' reqproto = req.protocol headers = copyitems(req.headers_in) rfile = _ReadOnlyRequest(req) prev = None try: redirections = [] while True: request, response = app.get_serving(local, remote, scheme, 'HTTP/1.1') request.login = req.user request.multithread = bool(threaded) request.multiprocess = bool(forked) request.app = app request.prev = prev # Run the CherryPy Request object and obtain the response try: request.run(method, path, qs, reqproto, headers, rfile) break except cherrypy.InternalRedirect: ir = sys.exc_info()[1] app.release_serving() prev = request if not recursive: if ir.path in redirections: raise RuntimeError( 'InternalRedirector visited the same URL ' 'twice: %r' % ir.path) else: # Add the *previous* path_info + qs to # redirections. if qs: qs = '?' + qs redirections.append(sn + path + qs) # Munge environment and try again. method = 'GET' path = ir.path qs = ir.query_string rfile = io.BytesIO() send_response( req, response.output_status, response.header_list, response.body, response.stream) finally: app.release_serving() except: tb = format_exc() cherrypy.log(tb, 'MOD_PYTHON', severity=logging.ERROR) s, h, b = bare_error() send_response(req, s, h, b) return apache.OK
def handler(req): global _isSetUp from mod_python import apache try: if not _isSetUp: setup(req) _isSetUp = True local = req.connection.local_addr local = httputil.Host(local[0], local[1], req.connection.local_host or '') remote = req.connection.remote_addr remote = httputil.Host(remote[0], remote[1], req.connection.remote_host or '') scheme = req.parsed_uri[0] or 'http' req.get_basic_auth_pw() try: q = apache.mpm_query threaded = q(apache.AP_MPMQ_IS_THREADED) forked = q(apache.AP_MPMQ_IS_FORKED) except AttributeError: bad_value = "You must provide a PythonOption '%s', either 'on' or 'off', when running a version of mod_python < 3.1" threaded = options.get('multithread', '').lower() if threaded == 'on': threaded = True elif threaded == 'off': threaded = False else: raise ValueError(bad_value % 'multithread') forked = options.get('multiprocess', '').lower() if forked == 'on': forked = True elif forked == 'off': forked = False else: raise ValueError(bad_value % 'multiprocess') sn = cherrypy.tree.script_name(req.uri or '/') if sn is None: send_response(req, '404 Not Found', [], '') else: app = cherrypy.tree.apps[sn] method = req.method path = req.uri qs = req.args or '' reqproto = req.protocol headers = copyitems(req.headers_in) rfile = _ReadOnlyRequest(req) prev = None try: redirections = [] while True: request, response = app.get_serving(local, remote, scheme, 'HTTP/1.1') request.login = req.user request.multithread = bool(threaded) request.multiprocess = bool(forked) request.app = app request.prev = prev try: request.run(method, path, qs, reqproto, headers, rfile) break except cherrypy.InternalRedirect: ir = sys.exc_info()[1] app.release_serving() prev = request if not recursive: if ir.path in redirections: raise RuntimeError('InternalRedirector visited the same URL twice: %r' % ir.path) else: if qs: qs = '?' + qs redirections.append(sn + path + qs) method = 'GET' path = ir.path qs = ir.query_string rfile = BytesIO() send_response(req, response.status, response.header_list, response.body, response.stream) finally: app.release_serving() except: tb = format_exc() cherrypy.log(tb, 'MOD_PYTHON', severity=logging.ERROR) s, h, b = bare_error() send_response(req, s, h, b) return apache.OK