From c39bee1e21238c8332252693bef0815eacf4b72e Mon Sep 17 00:00:00 2001 From: "StarsL.cn" Date: Sun, 30 Oct 2022 14:41:18 +0800 Subject: [PATCH] add rds web --- flask-consul/manager.py | 3 +- flask-consul/units/cloud/alicloud.py | 4 +- flask-consul/units/cloud/huaweicloud.py | 8 +- flask-consul/units/cloud/sync_rds.py | 1 + flask-consul/units/cloud/tencent_cloud.py | 4 +- flask-consul/units/consul_kv.py | 6 +- .../views/.nodes.py.swp | Bin 12288 -> 16384 bytes flask-consul/views/edit_cloud.py | 115 ++++++++++++++ flask-consul/views/jms.py | 2 +- flask-consul/views/jobs.py | 25 ++-- flask-consul/views/nodes.py | 16 +- vue-consul/src/api/edit.js | 22 +++ vue-consul/src/api/node-exporter.js | 11 +- vue-consul/src/router/index.js | 12 +- .../src/views/node-exporter/.jobs.vue.swp | Bin 0 -> 40960 bytes vue-consul/src/views/node-exporter/jobs.vue | 140 ++++++++++++++++-- vue-consul/src/views/node-exporter/lists.vue | 8 +- vue-consul/src/views/rds/.lists.vue.swp | Bin 16384 -> 0 bytes vue-consul/src/views/rds/lists.vue | 122 +++++---------- 19 files changed, 354 insertions(+), 145 deletions(-) rename vue-consul/src/api/.node-exporter.js.swp => flask-consul/views/.nodes.py.swp (60%) create mode 100644 flask-consul/views/edit_cloud.py create mode 100644 vue-consul/src/api/edit.js create mode 100644 vue-consul/src/views/node-exporter/.jobs.vue.swp delete mode 100644 vue-consul/src/views/rds/.lists.vue.swp diff --git a/flask-consul/manager.py b/flask-consul/manager.py index b34f2b1..032149c 100755 --- a/flask-consul/manager.py +++ b/flask-consul/manager.py @@ -7,7 +7,7 @@ skey_path = 'ConsulManager/assets/secret/skey' if consul_kv.get_kv_dict(skey_path) == {}: consul_kv.put_kv(skey_path,{'sk':''.join(str(uuid.uuid4()).split('-'))}) -from views import login, blackbox, consul, jobs, nodes, selfnode, avd, exp, jms +from views import login, blackbox, consul, jobs, nodes, selfnode, avd, exp, jms, edit_cloud from units.cloud import huaweicloud,alicloud,tencent_cloud from units.avd import avd_list from units.jms import sync_jms @@ -25,6 +25,7 @@ app.register_blueprint(selfnode.blueprint) app.register_blueprint(avd.blueprint) app.register_blueprint(exp.blueprint) app.register_blueprint(jms.blueprint) +app.register_blueprint(edit_cloud.blueprint) class Config(object): JOBS = [] diff --git a/flask-consul/units/cloud/alicloud.py b/flask-consul/units/cloud/alicloud.py index 85038db..5db4f91 100644 --- a/flask-consul/units/cloud/alicloud.py +++ b/flask-consul/units/cloud/alicloud.py @@ -93,7 +93,7 @@ def exp(account,collect_days,notify_days,notify_amount): def group(account): ak,sk = consul_kv.get_aksk('alicloud',account) - now = datetime.datetime.now().strftime('%m%d/%H:%M') + now = datetime.datetime.now().strftime('%m.%d/%H:%M') config = open_api_models.Config(access_key_id=ak,access_key_secret=sk) config.endpoint = f'resourcemanager.aliyuncs.com' client = ResourceManager20200331Client(config) @@ -123,7 +123,7 @@ def group(account): def ecs(account,region): ak,sk = consul_kv.get_aksk('alicloud',account) - now = datetime.datetime.now().strftime('%m%d/%H:%M') + now = datetime.datetime.now().strftime('%m.%d/%H:%M') group_dict = consul_kv.get_value(f'ConsulManager/assets/alicloud/group/{account}') config = open_api_models.Config(access_key_id=ak,access_key_secret=sk) diff --git a/flask-consul/units/cloud/huaweicloud.py b/flask-consul/units/cloud/huaweicloud.py index ddcb318..12091eb 100644 --- a/flask-consul/units/cloud/huaweicloud.py +++ b/flask-consul/units/cloud/huaweicloud.py @@ -93,7 +93,7 @@ def exp(account,collect_days,notify_days,notify_amount): def group(account): ak,sk = consul_kv.get_aksk('huaweicloud',account) - now = datetime.datetime.now().strftime('%m%d/%H:%M') + now = datetime.datetime.now().strftime('%m.%d/%H:%M') credentials = GlobalCredentials(ak, sk) try: client = EpsClient.new_builder() \ @@ -128,7 +128,7 @@ def group(account): def ecs(account,region): ak,sk = consul_kv.get_aksk('huaweicloud',account) - now = datetime.datetime.now().strftime('%m%d/%H:%M') + now = datetime.datetime.now().strftime('%m.%d/%H:%M') group_dict = consul_kv.get_value(f'ConsulManager/assets/huaweicloud/group/{account}') credentials = BasicCredentials(ak, sk) try: @@ -173,7 +173,7 @@ def ecs(account,region): def rds(account,region): ak,sk = consul_kv.get_aksk('huaweicloud',account) - now = datetime.datetime.now().strftime('%m%d/%H:%M') + now = datetime.datetime.now().strftime('%m.%d/%H:%M') group_dict = consul_kv.get_value(f'ConsulManager/assets/huaweicloud/group/{account}') credentials = BasicCredentials(ak, sk) try: @@ -198,7 +198,7 @@ def rds(account,region): 'cpu':f"{i['cpu']}核", 'mem':f"{i['mem']}GB", 'disk':f"{i['volume']['size']}GB", - 'exp': i['expiration_time'] + 'exp': '-' if i['expiration_time'] == None else i['expiration_time'].split('T')[0] } for i in info} count = len(rds_dict) off,on = sync_rds.w2consul('huaweicloud',account,region,rds_dict) diff --git a/flask-consul/units/cloud/sync_rds.py b/flask-consul/units/cloud/sync_rds.py index 3850d6e..6b93f93 100644 --- a/flask-consul/units/cloud/sync_rds.py +++ b/flask-consul/units/cloud/sync_rds.py @@ -54,6 +54,7 @@ def w2consul(vendor,account,region,rds_dict): 'group': v['group'], 'instance': instance, 'account': account, + 'itype': v['itype'], 'vendor': vendors.get(vendor,'未找到'), 'disk': v['disk'], 'cpu': v['cpu'], diff --git a/flask-consul/units/cloud/tencent_cloud.py b/flask-consul/units/cloud/tencent_cloud.py index f3925a1..451f250 100644 --- a/flask-consul/units/cloud/tencent_cloud.py +++ b/flask-consul/units/cloud/tencent_cloud.py @@ -80,7 +80,7 @@ def exp(account,collect_days,notify_days,notify_amount): def group(account): from tencentcloud.dcdb.v20180411 import dcdb_client, models ak,sk = consul_kv.get_aksk('tencent_cloud',account) - now = datetime.datetime.now().strftime('%m%d/%H:%M') + now = datetime.datetime.now().strftime('%m.%d/%H:%M') try: cred = credential.Credential(ak, sk) httpProfile = HttpProfile() @@ -115,7 +115,7 @@ def group(account): def ecs(account,region): from tencentcloud.cvm.v20170312 import cvm_client, models ak,sk = consul_kv.get_aksk('tencent_cloud',account) - now = datetime.datetime.now().strftime('%m%d/%H:%M') + now = datetime.datetime.now().strftime('%m.%d/%H:%M') group_dict = consul_kv.get_value(f'ConsulManager/assets/tencent_cloud/group/{account}') try: cred = credential.Credential(ak, sk) diff --git a/flask-consul/units/consul_kv.py b/flask-consul/units/consul_kv.py index 7cebe00..2441b69 100644 --- a/flask-consul/units/consul_kv.py +++ b/flask-consul/units/consul_kv.py @@ -57,7 +57,7 @@ def del_key_all(path): else: return None -def get_ecs_services(job_id): +def get_res_services(job_id): cloud,account,itype,region = job_id.split('/') service = f'{cloud}_{account}_{itype}' region = f'and "{region}" in Tags' @@ -65,8 +65,8 @@ def get_ecs_services(job_id): response = requests.get(url, headers=headers) if response.status_code == 200: info = response.json() - ecs_list = [i['Meta'] for i in info.values()] - return {'code': 20000,'ecs_list': ecs_list} + res_list = [i['Meta'] for i in info.values()] + return {'code': 20000,'res_list': res_list} else: return {'code': 50000, 'data': f'{response.status_code}:{response.text}'} diff --git a/vue-consul/src/api/.node-exporter.js.swp b/flask-consul/views/.nodes.py.swp similarity index 60% rename from vue-consul/src/api/.node-exporter.js.swp rename to flask-consul/views/.nodes.py.swp index 45b6d44880e90cc309f3e4775138dbeda149b647..fb4d4c626e785ed71a3fe8a52380f913f7af51e3 100644 GIT binary patch literal 16384 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 diff --git a/flask-consul/views/edit_cloud.py b/flask-consul/views/edit_cloud.py new file mode 100644 index 0000000..f5cc7f8 --- /dev/null +++ b/flask-consul/views/edit_cloud.py @@ -0,0 +1,115 @@ +from flask import Blueprint +from flask_restful import reqparse, Resource, Api +from flask_apscheduler import APScheduler +from config import vendors,regions +from units import token_auth,consul_kv +from .jobs import deljob,addjob,runjob,modjob_interval +import json +blueprint = Blueprint('edit_cloud',__name__) +api = Api(blueprint) + +parser = reqparse.RequestParser() +parser.add_argument('vendor',type=str) +parser.add_argument('account',type=str) +parser.add_argument('region',type=str) +parser.add_argument('editJob',type=dict) +class Edit(Resource): + decorators = [token_auth.auth.login_required] + job_list = list(consul_kv.get_kv_dict(f'ConsulManager/jobs').values()) + def get(self,stype): + if stype == 'cloud': + cloud_dict = {} + for i in self.job_list: + vendor,account = i['id'].split('/')[0:2] + if vendor in cloud_dict: + if account not in cloud_dict[vendor]: + cloud_dict[vendor].append(account) + else: + cloud_dict[vendor] = [account] + return {'code': 20000,'cloud_dict': cloud_dict} + if stype == 'find': + args = parser.parse_args() + vendor = args['vendor'] + account = args['account'] + region = args['region'] + restype = ['group'] + interval = {'proj_interval': 60, 'ecs_interval': 5, 'rds_interval': 5} + for i in self.job_list: + if f'{vendor}/{account}/group' == i['id']: + interval['proj_interval'] = i['minutes'] + elif f'{vendor}/{account}/ecs/{region}' == i['id']: + restype.append('ecs') + interval['ecs_interval'] = i['minutes'] + elif f'{vendor}/{account}/rds/{region}' == i['id']: + restype.append('rds') + interval['rds_interval'] = i['minutes'] + return {'code': 20000, 'restype': restype, 'interval': interval} + def post(self,stype): + if stype == 'commit': + args = parser.parse_args() + editjob_dict = args['editJob'] + vendor = editjob_dict['vendor'] + account = editjob_dict['account'] + region = editjob_dict['region'] + restype = editjob_dict['restype'] + proj_interval = int(editjob_dict['proj_interval']) + ecs_interval = int(editjob_dict['ecs_interval']) + rds_interval = int(editjob_dict['rds_interval']) + print(editjob_dict) + if editjob_dict['akskswitch']: + ak = editjob_dict['ak'] + sk = editjob_dict['sk'] + consul_kv.put_aksk(editjob_dict['vendor'],editjob_dict['account'],ak,sk) + + jobgroup = [x for x in self.job_list if x['id'] == f'{vendor}/{account}/group'][0] + if proj_interval != jobgroup['minutes']: + jobgroup['minutes'] = proj_interval + jobid = f'{vendor}/{account}/group' + consul_kv.put_kv(f'ConsulManager/jobs/{jobid}',jobgroup) + modjob_interval(jobid,proj_interval) + + ecs_jobid = f'{vendor}/{account}/ecs/{region}' + rds_jobid = f'{vendor}/{account}/rds/{region}' + if 'ecs' in restype: + isecs = [x for x in self.job_list if x['id'] == f'{vendor}/{account}/ecs/{region}'] + if len(isecs) == 1: + if ecs_interval != isecs[0]['minutes']: + consul_kv.put_kv(f'ConsulManager/jobs/{ecs_jobid}',isecs[0]) + modjob_interval(ecs_jobid,ecs_interval) + else: + job_func = f"__main__:{vendor}.ecs" + job_args = [account,region] + job_interval = ecs_interval + addjob(ecs_jobid, job_func, job_args, job_interval) + job_dict = {'id':ecs_jobid,'func':job_func,'args':job_args,'minutes':job_interval, + "trigger": "interval","replace_existing": True} + consul_kv.put_kv(f'ConsulManager/jobs/{ecs_jobid}',job_dict) + else: + try: + consul_kv.del_key(f'ConsulManager/jobs/{ecs_jobid}') + deljob(ecs_jobid) + except: + pass + + if 'rds' in restype: + isrds = [x for x in self.job_list if x['id'] == f'{vendor}/{account}/rds/{region}'] + if len(isrds) == 1: + if rds_interval != isrds[0]['minutes']: + consul_kv.put_kv(f'ConsulManager/jobs/{rds_jobid}',isrds[0]) + modjob_interval(rds_jobid,rds_interval) + else: + job_func = f"__main__:{vendor}.rds" + job_args = [account,region] + job_interval = rds_interval + addjob(rds_jobid, job_func, job_args, job_interval) + job_dict = {'id':rds_jobid,'func':job_func,'args':job_args,'minutes':job_interval, + "trigger": "interval","replace_existing": True} + consul_kv.put_kv(f'ConsulManager/jobs/{rds_jobid}',job_dict) + else: + try: + consul_kv.del_key(f'ConsulManager/jobs/{rds_jobid}') + deljob(rds_jobid) + except: + pass + return {'code': 20000, 'data': f'{vendor}/{account}/{region}:编辑成功!'} +api.add_resource(Edit, '/api/edit/') diff --git a/flask-consul/views/jms.py b/flask-consul/views/jms.py index 7e222a9..14da4bf 100644 --- a/flask-consul/views/jms.py +++ b/flask-consul/views/jms.py @@ -63,7 +63,7 @@ class Jms(Resource): jms_job = consul_kv.get_value(f'ConsulManager/record/jms/{vendor}/{account}') runtime = jms_job.get('update') count_sync = jms_job.get('count') - nextime = getjob(f'{vendor}/{account}/jms').next_run_time.strftime("%m%d/%H:%M") + nextime = getjob(f'{vendor}/{account}/jms').next_run_time.strftime("%m.%d/%H:%M") sync = True ecs_list.append({'vendor':vendors[vendor],'account':account,'count_linux':count_linux, 'count_win':count_win,'count_mem':f'{count_mem}GB','count_cpu':f'{count_cpu}核', diff --git a/flask-consul/views/jobs.py b/flask-consul/views/jobs.py index 3c212b0..5d696d2 100644 --- a/flask-consul/views/jobs.py +++ b/flask-consul/views/jobs.py @@ -20,6 +20,9 @@ def init(): def deljob(jobid): Scheduler.remove_job(jobid) +def modjob_interval(jobid,job_interval): + Scheduler.modify_job(jobid,trigger='interval',minutes=job_interval) + def addjob(job_id,job_func,job_args,job_interval): Scheduler.add_job(id=job_id, func=job_func, args=job_args, trigger='interval', minutes=job_interval, replace_existing=True) @@ -38,7 +41,7 @@ class Jobs(Resource): query_dict['vendor'] = {v : k for k, v in vendors.items()}[query_dict['vendor']] query_set = set({k:v for k,v in query_dict.items() if v != ''}.items()) job_list = list(consul_kv.get_kv_dict(f'ConsulManager/jobs').values()) - job_run_dict = {job.id:job.next_run_time.strftime("%m%d/%H:%M") for job in Scheduler.get_jobs()} + job_run_dict = {job.id:job.next_run_time.strftime("%m.%d/%H:%M") for job in Scheduler.get_jobs()} job_count_dict = consul_kv.get_kv_dict('ConsulManager/record/jobs') jobs = [] for i in job_list: @@ -91,17 +94,17 @@ class Jobs(Resource): if record_dict['status'] == 20000: consul_kv.put_kv(f'ConsulManager/jobs/{proj_job_id}',proj_job_dict) for res in restype: + for reg in job_dict['region']: + res_job_id = f"{job_dict['vendor']}/{job_dict['account']}/{res}/{reg}" + res_job_func = f"__main__:{job_dict['vendor']}.{res}" + res_job_args = [job_dict['account'],reg] + res_job_interval = int(job_dict[f'{res}_interval']) + Scheduler.add_job(id=res_job_id, func=res_job_func, args=res_job_args, trigger='interval', + minutes=res_job_interval, replace_existing=True) + res_job_dict = {'id':res_job_id,'func':res_job_func,'args':res_job_args,'minutes':res_job_interval, + 'trigger': 'interval','replace_existing': True} - res_job_id = f"{job_dict['vendor']}/{job_dict['account']}/{res}/{job_dict['region']}" - res_job_func = f"__main__:{job_dict['vendor']}.{res}" - res_job_args = [job_dict['account'],job_dict['region']] - res_job_interval = int(job_dict[f'{res}_interval']) - Scheduler.add_job(id=res_job_id, func=res_job_func, args=res_job_args, trigger='interval', - minutes=res_job_interval, replace_existing=True) - res_job_dict = {'id':res_job_id,'func':res_job_func,'args':res_job_args,'minutes':res_job_interval, - "trigger": "interval","replace_existing": True} - - consul_kv.put_kv(f'ConsulManager/jobs/{res_job_id}',res_job_dict) + consul_kv.put_kv(f'ConsulManager/jobs/{res_job_id}',res_job_dict) else: Scheduler.remove_job(proj_job_id) diff --git a/flask-consul/views/nodes.py b/flask-consul/views/nodes.py index c6bd2ea..d2be7cf 100644 --- a/flask-consul/views/nodes.py +++ b/flask-consul/views/nodes.py @@ -25,15 +25,19 @@ class Nodes(Resource): group_dict = consul_kv.get_value(f'ConsulManager/assets/{cloud}/group/{account}') group_list = [{'gid':k,'gname':v}for k,v in group_dict.items()] return {'code': 20000,'group':group_list} - elif stype == 'ecs': + elif stype == 'res': if job_id == '' or job_id == None: - return {'code': 20000,'ecs_list': [] } + return {'code': 20000,'res_list': [] } else: - return consul_kv.get_ecs_services(job_id) + return consul_kv.get_res_services(job_id) elif stype == 'jobecs': jobecs = consul_kv.get_keys_list('ConsulManager/jobs') jobecs_list = [i.split('/jobs/')[1] for i in jobecs if '/ecs/' in i] return {'code': 20000,'jobecs':jobecs_list} + elif stype == 'jobrds': + jobrds = consul_kv.get_keys_list('ConsulManager/jobs') + jobrds_list = [i.split('/jobs/')[1] for i in jobrds if '/rds/' in i] + return {'code': 20000,'jobrds':jobrds_list} elif stype == 'ecs_services': jobecs = consul_kv.get_keys_list('ConsulManager/jobs') jobecs_list = [i.split('/jobs/')[1] for i in jobecs if '/ecs/' in i] @@ -60,12 +64,12 @@ class Nodes(Resource): checked = args['checked'] cst_ecs_dict = consul_kv.get_kv_dict('ConsulManager/assets/sync_ecs_custom/') cst_ecs_keylist = [k.split('/')[-1] for k,v in cst_ecs_dict.items() if v != {}] - ecs_info = consul_kv.get_ecs_services(jobecs_name) + ecs_info = consul_kv.get_res_services(jobecs_name) if checked == 'false': return ecs_info else: - cst_ecs_list = [i for i in ecs_info['ecs_list'] if i['iid'] in cst_ecs_keylist] - return {'code': 20000, 'ecs_list': cst_ecs_list} + cst_ecs_list = [i for i in ecs_info['res_list'] if i['iid'] in cst_ecs_keylist] + return {'code': 20000, 'res_list': cst_ecs_list} def post(self, stype): if stype == 'config': diff --git a/vue-consul/src/api/edit.js b/vue-consul/src/api/edit.js new file mode 100644 index 0000000..16d3aee --- /dev/null +++ b/vue-consul/src/api/edit.js @@ -0,0 +1,22 @@ +import request from '@/utils/request-ops' + +export function getCloud() { + return request({ + url: '/api/edit/cloud', + method: 'get' + }) +} +export function findGroup(vendor, account, region) { + return request({ + url: '/api/edit/find', + method: 'get', + params: { vendor, account, region } + }) +} +export function PostEditJob(editJob) { + return request({ + url: '/api/edit/commit', + method: 'post', + data: { editJob } + }) +} diff --git a/vue-consul/src/api/node-exporter.js b/vue-consul/src/api/node-exporter.js index 62ac1ed..946dd33 100644 --- a/vue-consul/src/api/node-exporter.js +++ b/vue-consul/src/api/node-exporter.js @@ -32,14 +32,21 @@ export function getGroup(job_id) { }) } -export function getEcsList(job_id) { +export function getResList(job_id) { return request({ - url: '/api/nodes/ecs', + url: '/api/nodes/res', method: 'get', params: { job_id } }) } +export function getJobRds() { + return request({ + url: '/api/nodes/jobrds', + method: 'get' + }) +} + export function getJobEcs() { return request({ url: '/api/nodes/jobecs', diff --git a/vue-consul/src/router/index.js b/vue-consul/src/router/index.js index 96e2efe..87712e1 100644 --- a/vue-consul/src/router/index.js +++ b/vue-consul/src/router/index.js @@ -86,14 +86,14 @@ export const constantRoutes = [ path: '/nodes', component: Layout, redirect: '/nodes/jobs', - name: '云资源监控', - meta: { title: '云资源监控', icon: 'el-icon-shopping-bag-2' }, + name: '云资源管理', + meta: { title: '云资源管理', icon: 'el-icon-shopping-bag-2' }, children: [ { path: 'jobs', - name: '接入数据源', + name: '接入云厂商', component: () => import('@/views/node-exporter/jobs'), - meta: { title: '接入数据源', icon: 'el-icon-school' } + meta: { title: '接入云厂商', icon: 'el-icon-school' } }, { path: 'exp', @@ -149,7 +149,7 @@ export const constantRoutes = [ path: 'rds', name: 'RDS', component: () => import('@/views/rds/index'), - meta: { title: 'MySQL管理', icon: 'el-icon-cpu' }, + meta: { title: 'MySQL管理', icon: 'el-icon-coin' }, children: [ { path: 'lists', @@ -157,12 +157,14 @@ export const constantRoutes = [ component: () => import('@/views/rds/lists'), meta: { title: '云MySQL列表', icon: 'el-icon-cloudy' } }, + /** { path: 'self', name: '自建MySQL管理', component: () => import('@/views/rds/self'), meta: { title: '自建MySQL管理', icon: 'el-icon-s-platform' } }, + */ { path: 'pconfig', name: 'rds-pconfig', diff --git a/vue-consul/src/views/node-exporter/.jobs.vue.swp b/vue-consul/src/views/node-exporter/.jobs.vue.swp new file mode 100644 index 0000000000000000000000000000000000000000..8d3810858b56b04da44133016eef4dfa617a925e GIT binary patch literal 40960 zcmeHQ3y@URneO;@Hzt#|K^O!KgBpbac@4t=wXu?|O{{F*ZZM2qO}J~uOzpbp)d76Y4+O5h_};{YAGtj6^3*^em&sW4 zc%)BDyuCdhNo86hx;detdg{egVEwdA+RUeB#?$c@Jy$<3uSXK>Nxhj%)Xy{Y4zoU; zN$L@Oem0Y{kYsMA$&4ah^@9C3J_mdb)aF3mYK~lgUf`-L8zxY~OM{na7hZ5@?L7Wl zp94Mzd=B^=@Hyafz~_L^0iOdt2i{d2u(Ia_{sk>MO|#FOy(qh+^{A`Jh()c=3~ z{y^XrU<0uEeSyGgAOJjjULeo~ycgK}-az1K;6uRI{xJ~P1MCLw0$%xtK;Y{@9QYK_ z2>cvIfPV-2fDOPT;2;bKUja4%UBFqucc9EK2BN^Pp!g2}2A~1&2mTkvf^P#yfaicU zz*OK37%5%`RsliaTTuG91D(KpU=DCDun)TbBf!1DCxHgwCun~TAU=GGcrk{LCO(ra zy*-TJfD&L;gQt>7|6$=*Et}Yzu z4r=j~(UOh@6M7mU5J9cONLsD2;FZ@;2x^H`+%zNUcsmL;+vBNJBpXjAjdY9FY|Ph_ z5tg=kMcG^?8w;lO`IgbH2W7p5zE#B+w%Kbsi#vOQnu*8@BF;-jy+eMzhkp4&((M-lpNM zeZw1{sM<0~YFW4NLUZ}Fhg%PyT5d7+W-=+u$V$?L+!(z7V?lI)fykMNk#5ceHK%7p zvZOJO@eU%C0k_juaI$6(EGc&P|9W7f=!Q%h9q{XcPJ7v2_w(jvyg)~y5Vdy398Q!r zFJd&uf~+&G1zBCYBo@;`ExAlS8v>K91t|z;(uiXiENC>+DI*P0)0><1goWqvTw74X ztAyST%3?t)lXc{k=x4$rOKArEkq+HxX|)=gGO1)xN>L(%Ug3nEH0fbwI-)bQ|G{Ga zn&P_MW0o7e#mJqW_VJ-Q=v0}0TzgQUx{g2s?EVb7yA4`eU%vjJ!C-wPdYm1mVoK`^?Qkgg{D6wG5Fs)no zkD%6=j9c+o5b=2Q7{4+6BkF3z){NUS9n)xqx)q%j)S5E6q@KgdWNED!!dTT>twtIEn1CQ!-NUrCZcNtY#LBSkV}$xN+hD2@|K0EOvp&Hk;38594xNiZ68@{uUtL6ZU6A*r>jhcY-EZiG^0yE ze2(}>4C4H8S}#R&aA5t=(Z?VvT$Fh-CsjoraYl5+b7}Ormk}7_=xEve)_6LZ(x=n2 zsuWPuo_=Z!6jbR7GlJ33p0U_G>Lz4bPRAxoCB<^f$B9Y@Us~Owkp3SA#;^5tNG!>X-6*Zb6h4D#&ZaqO7CB z!99oVr&iHqt;ch0_b6mnj_qqO^5``t2Mi^3oK8tVv|3QTGr+>Ep7Cnuj<&&K9zNMk zcBXf>agmK45|jMjy3u^GIN5EMOOUI{%0hIiS{+a6IhSZ-1KH-8qn#OxPhe&~kjCjTqg5H$MG}X7qjdXo7lQ8S2PrH5G z^sC3+bp5!SZW=fJ+Hp5b8+X&xanr9Gcf(ENZfKw<*H0fe^}1+#5{n2H79CraIZdf} zx-B@_?tfzNiD&KZ{^FCp*k{{2mKKhzD-3KH-n49RZ_so9<8#30fX@M+13m|Q z4)`4KIpA}^=YY=vp94Mzd=C7*aRAO%GK-UqVG+~+??DT?$>$CIe}-tyV(9&Cz#YJu zz#H)W{{(mxxF67g4*>50UPmmzkANe%cyM z__YH#l^?S4(}$UbVAE}9UJYsSWp7|1GSb<+RkF|O3GE*W1qP z@cIRvnmtB!dd@$SM(2x013;!IMY?2a`-T-?$@0O&4;DA{4nOqJ@TTRC=@E9cLjNP& z$$=08q=9|S-q}^$wI2@c;SI-zAL>M6*x+~?Bp^rk>PHHF{rq`h;LC-+jlk(w$bCv z#>fh4Ny8-XLvk|bbJaqKHIgRYq|zvYJBQ55RT(LKCqlTm<74!UbbB&HCxV*F4xAhd zA~0u(k~->ps(8&ocyGz4%3M0_d5TGa zOB7*Csd$#`&+!(M2Xi<+k=}#DOI8+FJvS2jWIP1-cZ=Fe;!#5!L38DK&ywty!hfBGH>v|p>XJL23v+4Eh`#2zG!%eg&SI!g*NG7u zuS{%-(it}^j^-+K@zg3^DE0*Dl93E@fqVCxolv0C~oc{@mf(@GYWmHG3R0i z=RP|u7{#p*4fQU^>|cDMx7dmGU}tgtL-<)Zx(covT4VYSJBjTzs|TOiJ^ERmXZ-8T z=+ZYis&1#L{P<=dKIOo-cIu~`iXKO-z+yr{D1z`5yQZkvtl6r_qk(0^7yT~7XZYw9 zHA$Aqg;HbgLyC0yICflUaxS0J;jd<2_$l1rym}Fw6Uk;wgM9BuMgbb~v54A?=Pg9& zxt-xRAkIZ|$E8qM3a5r>!3GI8YH5~XQ7D}!sseP(GfV@kT-02UPEa^!2a$Uhf9S-E zUOizPiVX0P>J;iU*@-ffPxut$ic96pYN608ClrYfg;B&IRWHwg_f$-**gMfYH)70b zg~GV&w`N$Ak_*dw&A=vvB=InbRu*j-3tn?I!fnSG!Nhp(u-xg#Ej@$XtI*=Yv2DdK z_m=e|NT}40*LwPq^^oi|woIyhCSRcGm1A+K-+9zjDJjuwuh=^L*AQ9h7^S`|Ca{z?@ScUcHdEEW?{w>OI5thA*N)5ss* zrkm^`%Tnj+8uI^t6iVzC(q*Cl%k%f&gwFpWunpJ>WPypm<-kS2E71GD0qg;`18afD zff&#a-G3hN7IgmCfbRixP9Ou^3(Nq{2mS*6|8?M1vI77w0SAEtz)m0zTnbzOoDF;j zc7h$i=Ybi(wLlaI0~Z6Q1H-Tv{0Mjn=mqGU!4hCDa5r#0a60fi*bue?UjWVoj=^@2 z0mcJAhV5W2Fa@w-FW3T12Liw!VIvp-9t36rw*V7?%YZ@H3%&|ufCk`A*bMdnIpBIA z0(=PgDR@o%erja_#BFdP;Kqbt}Da%U!nhn@gZ$d zog!VX%wIyzWIR)rxgk8f`EmQjP43J%h=4ege6mrS|UKEVsje zHbs_7*>GTiVw~o%x|EELl}2fl*qlN>OZlbHDp?(ykdn20j2KuzGPyrr zo!h|z``9vj+w-tAp+u(+S#*UVJSOr=gB5$Zl2P#F63E5i1j=N5b%}$JqZ4ei*>(a% ziB3NGJrRFrQpNTDcOt|1C_kB$F@=t%Et;`3jl~<|rzUF(VN43W8sil|*zSq`EQy0K z6M`(U3&X^KNg(7*Y9h}p_X8HDi%iZ_QBT=(PD|NiY^>)bjRejEEOe$Yp}eT2ih~;J zBjr3tqt+b9nIAbjaDDT3D{kdY*4_Yd1$MH0E-jcO*KYZ(X$hP@Y>Fq^!sA(LIFvLx zN8~V7NdXO2o1V*Ma^VmRF+&d=vDZ9b>|RL`?^_3oE7ohXwAo)=e95Jk-TSf2WA_Ia zF1jbwSU>Tedu|MkmxUY6TKE#H)i9&XYR=E}CqF@l z-RiW@WK4@rM8N5S);Hsx&0g2q|%Ccct;k%h z#Q?<)j01iT9sea@9bf@%KoUp*Hvks{KZoAm3(N&VKmq#xOF%!c7uX8?5qkgkfgXVP zz6q%Gq1hTss$Bjwjjw&Q1hM5GVucMz7OR~eWttLu8eqAc#VR~L3XL2VDv?sIca(~i zCqx5uTsm5*yD)M;*g=^7NM zh-agAjj$F7%NE8ITcC+@XWQfDjH&;oQWhJxIdTifPwP5U@Skkd~ z7~4X#EwI|a(o;82)Sa}NUVZM)q3p5M49a77dh82`9co(ag6H6|DH38cCw6*aCUX2J z;|RmB7K`~Ni)~XC(Pw3s4ou2vqEsbF^bBdK-+9y-MmI!;pI|K?WI_uFg+v2O3V?hg z%;a>U+eyS#0ot@X=4uW0YAu9O9+G=?4If#EFnOzmRLD*GmCRjs;5^JO7{Q$BWtOPJ z5nb?6G)Dc)p@nTeodiUM>1Z3+72+8Er<=p3m5ZABCVYjBI;{cv2i<}ZX^@p`8dhvA zjPt^pfxeh95nq$w2h2rNdb-7G#qTSwC?)1r-6`qd7)%C?W=u@QT`}}aHU(;>vk1C$V7`T;63SPgQf5dHHhPqb4{}~nwZ#ou zy4w!mnvol|(Jf?k(mLu)gqk+n5ir$c3R}39X?@)#(EajUv0Y51YlcK`Ab z%7C~h^VLcyu2?htz>%6ISVlYzhlf%Ex2_8s?CsAL_x02)p_<1;mN0_b1f9~7hwt;g z){NQ?qGENIEQ8tVYf@oS@Iq_ca5n@!DvIDn`v`Pt10Rl>YiQLT zh-$bnu%ozcM|IZZ&GM{+M<1cAgWHx3?LJsDYgtoyR`ks91J5>u?SU?P%}RUs07hc< za^RS&);rgPAtxBN5%7caZF21-Iw<*=kYl80kfU?{m{NNtDd+!LjtBkHIA+qERtC^dIX8G`j z1fcHCJK=?^nY$y88vx)gX!1@Eon6<43x{yW)^59Zi{1A?%~D$Pt$J%5hAa;QI=di1 zj}6$5cNX_QH@Nap%|h;@mdrKcZDmtcXBT>KV5`0Bfc@xKcp0SsLnRG-jQ$7z|5Bld z{)~M5z}JAOzy-i>q5HoM{17+-bOY;vrNF0wM&KggP1pp!0jvY&1NQ*e0v`m<1>S~z z;0<6H_!aO?pbJ5nz{9{oAPppeS->5@RN#HUpI}e;KClOP0Jsad z3^*J3Z`c*S4m<-;JOJ4nT7cQW9l%WBTHpt;EA#@Z027!E#DI%|@4}w21$Ypc3w#{7 z93Wf61;AUd9lQp73)lf{0v-oe0VePnAOxHZ1b|<_p70G|1JD7affnF1KnOSk_!;a8 zKLoxF>;vuv$j)#P@MqW-DBj>G@D*SspaV02NdUzk{1b2*@H+bT>j2pxC?4T?;2EF? z*aU0@9tS!Ax)bpWz>NTt2__G;K9HTCBCONcnBm43y1i{;K+~eI|FLbj7FCo0zVXCs zcfL!TCp6!nH+k|Y`+nq`Bu=Nm#x2d=v?b-+Qn@)*)PChpO>wZ=2VdlNIv&&{wGyI; zLYc74(d|B=(mKTU$Cn8YZJ0LB^jS1Mnux;&62>N3cnai;0RMyj@1nt}K(tG(TA>g- zRBpN<&qIj}VWub}gsQ2qg{Q}wa3h4-wz-BbkH#=tkhd*@A)^0E^d>N+>8YF8{aSb6 znh`LK^HgCQw3cQg*X~LLUxK}BqmzhpRwN9Q>zm(lY42XnJLk0}YeL!;eAkcf&}&N` z!;uer&5pst&kP>kc_U`SQ1Q_jhtFsd+#}I!-fR_8%;~v}g24E(hB{u2R6QMzF$TD_H!w?SzjzNC9nT1HlY-HN zmL_(M;R_VMN zVxXkr><~-x-=>SFb30mCxQ0g4#UuBF$7Xm+I)dt8-5@EiwX6g-|O-Ib_AkaaA7Fg2aLRqrVG zXpF8k({^Ko-HaKvbw~S!ILA|U(>M62;kePY0R8orLpD1kFk*S|35?5{4VLG z(Ep=C|6dP%KMu?QUWHEoEU*Un7ho}PD{vw3C+PD9U^lP@co_IBFa@{*_y}+wK>uDq zA9VWhz#Gul?+4BodiyV-qyGYU9-w&se}yhicK|#NGy@I5hk$QE4_^#410MtqK<|DE z*bEo|wc#e<69D=3qrhpvH_^Uj0QvDR0{#H~nRM${fjz)lAOnzYJpuainZPjg-yZ_x zyYB=n;56W6`0DBW{}kb~$K=62G7g8u7U7@~-EJ)=A*}0c-NPn1k;*5r4d)&(=KvHt zBCW>D$m8HL>PK~pI}uT1i~xa->ui{EH1(V3qq8fRcdH(4c`W-^&O+jK{y%iw!(;k~*7IibWj71qX8e;H)y) zt<=s*R{A4A?7RuC-ss9(WNJLOTvgGPi6N)jPd>i9w1jP?ka0W ziuWxX+f{txkll-a2&YFKj}%BvA)n=aPH*@?E1#<>-yu?pmzX8RgAXOwJt8=cEY4)t zxD=ktBu$Ie#=01k;x-)RB95{VE@>&TE5?+IiSh+EiNr!7l`$$`O1FUpVCgC51Y z??j%DbWeioA3~}U6@J_YC{&eI74NYgpr~x<8o6XnxP9mVzht7c=wO_=4*xqR@a2&W zw~p=9H2Sj|qAq87D@|w4qw?7gWL3WV$E7A!zt2bf(^c;XrHo(J=F*RjpYRjW#Yq4E z8R^;3yGj4QSm^%`Lho+}?gZ!#z%cL|==;wD7C`3!{uwv}I30Ke`u!n*eExHQyP)S^ z0lXi03wr)A@FGCx0m8r=sPDf3Rz`@Rx!sc7IOdj((VNJm7v%rJ_0J{qBlFxkmJKgMg|&1P lUK0GXnx!F)VvgU0%guVY2HIs8blGp^{m!ZtcZ7SO{|`1zIFSGV literal 0 HcmV?d00001 diff --git a/vue-consul/src/views/node-exporter/jobs.vue b/vue-consul/src/views/node-exporter/jobs.vue index c396b10..c7b24bb 100644 --- a/vue-consul/src/views/node-exporter/jobs.vue +++ b/vue-consul/src/views/node-exporter/jobs.vue @@ -1,6 +1,6 @@