def __init__(self, config=None): PluginManager.__init__(self) self.gconfig = config self.log = config.get('log_facility') self.platform = config.get('platform') PluginLoader.register_observer(self) self.refresh_plugin_data()
def on_click(self, event, params, vars=None): if params[0] == 'update': self._mgr.update_list() self.put_message('info', 'Plugin list updated') if params[0] == 'remove': self._mgr.remove(params[1]) self.put_message( 'info', 'Plugin removed. Refresh page for changes to take effect.') if params[0] == 'reload': try: PluginLoader.unload(params[1]) except: pass try: PluginLoader.load(params[1]) except: pass self.put_message( 'info', 'Plugin reloaded. Refresh page for changes to take effect.') if params[0] == 'restart': self.app.restart() if params[0] == 'install': self._mgr.install(params[1], load=True) self.put_message( 'info', 'Plugin installed. Refresh page for changes to take effect.') ComponentManager.get().rescan()
def refresh_plugin_data(self): """ Rescans plugins for JS, CSS, LESS, XSLT widgets and XML templates. """ self.template_path = [] self.less_styles = [] self.template_styles = [] self.template_scripts = [] self.layouts = {} includes = [] functions = {} for f in self.grab_plugins(IXSLTFunctionProvider): functions.update(f.get_funcs()) # Get path for static content and templates plugins = [] plugins.extend(PluginLoader.list_plugins().keys()) plugins.extend(netcontrol.plugins.plist) for c in plugins: path = os.path.join(PluginLoader.get_plugin_path(self, c), c) fp = os.path.join(path, 'files') if os.path.exists(fp): self.template_styles.extend([ '/dl/' + c + '/' + s for s in os.listdir(fp) if s.endswith('.css') ]) self.less_styles.extend([ '/dl/' + c + '/' + s for s in os.listdir(fp) if s.endswith('.less') ]) self.template_scripts.extend([ '/dl/' + c + '/' + s for s in os.listdir(fp) if s.endswith('.js') ]) wp = os.path.join(path, 'widgets') if os.path.exists(wp): includes.extend([ os.path.join(wp, s) for s in os.listdir(wp) if s.endswith('.xslt') ]) lp = os.path.join(path, 'layout') if os.path.exists(lp): for s in os.listdir(lp): if s.endswith('.xml'): self.layouts['%s:%s' % (c, s)] = os.path.join(lp, s) tp = os.path.join(path, 'templates') if os.path.exists(tp): self.template_path.append(tp) if xslt.xslt is None: xslt.prepare(includes, functions)
def make_report(app, err): """ Formats a bug report. """ from netcontrol.plugmgr import PluginLoader pr = '' for p in sorted(PluginLoader.list_plugins().keys()): pr += p + '\n' # Finalize the reported log app.log.blackbox.stop() return (('Netcontrol %s bug report\n' + '--------------------\n\n' + 'System: %s\n' + 'Detected platform: %s\n' + 'Detected distro: %s\n' + 'Python: %s\n\n' + 'Config path: %s\n\n' + '%s\n\n' 'Loaded plugins:\n%s\n\n' + 'Log:\n%s\n' ) % (version(), shell('uname -a'), detect_platform(), detect_distro(), '.'.join([str(x) for x in platform.python_version_tuple()]), app.config.filename, err, pr, app.log.blackbox.buffer, ))
def make_report(app, err): """ Formats a bug report. """ from netcontrol.plugmgr import PluginLoader pr = '' for p in sorted(PluginLoader.list_plugins().keys()): pr += p + '\n' # Finalize the reported log app.log.blackbox.stop() return ( ('Netcontrol %s bug report\n' + '--------------------\n\n' + 'System: %s\n' + 'Detected platform: %s\n' + 'Detected distro: %s\n' + 'Python: %s\n\n' + 'Config path: %s\n\n' + '%s\n\n' 'Loaded plugins:\n%s\n\n' + 'Log:\n%s\n') % ( version(), shell('uname -a'), detect_platform(), detect_distro(), '.'.join([str(x) for x in platform.python_version_tuple()]), app.config.filename, err, pr, app.log.blackbox.buffer, ))
def process_dl(self, req, start_response): params = req['PATH_INFO'].split('/', 3) self.log.debug('Dispatching download: %s'%req['PATH_INFO']) path = PluginLoader.get_plugin_path(self.app, params[2]) file = os.path.join(path, params[2], 'files', params[3]) return wsgi_serve_file(req, start_response, file)
def on_click(self, event, params, vars=None): if params[0] == 'update': self._mgr.update_list() self.put_message('info', 'Plugin list updated') if params[0] == 'remove': self._mgr.remove(params[1]) self.put_message('info', 'Plugin removed. Refresh page for changes to take effect.') if params[0] == 'reload': try: PluginLoader.unload(params[1]) except: pass try: PluginLoader.load(params[1]) except: pass self.put_message('info', 'Plugin reloaded. Refresh page for changes to take effect.') if params[0] == 'restart': self.app.restart() if params[0] == 'install': self._mgr.install(params[1], load=True) self.put_message('info', 'Plugin installed. Refresh page for changes to take effect.') ComponentManager.get().rescan()
def run_server(log_level=logging.INFO, config_file=''): log = make_log(debug=log_level == logging.DEBUG, log_level=log_level) # For the debugging purposes log.info('Netcontrol %s' % version()) # We need this early netcontrol.utils.logger = log # Read config config = Config() if config_file: log.info('Using config file %s' % config_file) config.load(config_file) else: log.info('Using default settings') # Handle first-launch reconfiguration deployed.reconfigure(config) # Add log handler to config, so all plugins could access it config.set('log_facility', log) # Start recording log for the bug reports log.blackbox.start() platform = netcontrol.utils.detect_platform() log.info('Detected platform: %s' % platform) # Load external plugins PluginLoader.initialize(log, config.get('netcontrol', 'plugins'), platform) PluginLoader.load_plugins() # Start components app = Application(config) PluginLoader.register_mgr(app) # Register permanent app ComponentManager.create(app) # Start server host = config.get('netcontrol', 'bind_host') port = config.getint('netcontrol', 'bind_port') log.info('Listening on %s:%d' % (host, port)) # SSL params ssl = {} if config.getint('netcontrol', 'ssl') == 1: ssl = { 'keyfile': config.get('netcontrol', 'cert_key'), 'certfile': config.get('netcontrol', 'cert_file'), } server = gevent.pywsgi.WSGIServer( (host, port), application=AppDispatcher(config).dispatcher, **ssl) config.set('server', server) log.info('Starting server') server.serve_forever() ComponentManager.get().stop() if hasattr(server, 'restart_marker'): log.info('Restarting by request') fd = 20 # Close all descriptors. Creepy thing while fd > 2: try: os.close(fd) log.debug('Closed descriptor #%i' % fd) except: pass fd -= 1 os.execv(sys.argv[0], sys.argv) else: log.info('Stopped by request')
def refresh_plugin_data(self): """ Rescans plugins for JS, CSS, LESS, XSLT widgets and XML templates. """ self.template_path = [] self.less_styles = [] self.template_styles = [] self.template_scripts = [] self.layouts = {} includes = [] functions = {} for f in self.grab_plugins(IXSLTFunctionProvider): functions.update(f.get_funcs()) # Get path for static content and templates plugins = [] plugins.extend(PluginLoader.list_plugins().keys()) plugins.extend(netcontrol.plugins.plist) for c in plugins: path = os.path.join(PluginLoader.get_plugin_path(self, c), c) fp = os.path.join(path, 'files') if os.path.exists(fp): self.template_styles.extend([ '/dl/'+c+'/'+s for s in os.listdir(fp) if s.endswith('.css') ]) self.less_styles.extend([ '/dl/'+c+'/'+s for s in os.listdir(fp) if s.endswith('.less') ]) self.template_scripts.extend([ '/dl/'+c+'/'+s for s in os.listdir(fp) if s.endswith('.js') ]) wp = os.path.join(path, 'widgets') if os.path.exists(wp): includes.extend([ os.path.join(wp, s) for s in os.listdir(wp) if s.endswith('.xslt') ]) lp = os.path.join(path, 'layout') if os.path.exists(lp): for s in os.listdir(lp): if s.endswith('.xml'): self.layouts['%s:%s'%(c,s)] = os.path.join(lp, s) tp = os.path.join(path, 'templates') if os.path.exists(tp): self.template_path.append(tp) if xslt.xslt is None: xslt.prepare( includes, functions )
def run_server(log_level=logging.INFO, config_file=""): log = make_log(debug=log_level == logging.DEBUG, log_level=log_level) # For the debugging purposes log.info("Netcontrol %s" % version()) # We need this early netcontrol.utils.logger = log # Read config config = Config() if config_file: log.info("Using config file %s" % config_file) config.load(config_file) else: log.info("Using default settings") # Handle first-launch reconfiguration deployed.reconfigure(config) # Add log handler to config, so all plugins could access it config.set("log_facility", log) # Start recording log for the bug reports log.blackbox.start() platform = netcontrol.utils.detect_platform() log.info("Detected platform: %s" % platform) # Load external plugins PluginLoader.initialize(log, config.get("netcontrol", "plugins"), platform) PluginLoader.load_plugins() # Start components app = Application(config) PluginLoader.register_mgr(app) # Register permanent app ComponentManager.create(app) # Start server host = config.get("netcontrol", "bind_host") port = config.getint("netcontrol", "bind_port") log.info("Listening on %s:%d" % (host, port)) # SSL params ssl = {} if config.getint("netcontrol", "ssl") == 1: ssl = {"keyfile": config.get("netcontrol", "cert_key"), "certfile": config.get("netcontrol", "cert_file")} server = gevent.pywsgi.WSGIServer((host, port), application=AppDispatcher(config).dispatcher, **ssl) config.set("server", server) log.info("Starting server") server.serve_forever() ComponentManager.get().stop() if hasattr(server, "restart_marker"): log.info("Restarting by request") fd = 20 # Close all descriptors. Creepy thing while fd > 2: try: os.close(fd) log.debug("Closed descriptor #%i" % fd) except: pass fd -= 1 os.execv(sys.argv[0], sys.argv) else: log.info("Stopped by request")