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 delete_scene(request): """ :param request: :return: """ try: Scene.objects.filter(id=request.body).delete() Scene_monitor.objects.filter(scene_id=request.body).delete() info = make_log_info(u'删除场景', u'业务日志', u'position_scene', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) position_scene.objects.filter(scene=request.body).delete() info = make_log_info(u'删除场景编排数据', u'业务日志', u'position_scene', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) except Exception as e: info = make_log_info(u'删除场景', u'业务日志', u'position_scene', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) info = make_log_info(u'删除场景', u'业务日志', u'position_scene', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return ""
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 delete_unit(request): """ 删除监控项 :param request: :return:result """ try: res = json.loads(request.body) # 根据前台传的来的id进行删除 unit_id = res['unit_id'] monitor_name = res['monitor_name'] Monitor.objects.filter(id=unit_id).delete() """ # 删除监控项需要删除该监控项的celery调度任务和子任务 # 否则子任务会一直执行到监控项的结束时间,占用系统资源 # 而且会出现监控项都已经删除了监控项的数据采集却还在继续 # 的灵异事件 """ co.delete_task(str(unit_id)) co.delete_task(str(unit_id) + "task") result = tools.success_result(None) # 修改获取用户的方式,直接从request中获取 info = make_log_info(u'删除监控项', u'业务日志', u'Monitor', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) except Exception as e: info = make_log_info(u'删除监控项', u'业务日志', u'Monitor', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) result = tools.error_result(e) add_log(info) return result
def add_person(request): """ 添加岗位人员 :param request: :return: """ # 外键关联,user_pos不能为空,把岗位id=1 的设为无岗位人员 try: res = json.loads(request.body) id = res['id'] # 穿梭框左边的值 person_no_positions = dict_get(res['data2'], u'pinyin', None) # 穿梭框右边的值 person_positions = res['value2'] # 获取无岗位id noposition_id = get_noposition_id() # 一个用来循环,一个用来存数据 person_no_positions2 = person_no_positions # 增加岗位人员 for pos_username in person_positions: user_info.objects.filter(user_name=pos_username).update(user_pos=id) # 把已经赋予岗位的人员从左边移出 for no_pos_username in person_no_positions: if pos_username == no_pos_username: person_no_positions2.remove(pos_username) # 移出岗位人员 for no_pos_username2 in person_no_positions2: user_info.objects.filter(user_name=no_pos_username2).update(user_pos=noposition_id) info = make_log_info(u'岗位人员增加或移除', u'业务日志', u'pos_info', sys._getframe().f_code.co_name, request.user.username, '成功', '无') except Exception, e: res = tools.error_result(e) info = make_log_info(u'岗位人员增加或移除', u'业务日志', u'pos_info', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e))
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 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 synchronize(request): """ 用户同步 :param request: :return: """ try: res = get_user(request) reslist = res['data'] # 获取无岗位id # noposition_id = get_noposition_id() # 所有用户 users = user_info.objects.all() # 判断本地用户与蓝鲸用户,以蓝鲸的为准,多了删除,少了增加,变了更新 # 先蓝鲸用户匹配本地用户,少了增加,变了更新 for data in reslist: flag1 = 0 for user in users: if data['bk_username'] == user.user_name: user_info.objects.filter(user_name=user.user_name).update(mobile_no=data['phone'], email=data['email'],user_type_id=data['bk_role']) flag1 = 1 break if flag1 == 0: if data['bk_role'] == 1: user_pos = 1 else: user_pos = 2 user_info.objects.create(user_name=data['bk_username'], user_type_id=data['bk_role'], mobile_no=data['phone'], email=data['email'], user_pos_id=user_pos) # 后本地用户匹配蓝鲸用户,多了删除 #for user in users: #flag2 = 0 #for data in reslist: # 相同表示存在,就不管 # if user.user_name == data['bk_username']: # flag2 = 1 # break # 表示此用户表中的用户,已经在蓝鲸上删除,在用户表中也删除 #if flag2 == 0: # user_info.objects.filter(user_name=user.user_name).delete() info = make_log_info(u'同步蓝鲸用户', u'业务日志', u'user_info', sys._getframe().f_code.co_name, request.user.username, '成功', '无') mess = "同步成功" except Exception, e: r1 = tools.error_result(e) info = make_log_info(u'同步蓝鲸用户', u'业务日志', u'user_info', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) mess = "同步失败"
def add_rule(request): """ :param request: :return: """ rule_data = json.loads(request.body) try: status = function.add_rule(rule_data) info = make_log_info(u'增加或更新告警规则', u'业务日志', u'TbAlertRule', sys._getframe().f_code.co_name, request.user.username, '成功', '无') except Exception as e: info = make_log_info(u'增加或更新告警规则', u'业务日志', u'TbAlertRule', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return render_json(status)
def addone(request): """ :param request: :return: """ try: function.addone(request) info = make_log_info(u'取消交易日', u'业务日志', u'Holiday', sys._getframe().f_code.co_name, request.user.username, '成功', '无') except Exception as e: info = make_log_info(u'取消交易日', u'业务日志', u'Holiday', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return render_json('ok')
def force_del_rule(request): """ :param request: :return: """ try: print request.body rule_id = json.loads(request.body) status = function.force_del_rule(rule_id) info = make_log_info(u'强制删除告警规则', u'业务日志', u'TbAlertRule', sys._getframe().f_code.co_name, request.user.username, '成功', '无') except Exception as e: info = make_log_info(u'强制删除告警规则', u'业务日志', u'TbAlertRule', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return render_json(status)
def truncate_node(request): """ :param request: :return: """ try: status = function.truncate_node() info = make_log_info(u'删除所有自定义流程', u'业务日志', u'TbCustProcess', sys._getframe().f_code.co_name, request.user.username, '成功', '无') except Exception as e: info = make_log_info(u'删除所有自定义流程', u'业务日志', u'TbCustProcess', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return render_json(status)
def savemnus(request): """ 更新角色菜单权限 :param request: :return: """ ids = json.loads(request.body) # 保留角色菜单中间表 rm_all = rm.objects.all() r_all = rm_all x = 0 z = 0 parent_id = [] son_id = [] # 获取拿到数据第一个值,如果为数字型数组,则权限未发生变动 if isinstance(ids[0], int): return 1 # 如果获取的是对象数组,则变动了 else: # 保存角色菜单前先删除中间表,中间表不为空则删除 if rm_all is not None: try: with transaction.atomic(): de = rm.objects.all().delete() for id in ids: if ('children' not in id) and ('label' in id): # 逐个树id还原成菜单id(之前经过处理 树id = (角色id+1)*100+菜单Id) x = id['id'] // 1000 z = id['id'] % 1000 x = int(x) res1 = rm.objects.create(roleid=x - 1, muenuid=z) else: pass info = make_log_info(u'逐条增加菜单与角色中间表', u'业务日志', u'rm', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) except Exception as e: # for i in r_all: # rm.objects.create(roleid=model_to_dict(i)['roleid'], muenuid=model_to_dict(i)['muenuid']) info = make_log_info(u'逐条增加菜单与角色中间表', u'业务日志', u'rm', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return tools.error_result(e)
def del_node(request): """ :param request: :return: """ try: node_id = json.loads(request.body) status = function.del_node(node_id) info = make_log_info(u'删除自定义流程', u'业务日志', u'TbCustProcess', sys._getframe().f_code.co_name, request.user.username, '成功', '无') except Exception as e: info = make_log_info(u'删除自定义流程', u'业务日志', u'TbCustProcess', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return render_json(status)
def delete_pos(request): """ 删除岗位 :param request: :return: """ try: res = json.loads(request.body) id = res['id'] res1 = pos_info.objects.get(id=id).delete() info = make_log_info(u'删除岗位', u'业务日志', u'pos_info', sys._getframe().f_code.co_name, request.user.username, '成功', '无') except Exception as e: res1 = tools.error_result(e) info = make_log_info(u'删除岗位', u'业务日志', u'pos_info', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return res1
def delall(request, area): """ :param request: :param area: :return: """ try: flag = function.delall(area) info = make_log_info(u'删除全部交易日', u'业务日志', u'Holiday', sys._getframe().f_code.co_name, request.user.username, '成功', '无') except Exception as e: info = make_log_info(u'删除全部交易日', u'业务日志', u'Holiday', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return render_json(flag)
def delete_scene_by_uuid(request): """ 删除场景分组 :param request: :return: """ try: print request.body print request request_body = json.loads(request.body) uuid = request_body['uuid'] res = function.delete_scene_by_uuid(uuid) info = make_log_info(u'删除场景分组', u'业务日志', u'SceneType', sys._getframe().f_code.co_name, get_active_user(request)['data']['bk_username'], '成功', '无') except Exception as e: info = make_log_info(u'删除场景分组', u'业务日志', u'SceneType', sys._getframe().f_code.co_name, get_active_user(request)['data']['bk_username'], '失败', repr(e)) add_log(info) return render_json(res)
def add_pos(request): """ 增加岗位 :param request: :return: """ try: re = '' res = json.loads(request.body) # 获取当前用户 nowPerson = request.user.username res['creator'] = nowPerson pos_info.objects.create(**res) info = make_log_info(u'增加岗位', u'业务日志', u'pos_info', sys._getframe().f_code.co_name, request.user.username, '成功', '无') except Exception, e: re = tools.error_result(e) info = make_log_info(u'增加岗位', u'业务日志', u'pos_info', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e))
def edit_pos(request): """ 编辑岗位 :param request: :return: """ try: res = json.loads(request.body) id = res['id'] posname = res['pos_name'] # 获取系统时间 nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 获取当前用户 nowPerson = request.user.username r1 = pos_info.objects.filter(id=id).update(pos_name=posname, edit_time=nowTime, editor=nowPerson) info = make_log_info(u'编辑岗位', u'业务日志', u'pos_info', sys._getframe().f_code.co_name, request.user.username, '成功', '无') except Exception, e: r1 = tools.error_result(e) info = make_log_info(u'编辑岗位', u'业务日志', u'pos_info', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e))
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 add_scene_type(request): """ 新增场景类型 :param request: :return: """ try: request_body = json.loads(request.body) start_time = datetime.datetime.strptime(request_body['start_time'], "%H:%M:%S") stop_time = datetime.datetime.strptime(request_body['stop_time'], "%H:%M:%S") scene_type_name = request_body['name'] client = tools.interface_param(request) user = client.bk_login.get_user({}) res = function.add_scene_type(user['data']['bk_username'], scene_type_name, start_time, stop_time) info = make_log_info(u'增加场景类型', u'业务日志', u'SceneType', sys._getframe().f_code.co_name, get_active_user(request)['data']['bk_username'], '成功', '无') except Exception as e: info = make_log_info(u'增加场景类型', u'业务日志', u'SceneType', sys._getframe().f_code.co_name, get_active_user(request)['data']['bk_username'], '失败', repr(e)) res = {} # add_log(info) return render_json(res)
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 editSence(request): """ :param request: :return: """ username = request.user.username try: with transaction.atomic(): model = json.loads(request.body) # jlq-2019-05-29-add-修改场景名称不重复 # 首先查询场景名称是否存在,存在就提示该场景已经存在 # Q(monitor_name=name)& ~Q(id=id) scene_result = Scene.objects.filter( Q(scene_name=model['data']['scene_name']) & ~Q(id=model['data']['id'])) # 重复的场景,返回场景名称 if scene_result.__len__() > 0: return {'scene_name': model['data']['scene_name']} starttime = model['data']["scene_startTime"] endtime = model['data']["scene_endTime"] temp_date = datetime(2019, 1, 1, int(starttime.split(':')[0]), int(starttime.split(':')[-1]), 0) timezone = Area.objects.get(id=model['data']['area']).timezone starthour, startmin = tran_time_china(temp_date, timezone=timezone) starttime = starthour + ":" + startmin temp_date = datetime(2019, 1, 1, int(endtime.split(':')[0]), int(endtime.split(':')[-1]), 0) endhour, endmin = tran_time_china(temp_date, timezone=timezone) endtime = endhour + ":" + endmin senceModel2 = { "scene_name": model['data']['scene_name'], "scene_startTime": starttime, "scene_endTime": endtime, "scene_editor": username, "scene_area": model['data']['area'] } Scene.objects.filter(id=model['data']['id']).update(**senceModel2) info = make_log_info(u'编辑场景', u'业务日志', u'Scene', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) # 先删除场景与监控项的对应关系,这里需要事物控制 Scene_monitor.objects.filter(scene_id=model['data']['id']).delete() for i in model['monitor_data']: monitor_data = { 'scene_id': model['data']['id'], 'item_id': int(i['item_id']), 'x': int(i['x']), 'y': int(i['y']), 'scale': i['scale'], 'score': int(i['score']), 'order': int(i['order']), 'next_item': 0 } Scene_monitor.objects.create(**monitor_data) info = make_log_info(u'场景编排', u'业务日志', u'Scene', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) scene = Scene.objects.get(id=model['data']['id']) scene.save() # 根据岗位名称获取岗位信息 job = pos_info.objects.filter(pos_name=model['data']["pos_name"]) for j in job: senceModel3 = { "scene_id": model['data']['id'], "position_id": j.id } # 更新岗位信息 position_scene.objects.filter( scene=senceModel3['scene_id']).update(**senceModel3) info2 = make_log_info(u'编辑场景', u'业务日志', u'position_scene', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info2) return {"result": "success"} except Exception as e: info = make_log_info(u'编辑场景', u'业务日志', u'Scene', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) info2 = make_log_info(u'场景编排', u'业务日志', u'Monitor', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info2) return {"result": "fail"} return {"result": None}
def addSence(request): """ :param request: :return: """ id = None username = request.user.username try: res = request.body senceModel = json.loads(res) # 首先查询场景名称是否存在,存在就提示该场景已经存在 scene_result = Scene.objects.filter( scene_name=senceModel['data']['scene_name']) # 重复的场景,返回场景名称 if scene_result.__len__() > 0: return {'scene_name': senceModel['data']['scene_name']} # print senceModel starttime = senceModel['data']["scene_startTime"] endtime = senceModel['data']["scene_endTime"] temp_date = datetime(2019, 1, 1, int(starttime.split(':')[0]), int(starttime.split(':')[-1]), 0) timezone = Area.objects.get(id=senceModel['data']['area']).timezone starthour, startmin = tran_time_china(temp_date, timezone=timezone) starttime = starthour + ":" + startmin temp_date = datetime(2019, 1, 1, int(endtime.split(':')[0]), int(endtime.split(':')[-1]), 0) endhour, endmin = tran_time_china(temp_date, timezone=timezone) endtime = endhour + ":" + endmin senceModel2 = { "scene_name": senceModel['data']['scene_name'], "scene_startTime": starttime, "scene_endTime": endtime, "scene_creator": username, "scene_area": senceModel['data']['area'] } id = Scene.objects.create(**senceModel2) senceModel3 = { "scene": id, "position_id": senceModel['data']["pos_name"] } position_scene.objects.create(**senceModel3) # 新增场景再添加场景与监控项的对应关系,编辑时再添加这个关系 """ for i in senceModel['monitor_data']: monitor_data = { 'scene_id': id.id, 'item_id': int(i['item_id']), 'x': int(i['x']), 'y': int(i['y']), 'scale': i['scale'], 'score': int(i['score']), 'order': int(i['order']), 'next_item':int(i['next_item']) } Scene_monitor.objects.create(**monitor_data) """ info = make_log_info(u'增加场景', u'业务日志', u'position_scene', sys._getframe().f_code.co_name, request.user.username, '成功', '无') except Exception as e: info = make_log_info(u'增加场景', u'业务日志', u'position_scene', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) return {'scene_id': id.id}
def add_unit(request): """ 新增监控项(1:基本监控项,2:图表监控项,3:作业监控兴,4:流程监控项) :param request:页面请求对象 :return:result """ try: # 添加事物控制防止异常时事物不回滚,这里事物必须放在try...catch里面 # 否则事物被try...catch捕获了就不起作用了 with transaction.atomic(): # 修改获取用户的方式,直接从request中获取 username = request.user.username res = json.loads(request.body) add_dic = res['data'] add_flow_dic = res['flow'] monitor_type = res['monitor_type'] # 根据前台来的单元类型进行分类 if res['monitor_type'] == 'first': monitor_type = 1 if res['monitor_type'] == 'second': monitor_type = 2 if res['monitor_type'] == 'third': monitor_type = 3 # 作业监控项的把作业id和name分别存放 add_dic['jion_id'] = res['data']['gather_rule'][0]['id'] add_dic['gather_rule'] = res['data']['gather_rule'][0]['name'] if res['monitor_type'] == 'fourth': monitor_type = 4 add_dic['jion_id'] = res['flow']['jion_id'] add_dic['gather_params'] = add_dic['node_name'] add_dic.pop('node_name') add_dic['gather_rule'] = res['data']['gather_rule'][0]['name'] add_dic['params'] = res['flow']['constants'] add_flow_dic['monitor_area']=res['monitor_area'] start_list = [] for i in res['flow']['node_times']: start_list.append(i['endtime']) start_list.append(i['starttime']) add_dic['start_time'] = min(start_list) add_dic['end_time'] = max(start_list) add_flow_dic['start_time']=add_dic['start_time'] add_flow_dic['end_time'] =add_dic['end_time'] # 修改后的基本监控项处理 if res['monitor_type'] == 'five': monitor_type = 5 add_dic['monitor_name'] = res['monitor_name'] # 新增一条数据时 开关状态默认为0 关闭 add_dic['status'] = 0 add_dic['monitor_type'] = monitor_type add_dic['creator'] = username add_dic['editor'] = username add_dic['monitor_area'] = res['monitor_area'] last_node = Monitor.objects.create(**add_dic) # 添加定时任务监控要求本地安装任务调度软件rabitmq # 正式环境服务器一般带有这个调度软件,如果没有就要安装 if res['monitor_type'] == 'fourth': function.add_unit_task(add_dicx=add_flow_dic) else: function.add_unit_task(add_dicx=add_dic) # 初始创建的监控项celery任务默认为挂起 co.disable_task(str(last_node.id)) result = tools.success_result(None) result['item_id'] = last_node.id # 修改获取用户的方式,直接从request中获取 info = make_log_info(u'增加监控项', u'业务日志', u'Monitor', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) except Exception as e: info = make_log_info(u'增加监控项', u'业务日志', u'Monitor', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) result = tools.error_result(e) add_log(info) return result
def edit_unit(request): """ 修改监控项(1:基本监控项,2:图表监控项,3:作业监控兴,4:流程监控项) :param request: 页面请求对象 :return: result """ # try: # 添加事物控制防止异常时事物不回滚,这里事物必须放在try...catch里面 # 否则事物被try...catch捕获了就不起作用了 with transaction.atomic(): res = json.loads(request.body) id = res['unit_id'] # 修改获取用户的方式,直接从request中获取 username = request.user.username # 把前台来的监控项数据一次性转为字典 add_dic = res['data'] if res['monitor_type'] == 'first': monitor_type = 1 if res['monitor_type'] == 'second': monitor_type = 2 if res['monitor_type'] == 'third': monitor_type = 3 # id和name要拆分 add_dic['jion_id'] = res['data']['gather_rule'][0]['id'] add_dic['gather_rule'] = res['data']['gather_rule'][0]['name'] if res['monitor_type'] == 'fourth': monitor_type = 4 # 前台来的id和name要拆分 add_dic['jion_id'] = res['flow']['jion_id'] add_dic['gather_params'] = add_dic['node_name'] add_dic['gather_rule'] = res['data']['gather_rule'][0]['name'] node_times = res['flow']['node_times'] constants = res['flow']['constants'] add_dic.pop('node_name') start_list = [] for data in res['flow']['node_times']: start_list.append(data['endtime']) start_list.append(data['starttime']) add_dic['start_time'] = min(start_list) add_dic['end_time'] = max(start_list) if res['monitor_type'] == 'five': monitor_type = 5 add_dic['monitor_name'] = res['monitor_name'] # 当前用户为编辑人 add_dic['editor'] = username add_dic['monitor_area'] = res['monitor_area'] add_dic['monitor_type']=monitor_type Monitor.objects.filter(id=id).update(**add_dic) if res['monitor_type'] == 'fourth': add_dic['node_times'] = node_times add_dic['constants'] = constants add_dic['monitor_type'] = monitor_type """ # 添加定时任务监控要求本地安装任务调度软件rabitmq # 正式环境与测试环境服务器一般带有这个调度软件(如果没有就要安装) # 先清除celery任务与子任务 # 这里需要注意,只有先清除任务再创建一个新的任务celery调度才能生效 # 直接修改原有任务,celery调度不能生效,多次验证得出的结论 """ co.delete_task(str(id)) co.delete_task(str(id)+"task") # 然后再创建新的celery任务 function.add_unit_task(add_dicx=add_dic) # 如果状态为0,则celery定时任务先挂起 if add_dic['status'] == '0': co.disable_task(str(id)) result = tools.success_result(None) # 修改获取用户的方式,直接从request中获取 info = make_log_info(u'编辑监控项', u'业务日志', u'Monitor', sys._getframe().f_code.co_name, request.user.username, '成功', '无') add_log(info) # except Exception as e: # print e # info = make_log_info(u'编辑监控项', u'业务日志', u'Monitor', sys._getframe().f_code.co_name, # request.user.username, '失败', repr(e)) # result = tools.error_result(e) # add_log(info) return result
def get_flowStatus(request): """ 获取流程节点状态并实时更新 :param request: :return: """ try: flow = Monitor.objects.filter(status=0, monitor_type=4) # 流程元类型 flow_list = [] dic = [] for x in flow: flow_list.append(model_to_dict(x)['jion_id']) for y in flow_list: flows = Flow.objects.filter(flow_id=y) for i in flows: cilent = tools.interface_param(request) res = cilent.sops.get_task_status({ "bk_app_code": APP_ID, "bk_app_secret": APP_TOKEN, "bk_biz_id": "2", "task_id": y, # task_id }) res1 = cilent.sops.create_task({ "bk_app_code": APP_ID, "bk_app_secret": APP_TOKEN, "bk_biz_id": "2", "template_id": "5", "name": "zz", "flow_type": "common" }) task_id = res1['data']['task_id'] time = datetime.datetime.now() # 创建节点 Flow.objects.create(instance_id=task_id, status=0, start_time=None, test_flag=1, flow_id=y) status = 0 if res['data']['state'] == 'RUNNING': status = 2 r = Flow.objects.filter(instance_id=task_id).update( status=status, start_time=time) elif res['data']['state'] == 'FAILED': status = 3 elif res['data']['state'] == 'SUSPENDED': status = 4 elif res['data']['state'] == 'REVOKED': status = 5 elif res['data']['state'] == 'FINISHED': status = 6 info = make_log_info(u'增加节点', u'业务日志', u'Flow', sys._getframe().f_code.co_name, request.user.username, '成功', '无') except Exception as e: info = make_log_info(u'增加节点', u'业务日志', u'Flow', sys._getframe().f_code.co_name, request.user.username, '失败', repr(e)) add_log(info) r = Flow.objects.filter(instance_id=task_id).update(status=status) return r