ConsulManager/flask-consul/units/selfrds_manager.py

78 lines
4.1 KiB
Python
Raw Normal View History

2022-12-11 13:40:03 +00:00
import requests,json,re
2022-11-13 17:20:19 +00:00
from config import consul_token,consul_url
2022-12-06 17:25:09 +00:00
from units.config_log import *
2022-11-13 17:20:19 +00:00
headers = {'X-Consul-Token': consul_token}
def get_all_list(vendor,account,region,group):
vendor = f'and Meta.vendor=="{vendor}"' if vendor != '' else f'and Meta.vendor != ""'
account = f'and Meta.account=="{account}"' if account != '' else f'and Meta.account != ""'
region = f'and Meta.region=="{region}"' if region != '' else f'and Meta.region != ""'
group = f'and Meta.group=="{group}"' if group != '' else f'and Meta.group != ""'
url = f'{consul_url}/agent/services?filter=Service == selfrds_exporter {vendor} {account} {region} {group}'
response = requests.get(url, headers=headers)
if response.status_code == 200:
info = response.json()
all_list = [i['Meta'] for i in info.values()]
vendor_list = sorted(list(set([i['vendor'] for i in all_list])))
account_list = sorted(list(set([i['account'] for i in all_list])))
region_list = sorted(list(set([i['region'] for i in all_list])))
group_list = sorted(list(set([i['group'] for i in all_list])))
return {'code': 20000,'all_list':all_list,'vendor_list':vendor_list,
'account_list':account_list,'region_list':region_list,'group_list':group_list}
else:
2022-12-11 13:40:03 +00:00
logger.error(f"{response.status_code}{response.text}")
2022-11-13 17:20:19 +00:00
return {'code': 50000, 'data': f'{response.status_code}:{response.text}'}
def get_service():
response = requests.get(f'{consul_url}/agent/services?filter=Service == selfrds_exporter', headers=headers)
if response.status_code == 200:
info = response.json()
all_list = [i['Meta'] for i in info.values()]
vendor_list = sorted(list(set([i['vendor'] for i in all_list])))
account_list = sorted(list(set([i['account'] for i in all_list])))
region_list = sorted(list(set([i['region'] for i in all_list])))
group_list = sorted(list(set([i['group'] for i in all_list])))
return {'code': 20000,'all_list':all_list,'vendor_list':vendor_list,
'account_list':account_list,'region_list':region_list,'group_list':group_list}
else:
2022-12-11 13:40:03 +00:00
logger.error(f"{response.status_code}{response.text}")
2022-11-13 17:20:19 +00:00
return {'code': 50000, 'data': f'{response.status_code}:{response.text}'}
def add_service(vendor,account,region,group,name,ip,port,os):
if port is None or name is None:
return {"code": 50000, "data": f"名称或IP不能为空"}
2022-12-11 13:40:03 +00:00
sid = f"{vendor}/{account}/{region}/{group}@{name}".strip()
#sid = eval(repr(sid).replace('\\t','').replace('\\n',''))
sid = re.sub('[[ \]`~!\\\#$^&*=|"{}\':;?\t\n]','_',sid)+'@rds'
2022-11-13 17:20:19 +00:00
instance = f'{ip}:{port}'
2022-12-11 13:40:03 +00:00
if '//' in sid or sid.startswith('/'):
2022-11-13 17:20:19 +00:00
return {"code": 50000, "data": f"服务ID【{sid}】首尾不能包含'/',并且不能包含两个连续的'/'"}
data = {
"id": sid,
"name": 'selfrds_exporter',
'Address': ip,
'port': int(port),
"tags": [vendor,os],
"Meta": {'vendor':vendor,'account':account,'region':region,'group':group,
'name':name,'instance':instance,'os':os},
"check": {"tcp": instance,"interval": "60s"}
}
reg = requests.put(f'{consul_url}/agent/service/register', headers=headers, data=json.dumps(data))
if reg.status_code == 200:
return {"code": 20000, "data": f"{sid}】增加成功!"}
else:
2022-12-11 13:40:03 +00:00
logger.error(f"{reg.status_code}{sid}{reg.text}")
2022-11-13 17:20:19 +00:00
return {"code": 50000, "data": f"{reg.status_code}{sid}{reg.text}"}
def del_service(vendor,account,region,group,name):
2022-12-11 13:40:03 +00:00
sid = f"{vendor}/{account}/{region}/{group}@{name}".strip()
sid = re.sub('[[ \]`~!\\\#$^&*=|"{}\':;?\t\n]','_',sid)+'@rds'
2022-11-13 17:20:19 +00:00
reg = requests.put(f'{consul_url}/agent/service/deregister/{sid}', headers=headers)
if reg.status_code == 200:
2022-12-11 13:40:03 +00:00
logger.debug(f"{sid}】删除成功!")
2022-11-13 17:20:19 +00:00
return {"code": 20000, "data": f"{sid}】删除成功!"}
else:
2022-12-11 13:40:03 +00:00
logger.error(f"{reg.status_code}{sid}{reg.text}")
2022-11-13 17:20:19 +00:00
return {"code": 50000, "data": f"{reg.status_code}{sid}{reg.text}"}