🦄ConsulManager:基于Consul的运维平台:更优雅的Consul管理UI & 多云ECS等资源自动同步Prometheus/JumpServer & Blackbox站点监控维护 & 漏洞通知/资源到期余额告警...
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

52 lines
2.4 KiB

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('avd',__name__)
api = Api(blueprint)
parser = reqparse.RequestParser()
parser.add_argument('avd_config_dict',type=dict)
class Avd(Resource):
decorators = [token_auth.auth.login_required]
def get(self,stype):
if stype == 'list':
avd_dict = consul_kv.get_kv_dict('ConsulManager/avd/list')
avd_list = list(avd_dict.values())
return {'code': 20000, 'avd_list': avd_list}
if stype == 'config':
avd_config = consul_kv.get_value('ConsulManager/avd/switch')
return {'code': 20000, 'avd_config': avd_config}
def post(self,stype):
if stype == 'config':
args = parser.parse_args()
avd_config_dict = args['avd_config_dict']
consul_kv.put_kv('ConsulManager/avd/switch',avd_config_dict)
avd_job_id = 'avd_list'
avd_job_func = '__main__:avd_list.get_avd'
avd_job_args = []
avd_job_interval = 60
if avd_config_dict['switch']:
addjob(avd_job_id,avd_job_func,avd_job_args,avd_job_interval)
avd_job_dict = {'id':avd_job_id,'func':avd_job_func,'args':avd_job_args,'minutes':avd_job_interval,
'trigger': 'interval','replace_existing': True}
consul_kv.put_kv('ConsulManager/avd/jobs/avd_list',avd_job_dict)
runjob(avd_job_id)
return {'code': 20000, 'data': '漏洞采集通知功能开启!'}
else:
deljob(avd_job_id)
consul_kv.del_key('ConsulManager/avd/jobs/avd_list')
consul_kv.del_key_all('ConsulManager/avd/list/')
return {'code': 20000, 'data': '漏洞采集通知功能关闭!'}
if stype == 'run':
avd_config_dict = consul_kv.get_value('ConsulManager/avd/switch')
if avd_config_dict.get('switch',False):
consul_kv.del_key('ConsulManager/avd/list/0')
runjob('avd_list')
return {'code': 20000, 'data': '漏洞采集通知执行成功!'}
else:
return {'code': 50000, 'data': '漏洞采集功能未开启!'}
api.add_resource(Avd, '/api/avd/<stype>')