def __init__(self): self.lasttick = 0 self.retcache = {} self.path = homedir + '/stats.sqlite' self.db = db.DB(self.path) self.dblock = Lock() self.httpd = make_server(cfgval("host"), cfgval("port"), httpd(self), handler_class=httphandler) sel = dbselectors.BaseSelector() sel.pathid = None sel.server = self sel.db = self.db sel.qopt = api.Qopt({}) caches.make(sel) self.tick() thread = Thread(target=Server.do_http, args=(self, )) thread.setDaemon(True) thread.start() self.starttime = 0 with self.dblock: with self.db: api.make(self, self.db, {}, "/") print("Created initial cache, server running.")
def __call__(self, environ, start_response): sys.stdout.write(((datetime.now().strftime('%D %T') + ': ' + environ['REMOTE_ADDR'] + ': ' + environ['PATH_INFO'] + '?' + environ['QUERY_STRING']).strip() + '...')) result = b"" t = time.time() self.server.starttime = t try: r = api.make(self.server, self.server.db, urllib.parse.parse_qs( environ['QUERY_STRING'], True), environ['PATH_INFO']) except: r = ( 'text/html', '500 Internal Server Error', web.err500.page(dbselectors.BaseSelector()).encode()) print((traceback.format_exc())) sys.stdout.write('...done [%f]\n' % (time.time() - t)) if len(r) == 3: t, status, result = r headers = [('Content-type', '%s' % t)] elif len(r) == 2: t = r[0] args = r[1:] if t == 'redirect': status = "301 Moved Permanently" headers = [('Location', '%s' % args[0])] start_response(status, headers) return [result]
def __call__(self, environ, start_response): print(((datetime.now().strftime('%D %T') + ': ' + environ['REMOTE_ADDR'] + ': ' + environ['PATH_INFO'] + '?' + environ['QUERY_STRING']).strip())) result = b"" r = api.make(self.server, self.server.db, urllib.parse.parse_qs( environ['QUERY_STRING'], True), environ['PATH_INFO']) if len(r) == 3: t, status, result = r headers = [('Content-type', '%s' % t)] elif len(r) == 2: t = r[0] args = r[1:] if t == 'redirect': status = "301 Moved Permanently" headers = [('Location', '%s' % args[0])] start_response(status, headers) return [result]