62 lines
3.1 KiB
Python
62 lines
3.1 KiB
Python
from flask import Blueprint
|
|
from flask_restful import reqparse, Resource, Api
|
|
from flask_apscheduler import APScheduler
|
|
from units import token_auth,consul_kv
|
|
import json
|
|
from .jobs import deljob,addjob,runjob
|
|
blueprint = Blueprint('exp',__name__)
|
|
api = Api(blueprint)
|
|
|
|
parser = reqparse.RequestParser()
|
|
parser.add_argument('exp_config_dict',type=dict)
|
|
|
|
class Exp(Resource):
|
|
#decorators = [token_auth.auth.login_required]
|
|
def get(self,stype):
|
|
if stype == 'list':
|
|
exp_dict = consul_kv.get_kv_dict('ConsulManager/exp/list')
|
|
exp_list = list(exp_dict.values())
|
|
return {'code': 20000, 'exp_list': exp_list}
|
|
if stype == 'config':
|
|
exp_config = consul_kv.get_value('ConsulManager/exp/switch')
|
|
return {'code': 20000, 'exp_config': exp_config}
|
|
def post(self,stype):
|
|
if stype == 'config':
|
|
args = parser.parse_args()
|
|
exp_config_dict = args['exp_config_dict']
|
|
consul_kv.put_kv('ConsulManager/exp/config',exp_config_dict)
|
|
cloud_job_list = consul_kv.get_keys_list('ConsulManager/jobs')
|
|
cloud_list = [i for i in cloud_job_list if i.endswith('/group')]
|
|
collect_days = exp_config_dict['collect_days']
|
|
notify_days = exp_config_dict['notify_days']
|
|
notify_amount = exp_config_dict['notify_amount']
|
|
if exp_config_dict['switch']:
|
|
for i in cloud_list:
|
|
vendor,account = i.split('/')[2:4]
|
|
exp_job_id = f'{vendor}/{account}/exp'
|
|
exp_job_func = f'__main__:{vendor}.exp'
|
|
exp_job_args = [account,collect_days,notify_days,notify_amount]
|
|
exp_job_interval = 60
|
|
addjob(exp_job_id,exp_job_func,exp_job_args,exp_job_interval)
|
|
exp_job_dict = {'id':exp_job_id,'func':exp_job_func,'args':exp_job_args,'minutes':exp_job_interval,'trigger': 'interval','replace_existing': True}
|
|
consul_kv.put_kv(f'ConsulManager/exp/jobs/{vendor}/{account}',exp_job_dict)
|
|
runjob(exp_job_id)
|
|
return {'code': 20000, 'data': '到期日与余额采集功能开启!'}
|
|
else:
|
|
for i in cloud_list:
|
|
vendor,account = i.split('/')[2:4]
|
|
exp_job_id = f'{vendor}/{account}/exp'
|
|
deljob(exp_job_id)
|
|
consul_kv.del_key_all('ConsulManager/exp/jobs/')
|
|
consul_kv.del_key_all('ConsulManager/exp/lists/')
|
|
return {'code': 20000, 'data': '到期日与余额采集功能关闭!'}
|
|
if stype == 'run':
|
|
exp_config_dict = consul_kv.get_value('ConsulManager/exp/switch')
|
|
if exp_config_dict['switch']:
|
|
consul_kv.del_key('ConsulManager/exp/list/0')
|
|
runjob('exp_list')
|
|
return {'code': 20000, 'data': '漏洞采集通知执行成功!'}
|
|
else:
|
|
return {'code': 50000, 'data': '漏洞采集功能未开启!'}
|
|
api.add_resource(Exp, '/api/exp/<stype>')
|