import requests,json import sys sys.path.append("..") from config import consul_token,consul_url 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 == selfnode_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: return {'code': 50000, 'data': f'{response.status_code}:{response.text}'} def get_service(): response = requests.get(f'{consul_url}/agent/services?filter=Service == selfnode_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: 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不能为空!"} sid = f"{vendor}/{account}/{region}/{group}@{name}" instance = f'{ip}:{port}' if '//' in sid or sid.startswith('/') or sid.endswith('/'): return {"code": 50000, "data": f"服务ID【{sid}】首尾不能包含'/',并且不能包含两个连续的'/'"} data = { "id": sid, "name": 'selfnode_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: return {"code": 50000, "data": f"{reg.status_code}【{sid}】{reg.text}"} def del_service(vendor,account,region,group,name): sid = f"{vendor}/{account}/{region}/{group}@{name}" reg = requests.put(f'{consul_url}/agent/service/deregister/{sid}', headers=headers) if reg.status_code == 200: return {"code": 20000, "data": f"【{sid}】删除成功!"} else: print(f"{reg.status_code}【{sid}】{reg.text}") return {"code": 50000, "data": f"{reg.status_code}【{sid}】{reg.text}"}