예제 #1
0
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
예제 #2
0
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 ""
예제 #3
0
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)
예제 #4
0
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
예제 #5
0
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))
예제 #6
0
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)
예제 #7
0
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
예제 #8
0
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 = "同步失败"
예제 #9
0
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)
예제 #10
0
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')
예제 #11
0
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)
예제 #12
0
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)
예제 #13
0
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)
예제 #14
0
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)
예제 #15
0
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
예제 #16
0
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)
예제 #17
0
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)
예제 #18
0
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))
예제 #19
0
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))
예제 #20
0
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
예제 #21
0
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)
예제 #22
0
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
예제 #23
0
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}
예제 #24
0
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}
예제 #25
0
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
예제 #26
0
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
예제 #27
0
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