def editconn(request): """ 修改 :param request: :return: """ try: # 拿到当前用户,保存为修改人 res = json.loads(request.body) res['editname'] = request.user.username res['edittime'] = datetime.datetime.now() # 点修改密码进行解密 password = encryption_str(res['password']) res['password'] = password re1 = Conn.objects.filter(id=res['id']).update(**res) info = make_log_info(u'修改数据库连接配置', u'业务日志', u'Conn', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) return tools.success_result(re1) except Exception as e: res1 = tools.error_result(e) info = make_log_info(u'修改数据库连接配置', u'业务日志', u'Conn', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return res1
def delete_conn(request, id): """ 删除 :param request: :param id: :return: """ try: res = Conn.objects.filter(id=id).delete() info = make_log_info(u'删除数据库连接配置', u'业务日志', u'Conn', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) status_dic = {} # 删除完后重新计算页数 items_count = Conn.objects.count() pages = items_count / 5 if 0 != items_count % 5: pages = pages + 1 status_dic['message'] = 'ok' status_dic['page_count'] = pages return tools.success_result(status_dic) except Exception as e: res1 = tools.error_result(e) info = make_log_info(u'删除数据库连接配置', u'业务日志', u'Conn', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return tools.error_result(res1)
def addmuenus(request): """ 增加菜单 :param request: :return: """ try: status_dic = {} res = json.loads(request.body) re = Muenu(**res).save() items_count = Muenu.objects.count() # 增加菜单后重新查看总页数 pages = items_count / 5 if 0 != items_count % 5: pages = pages + 1 status_dic['message'] = 'ok' status_dic['page_count'] = pages info = make_log_info(u'增加菜单', u'业务日志', u'Muenu', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) return tools.success_result(status_dic) except Exception as e: res1 = tools.error_result(e) info = make_log_info(u'增加菜单', u'业务日志', u'Muenu', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return res1
def model_tree_host(request): """ 树状主机信息显示 :param request: :return: """ try: param = {"bk_biz_id": 2} client = tools.interface_param(request) res = client.cc.search_biz_inst_topo(param) if res.get('result'): # 判断调用search_biz_inst_topo接口是否成功,成功则取数据,失败则返回错误信息 bk_tree_list = res.get('data') else: bk_tree_list = [] logger.error(u"请求主机拓扑列表失败:%s" % res.get('message')) test_list = bk_tree_list[0]['child'] # 取出集群数据 display_list = [] for i in test_list: # 循环遍历取出集群名称 dic = { 'bk_inst_name': i['bk_inst_name'], 'bk_inst_id': i['bk_inst_id'], } child_list = [] for child in i['child']: dic1 = { 'child_bk_inst_name': child['bk_inst_name'], 'child_bk_inst_id': child['bk_inst_id'], } child_list.append(dic1) dic['child'] = child_list display_list.append(dic) result = tools.success_result(display_list) except Exception, e: result = tools.error_result(e)
def get_api_type(cls, api_address): """ :return: """ # 请求地址,测试数据 # api_address = LOG_API_ADDRESS # 返回列表 return_list = [] # 请求结果 try: api_result = json.loads(requests.get(api_address).content) if api_result['code'] == '000000': for i in api_result['data']: map = {} # 度量值列表 metric_list = api_result['data'][i].split('|')[1].split(',') dimension_list = api_result['data'][i].split('|')[0].split(',') map[i] = dict() map[i]['metric_list'] = metric_list map[i]['dimension_list'] = dimension_list return_list.append(map) return success_result(return_list) else: return error_result([]) except Exception as e: return error_result(str(e))
def delete_muenu(request, id): """ 删除菜单 :param request: :param id: :return: """ # 先删除菜单,再删除该菜单下的所有角色,两表无外键Id try: Muenu.objects.get(id=id).delete() rm.objects.filter(muenuid=id).all().delete() info = make_log_info(u'删除菜单', u'业务日志', u'Muenu', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) info = make_log_info(u'删除菜单', u'业务日志', u'rm', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) return tools.success_result(None) except Exception as e: info = make_log_info(u'删除菜单', u'业务日志', u'Muenu', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) info = make_log_info(u'删除菜单', u'业务日志', u'rm', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) res3 = tools.error_result(e) return tools.error_result(res3)
def get_guotai_system_info(request): """ 获取过国泰君安系统状态 :param request: :return: """ request_body = json.loads(request.body) type_id = request_body['type_id'] if type_id == '1': # 总系统状态查询 result_list = [] res = { "status": int(random.uniform(0, 4)), "time": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") } result_list.append(res) elif type_id == '2': # 报盘系统状态查询 result_list = [] res = { "status": int(random.uniform(0, 4)), "time": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") } result_list.append(res) return tools.success_result(result_list)
def get_user_muenu(request): """ 获取角色对应的菜单名和Url :param request: :return: """ cilent = tools.interface_param(request) # 蓝鲸平台获取当前用户,取得当前用户的角色id # user = cilent.bk_login.get_user({}) # bk_roleid = user['data']['bk_role'] # 根据菜单和角色表查出该角色对应的菜单 user_dto_name = request.user.username user_db = user_info.objects.filter(user_name=user_dto_name) role_id = 1 if user_db.count() > 0: user_db_data = user_db.get() role_id = user_db_data.user_type_id role_menus = rm.objects.filter(roleid=role_id) temp_list = [] for r_m in role_menus: # 菜单id,菜单表和菜单角色表都要对应起来 menu_id = model_to_dict(r_m)['muenuid'] # 菜单名称 try: menu_name = Muenu.objects.get(id=menu_id) except Exception as e: continue temp = {} temp = model_to_dict(menu_name) temp_list.append(temp) return tools.success_result(temp_list)
def get_positions_all(): """ 获取所有岗位信息 :return: json--results--StaffPosition对象 """ try: res = StaffPosition.objects.get_positions_all().get("result") result = tools.success_result(res) except Exception, e: result = tools.error_result(e)
def get_conname(request): """ 根据id获取数据库连接配置并返回 :param request: :return: """ try: res = request.body res_obj = Conn.objects.get(id=res) conn = model_to_dict(res_obj) reslut = tools.success_result(conn) except Exception as e: reslut = tools.error_result(e) return reslut
def get_scene_by_id(id): """ 根据场景ID获取场景对象 :param id: :return: """ res = Scene.objects.get_scenes_by_id(id) if res.get("code"): result_temp = res.get("result") result = tools.success_result(result_temp) else: result_temp = res.get("result") result = tools.error_result(result_temp) return result
def get_all_db_connection(request): """ 获取所有的数据库名称 :param request: :return: """ try: conn = Conn.objects.all() result = [] for con in conn: obj = model_to_dict(con) result.append(obj) return tools.success_result(result) except Exception as e: return tools.error_result(str(e))
def get_scene_by_staff_position_id_time_order_by_scene_order_id(request): """ 根据用户ID和当前时间获取场景信息----暂时保留---待废弃 :param request:json :return: """ try: staff_position = get_staff_position_by_username(request) # 获取场景信息 staff_position_id = staff_position.get("result").get( "staff_position_id") # 场景ID now_time = datetime.datetime.now().strftime("%H:%M:%S") # 当前时间 temp_result = Scene.objects.get_scene_by_staff_position_id_time_order_by_scene_order_id( staff_position_id, now_time).get("result") result = tools.success_result(temp_result) except Exception, e: result = tools.error_result(e)
def get_scene_by_staff_position_id(request): """ 根据用户ID获取场景信息----未添加时间 :param request: :return: """ try: staff_position = get_staff_position_by_username(request) # 获取场景信息 staff_position_id = staff_position.get("result").get( "staff_position_id") # 场景ID str_now_time = time.strftime("%H:%M:%S", time.localtime(time.time())) now_time = time.localtime(time.time()) temp_result = Scene.objects.get_scene_by_staff_position_id( staff_position_id).get("result") # 场景信息结果 result = tools.success_result(temp_result) return result except Exception, e: result = tools.error_result(e) return result
def edit_muenu(request): """ 修改菜单 :param request: :return: """ try: res = json.loads(request.body) re1 = Muenu.objects.filter(id=res['id']).update(**res) info = make_log_info(u'修改菜单', u'业务日志', u'Muenu', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) return tools.success_result(re1) except Exception as e: res1 = tools.error_result(e) info = make_log_info(u'修改菜单', u'业务日志', u'Muenu', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return res1
def saveconn_all(request): """ 保存 :param request: :return: """ try: res = json.loads(request.body) cilent = tools.interface_param(request) user = cilent.bk_login.get_user({}) # 获取用户名 res['createname'] = request.user.username res['editname'] = request.user.username # 密码加密后保存 password = encryption_str(res['password']) res['password'] = password re = Conn(**res).save() status_dic = {} # 计算总页数,取5有余就+1页 items_count = Conn.objects.count() pages = items_count / 5 if 0 != items_count % 5: pages = pages + 1 status_dic['message'] = 'ok' status_dic['page_count'] = pages info = make_log_info(u'增加数据库连接配置', u'业务日志', u'Conn', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) return tools.success_result(status_dic) except Exception as e: info = make_log_info(u'增加数据库连接配置', u'业务日志', u'Conn', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) res1 = tools.error_result(e) return res1
def save_staff_scene(request): """ 保存用户自定义设置 ---- 需要更改 :param request: :return: """ scene_res = get_scene_by_staff_position_id(request) user_info = get_user(request) bk_username = user_info.get('data').get('bk_username') # 当前用户用户名 staff_scene_default_time = 6000 # 用户自定义设置默认事件 list = [] for i in scene_res.get("results"): print i['scene_id'] print bk_username data = { "staff_scene_id": i['scene_id'], "staff_scene_order_id": i['scene_order_id'], "bk_username": bk_username, "staff_scene_default_time": staff_scene_default_time, } res = StaffScene.objects.save_staff_scene(data) list.append(res) result = tools.success_result(list) return result
def testConn(request): """ 测试 :param request: :return: """ res = json.loads(request.body) ip = str(res['ip']) port = res['port'] username = res['username'] password = res['password'] databasename = res['databasename'] # 测试连接密码不需要解密,传的明码 # password = base64.b64decode(password) try: if res['type'] == 'MySQL': db = MySQLdb.connect(host=ip, user=username, passwd=password, db=databasename, port=int(port)) elif res['type'] == 'Oracle': sql = r'%s/%s@%s/%s' % (username, password, ip, databasename) # db = cx_Oracle.connect(sql) db = None else: # SqlServer数据库链接包暂时有部署问题,暂时取消该功能 # db = pymssql.connect(host=ip + r':' + port, user=username, password=password, database=databasename) return tools.error_result("暂不支持SqlServer类型数据库!") cursor = db.cursor() if cursor != '': cursor.close() db.close() return tools.success_result('0') except Exception as e: return tools.error_result(e)
def show_host(request): """ 取出所有主机信息 :param request: :return: """ limit = 7 # 暂时为7 bk_biz_id = 2 start_page = tools.page_paging(request, limit) # 起始页码 try: display_list = [] # 定义一个空列表 param = { # 以下定义search_host--查询主机接口参数 "ip": { "data": [], "exact": 1, "flag": "bk_host_innerip|bk_host_outerip" }, "condition": [ { "bk_obj_id": "biz", "fields": [], "condition": [ { "field": "bk_biz_id", "operator": "$eq", "value": bk_biz_id } ] }, ], "page": { "start": start_page, "limit": limit, "sort": "bk_host_id" }, } param2 = { # 定义get_agent_status--agent状态接口参数 "bk_supplier_id": 0, "hosts": [{ "ip": 0, "bk_cloud_id": "0" }] } client = tools.interface_param(request) res = client.cc.search_host(param) # 调用search_host接口 # 判断调用search_host接口是否成功,成功则取数据,失败则返回错误信息 if res.get('result'): bk_host_list = res.get('data').get('info') else: bk_host_list = [] logger.error(u"请求主机列表失败:%s" % res.get('message')) for i in bk_host_list: # 循环遍历接口返回的参数,取出数据保存 dic = { 'bk_os_name': i['host']['bk_os_name'], 'bk_host_name': i['host']['bk_host_name'], 'bk_host_innerip': i['host']['bk_host_innerip'], 'bk_inst_name': i['host']['bk_cloud_id'][0]['bk_inst_name'], } param2['hosts'][0]['ip'] = dic['bk_host_innerip'] res2 = client.gse.get_agent_status(param2) # 调用get_agent_status接口 bk_agent_info = res2['data'] if bk_agent_info['0:' + dic['bk_host_innerip']]['bk_agent_alive'] == 1: dic['bk_agent_alive'] = u"Agent已安装" else: dic['bk_agent_alive'] = u"Agent未安装" display_list.append(dic) # 把取出来的数据保存到display_list里面 print display_list result = tools.success_result(display_list) except Exception, e: result = tools.error_result(e)
def get_staff_scene(request): """ 获取场景 ---- 完成-----多个岗位对应多个场景 :param request: :return: """ try: staff_info = get_staff_info(request) now_time = datetime.datetime.now().strftime("%H:%M:%S") # 当前时间字符串型 bk_username = staff_info.get('result').get('bk_username') # 当前用户用户名 res = PositionScene.objects.get_position_scene( staff_info.get("result").get("staff_position_id")) temp_list = [] # 存储scene_id for i in res.get("result"): temp_list.append(i['scene_id']) pass print(u'通过岗位获取的所有岗位有的场景ID') print temp_list # 根据岗位获取对应场景信息 scene_res = Scene.objects.filter( scene_id__in=temp_list, scene_start_time__lt=now_time, scene_stop_time__gt=now_time).order_by('scene_order_id').values() scene_list = [] # 所有符合要求的场景id for i in scene_res: # 遍历结果集 scene_id = i['scene_id'] scene_list.append(scene_id) print(u"符合要求的场景ID") print scene_list # 根据用户和场景ID遍历个人设置场景信息(根据用户设置排序) staff_scene_res = StaffScene.objects.filter( bk_username=bk_username, staff_scene_id__in=scene_list).order_by( 'staff_scene_order_id').values() staff_scene_list = [] # 用户设置了的并符合要求的场景ID staff_scene_default_time_list = [] for i in staff_scene_res: staff_scene_id = i['staff_scene_id'] staff_scene_list.append(staff_scene_id) staff_scene_default_time = i['staff_scene_default_time'] staff_scene_default_time_list.append(staff_scene_default_time) print(u'用户设置了的场景ID') print staff_scene_list print(u'用户自定义设置的时间') print staff_scene_default_time_list difference_list = list( set(scene_list).difference( set(staff_scene_list))) # 用户没有设置的场景ID,将默认排在最后 print(u'用户没有设置的场景ID') print difference_list temp = StaffScene.objects.filter( bk_username=bk_username, staff_scene_id__in=scene_list).values() temp_list = [] for i in temp: temp_list.append(i) result_list = [] # 存储最后结果集 staff_scene_default_time_list_length = 0 for j in staff_scene_list: # 将符合要求的并且用户设置了顺序的依次添加搞结果集 result = Scene.objects.filter( scene_id=j, scene_start_time__lt=now_time, scene_stop_time__gt=now_time).values() for i in result: i['scene_start_time'] = i['scene_start_time'].strftime( "%H:%M:%S") i['scene_stop_time'] = i['scene_stop_time'].strftime( "%H:%M:%S") i['scene_default_time'] = staff_scene_default_time_list[ staff_scene_default_time_list_length] staff_scene_default_time_list_length = staff_scene_default_time_list_length + 1 result_list.append(i) # 取出符合要求的并且用户没有自主设置的场景添 temp_staff_scene = Scene.objects.filter( scene_start_time__lt=now_time, scene_stop_time__gt=now_time, scene_id__in=difference_list).order_by('scene_order_id').values() # 将符合要求的并且用户没有自主设置的场景添加到结果集 for i in temp_staff_scene: i['scene_start_time'] = i['scene_start_time'].strftime("%H:%M:%S") i['scene_stop_time'] = i['scene_stop_time'].strftime("%H:%M:%S") result_list.append(i) result = tools.success_result(result_list) except Exception, e: result = tools.error_result(e)
def select_All(request): result_list = [] # 存储最后结果,name:场景名,color:颜色 user = user_info.objects.get(user_name=request.user) result = get_every_scene_health_degree(user.id) if result.__len__() == 0: return tools.success_result(result_list) for scene_obj in result: my_dict = {} cur_time = str(scene_obj[2]) start_time = str(scene_obj[3]) end_time = str(scene_obj[4]) # 正在执行的场景 if cur_time >= start_time and cur_time <= end_time: my_dict["name"] = str(scene_obj[1]) + "(分值:" + str( scene_obj[7]) + ")" my_dict["id"] = str(scene_obj[0]) result_li = select_alert(str(scene_obj[0])) content = '' j = 0 for i in result_li: content += "告警内容:" + i.get("name") + " 告警状态:" + i.get( "status_name") + "<br/>" my_dict["content"] = content print content # 第7个值为场景的得分值 if float(scene_obj[7]) >= 90 and float(scene_obj[7]) < 100: my_dict["color"] = "yellow" my_dict["sort"] = "2" if float(scene_obj[7]) < 90: my_dict["color"] = "red" my_dict["sort"] = "1" if float(scene_obj[7]) == 100: my_dict["color"] = "green" my_dict["sort"] = "3" # 未开始的场景 if cur_time < start_time: my_dict["name"] = str(scene_obj[1]) + "(未执行)" my_dict["color"] = "gray" my_dict["sort"] = "4" my_dict["id"] = str(scene_obj[0]) result_li = select_alert(str(scene_obj[0])) content = '' j = 0 for i in result_li: content += "告警内容:" + i.get("name") + " 告警状态:" + i.get( "status_name") + "<br/>" my_dict["content"] = content print content # 当前时间大于场景结束时间,也算未执行的场景 if cur_time > end_time: my_dict["name"] = str(scene_obj[1]) + "(未执行)" my_dict["color"] = "gray" my_dict["sort"] = "4" my_dict["id"] = str(scene_obj[0]) result_li = select_alert(str(scene_obj[0])) content = '' j = 0 for i in result_li: content += "告警内容:" + i.get("name") + " 告警状态:" + i.get( "status_name") + "<br/>" my_dict["content"] = content print content result_list.append(my_dict) result_scene = tools.success_result(result_list) return result_scene
def gather_base_test(cls, interface_type, measures, measures_name, gather_rule, show_rule_type, interface_param): """ 基本单元采集测试 :param interface_type: 接口类型 log为日志,measures为指标类型 :param measures: 指标集 :param measures_name: 指标名称 :param gather_rule: 解析规则 :param show_rule_type: 显示类型 0/百分比, 1/颜色, 2/不变化 增加显示类型时请增加注释 :param interface_param: url参数 :return: """ # 日志数据模拟 if interface_type == 'log': api_address = MEASURES_QUERY_API # 模拟数据 temp_list = [{"zy-shangpin-initial_system-init": "1"}] # 加入颜色展示规则 for temp in temp_list: temp[measures + '_' + measures_name] = Gather.color_manage( temp[measures + '_' + measures_name], gather_rule) # 返回统一出来的结果 return success_result(temp_list) else: api_address = MEASURES_QUERY_API # 获取当前系统时间前10秒(具体时长数据库配置,默认为1000秒)的时间戳 result = get_previous_second_ts() curr_ts = str(list(result[0])[0]) query_form = api_address + '?' + 'start=' + curr_ts + '&m=sum:sum:' + measures + '_' + measures_name + interface_param timeout_result = get_icube_timeout() icube_timeout = int(list(timeout_result[0])[0]) # 设置调用服务的超时时长在数据库中配置,超过配置的时长就抛异常 request_result = requests.get(url=query_form, timeout=icube_timeout) request_code = request_result.status_code print request_result if request_code == 200: temp_list = Gather.change_json(measures, request_result, measures_name) # 百分比 if show_rule_type == '0': # # API请求结果 # result_json = json.loads(request_result.content) # # 此处解析结果 # result_list = [] # for i in result_json: # time_list = [] # for key, value in i['dps'].items(): # time_list.append(key) # max_time = max(time_list) # metric = i['dps'][max_time] # max_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(max_time))) # map = {} # map[measures + '_' + measures_name] = metric # map['time'] = max_time # appsystem = i['tags']['appsystem'] # ip = i['tags']['ip'] # map['system_name'] = appsystem # map['ip'] = ip # result_list.append(map) # 此处规则转换 for i in temp_list: i[measures + '_' + measures_name] = Gather.percent_manage( gather_rule, i[measures + '_' + measures_name]) # i['metric_max'] = Gather.percent_manage(gather_rule, i['metric_max']) # i['metric_avg'] = Gather.percent_manage(gather_rule, i['metric_avg']) # print result_list return success_result(temp_list) # 显示颜色 elif show_rule_type == '1': # 转换颜色规则 # color_code_map = {} # rule_list = gather_rule.split('@') # for i in rule_list: # if i is not None: # color_rgb = i.split('==')[0] # try: # color_code = i.split('==')[1] # except Exception as e: # # 不存在默认将 # color_code = 'error' # color_code_map[color_code] = color_rgb # 模拟数据 # temp_list = [{"system_name": "jzjy", "ip": "192.168.1.153", "cpu_cpu_used_pct": 2, "time": "2019-03-22 19:42:12"}, {"system_name": "jzjy", "ip": "192.168.1.157", "cpu_cpu_used_pct": 0, "time": "2019-03-22 19:37:23"}, {"system_name": "jzjy", "ip": "192.168.1.165", "cpu_cpu_used_pct": 0, "time": "2019-03-22 19:41:56"}] # result_list = Gather.color_manage(color_code_map, temp_list, measures, measures_name) try: for i in temp_list: i[measures + '_' + measures_name] = Gather.color_manage( i[measures + '_' + measures_name], gather_rule) # i['metric_max'] = Gather.color_manage(i['metric_max'], gather_rule) # i['metric_avg'] = Gather.color_manage(i['metric_avg'], gather_rule) return success_result(temp_list) except Exception as e: print e return error_result(u'异常' + str(e)) # 其它展示 elif show_rule_type == '2': try: for i in temp_list: i[measures + '_' + measures_name] = Gather.other_manage( i[measures + '_' + measures_name], gather_rule) # i['metric_max'] = Gather.other_manage(i['metric_max'], gather_rule) # i['metric_avg'] = Gather.other_manage(i['metric_avg'], gather_rule) print temp_list return success_result(temp_list) except Exception as e: print e return error_result(u'异常' + str(e)) elif request_code == '500': return error_result(u'接口请求错误') elif request_code == '404': return error_result(u'接口找不到了') else: return error_result(request_code.__str__() + u'系统错误')