Forking what is left of ZeroNet and hopefully adding an AT Proto Frontend/Proxy
at main 57 lines 1.9 kB view raw
1import time 2import itertools 3 4import gevent 5 6from Config import config 7from util import helper 8from util.Flag import flag 9from Plugin import PluginManager 10from .ChartDb import ChartDb 11from .ChartCollector import ChartCollector 12 13if "db" not in locals().keys(): # Share on reloads 14 db = ChartDb() 15 gevent.spawn_later(10 * 60, db.archive) 16 helper.timer(60 * 60 * 6, db.archive) 17 collector = ChartCollector(db) 18 19@PluginManager.registerTo("SiteManager") 20class SiteManagerPlugin(object): 21 def load(self, *args, **kwargs): 22 back = super(SiteManagerPlugin, self).load(*args, **kwargs) 23 collector.setInitialLastValues(self.sites.values()) 24 return back 25 26 def delete(self, address, *args, **kwargs): 27 db.deleteSite(address) 28 return super(SiteManagerPlugin, self).delete(address, *args, **kwargs) 29 30@PluginManager.registerTo("UiWebsocket") 31class UiWebsocketPlugin(object): 32 @flag.admin 33 def actionChartDbQuery(self, to, query, params=None): 34 if config.debug or config.verbose: 35 s = time.time() 36 rows = [] 37 try: 38 if not query.strip().upper().startswith("SELECT"): 39 raise Exception("Only SELECT query supported") 40 res = db.execute(query, params) 41 except Exception as err: # Response the error to client 42 self.log.error("ChartDbQuery error: %s" % err) 43 return {"error": str(err)} 44 # Convert result to dict 45 for row in res: 46 rows.append(dict(row)) 47 if config.verbose and time.time() - s > 0.1: # Log slow query 48 self.log.debug("Slow query: %s (%.3fs)" % (query, time.time() - s)) 49 return rows 50 51 @flag.admin 52 def actionChartGetPeerLocations(self, to): 53 peers = {} 54 for site in self.server.sites.values(): 55 peers.update(site.peers) 56 peer_locations = self.getPeerLocations(peers) 57 return peer_locations