mirror of
https://github.com/MikroWizard/mikroman.git
synced 2025-06-21 03:55:39 +02:00
Added user disable option, Fix groups selection in tasks, Improved Auto updater, Fixed sorting of scan reports, Some pro feature
101 lines
2.8 KiB
Python
101 lines
2.8 KiB
Python
import re
|
|
from flask import request, jsonify, g
|
|
from playhouse.shortcuts import dict_to_model, update_model_from_dict
|
|
import os
|
|
os.environ["PYSRV_CONFIG_PATH"] = "/conf/server-conf.json"
|
|
|
|
import sys
|
|
# from libs.db import db_device
|
|
# from libs.db import db_groups
|
|
# from libs.db import db_tasks
|
|
from libs import util
|
|
from libs.db import db_user_tasks
|
|
from libs.webutil import app, login_required, get_myself,buildResponse
|
|
from functools import reduce
|
|
import logging
|
|
from cron_descriptor import get_description
|
|
import queue
|
|
from threading import Thread
|
|
try:
|
|
from libs import utilpro
|
|
ISPRO=True
|
|
except ImportError:
|
|
ISPRO=False
|
|
pass
|
|
|
|
log = logging.getLogger("api.usertasks")
|
|
|
|
def backup_devs(devices):
|
|
num_threads = len(devices)
|
|
q = queue.Queue()
|
|
threads = []
|
|
for dev in devices:
|
|
t = Thread(target=util.backup_routers, args=(dev, q))
|
|
t.start()
|
|
threads.append(t)
|
|
for t in threads:
|
|
t.join()
|
|
res=[]
|
|
for _ in range(num_threads):
|
|
qres=q.get()
|
|
if not qres['state']:
|
|
util.log_alert('backup',dev,'Backup failed')
|
|
res.append(qres)
|
|
return res
|
|
|
|
|
|
def run_snippets(devices,snippet):
|
|
num_threads = len(devices)
|
|
q = queue.Queue()
|
|
threads = []
|
|
for dev in devices:
|
|
t = Thread(target=util.run_snippets, args=(dev, snippet, q))
|
|
t.start()
|
|
threads.append(t)
|
|
for t in threads:
|
|
t.join()
|
|
res=[]
|
|
for _ in range(num_threads):
|
|
qres=q.get()
|
|
if 'result' in qres and not qres['result']:
|
|
util.log_alert('run_snippet', dev, 'Run Snippet failed')
|
|
res.append(qres)
|
|
return res
|
|
if __name__ == '__main__':
|
|
# quick adhoc tests
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
taksid=sys.argv[1]
|
|
#check if taskid is int
|
|
if not taksid.isdigit():
|
|
print("Wrong Task ID")
|
|
exit()
|
|
utask=db_user_tasks.UserTasks.get_utask_by_id(taksid)
|
|
if not utask:
|
|
log.error("No task with this id {}".format(taksid))
|
|
exit()
|
|
#Get user task from db by id
|
|
|
|
devices=[]
|
|
devices=db_user_tasks.get_task_devices(utask)
|
|
if utask.task_type == "backup":
|
|
log.error("TASK TYPE BACKUP")
|
|
res=backup_devs(devices=devices)
|
|
elif utask.task_type == "snippet":
|
|
log.error("TASK TYPE SNIPPET")
|
|
snippet=utask.snippetid.content
|
|
if not snippet:
|
|
log.error("no snippet")
|
|
else:
|
|
res=run_snippets(devices=devices, snippet=snippet)
|
|
elif utask.task_type == "firmware":
|
|
log.error("firmware update")
|
|
if not ISPRO:
|
|
exit()
|
|
res=utilpro.run_firmware_task(utask)
|
|
elif utask.task_type == "vault":
|
|
log.error("vault")
|
|
if not ISPRO:
|
|
exit()
|
|
res=utilpro.run_vault_task(utask)
|
|
#log.error(res)
|
|
#[{'id': 3, 'state': False}, {'id': 1, 'state': False}, {'id': 2, 'state': True}]
|