-- coding: utf-8 --
import json
import os
from datetime import datetime
from datetime import date
from string import split
import requests
import xlrd
from django.db.models import Q
from django.http import JsonResponse, HttpResponse
from common.mymako import render_mako_context
from common.mymako import render_json
from conf.default import APP_ID, APP_TOKEN, BK_PAAS_HOST
from home_application.esb_helper import cc_search_biz, cc_search_set, run_fast_execute_script, cc_search_host,
get_job_instance_log, get_host_ip_list, cc_get_job_detail, run_execute_job, cc_fast_push_file, get_all_user
from models import CheckTemplate, CheckTask, CheckResult, CheckDetail, Test, ExamResult, ZdSx, DBManager, HostInfo
def home(request):
“”"
首页
“”"
id = request.GET.get(‘id’)
return render_mako_context(request, ‘/home_application/home.html’, {“id”: id})
def dev_guide(request):
“”"
开发指引
“”"
return render_mako_context(request, ‘/home_application/dev_guide.html’)
def contactus(request):
“”"
联系我们
“”"
return render_mako_context(request, ‘/home_application/contact.html’)
def check_task(request):
“”"
巡检任务
“”"
id = request.GET.get(‘id’)
return render_mako_context(request, ‘/home_application/check_task.html’, {“id”: id})
def template(request):
“”"
巡检模板
“”"
return render_mako_context(request, ‘/home_application/template.html’)
def check_message(request):
“”"
巡检模板
“”"
return render_mako_context(request, ‘/home_application/check_message.html’)
def exam(request):
“”"
考试
“”"
return render_mako_context(request, ‘/home_application/exam.html’)
def form(request):
“”"
图表
“”"
return render_mako_context(request, ‘/home_application/form.html’)
def test1(request):
“”"
联系1
“”"
return render_mako_context(request, ‘/home_application/test1.html’)
def DB_manage(request):
“”"
联系1
“”"
return render_mako_context(request, ‘/home_application/DB_manage.html’)
def beikao(request):
“”"
备考前端页面
“”"
return render_mako_context(request, ‘/home_application/aaa.html’)
def modal(request):
“”"
测试
“”"
return render_mako_context(request, ‘/home_application/modal.html’)
def getJson(request):
data = [
{‘time’: ‘1月1日’, ‘cpu’: 89.3, ‘men’: 96.4, ‘disk’: 88},
{‘time’: ‘1月2日’, ‘cpu’: 79.3, ‘men’: 88.4, ‘disk’: 78},
{‘time’: ‘1月3日’, ‘cpu’: 88.3, ‘men’: 78.4, ‘disk’: 84},
{‘time’: ‘1月4日’, ‘cpu’: 78.3, ‘men’: 63.4, ‘disk’: 76},
{‘time’: ‘1月5日’, ‘cpu’: 74.3, ‘men’: 94.4, ‘disk’: 79},
{‘time’: ‘1月6日’, ‘cpu’: 85.3, ‘men’: 87.4, ‘disk’: 98}
]
return render_json({“result”: True, “data”: data})
返回echarts 图标拼接格式数据
series 下面的type 表示需要渲染哪种图表类型
line:折线图 bar:柱状图
def getEchartsJson(request):
data = {
“xAxis”: [“1月”, “2月”, “3月”, “4月”, “5月”, “6月”, “7月”, “8月”, “9月”, “10月”, “11月”, “12月”],
“series”: [
{
“name”: “cpu”,
“type”: “line”,
“data”: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
},
{
“name”: “men”,
“type”: “line”,
“data”: [3.6, 6.9, 8.0, 21.4, 23.7, 78.7, 165.6, 152.2, 68.7, 28.8, 7.0, 8.3]
},
{
“name”: “disk”,
“type”: “bar”,
“data”: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3]
}
]
}
return render_json({“result”: True, “data”: data})
该方法一般不作修改
def search_set(request):
“”"
传递参数
:param 业务id biz_id
:param request:
:return:
“”"
biz_id = request.GET.get(‘biz_id’)
data = cc_search_set(biz_id)
return JsonResponse(data)
def fast_execute_script(request):
“”"
:param request:
传递参数
:param 业务id biz_id,
ip_list = [
{
“bk_cloud_id”: 0,
“ip”: “10.92.190.214”
}
{
“bk_cloud_id”: 0,
“ip”: “10.92.190.215”
}
]
:return:
“”"
biz_id = request.GET.get(‘biz_id’)
script_content = “”"
df -h
“”"
ip_list = [
{
“bk_cloud_id”: 0,
“ip”: “192.168.240.43”
}
]
data = run_fast_execute_script(biz_id, script_content, ip_list, request.user.username)
return JsonResponse(data)
def execute_job(request):
“”"
:param request:
传递参数
:param 业务id biz_id,
:param 作业模板id job_id,
:param ip列表 ip_list = [
{
“bk_cloud_id”: 0,
“ip”: “10.92.190.214”
}
{
“bk_cloud_id”: 0,
“ip”: “10.92.190.215”
}
]
:return:
“”"
biz_id = request.GET.get(‘biz_id’)
job_id = request.GET.get(‘job_id’)
ip_list = [
{
“bk_cloud_id”: 0,
“ip”: “192.168.240.43”
}
]
data = run_execute_job(biz_id, job_id, ip_list, request.user.username)
return JsonResponse(data)
def get_log_content(request):
“”"
:param request:
传递参数
:param 业务id biz_id,
:param 作业实例id instance_id,
:return:
“”"
biz_id = request.GET.get(‘biz_id’)
job_instance_id = request.GET.get(‘instance_id’)
result = get_job_instance_log(biz_id, job_instance_id, request.user.username)
data = {
“data”: result
}
return JsonResponse(data)
def job_detail(request):
“”"
:param request:
传递参数
:param 业务id biz_id,
:param 作业实例id instance_id,
:return:
“”"
biz_id = request.GET.get(‘biz_id’)
job_id = request.GET.get(‘job_id’)
data = cc_get_job_detail(biz_id, job_id, request.user.username)
return JsonResponse(data)
def fast_push_file(request):
biz_id = request.GET.get(‘biz_id’)
file_target_path = “/tmp/”
target_ip_list = [{
“bk_cloud_id”: 0,
“ip”: “192.168.240.52”
},
{
“bk_cloud_id”: 0,
“ip”: “192.168.240.55”
}
]
file_source_ip_list = [{
“bk_cloud_id”: 0,
“ip”: “192.168.240.43”
}
]
file_source = ["/tmp/test12.txt", “/tmp/test123.txt”]
data = cc_fast_push_file(biz_id, file_target_path, file_source, target_ip_list, file_source_ip_list,
request.user.username)
return JsonResponse(data)
“”“test1"”"
def add_zd(request):
info = json.loads(request.body)
message = ZdSx()
message.type = ‘,’.join(info[‘type’])
message.name = info[‘name’]
message.zd_name = info[‘zd_name’]
if info[‘remark’]:
message.remark = info[‘remark’]
else:
message.remark = ‘’
message.save()
return render_json({‘result’: True})
def get_zd(request):
info = json.loads(request.body)
message = ZdSx.objects
if info[‘name’]:
message = message.filter(Q(name__icontains=info[‘name’]))
if info[‘type’]:
message = message.filter(Q(type__icontains=info[‘type’]))
messages = message.values()
message_list = list(messages)
data = {}
data[‘data’] = message_list
return render_json(data)
def del_zd(request):
info = json.loads(request.body)
ZdSx.objects.filter(id=info).delete()
return render_json({‘result’: True})
def add_db_manage(request):
info = json.loads(request.body)
message = DBManager()
message.type = info[‘type’]
message.name = info[‘name’]
message.biz_name = info[‘biz_name’]
message.port = info[‘port’]
message.host = info[‘host’]
message.instance_name = info[‘instance_name’]
message.user = info[‘user’]
message.zd_sx = info[‘zd_sx’]
message.save()
return render_json({‘result’: True})
def get_db_manage(request):
info = json.loads(request.body)
message = DBManager.objects
if info[‘biz_name’]:
message = message.filter(biz_name=info[‘biz_name’])
if info[‘host’]:
message = message.filter(host=info[‘host’])
if info[‘type’]:
message = message.filter(type=info[‘type’])
messages = message.values()
message_list = list(messages)
data = {}
data[‘data’] = message_list
return render_json(data)
def del_db_manage(request):
info = json.loads(request.body)
DBManager.objects.filter(id=info).delete()
return render_json({‘result’: True})
详情
def get_db_info(request):
info = json.loads(request.body)
message = DBManager.objects.filter(id=info).values()
return render_json({‘result’: True, ‘data’: message[0]})
“”“模拟考”""
def test(request):
info = request.GET
username = request.user.username
time = datetime.now().strftime(’%Y-%m-%d %H:%M:%S’)
info[‘username’] = username
info[‘time’] = time
return render_json({‘result’: True, “data”: info})
def add_check_template(request):
info = json.loads(request.body)
tempalte = CheckTemplate()
tempalte.name = info[‘name’]
tempalte.script = info[‘script’]
tempalte.val = info[‘val’]
tempalte.time = datetime.now().strftime(’%Y-%m-%d %H:%M:%S’)
tempalte.remark = info[‘remark’]
tempalte.biz_name = info[‘biz_name’]
tempalte.save()
return render_json({‘result’: True})
def get_check_template(request):
“”“查询工单”""
info = json.loads(request.body)
message = CheckTemplate.objects
if info[‘biz_name’]:
message = message.filter(biz_name=info[‘biz_name’])
if info[‘name’]:
message = message.filter(Q(name__icontains=info[‘name’]))
messages = message.values()
message_list = list(messages)
data = {}
data[‘data’] = message_list
return render_json(data)
def del_check_template(request):
id = json.loads(request.body)
CheckTemplate.objects.filter(id=id).delete()
return render_json({‘result’: True})
def add_check_task(request):
info = json.loads(request.body)
task_info = CheckTask()
task_info.type = info[‘type’]
task_info.name = info[‘task_name’]
task_info.time = datetime.now().strftime(’%Y-%m-%d %H:%M:%S’)
task_info.host = “,”.join(info[‘host’])
task_info.biz_id = info[‘biz_id’]
task_info.template_name = info[‘template_name’]
task_info.template_id = CheckTemplate.objects.filter(name=info[‘template_name’]).values()[0][‘id’]
task_info.save()
return render_json({‘result’: True})
def get_check_task(request):
“”“查询巡检任务”""
info = json.loads(request.body)
message = CheckTask.objects
if info[‘task_name’]:
message = message.filter(Q(name__icontains=info[‘task_name’]))
if info[‘task_type’]:
message = message.filter(type=info[‘task_type’])
messages = message.values()
message_list = list(messages)
data = {}
data[‘data’] = message_list
return render_json(data)
def check_result(request):
data = json.loads(request.body)
info = CheckTask.objects.filter(id=data[‘id’]).values()
messages = CheckResult.objects.filter(task_id=data[‘id’]).values()
for message in messages:
message[‘name’] = info[0][‘name’]
message[‘host’] = info[0][‘host’]
message_list = list(messages)
mes = {}
mes[‘message’] = message_list
return render_json(mes)
第二次模拟考
def get_app_info(request):
url = BK_PAAS_HOST + ‘/api/c/compapi/v2/bk_paas/get_app_info/’
kwargs = {
“bk_app_code”: “lukelee”,
“bk_app_secret”: “fca019b8-3d3a-4a5c-b94f-7eb27acf13e0”,
“bk_username”: “admin”,
“target_app_code”: “lukelee”,
“fields”: “bk_app_code;bk_app_name;bk_app_code;bk_app_name;introduction;creator;developer”
}
response = requests.post(url, json.dumps(kwargs), verify=False)
result = json.loads(response.content)
return render_json(result)
def get_exam_result(request):
messages = ExamResult.objects.all().values()
message_list = list(messages)
data = {}
data[‘data’] = message_list
return render_json(data)
“”“查询业务信息”""
def search_biz(request):
token = request.COOKIES[‘bk_token’]
data = cc_search_biz(token)
return JsonResponse({‘result’: True, ‘data’: data[‘data’][‘info’]})
“”“查询主机信息”""
def search_host(request):
data = request.body
biz_id = int(data)
token = request.COOKIES[‘bk_token’]
ip_list = []
result = cc_search_host(biz_id, ip_list, token)
hosts = []
for hostinfo in result[“data”][“info”]:
host = {}
host[“inner_ip”] = str(hostinfo[“host”][“bk_host_innerip”])
hosts.append(host)
print hosts
return render_json({‘result’: True, ‘hosts’: hosts})
“”“执行脚本”""
def script_execute(request):
“”“执行脚本”""
info = json.loads(request.body)
if info[‘type’] == ‘立即’:
biz_id = info[‘biz_id’]
li = info[‘host’]
tem = CheckTemplate.objects.filter(name=info[‘template_name’]).values()
script_content = tem[0][‘script’]
message = CheckResult()
message.task_id = CheckTask.objects.filter(name=info[‘task_name’]).values()[0][‘id’]
message.run_time = datetime.now().strftime(’%Y-%m-%d %H:%M:%S’)
message.save()
a = 0
b = 0
for ip in li:
hostip = {}
hostip[‘ip’] = ip
hostip[‘bk_cloud_id’] = 0
ip_list = []
ip_list.append(hostip)
result = run_fast_execute_script(biz_id, script_content, ip_list)
data = get_job_instance_log(biz_id, result[‘data’])
res = CheckResult.objects.filter(task_id=info[‘id’]).values()
detail = CheckDetail()
value = float(data[0][“log_content”][4:-2])
detail.value = value
a = a + 1
if value <= tem[0][‘val’]:
detail.result = ‘正常’
else:
detail.result = ‘异常’
b = b + 1
detail.result_id = res[0][‘id’]
detail.ip = ip
detail.save()
result = ‘本次共巡检%d台服务器,%d台存在异常’
CheckResult.objects.filter(task_id=info[‘id’]).update(detail=result)
return render_json({‘result’: True})
“”“查询所有登入用户”""
def all_username(request):
token = request.COOKIES[‘bk_token’]
data = get_all_user(token)
names = []
for info in data[‘data’]:
name = info[‘bk_username’]
names.append(name)
return render_json({‘result’: True, ‘data’: names})
“”“上传并处理excel文件”""
def upload_excel(request):
upload_file = request.FILES.get(‘file’)
data = upload_file.read()
with open("./static/" + upload_file.name, ‘wb+’) as file:
file.write(data)
data1 = xlrd.open_workbook("./static/" + upload_file.name)
table = data1.sheets()[0]
nrows = table.nrows # 行数
ncols = table.ncols # 列数
colnames = table.row_values(0) # 某一行数据
tpl_items = []
for rowindex in range(1, nrows):
row = table.row_values(rowindex)
if row:
kwargs = {}
for i in range(ncols):
kwargs[colnames[i]] = row[i]
tpl_items.append(kwargs)
data = {}
data[‘tpl_items’] = tpl_items
return JsonResponse({“result”: “success”, “data”: data}, safe=False)
“”“增删该查”""
def add_exam_detail(request):
info = json.loads(request.body)
message = Test()
message.biz_name = info[‘biz_name’]
message.test_name = info[‘test_name’]
message.test_type = info[‘test_type’]
message.person = info[‘person’]
message.tel = info[‘tel’]
message.date = info[‘date’]
message.site = info[‘site’]
message.test_state = ‘未开始’
message.exam_name = info[‘exam_name’]
message.save()
return render_json({‘result’: True})
获取全部信息或者选择
def get_exam_detail(request):
info = json.loads(request.body)
message = Test.objects
if info[‘test_name’]:
message = message.filter(Q(biz_name__icontains=info[‘test_name’]))
if info[‘site’]:
message = message.filter(Q(site__icontains=info[‘site’]))
if info[‘test_type’]:
message = message.filter(Q(test_type__icontains=info[‘test_type’]))
if info[‘person’]:
message = message.filter(Q(person__icontains=info[‘person’]))
messages = message.values()
message_list = list(messages)
data = {}
data[‘data’] = message_list
data[‘val’] = len(message_list)
return render_json(data)
def del_exam_detail(request):
info = json.loads(request.body)
Test.objects.filter(id=info).delete()
return render_json({‘result’: True})
详情
def get_one_detail(request):
info = json.loads(request.body)
message = Test.objects.filter(id=info).values()
return render_json({‘result’: True, ‘data’: message[0]})
def upload(request):
myFile = request.FILES.get(“file”) # 获取上传的文件,如果没有文件,则默认为None
if not myFile:
return HttpResponse(“no files for upload!”)
destination = open(os.path.join("./static/", myFile.name), ‘wb+’) # 打开特定的文件进行二进制的写操作
for chunk in myFile.chunks(): # 分块写入文件
destination.write(chunk)
destination.close()
exam_name = myFile.name
return JsonResponse(exam_name, safe=False)
def test2(request):
result = run_execute_job(biz_id=‘2’, job_id=‘1008’)
res_list = get_job_instance_log(biz_id=‘2’, job_instance_id=result[‘data’][‘job_instance_id’])
for info in res_list:
date, mem_rate, disk_rate, cpu_rate = split(info[“log_content”], “|”)
cpu_rate = split(cpu_rate, “\n”)[0]
host_info = HostInfo()
host_info.ip = info[‘ip’]
host_info.cpu_rate = float(cpu_rate[:len(cpu_rate) - 1])
host_info.mem_rate = float(mem_rate[:len(mem_rate) - 1])
host_info.disk_rate = float(disk_rate[:len(disk_rate) - 1])
host_info.search_time = date
host_info.save()
return render_json({‘result’: True})
def search_host_info(request):
data1 = HostInfo.objects.filter(ip=‘192.168.240.43’).values()
data2 = HostInfo.objects.filter(ip=‘192.168.240.44’).values()
for info1 in data1:
info1[‘search_time’] = info1[‘search_time’].strftime(’%Y-%m-%d %H:%M:%S’)
for info2 in data2:
info2[‘search_time’] = info2[‘search_time’].strftime(’%Y-%m-%d %H:%M:%S’)
info_list1 = list(data1)
info_list2 = list(data2)
data = {}
data[‘info_list1’] = info_list1
data[‘info_list2’] = info_list2
return render_json(data)