コード例 #1
0
class OpenVPNWidget(Plugin):
    """OpenVPN Widget
    @ivar _b: Backend instance"""
    implements(apis.dashboard.IWidget)
    icon = "/dl/openvpn/icon.png"
    name = "OpenVPN"
    title = "OpenVPN"
    style = "normal"

    def __init__(self, *args, **kwargs):
        self._b = OpenVPNBackend(self.app)

    def get_ui(self, cfg, id=None):
        s = self._b.getstats()
        ui = self.app.inflate("openvpn:widget")
        ui.find("nclients").set("text", s["nclients"])
        ui.find("bytesin").set("text", str_fsize(float(s["bytesin"])))
        ui.find("bytesout").set("text", str_fsize(float(s["bytesout"])))
        return ui

    def get_config_dialog(self):
        return None

    def handle(self, event, params, cfg, vars=None):
        pass

    def process_config(self, vars):
        pass
コード例 #2
0
ファイル: urlhandler.py プロジェクト: vlara/ajenti
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)
コード例 #3
0
ファイル: backend.py プロジェクト: vlara/ajenti
class CronConfig (Plugin):
    implements(IConfigurable)
    name = 'Cron'
    id = 'cron'
    
    def list_files(self):
        return ['/var/spool/cron/*/*']
コード例 #4
0
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)
コード例 #5
0
ファイル: widget.py プロジェクト: vlara/ajenti
class HealthWidget(Plugin):
    implements(apis.dashboard.IWidget)
    title = 'Health'
    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': 'GOOD', 'susp': 'WARNING', 'dang': 'DANGER'}
        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
コード例 #6
0
class LoadWidget(Plugin):
    implements(IDashboardWidget)

    def get_ui(self):
        stat = self.app.get_backend(apis.sysstat.ISysStat)
        w = UI.Widget(
            UI.HContainer(UI.Image(file='/dl/loadavg/widget.png'),
                          UI.Label(text='System load:', bold=True),
                          UI.Label(text=' / '.join(stat.get_load()))))
        return w
コード例 #7
0
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)
コード例 #8
0
ファイル: widget.py プロジェクト: Ozerich/ajenti
class PowerWidget(Plugin):
    implements(IDashboardWidget)

    def get_ui(self):
        w = UI.Widget(
                UI.HContainer(
                    UI.Image(file='/dl/power/widget.png'),
                    UI.Label(text='Uptime:', bold=True),
                    UI.Label(text=get_uptime())
                )
            )
        return w
コード例 #9
0
ファイル: xslt.py プロジェクト: vlara/ajenti
class CoreFunctions(Plugin):
    implements(IXSLTFunctionProvider)

    def get_funcs(self):
        return {
            'attr': attr,
            'iif': iif,
            'b64': b64,
            'jsesc': jsesc,
            'idesc': idesc,
            'css': css,
            'id': id
        }
コード例 #10
0
ファイル: widget.py プロジェクト: vlara/ajenti
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)
コード例 #11
0
ファイル: main.py プロジェクト: Ozerich/ajenti
class ShellProgress(Plugin):
    implements(IProgressBoxProvider)
    title = 'Shell'
    icon = '/dl/shell/icon_small.png'
    can_abort = True
    
    def __init__(self):
        self.proc = self.app.session.get('ShellPlugin-_process')

    def has_progress(self):         
        return self.proc.is_running()
        
    def get_progress(self):
        return self.proc.cmdline
    
    def abort(self):
        self.proc.kill()
コード例 #12
0
ファイル: main.py プロジェクト: Ozerich/ajenti
class UzuriProgress(Plugin):
    implements(IProgressBoxProvider)
    title = 'Uzuri'
    icon = '/dl/uzuri/icon_small.png'
    can_abort = True

    def __init__(self):
        self.master = self.app.session.get('UzuriMasterPlugin-_master')

    def has_progress(self):
        return self.master.is_busy()

    def get_progress(self):
        return self.master.worker.output

    def abort(self):
        self.master.worker.kill()
コード例 #13
0
class PackageManagerProgress(Plugin):
    implements(IProgressBoxProvider)
    title = 'Packages'
    icon = '/dl/pkgman/icon_small.png'
    can_abort = True

    def __init__(self):
        self.mgr = self.app.get_backend(apis.pkgman.IPackageManager)

    def has_progress(self):
        return self.mgr.is_busy()

    def get_progress(self):
        return self.mgr.get_busy_status()

    def abort(self):
        self.mgr.abort()
コード例 #14
0
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
コード例 #15
0
ファイル: widget.py プロジェクト: Ozerich/ajenti
class NetworkWidget(Plugin):
    implements(IDashboardWidget)

    def get_ui(self):
        cfg = self.app.get_backend(INetworkConfig)
        t = UI.LayoutTable()
        w = UI.Widget(t)

        for x in cfg.interfaces:
            i = cfg.interfaces[x]
            t.append(
                UI.LayoutTableRow(UI.Image(file='/dl/network/%s.png' %
                                           ('up' if i.up else 'down')),
                                  UI.Label(text=i.name),
                                  UI.Label(text=cfg.get_ip(i)),
                                  spacing=4))

        return w
コード例 #16
0
ファイル: widget.py プロジェクト: vlara/ajenti
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
コード例 #17
0
ファイル: confmanager.py プロジェクト: vlara/ajenti
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
コード例 #18
0
class MemWidget(Plugin):
    implements(IDashboardWidget)

    def get_ui(self):
        stat = self.app.get_backend(apis.sysstat.ISysStat)
        ru, rt = stat.get_ram()
        su, st = stat.get_swap()
        w = UI.Widget(
            UI.LayoutTable(
                UI.LayoutTableRow(UI.Image(file='/dl/loadavg/widget_mem.png'),
                                  UI.Label(text='RAM:', bold=True),
                                  UI.ProgressBar(value=ru, max=rt, width=100),
                                  UI.Label(text="%sM / %sM" % (ru, rt)),
                                  spacing=4),
                UI.LayoutTableRow(UI.Image(file='/dl/loadavg/widget_swap.png'),
                                  UI.Label(text='Swap:', bold=True),
                                  UI.ProgressBar(value=su, max=st, width=100)
                                  if int(st) != 0 else None,
                                  UI.Label(text="%sM / %sM" % (su, st)),
                                  spacing=4)))
        return w
コード例 #19
0
ファイル: widget.py プロジェクト: vlara/ajenti
class CpuWidget(Plugin):
    implements(apis.dashboard.IWidget)
    title = 'CPU Usage'
    icon = '/dl/cpu/icon.png'
    name = 'CPU Usage'
    style = 'normal'

    def get_ui(self, cfg, id=None):
        m = Cpu(self.app).prepare(cfg)
        return UI.HContainer(
            UI.ProgressBar(value=m.get_value(), max=m.get_max(), width=220),
            UI.Label(text=str(m.get_value())+'%'),
        )

    def handle(self, event, params, cfg, vars=None):
        pass

    def get_config_dialog(self):
        return None
    
    def process_config(self, vars):
        pass
コード例 #20
0
class RamWidget(Plugin):
    implements(apis.dashboard.IWidget)
    title = 'RAM'
    icon = '/dl/sysload/widget_mem.png'
    name = 'Memory'
    style = 'normal'

    def get_ui(self, cfg, id=None):
        stat = self.app.get_backend(apis.sysstat.ISysStat)
        ru, rt = stat.get_ram()
        return UI.HContainer(
            UI.ProgressBar(value=ru, max=rt, width=220),
            UI.Label(text=str_fsize(ru)),
        )

    def handle(self, event, params, cfg, vars=None):
        pass

    def get_config_dialog(self):
        return None

    def process_config(self, vars):
        pass
コード例 #21
0
class SwapWidget(Plugin):
    implements(apis.dashboard.IWidget)
    title = 'Swap'
    icon = '/dl/sysload/widget_swap.png'
    name = 'Swap'
    style = 'normal'

    def get_ui(self, cfg, id=None):
        stat = self.app.get_backend(apis.sysstat.ISysStat)
        su, st = stat.get_swap()
        return UI.HContainer(
            UI.ProgressBar(value=su, max=int(st) + 1, width=220),
            UI.Label(text=str_fsize(su)),
        )

    def handle(self, event, params, cfg, vars=None):
        pass

    def get_config_dialog(self):
        return None

    def process_config(self, vars):
        pass
コード例 #22
0
ファイル: widgets.py プロジェクト: vlara/ajenti
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
コード例 #23
0
ファイル: widget.py プロジェクト: vlara/ajenti
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)
コード例 #24
0
class LoadWidget(Plugin):
    implements(apis.dashboard.IWidget)
    title = 'System load'
    icon = '/dl/sysload/widget.png'
    name = 'System load'
    style = 'linear'

    def get_ui(self, cfg, id=None):
        stat = self.app.get_backend(apis.sysstat.ISysStat)
        ui = self.app.inflate('sysload:load')
        load = stat.get_load()
        ui.find('1m').set('text', load[0])
        ui.find('5m').set('text', load[1])
        ui.find('15m').set('text', load[2])
        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
コード例 #25
0
class DiskUsageWidget(Plugin):
    implements(apis.dashboard.IWidget)
    title = 'Disk Usage'
    icon = '/dl/hddstat/icon.png'
    name = 'Disk Usage'
    style = 'normal'

    def get_ui(self, cfg, id=None):
        if cfg == None:
            cfg = "total"
        m = DiskUsageMeter(self.app).prepare(cfg)
        return UI.HContainer(
            UI.ProgressBar(value=m.get_value(cfg), max=m.get_max(), width=220),
            UI.Label(text=str('%s : %d %%' % (cfg,  m.get_value(cfg)))),
        )

    def handle(self, event, params, cfg, vars=None):
        pass

    def get_config_dialog(self):
        mgr = self.app.get_backend(apis.services.IServiceManager)
        dlg = self.app.inflate('hddstat:widget-config')
        u = shell('df --total').split('\n')[1:-2];
        u.append ('total')
        for y in u:
            s = y.split()
            s = s.pop()
            dlg.append('list', UI.SelectOption(
                value=s,
                text=s,
            ))
        return dlg
   
 
    def process_config(self, vars):
        return vars.getvalue('svc', None)