Add snippet Execute,Better Task Results , fix some bugs
This commit is contained in:
parent
733307de8d
commit
463161c291
7 changed files with 188 additions and 31 deletions
|
|
@ -31,7 +31,7 @@ def scan_network():
|
|||
if not status:
|
||||
if start and end and port:
|
||||
db_syslog.add_syslog_event(get_myself(), "Scanner","start", get_ip(),get_agent(),json.dumps(input))
|
||||
bgtasks.scan_with_ip(start=start,end=end,port=port,password=password,username=username)
|
||||
bgtasks.scan_with_ip(start=start,end=end,port=port,password=password,username=username,user=get_myself())
|
||||
return buildResponse({'status': True},200)
|
||||
else:
|
||||
return buildResponse({'status': status},200)
|
||||
|
|
|
|||
|
|
@ -5,15 +5,16 @@
|
|||
# MikroWizard.com , Mikrotik router management solution
|
||||
# Author: sepehr.ha@gmail.com
|
||||
|
||||
from flask import request
|
||||
from flask import request,session
|
||||
|
||||
from libs.db import db_user_tasks,db_syslog
|
||||
from libs.db import db_user_tasks,db_syslog,db_tasks,db_sysconfig
|
||||
from libs.webutil import app, login_required,buildResponse,get_myself,get_ip,get_agent
|
||||
from functools import reduce
|
||||
import bgtasks
|
||||
import operator
|
||||
import logging
|
||||
import json
|
||||
|
||||
import datetime
|
||||
log = logging.getLogger("api.snippet")
|
||||
|
||||
@app.route('/api/snippet/list', methods = ['POST'])
|
||||
|
|
@ -95,4 +96,90 @@ def user_snippet_delete():
|
|||
snippet=db_user_tasks.delete_snippet(id)
|
||||
return buildResponse({"result":"success"}, 200)
|
||||
else:
|
||||
return buildResponse({"result":"failed","err":"Failed to delete snippet"}, 200)
|
||||
return buildResponse({"result":"failed","err":"Failed to delete snippet"}, 200)
|
||||
|
||||
@app.route('/api/snippet/exec', methods = ['POST'])
|
||||
@login_required(role='admin',perm={'task':'write'})
|
||||
def exec_snippet():
|
||||
"""crate user task"""
|
||||
input = request.json
|
||||
description=input.get('description',None)
|
||||
snippetid=input.get('id',False)
|
||||
members=input.get('members', False)
|
||||
task_type=input.get('task_type',"backup")
|
||||
selection_type=input.get('selection_type',False)
|
||||
# taskdata=input.get('data',False)
|
||||
utasks=db_user_tasks.UserTasks
|
||||
|
||||
# todo
|
||||
# add owner check devids and dev groups with owner
|
||||
if not description:
|
||||
return buildResponse({'status': 'failed'},200,error="Wrong name/desc")
|
||||
#check if cron is valid and correct
|
||||
taskdata={}
|
||||
taskdata['memebrs']=members
|
||||
taskdata['owner']=members
|
||||
snipet=db_user_tasks.get_snippet(snippetid)
|
||||
if snipet:
|
||||
taskdata['snippet']={'id':snipet.id,'code':snipet.content,'description':snipet.description,'name':snipet.name}
|
||||
else:
|
||||
return buildResponse({'status': 'failed'}, 200, error="Wrong snippet")
|
||||
|
||||
if selection_type not in ["devices","groups"]:
|
||||
return buildResponse({'status': 'failed'}, 200, error="Wrong member type")
|
||||
if task_type != 'snipet_exec':
|
||||
return buildResponse({'status': 'failed'}, 200, error="Wrong task type")
|
||||
try:
|
||||
data={
|
||||
'name':snipet.name,
|
||||
'description':description,
|
||||
'snippetid':int(snippetid),
|
||||
'cron':None,
|
||||
'desc_cron': None,
|
||||
'action': 'snipet_exec',
|
||||
'task_type':'snipet_exec',
|
||||
'selection_type':selection_type,
|
||||
'data':json.dumps(taskdata),
|
||||
'created': datetime.datetime.now()
|
||||
}
|
||||
task=utasks.create(**data)
|
||||
status=db_tasks.exec_snipet_status().status
|
||||
uid = session.get("userid") or False
|
||||
default_ip=db_sysconfig.get_sysconfig('default_ip')
|
||||
if not uid:
|
||||
return buildResponse({'result':'failed','err':"No User"}, 200)
|
||||
if not status:
|
||||
bgtasks.exec_snipet(task=task,default_ip=default_ip,devices=members,uid=uid)
|
||||
res={'status': True}
|
||||
else:
|
||||
res={'status': status}
|
||||
#add members to task
|
||||
db_syslog.add_syslog_event(get_myself(), "Snippet","execute", get_ip(),get_agent(),json.dumps(input))
|
||||
return buildResponse([{'status': 'success'}],200)
|
||||
except Exception as e:
|
||||
log.error(e)
|
||||
return buildResponse({'status': 'failed','massage':str(e)},200)
|
||||
|
||||
|
||||
@app.route('/api/snippet/executed', methods = ['POST'])
|
||||
@login_required(role='admin',perm={'task':'write'})
|
||||
def get_executed_snippet():
|
||||
"""crate user task"""
|
||||
input = request.json
|
||||
id=input.get('id', False)
|
||||
snipet=db_user_tasks.get_snippet(id)
|
||||
if not snipet:
|
||||
return buildResponse({'status': 'failed'}, 200, error="Wrong snippet")
|
||||
utasks=db_user_tasks.UserTasks
|
||||
tasks=utasks.select().where(utasks.snippetid==id).where(utasks.task_type=='snipet_exec')
|
||||
taks_ids=[task.id for task in tasks]
|
||||
task_res=db_tasks.TaskResults
|
||||
executed_tasks=task_res.select().where(task_res.external_id<<taks_ids).order_by(task_res.id.desc())
|
||||
executed_tasks=list(executed_tasks.dicts())
|
||||
for task in executed_tasks:
|
||||
task['result']=json.loads(task['result'])
|
||||
task['info']=json.loads(task['info'])
|
||||
if executed_tasks:
|
||||
return buildResponse(executed_tasks, 200)
|
||||
else:
|
||||
return buildResponse({'status': 'failed'}, 200)
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ def user_tasks_list():
|
|||
clauses.append(utaks.task_type == task_type)
|
||||
if not ISPRO:
|
||||
clauses.append(utaks.task_type != 'firmware')
|
||||
clauses.append(utaks.task_type != 'snipet_exec')
|
||||
expr=""
|
||||
logs = []
|
||||
selector=[utaks.id,utaks.name,utaks.description,utaks.desc_cron,utaks.action,utaks.task_type,utaks.dev_ids,utaks.snippetid,utaks.data,utaks.cron,utaks.selection_type,utaks.created]
|
||||
|
|
@ -108,19 +109,18 @@ def user_tasks_create():
|
|||
if len(members):
|
||||
db_user_tasks.add_member_to_task(task.id, members, selection_type)
|
||||
taskid=task.id
|
||||
if task_type=="backup":
|
||||
crontab = CronTab(user=True)
|
||||
directory=Path(app.root_path).parent.absolute()
|
||||
command = "python3 {}/task_run.py {}".format(directory,taskid)
|
||||
comment = "MikroWizard task #" + "taskid:{};".format(taskid)
|
||||
crontab = CronTab(user=True)
|
||||
directory=Path(app.root_path).parent.absolute()
|
||||
command = "python3 {}/task_run.py {}".format(directory,taskid)
|
||||
comment = "MikroWizard task #" + "taskid:{};".format(taskid)
|
||||
jobs = crontab.find_comment(comment)
|
||||
if len(list(jobs)) > 0:
|
||||
jobs = crontab.find_comment(comment)
|
||||
if len(list(jobs)) > 0:
|
||||
jobs = crontab.find_comment(comment)
|
||||
crontab.remove(jobs)
|
||||
crontab.write()
|
||||
job = crontab.new(command=command,comment=comment)
|
||||
job.setall(cron)
|
||||
crontab.remove(jobs)
|
||||
crontab.write()
|
||||
job = crontab.new(command=command,comment=comment)
|
||||
job.setall(cron)
|
||||
crontab.write()
|
||||
db_syslog.add_syslog_event(get_myself(), "Task","Create", get_ip(),get_agent(),json.dumps(input))
|
||||
return buildResponse([{'status': 'success',"taskid":taskid}],200)
|
||||
except Exception as e:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue