class HealthWidget(Plugin): implements(apis.dashboard.IWidget) title = 'Monitoramento' icon = '/dl/health/icon.png' name = 'Health monitor' style = 'linear' def get_ui(self, cfg, id=None): self.mon = ComponentManager.get().find('health-monitor') text = { 'good': 'BOM', 'susp': 'ATENÇÂO', 'dang': 'PERIGO' } stat = { 'good': 'info', 'susp': 'warn', 'dang': 'err' } ostat = 'good' for m in sorted(self.mon.get(), key=lambda x:x.name): st = self.mon.get()[m] if st == 'susp' and ostat == 'good': ostat = st if st == 'dang': ostat = st ui = self.app.inflate('health:widget') ui.find('overall').text = text[ostat] ui.find('overall')['class'] = 'status-cell-%s'%stat[ostat] return ui def handle(self, event, params, cfg, vars=None): pass def get_config_dialog(self): pass def process_config(self, vars): pass
class HDDTempWidget(Plugin): implements(apis.dashboard.IWidget) title = 'HDD Temperature' icon = '/dl/hddtemp/icon.png' name = 'HDD Temperature' style = 'linear' def get_ui(self, cfg, id=None): m = HDDTempMeter(self.app).prepare(cfg) self.title = cfg return UI.Label(text='%.2f °C'%m.get_value()) def handle(self, event, params, cfg, vars=None): pass def get_config_dialog(self): m = HDDTempMeter(self.app) dlg = self.app.inflate('hddtemp:widget-config') for s in m.list_disks(): dlg.append('list', UI.SelectOption( value=s, text=s, )) return dlg def process_config(self, vars): return vars.getvalue('disk', None)
class URLHandler(object): """ Base class that handles HTTP requests based on its methods decorated with :func:url """ implements(IURLHandler) def _get_url_handler(self, uri): for cls in self.__class__.mro(): if '_urls' in dir(cls): for uri_re in cls._urls.keys(): if uri_re.match(uri): return cls._urls[uri_re] return None def match_url(self, req): """ Returns True if class (or any parent class) could handle URL """ if self._get_url_handler(req.get('PATH_INFO')) is not None: return True return False def url_handler(self, req, start_response): handler = self._get_url_handler(req.get('PATH_INFO')) if handler is None: return try: handler = self.__getattribute__(handler) except AttributeError: return return handler(req, start_response)
class CronConfig (Plugin): implements(IConfigurable) name = 'Cron' id = 'cron' def list_files(self): return ['/var/spool/cron/*/*']
class SVWidget(Plugin): implements(apis.dashboard.IWidget) icon = '/dl/supervisor/icon.png' name = 'Supervisor process' title = None style = 'linear' def __init__(self): self.iface = None def get_ui(self, cfg, id=None): mgr = SVClient(self.app) running = False for x in mgr.status(): if x['name'] == cfg and x['status'] == 'RUNNING': running = True self.title = cfg self.icon = '/dl/core/ui/stock/service-' + ('run.png' if running else 'stop.png') ui = self.app.inflate('supervisor:widget') if running: ui.remove('start') ui.find('stop').set('id', id + '/stop') ui.find('restart').set('id', id + '/restart') else: ui.remove('stop') ui.remove('restart') ui.find('start').set('id', id + '/start') return ui def handle(self, event, params, cfg, vars=None): mgr = SVClient(self.app) if params[0] == 'start': mgr.start(cfg) if params[0] == 'stop': mgr.stop(cfg) if params[0] == 'restart': mgr.restart(cfg) def get_config_dialog(self): mgr = SVClient(self.app) dlg = self.app.inflate('supervisor:widget-config') for s in mgr.status(): dlg.append('list', UI.SelectOption( value=s['name'], text=s['name'], )) return dlg def process_config(self, vars): return vars.getvalue('svc', None)
class CoreFunctions(Plugin): implements(IXSLTFunctionProvider) def get_funcs(self): return { 'attr': attr, 'iif': iif, 'b64': b64, 'jsesc': jsesc, 'idesc': idesc, 'css': css, 'id': id }
class ServiceWidget(Plugin): implements(apis.dashboard.IWidget) icon = '/dl/services/icon.png' name = 'Service control' title = None style = 'linear' def __init__(self): self.iface = None def get_ui(self, cfg, id=None): mgr = self.app.get_backend(apis.services.IServiceManager) running = mgr.get_status(cfg) == 'running' self.title = cfg self.icon = '/dl/core/ui/stock/service-' + ('run.png' if running else 'stop.png') ui = self.app.inflate('services:widget') if running: ui.remove('start') ui.find('stop').set('id', id + '/stop') ui.find('restart').set('id', id + '/restart') else: ui.remove('stop') ui.remove('restart') ui.find('start').set('id', id + '/start') return ui def handle(self, event, params, cfg, vars=None): mgr = self.app.get_backend(apis.services.IServiceManager) if params[0] == 'start': mgr.start(cfg) if params[0] == 'stop': mgr.stop(cfg) if params[0] == 'restart': mgr.restart(cfg) def get_config_dialog(self): mgr = self.app.get_backend(apis.services.IServiceManager) dlg = self.app.inflate('services:widget-config') for s in sorted(mgr.list_all()): dlg.append('list', UI.SelectOption( value=s.name, text=s.name, )) return dlg def process_config(self, vars): return vars.getvalue('svc', None)
class PowerWidget(Plugin): implements(apis.dashboard.IWidget) title = 'Uptime' icon = '/dl/power/widget.png' name = 'Uptime' style = 'linear' def get_ui(self, cfg, id=None): return UI.Label(text=get_uptime()) def handle(self, event, params, cfg, vars=None): pass def get_config_dialog(self): return None def process_config(self, vars): pass
class PackageManagerProgress(Plugin): implements(IProgressBoxProvider) title = 'Packages' icon = '/dl/pkgman/icon.png' can_abort = True def __init__(self): self.mgr = self.app.get_backend(apis.pkgman.IPackageManager) def has_progress(self): try: return self.mgr.is_busy() except: return False def get_progress(self): return self.mgr.get_busy_status() def abort(self): self.mgr.abort()
class ShellProgress(Plugin): implements(IProgressBoxProvider) title = 'Shell' icon = '/dl/shell/icon.png' can_abort = True def __init__(self): self.proc = self.app.session.get('ShellPlugin-_process') def has_progress(self): if self.proc is None: self.proc = self.app.session.get('ShellPlugin-_process') return False return self.proc.is_running() def get_progress(self): return self.proc.cmdline def abort(self): self.proc.kill()
class MuninWidget(Plugin): implements(apis.dashboard.IWidget) title = 'Munin' icon = '/dl/munin/icon.png' name = 'Munin graph' style = 'normal' hidden = True def get_ui(self, cfg, id=None): self.title = cfg['title'] return UI.Image(file=cfg['url'], width=330) def handle(self, event, params, cfg, vars=None): pass def get_config_dialog(self): return None def process_config(self, event, params, vars): pass
class ConfMgrHook(Plugin): """ Handy base class in case you don't want to reimplement all hook methods. """ implements(IConfMgrHook) abstract = True def pre_load(self, cfg, path): pass def post_load(self, cfg, path, data): return data def pre_save(self, cfg, path, data): return data def post_save(self, cfg, path): pass def finished(self, cfg): pass
class NetworkWidget(Plugin): implements(apis.dashboard.IWidget) icon = '/dl/network/down.png' name = 'Network monitor' title = None style = 'normal' def __init__(self): self.iface = None def get_ui(self, cfg, id=None): self.iface = cfg self.title = 'Network interface: %s' % cfg be = self.app.get_backend(INetworkConfig) if not cfg in be.interfaces: return UI.Label(text='Interface not found') i = be.interfaces[cfg] self.icon = '/dl/network/%s.png' % ('up' if i.up else 'down') ui = self.app.inflate('network:widget') ui.find('ip').set('text', be.get_ip(i)) ui.find('in').set('text', str_fsize(be.get_rx(i))) ui.find('out').set('text', str_fsize(be.get_tx(i))) return ui def handle(self, event, params, cfg, vars=None): pass def get_config_dialog(self): be = self.app.get_backend(INetworkConfig) dlg = self.app.inflate('network:widget-config') for i in be.interfaces: dlg.append('list', UI.Radio(value=i, text=i, name='iface')) return dlg def process_config(self, vars): return vars.getvalue('iface', None)
class NewsWidget(Plugin): implements(apis.dashboard.IWidget) title = 'Project news' icon = '/dl/core/ui/stock/news.png' name = 'Project news' style = 'normal' def get_ui(self, cfg, id=None): ui = self.app.inflate('core:news') feed = Updater.get().get_feed() if feed is not None: for i in feed[:3]: ui.append('list', UI.CustomHTML(html='<li>%s</li>' % i['text'])) return ui def handle(self, event, params, cfg, vars=None): pass def get_config_dialog(self): return None def process_config(self, event, params, vars): pass