ConsulManager/flask-consul/units/upload.py

156 lines
6.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/python3
import csv,re
from io import StringIO
import requests, json, traceback
import xlrd,re,sys
sys.path.append("..")
from config import consul_token,consul_url
from units.config_log import *
def importconsul(row,imptype):
try:
if imptype == 'blackbox':
module, company, project, env, name, instance = row
data = {
"id": f"{module}/{company}/{project}/{env}@{name}",
"name": 'blackbox_exporter',
"tags": [module],
"Meta": {'module': module, 'company': company, 'project': project,
'env': env, 'name': name,'instance': instance}
}
elif imptype == 'selfnode':
vendor,account,region,group,name,instance,os = row
logger.info(row)
sid = f"{vendor}/{account}/{region}/{group}@{name}"
ip = instance.split(':')[0]
port = instance.split(':')[1]
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"}
}
elif imptype == 'selfrds':
vendor,account,region,group,name,instance,os = row
logger.info(row)
sid = f"{vendor}/{account}/{region}/{group}@{name}@rds"
ip = instance.split(':')[0]
port = instance.split(':')[1]
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"}
}
elif imptype == 'selfredis':
vendor,account,region,group,name,instance,os = row
logger.info(row)
sid = f"{vendor}/{account}/{region}/{group}@{name}@redis"
ip = instance.split(':')[0]
port = instance.split(':')[1]
data = {
"id": sid,
"name": 'selfredis_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"}
}
except Exception as e:
logger.error(f"【import】导入失败,{e}\n{traceback.format_exc()}")
return {"code": 50000, "data": f"导入内容格式异常!{row}"}
headers = {'X-Consul-Token': consul_token}
reg = requests.put(f"{consul_url}/agent/service/register", headers=headers, data=json.dumps(data))
if reg.status_code == 200:
logger.info(f'code: 20000, data: 增加成功!{instance}')
return {"code": 20000, "data": "增加成功!"}
else:
logger.info(f'code: 50000, data: {reg.status_code}:{reg.text},{instance}')
return {"code": 50000, "data": f'{reg.status_code}:{reg.text}'}
def read_execl(file_contents,imptype):
data = xlrd.open_workbook(file_contents=file_contents, encoding_override="utf-8")
table = data.sheets()[0]
logger.info("【import】开始读取导入文件")
for rownum in range(table.nrows):
row = table.row_values(rownum)
if rownum == 0:
continue
nrow = []
for i in row:
try:
float(i)
if i % 1 == 0:
i = int(i)
nrow.append(str(i))
except:
j = i.strip()
j = '_' if j == '' else j
if i != row[5]:
j = re.sub('[[ \]`~!\\\#$^/&*=|"{}\':;?\t\n]','_',j)
nrow.append(j)
imp = importconsul(nrow,imptype)
if imp['code'] == 50000:
return imp
return {"code": 20000, "data": f"导入成功!共导入 {rownum} 条数据。"}
import csv
import re
def read_csv(file_content, imptype):
file_content_str = file_content.decode('utf-8')
# 使用StringIO创建一个模拟的文件对象
csvfile = StringIO(file_content_str)
# 初始化一个空列表来存储处理后的数据
processed_rows = []
# 使用csv模块读取CSV文件
reader = csv.reader(csvfile)
next(reader) # 跳过表头行,如果有
# 遍历CSV文件的每一行
for row in reader:
nrow = [] # 初始化一个空列表来存储当前行的处理结果
# 遍历当前行的每个单元格
for cell in row:
cell = cell.strip() # 去除字符串两端的空白字符
# 尝试将单元格内容转换为数字
try:
# 尝试转换为浮点数,然后检查是否为整数
num = float(cell)
if num.is_integer():
num = int(num)
nrow.append(str(num)) # 将数字转换为字符串并添加到列表中
except ValueError:
# 如果转换失败,则执行字符串清洗操作
if cell: # 如果字符串非空
# 替换特殊字符为下划线除了第6个单元格索引为5
if row.index(cell) != 5:
cell = re.sub(r'[[\]`~!\\\#$^/&*=|"{}\':;?\t\n]', '_', cell)
else:
cell = '_' # 空字符串替换为下划线
nrow.append(cell) # 将清洗后的字符串添加到列表中
# 处理完当前行后将其添加到processed_rows列表中
processed_rows.append(nrow)
imp = importconsul(nrow, imptype)
if imp['code'] == 50000:
return imp
# 返回处理后的数据或其他信息,例如成功消息和处理的行数
return {"code": 20000, "data": f"处理成功!共处理 {len(processed_rows)} 条数据。", "rows": processed_rows}