Esempio n. 1
0
File: events.py Progetto: k3an3/home
def widget(data):
    try:
        target = widgets[data['id']]
    except KeyError:
        # Widget is out of date. Force client reload
        send_message("Interface out of date; reloading", "warning")
        sleep(1)
        emit('reload')
        return
    if current_user.has_permission(target[3]):
        if target[0] == 'method':
            name = target[1].__name__
            app.logger.info("({}) Execute {} on {} with config {}".format(
                current_user.username, name, target[3].name, target[2]))
            func = target[1]
            args = target[2]
            try:
                if target[3].driver.noserialize or type(
                        target[3]) is MultiDevice:
                    func(**args)
                else:
                    run(func, **args)
            except Exception as e:
                app.logger.error("Error running {}: {}".format(name, str(e)))
                send_message("Error running \"{}\"!".format(name), 'danger')
            else:
                send_message("Successfully ran \"{}\".".format(name),
                             'success')
        elif target[0] == 'action':
            app.logger.info("({}) Execute action {}".format(
                current_user.username, target[1]))
            send_message("Executing action \"{}\"".format(target[1]))
            target[1].run()
    else:
        disconnect()
Esempio n. 2
0
def vm_ctrl(message, device):
    run(device.dev.vm_power, vm=message['vm'], action=message['action'])
    emit(
        'message', {
            'class':
            'alert-success',
            'content':
            "Requested '{}' on '{}'".format(message['action'], message['vm'])
        })
Esempio n. 3
0
 def save_vms_sleep(self):
     for vm in self.get_powered_on_vms():
         run(self.vm_power, thread=True, vm=vm, action='save')
     wait_start = datetime.datetime.now()
     while (datetime.datetime.now() -
            wait_start).total_seconds() < MAX_VIRSH_SUSPEND:
         if not len(list(self.get_powered_on_vms())):
             self.sleep()
             break
         sleep(15)
Esempio n. 4
0
 def enum_virsh(self, blocking: bool = False):
     if blocking:
         self._enum_virsh()
     else:
         run(self._enum_virsh)
     vms = set()
     for line in storage.lrange(self._storage_key(), 0, -1):
         if line:
             line = line.split()
             status = ' '.join(line[2:])
             vms.add((line[1], status))
     self.vms = sorted(list(vms), key=lambda x: (x[1], x[0].lower()))
Esempio n. 5
0
def handle_task(post: dict, client: APIClient) -> bool:
    try:
        device = get_device(post.pop('device').strip())
        method = method_from_name(device.dev, post.pop('method'))
    except StopIteration:
        return False
    from home.web.web import app
    if not client.has_permission(device.group):
        app.logger.warning(
            "({}) Insufficient API permissions to execute '{}' on '{}' with config {}"
            .format(client.name, method.__name__, device.name, post))
        return False
    app.logger.info("({}) Execute '{}' on '{}' with config {}".format(
        client.name, method.__name__, device.name, post))
    if device.driver.noserialize or type(device) is MultiDevice:
        method(**post)
    else:
        device.last_task = run(method, **post)
    return True
Esempio n. 6
0
 def run(self, jitter: bool = False):
     if self.jitter and jitter:
         sleep(self.jitter)
     for device, method, delay, kwargs in self.prerun():
         device.last_task = run(method, delay=delay, **kwargs)