Ejemplo n.º 1
0
    def get_alarm_strategy(self, bk_biz_id: int, alarm_strategy_id: int):
        """
        查询监控策略详情
        :param bk_biz_id:int 是	业务ID
        :param alarm_strategy_id:int 是	策略ID
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "bk_biz_id": bk_biz_id,
            "alarm_strategy_id": alarm_strategy_id,
        }

        data = self.client.monitor.get_alarm_strategy(kwargs)
        result = {"result": False, "message": "nothing"}
        if data.get("result", False):
            result['result'] = data['result']
            result.update(data)
        else:
            logger.warning(
                f"{get_now_time()} 查询监控策略详情失败:{data['message']} 接口名称(get_alarm_strategy) 请求参数({kwargs}) 返回参数({data})"
            )
        result['message'] = data['message']

        return result
Ejemplo n.º 2
0
    def metadata_list_result_table(self,
                                   bk_biz_id: int,
                                   is_public_include=0,
                                   datasource_type=""):
        """
        查询监控结果表
        :param bk_biz_id:int false	获取指定业务下的结果表信息
        :param is_public_include:int false	是否包含全业务结果表, 0为不包含, 非0为包含全业务结果表
        :param datasource_type:string false	需要过滤的结果表类型, 如system
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "bk_biz_id": bk_biz_id,
            "is_public_include": is_public_include,
            "datasource_type": datasource_type
        }

        data = self.client.monitor.metadata_list_result_table(kwargs)
        result = {"result": False, "message": "nothing", "data": []}

        if data.get("result", False):
            result['result'] = data['result']
            result['data'] = data['data']
        else:
            logger.warning(
                f"{get_now_time()} 查询监控结果表失败:{data['message']} 接口名称(metadata_list_result_table) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 3
0
    def import_uptime_check_task(self, bk_biz_id: int, conf_list=[]):
        """
        导入拨测任务配置
        :param bk_biz_id:int 是	业务ID
        :param conf_list:list 是 节点列表
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "bk_biz_id": bk_biz_id,
            "conf_list": conf_list
        }

        data = self.client.monitor.import_uptime_check_task(kwargs)
        result = {
            "result": False,
            "message": "nothing",
            "failed": {},
            "success": {}
        }
        if data.get("result", False):
            result['result'] = data['result']
            result['failed'] = data['data']['failed']
            result['success'] = data['data']['success']
        else:
            logger.warning(
                f"{get_now_time()} 导入拨测任务配置失败:{data['message']} 接口名称(import_uptime_check_task) 请求参数({kwargs}) 返回参数({data})"
            )
        result['message'] = data['message']

        return result
Ejemplo n.º 4
0
    def import_alarm_strategy(self, bk_biz_id, conf_list=[]):
        """
        导入监控策略
        :param bk_biz_id:int	是	通用业务ID
        :param conf_list:list	是	导入配置
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "bk_biz_id": bk_biz_id,
            "conf_list": conf_list
        }

        data = self.client.monitor.import_alarm_strategy(kwargs)
        result = {
            "result": False,
            "message": "nothing",
            "fail": [],
            "success": []
        }
        if data.get("result", False):
            result['result'] = data['result']
            result['fail'] = data['data']['fail']
            result['success'] = data['data']['success']
        else:
            logger.warning(
                f"{get_now_time()} 导入监控策略失败:{data['message']} 接口名称(import_alarm_strategy) 请求参数({kwargs}) 返回参数({data})"
            )
        result['message'] = data['message']

        return result
Ejemplo n.º 5
0
    def import_script_collector(self, collector_conf_list=[]):
        """
        导入脚本采集器配置
        :param collector_conf_list:	list	是	脚本采集任务配置
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "collector_conf_list": collector_conf_list
        }

        data = self.client.monitor.import_script_collector(kwargs)
        result = {
            "result": False,
            "message": "nothing",
            "failed": {},
            "success": {}
        }
        if data.get("result", False):
            result['result'] = data['result']
            result['failed'] = data['data']['failed']
            result['success'] = data['data']['success']
        else:
            logger.warning(
                f"{get_now_time()} 导入脚本采集器配置失败:{data['message']} 接口名称(import_script_collector) 请求参数({kwargs}) 返回参数({data})"
            )
        result['message'] = data['message']

        return result
Ejemplo n.º 6
0
    def export_uptime_check_task(self,
                                 bk_biz_id: int,
                                 task_ids="",
                                 protocol="TCP",
                                 node_conf_needed=1):
        """
        拨测任务配置导出
        :param bk_biz_id:int	是	业务id
        :param task_ids:str	否	任务ID,多个任务以逗号分隔
        :param protocol:str	否	协议类型(TCP、UDP、HTTP)
        :param node_conf_needed:int	否	是否导出任务相关的节点配置信息,0或1,默认为1
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "bk_biz_id": bk_biz_id,
            "task_ids": task_ids,
            "protocol": protocol,
            "node_conf_needed": node_conf_needed,
        }
        data = self.client.monitor.export_uptime_check_task(kwargs)

        result = {"result": False, "message": "nothing", "data": []}
        if data.get("result", False):
            result['result'] = data['result']
            result['data'] = data['data']
        else:
            logger.warning(
                f"{get_now_time()} 拨测任务配置导出失败:{data['message']} 接口名称(export_uptime_check_task) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 7
0
    def send_weixin(self,
                    receiver="",
                    receiver__username="",
                    heading="",
                    message="",
                    remark=""):
        """
        @receiver:接收人 多个以逗号分隔,
        @receiver__username:接收人,以receiver优先,
        @heading:信息头部,
        @message:信息头部,
        @remark:内容,
        """
        kwargs = {
            "data": {
                "heading": heading,  # 通知头部文字
                "message": message,  # 通知文字
                "date": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
                "remark": remark  # 通知尾部文字
            }
        }
        if receiver:
            kwargs["receiver"] = receiver
        else:
            kwargs["receiver__username"] = receiver__username

        res = self.client.cmsi.send_weixin(kwargs)
        if not res.get("result", False):
            logger.warning(f"发送微信失败  接口名称(send_weixin) 请求参数({kwargs})")
        return {"message": res['message'], "result": res['result']}
Ejemplo n.º 8
0
    def metadata_get_data_id(self, bk_data_id: int, data_name=""):
        """
        获取监控数据源具体信息
        :param bk_data_id:int	否	数据源ID
        :param data_name:string	否	数据源名称
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "bk_data_id": bk_data_id,
            "data_name": data_name,
        }

        data = self.client.monitor.metadata_get_data_id(kwargs)
        result = {"result": False, "message": "nothing", "data": {}}
        if data.get("result", False):
            result['result'] = data['result']
            result['data'] = data['data']
        else:
            logger.warning(
                f"{get_now_time()} 获取监控数据源具体信息失败:{data['message']} 接口名称(metadata_get_data_id) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 9
0
    def deploy_script_collector(self, config_id: int, target_conf: list):
        """
        脚本采集器任务下发
        :param config_id:int	是	脚本采集配置id
        :param target_conf:	list	是	脚本采集实例配置
        :return:result
        """
        # target_conf=[
        #     {
        #         "ip": "x.x.x.x",
        #         "bk_cloud_id": 0,
        #         "params": {}
        #     }
        # ]
        kwargs = {
            "bk_token": self.bk_token,
            "target_conf": target_conf,
            "config_id": config_id,
        }
        data = self.client.monitor.deploy_script_collector(kwargs)
        result = {"result": False, "message": "nothing"}

        if data.get("result", False):
            result['result'] = data['result']
            result['failed'] = data['data']['failed']
            result['success '] = data['data']['success']

        else:
            logger.warning(
                f"{get_now_time()} 脚本采集器任务下发失败:{data['message']} 接口名称(deploy_script_collector) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 10
0
    def export_script_collector(self, bk_biz_id: int, ids=""):
        """
        脚本采集器配置导出
        :param bk_biz_id:int	是	业务id
        :param ids:string	否	多个id用英文逗号隔开
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "bk_biz_id": bk_biz_id,
            "ids": ids
        }
        data = self.client.monitor.export_script_collector(kwargs)
        result = {"result": False, "message": "nothing", "data": []}
        if data.get("result", False):
            result['result'] = data['result']
            result['data'] = data['data']
        else:
            logger.warning(
                f"{get_now_time()} 脚本采集器配置导出失败:{data['message']} 接口名称(export_script_collector) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 11
0
    def export_alarm_strategy(self, bk_biz_id: int, monitor_ids=""):
        """
        监控策略导出
        :param bk_biz_id:string	是	需要导出的监控项ID列表,多个id使用半角逗号连接
        :param monitor_ids:string	是	通用业务ID
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "bk_biz_id": bk_biz_id,
            "monitor_ids": monitor_ids
        }
        data = self.client.monitor.export_alarm_strategy(kwargs)
        save_json("export_alarm_strategy", data)
        result = {"result": False, "message": "nothing"}
        if data.get("result", False):
            result['result'] = data['result']
            result['fail'] = data['data']['fail']
            result['success'] = data['data']['success']
            result['data'] = data['data']['data']
        else:
            logger.warning(
                f"{get_now_time()} 监控策略导出失败:{data['message']} 接口名称(export_alarm_strategy) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 12
0
    def metadata_get_result_table(self, table_id: str):
        """
        获取监控结果表具体信息
        :param table_id:string	是	结果表ID
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "table_id": table_id,
        }

        data = self.client.monitor.metadata_get_result_table(kwargs)
        result = {"result": False, "message": "nothing", "data": {}}

        if data.get("result", False):
            result['result'] = data['result']
            result['data'] = data['data']
        else:
            logger.warning(
                f"{get_now_time()} 获取监控结果表具体信息失败:{data['message']} 接口名称(metadata_get_result_table) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 13
0
    def send_mail(self,
                  receiver="",
                  receiver__username="",
                  sender="",
                  title="",
                  content=""):
        """
        :receiver 接收人 多个以逗号分隔,
        :receiver__username 接收人,以receiver优先 ,
        :sender 发送人,
        :title 标题,
        :content 内容,
        """
        kwargs = {
            "sender": sender,
            "title": title,
            "content": content,
            "body_format": "Text"
        }
        if receiver:
            kwargs["receiver"] = receiver
        else:
            kwargs["receiver__username"] = receiver__username

        res = self.client.cmsi.send_mail(kwargs)
        if not res.get("result", False):
            logger.warning(f"发送邮件失败  接口名称(send_mail) 请求参数({kwargs})")
        return {"message": res['message'], "result": res['result']}
Ejemplo n.º 14
0
def get_user_detail(username):
    """
    param:username  用户名
    return:{"email","*****@*****.**","telephone":""}
    """
    client = get_client_by_user("admin")
    kwargs = {
        "id": f"{username}",
    }
    res = client.usermanage.retrieve_user(kwargs)

    result = {"result": res['result'], "message": res['message']}
    if res.get("result", False):
        result.update({
            'username': res['data']['username'],
            'email': res['data']['email'],
            'telephone': res['data']['telephone'],
            'qq': res['data']['qq'],
            'wx_openid': res['data']['wx_openid'],
            'wx_userid': res['data']['wx_userid']
        })
    else:
        logger.warning(f"获取用户信息失败  接口名称(retrieve_user) 请求参数({kwargs})")

    return result
Ejemplo n.º 15
0
    def get_ts_data(self, sql, bk_username, prefer_storage="influxdb"):
        """
        图表数据查询
        :param sql:string	是	SQL查询语句
        :param prefer_storage:string	否	查询引擎(默认influxdb)
        :param bk_username:string	否	白名单的app_code必填
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "sql": sql,
            "prefer_storage": prefer_storage,
            "bk_username": bk_username,
        }

        data = self.client.monitor.get_ts_data(kwargs)
        result = {"result": False, "message": "nothing"}
        if data.get("result", False):
            result['result'] = data['result']
            result['device'] = data['data']['device']
            result['list'] = data['data']['list']
            result['timetaken'] = data['data']['timetaken']
        else:
            logger.warning(
                f"{get_now_time()} 图表数据查询失败:{data['message']} 接口名称(get_ts_data) 请求参数({kwargs}) 返回参数({data})"
            )
        result['message'] = data['message']

        return result
Ejemplo n.º 16
0
    def alarm_instance(self, id: int):
        """
        返回指定告警
        :param id:	int	是	告警ID
        :return:result
        """
        kwargs = {"bk_token": self.bk_token, "id": id}
        data = self.client.monitor.alarm_instance(kwargs)

        result = {"result": False, "message": "nothing", "data": {}}

        if data.get("result", False):
            result['result'] = data['result']
            result['data']["bk_biz_id"] = data['data']['bk_biz_id']  # 业务ID
            result['data']["bk_cloud_id"] = data['data'][
                'bk_cloud_id']  # 云区域ID
            result['data']["bk_supplier_id"] = data['data'][
                'bk_supplier_id']  # 开发商ID
            result['data']["alarm_attr_id"] = data['data'][
                'alarm_attr_id']  # 监控ID
            result['data']["alarm_source_id"] = data['data'][
                'alarm_source_id']  # 告警源ID
            result['data']["id"] = data['data']['id']  # 告警ID
            result['data']["ip"] = data['data']['ip']  # 主机IP
            result['data']["raw"] = data['data']['raw']  # 告警内容
            result['data']["level"] = data['data']['level']  # 告警等级
            result['data']["status"] = data['data']['status']  # 状态
            result['data']["comment"] = data['data']['comment']  # 备注
            result['data']["alarm_type"] = data['data']['alarm_type']  # 告警类型
            result['data']["source_type"] = data['data'][
                'source_type']  # 告警源类型
            result['data']["origin_alarm"] = data['data'][
                'origin_alarm']  # 告警源数据
            result['data']["alarm_content"] = data['data'][
                'alarm_content']  # 告警内容
            result['data']["snap_alarm_source"] = data['data'][
                'snap_alarm_source']  # 告警源配置快照

            result['data']["begin_time"] = make_monitor_time(
                data['data']['begin_time'])  # 处理开始时间
            result['data']["end_time"] = make_monitor_time(
                data['data']['end_time'])  # 处理结束时间
            result['data']["source_time"] = make_monitor_time(
                data['data']['source_time'])  # 告警发生时间

            result['data']["source_id"] = data['data']['source_id']  # 告警特征ID
            result['data']["event_id"] = data['data']['event_id']  # 关联事件ID
            result['data']["priority"] = data['data']['priority']  # 告警优先级
            result['data']["user_status"] = data['data'][
                'user_status']  # 告警外部状态
        else:
            logger.warning(
                f"{get_now_time()} 返回指定告警失败:{data['message']} 接口名称(alarm_instance) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 17
0
    def metadata_create_result_table(self,
                                     bk_biz_id: int,
                                     bk_data_id: int,
                                     table_id,
                                     table_name_zh,
                                     is_custom_table=True,
                                     schema_type="fixed",
                                     operator="admin",
                                     default_storage="influxdb",
                                     default_storage_config={},
                                     field_list=[]):
        """
        创建监控结果表
        :param bk_biz_id:int	否	业务ID,默认是0全局
        :param bk_data_id:int	是	数据源ID
        :param table_id:string	是	结果表ID,格式应该为 库.表(例如,system.cpu)
        :param table_name_zh:string	是	结果表中文名
        :param is_custom_table:boolean	是	是否用户自定义结果表
        :param schema_type:string	是	结果表字段配置方案, free(无schema配置), fixed(固定schema)
        :param operator:string	是	操作者
        :param default_storage:string	是	默认存储类型,目前支持influxdb
        :param default_storage_config:object	否	默认的存储信息, 根据每种不同的存储会有不同的配置内容
        :param field_list:array	否	字段信息,数组元素为dict,例:field_name(字段名), field_type(字段类型), tag(字段类型, metirc -- 指标, dimension -- 维度)
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "bk_biz_id": bk_biz_id,
            "bk_data_id": bk_data_id,
            "table_id": table_id,
            "table_name_zh": table_name_zh,
            "is_custom_table": is_custom_table,
            "schema_type": schema_type,
            "operator": operator,
            "default_storage": default_storage,
            "default_storage_config": default_storage_config,
            "field_list": field_list
        }

        data = self.client.monitor.metadata_create_result_table(kwargs)
        result = {"result": False, "message": "nothing", "table_id": ""}

        if data.get("result", False):
            result['result'] = data['result']
            result['table_id'] = data['data']['table_id']

        else:
            logger.warning(
                f"{get_now_time()} 创建监控结果表失败:{data['message']} 接口名称(metadata_create_result_table) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 18
0
    def metadata_create_data_id(self,
                                data_name,
                                etl_config,
                                operator="admin",
                                mq_cluster=0,
                                data_description="",
                                is_custom_source=True):
        """
        创建监控数据源
        :param data_name:int 	string	是	数据源名称
        :param etl_config:string	是	清洗模板配置,prometheus exportor对应"prometheus"
        :param operator:string	是	操作者
        :param mq_cluster:int	否	数据源使用的消息集群
        :param data_description:string	否	数据源的具体描述
        :param is_custom_source:bool 否	是否用户自定义数据源,默认为是
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "data_name": data_name,
            "etl_config": etl_config,
            "operator": operator,
            "data_description": data_description,
            "is_custom_source": is_custom_source
        }
        if mq_cluster:
            kwargs['mq_cluster'] = mq_cluster

        data = self.client.monitor.metadata_create_data_id(kwargs)
        result = {"result": False, "message": "nothing", "bk_data_id": 0}

        if data.get("result", False):
            result['result'] = data['result']
            result['bk_data_id'] = data['data']['bk_data_id']

        else:
            logger.warning(
                f"{get_now_time()} 创建监控数据源失败:{data['message']} 接口名称(metadata_create_data_id) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 19
0
    def send_sms(self, receiver="", receiver__username="", content=""):
        """
        :receiver 接收人 多个以逗号分隔,
        :receiver__username 接收人,以receiver优先 ,
        :title 标题,
        :content 内容,
        """
        kwargs = {
            "content": content,
        }

        if receiver:
            kwargs["receiver"] = receiver
        else:
            kwargs["receiver__username"] = receiver__username

        res = self.client.cmsi.send_sms(kwargs)
        if not res.get("result", False):
            logger.warning(f"发送信息失败  接口名称(send_sms) 请求参数({kwargs})")
        return {"message": res['message'], "result": res['result']}
Ejemplo n.º 20
0
    def component_instance(self, id: int):
        """
        返回指定id的组件实例
        :param id:int 是 组件ID
        :return:result
        """
        kwargs = {"bk_token": self.bk_token, "id": id}
        data = self.client.monitor.component_instance(kwargs)
        result = {"result": False, "message": "nothing", "data": {}}

        if data.get("result", False):
            result['result'] = data['result']
            result['data'] = data['data']

        else:
            logger.warning(
                f"{get_now_time()} 返回指定组件失败:{data['message']} 接口名称(component_instance) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 21
0
    def list_component_instance(self,
                                bk_biz_id: int,
                                ip="",
                                id="",
                                bk_cloud_id=0,
                                component=""):
        """
        批量筛选组件
        :param bk_biz_id:int 是	业务ID
        :param ip:string 否	实例IP
        :param id:int 否 组件ID
        :param bk_cloud_id:int	否	云区域ID
        :param component:string	否	组件名称
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "id": id,
            "ip	": ip,
            "component": component,
            "bk_biz_id": bk_biz_id,
            "bk_cloud_id": bk_cloud_id,
        }
        data = self.client.monitor.list_component_instance(kwargs)
        result = {"result": False, "message": "nothing", "data": []}

        if data.get("result", False):
            result['result'] = data['result']
            result['data'] = data['data']

        else:
            logger.warning(
                f"{get_now_time()} 批量筛选组件失败:{data['message']} 接口名称(list_component_instance) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 22
0
    def metadata_modify_result_table(self,
                                     table_id,
                                     table_name_zh,
                                     field_list,
                                     operator="admin",
                                     default_storage="influxdb"):
        """
        修改监控结果表
        :param table_id:string	是	结果表ID,格式应该为 库.表(例如,system.cpu)
        :param table_name_zh:string	是	结果表中文名
        :param operator:string	是	操作者
        :param default_storage:string	是	默认存储类型,目前支持influxdb
        :param field_list:array	否	字段信息,数组元素为dict,例:field_name(字段名), field_type(字段类型), tag(字段类型, metirc -- 指标, dimension -- 维度)
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "table_id": table_id,
            "operator": operator,
            "field_list": field_list,
            "table_name_zh": table_name_zh,
            "default_storage": default_storage
        }

        data = self.client.monitor.metadata_modify_result_table(kwargs)
        result = {"result": False, "message": "nothing", "data": {}}
        if data.get("result", False):
            result['result'] = data['result']
            result['data'] = data['data']
        else:
            logger.warning(
                f"{get_now_time()} 修改监控结果表失败:{data['message']} 接口名称(metadata_modify_result_table) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 23
0
def get_task_state(kwargs):
    """
       根据pipeline_id来获取task的流程树信息
    """
    return_data = []
    pipeline_id = kwargs.get('pipeline_id')
    pipeline_states = PipelineTaskApi(kwargs).get_task_states()
    pipeline_tree_str = TaskRecord.objects.get(pipeline_id=pipeline_id).pipeline_tree
    try:

        pipeline_tree = json.loads(pipeline_tree_str)
        for node_id in pipeline_tree:

            node_info = {'tag': "<strong>{}</strong>".format(pipeline_tree[node_id])}
            pipeline_child = pipeline_states[pipeline_id]['children']
            child_log_content = PipelineTaskApi({'node_id': node_id}).get_node_output()

            if node_id not in pipeline_child.keys():
                # 节点尚未执行
                node_info['color'] = 'silver'
                return_data.append(node_info)
                continue

            if pipeline_child[node_id]['state'] == 'FINISHED':
                node_info['color'] = 'green'
                # 节点执行成功不查询日志,直接返回"success"
                node_info['content'] = child_log_content

            elif pipeline_child[node_id]['state'] == 'FAILED':

                # 如果活动节点执行中断,则以fail输出
                if child_log_content == 'fail':
                    node_info['content'] = child_log_content
                    node_info['color'] = 'red'
                    return_data.append(node_info)
                    continue

                # 若节点正常执行失败,查询每个IP的执行情况
                if isinstance(child_log_content, dict):
                    err_dict = child_log_content
                else:
                    err_dict = json.loads(child_log_content)

                err_message = ""
                node_info['color'] = 'red'
                for err_key in err_dict:
                    err_message = err_message + "<p><small>{}:{}</small></p>".format(err_key, err_dict[err_key])
                node_info['content'] = err_message

            else:
                # 其他情况代表节点正在执行中
                node_info['color'] = 'blue'
                node_info['size'] = 'large'
                node_info['content'] = PipelineTaskApi({'node_id': node_id}).get_node_output()

            return_data.append(node_info)

    except Exception as err:
        logger.warning(str(err))

    finally:
        return return_data
Ejemplo n.º 24
0
def myFunc(request):
    logger.info("这是提示信息")
    logger.debug("这是debug信息")
    logger.warning("这是警告信息")
    logger.error('这是错误信息')
    return render(request, 'mytestapp/index.html', {})
Ejemplo n.º 25
0
    def get_alarms(self,
                   bk_biz_id: int,
                   start_time="",
                   end_time="",
                   id=None,
                   alarm_type=None,
                   level=None,
                   alarm_content__contains=dict(),
                   user_status=None,
                   status=None,
                   extend_fields="",
                   ordering="-source_time",
                   page="",
                   page_size=""):
        """
        通过筛选条件获取指定告警事件
        :param bk_biz_id:int 是	业务ID
        :param start_time:string 是 告警源时间,"YYYY-MM-DD hh:mm:ss"
        :param end_time:string 是 告警源时间,"YYYY-MM-DD hh:mm:ss"
        :param id:int 否 告警事件ID
        :param alarm_type:string 否	监控类型,多字段使用半角逗号分隔 详情见alarm_type
        :param level:int 否	监控类型,告警级别,1为致命,2为预警,3为提醒
        :param alarm_content__contains:string	否 从alarm_content字段中匹配
        :param user_status:	string	否	通知状态 "notified,unnotified"
        :param status:string	否	告警状态,可选(待定)
        :param extend_fields:string	否	用户自定义显示的额外字段,多字段使用半角逗号分隔"
        :param ordering:string	否	排序方式,默认为id(升序),可选source_time,begin_time,end_time,加上"-"前缀为降序
        :param page:int	否	当前页码数,默认为1
        :param page_size:int	否	每页最大显示数,默认为5
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "bk_biz_id": bk_biz_id,
            "source_time__gte": start_time,
            "source_time__lte": end_time,
            "id": id,
            "alarm_type__in": alarm_type,
            "level": level,
            "alarm_content__contains": alarm_content__contains,
            "user_status__in": user_status,
            "status": status,
            "extend_fields": extend_fields,
            "ordering": ordering,
        }
        if page:
            kwargs["page"]: page
            kwargs["page_size"]: page_size

        data = self.client.monitor.get_alarms(kwargs)
        result = {"result": False, "message": "nothing", "data": []}
        if data.get("result", False):
            result['result'] = data['result']
            for alarm in data['data']['result']:
                alarm['source_time'] = make_monitor_time(alarm['source_time'])
                result['data'].append(alarm)
        else:
            logger.warning(
                f"{get_now_time()} 获取指定告警事件失败:{data['message']} 接口名称(get_alarms) 请求参数({kwargs}) 返回参数({data})"
            )
        result['message'] = data['message']

        return result
Ejemplo n.º 26
0
    def list_alarm_instance(self,
                            bk_biz_id: int,
                            bk_cloud_id="",
                            id="",
                            bk_supplier_id="0",
                            source_time="",
                            status="",
                            user_status="",
                            event_id=""):
        """
        批量筛选告警
        :param bk_biz_id:int 是	业务ID
        :param bk_cloud_id:int	否	云区域ID
        :param id:int 否 告警ID
        :param bk_supplier_id:int 否	开发商ID
        :param source_time:time 否	告警发生时间
        :param status:string 否	状态
        :param user_status:string 否	告警外部状态
        :param event_id:string 否	关联事件ID
        :return:result
        """
        kwargs = {
            "bk_token": self.bk_token,
            "bk_biz_id": bk_biz_id,
            "bk_cloud_id": bk_cloud_id,
            "bk_supplier_id": bk_supplier_id,
            "source_time": source_time,
            "status": status,
            "id": id,
            "user_status": user_status,
            "event_id": event_id,
        }
        data = self.client.monitor.list_alarm_instance(kwargs)

        result = {"result": False, "message": "nothing", "data": []}

        if data.get("result", False):
            result['result'] = data['result']
            for alarm in data['data']:
                result['data'].append({
                    "bk_biz_id":
                    alarm['bk_biz_id'],  # 业务ID
                    "bk_cloud_id":
                    alarm['bk_cloud_id'],  # 云区域ID
                    "bk_supplier_id":
                    alarm['bk_supplier_id'],  # 开发商ID
                    "alarm_attr_id":
                    alarm['alarm_attr_id'],  # 监控ID
                    "alarm_source_id":
                    alarm['alarm_source_id'],  # 告警源ID
                    "id":
                    alarm['id'],  # 告警ID
                    "ip":
                    alarm['ip'],  # 主机IP
                    "raw":
                    alarm['raw'],  # 告警内容
                    "level":
                    alarm['level'],  # 告警等级
                    "status":
                    alarm['status'],  # 状态
                    "comment":
                    alarm['comment'],  # 备注
                    "alarm_type":
                    alarm['alarm_type'],  # 告警类型
                    "source_type":
                    alarm['source_type'],  # 告警源类型
                    "origin_alarm":
                    alarm['origin_alarm'],  # 告警源数据
                    "alarm_content":
                    alarm['alarm_content'],  # 告警内容
                    "snap_alarm_source":
                    alarm['snap_alarm_source'],  # 告警源配置快照
                    "begin_time":
                    make_monitor_time(alarm['begin_time']),  # 处理开始时间
                    "end_time":
                    make_monitor_time(alarm['end_time']),  # 处理结束时间
                    "source_time":
                    make_monitor_time(alarm['source_time']),  # 告警发生时间
                    "source_id":
                    alarm['source_id'],  # 告警特征ID
                    "event_id":
                    alarm['event_id'],  # 关联事件ID
                    "priority":
                    alarm['priority'],  # 告警优先级
                    "user_status":
                    alarm['user_status'],  # 告警外部状态
                })
        else:
            logger.warning(
                f"{get_now_time()} 批量筛选告警失败:{data['message']} 接口名称(alarm_instance) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']
        return result
Ejemplo n.º 27
0
    def save_alarm_strategy(self,
                            bk_biz_id: str,
                            alarm_strategy_id: int,
                            hostindex_id: str,
                            solution_task_id="",
                            ip=[],
                            prform_cate="",
                            cc_set=[],
                            cc_module=[],
                            topo=[],
                            unit=None,
                            rules={},
                            scenario="performance",
                            is_enabled=None,
                            nodata_alarm=0,
                            is_classify_notice=False,
                            alarm_level_config=dict,
                            solution_is_enable=False,
                            solution_type="job",
                            solution_params_replace="",
                            monitor_id=None,
                            display_name=None,
                            condition=[]):
        """
        创建/更新监控策略
        :param solution_task_id:string	自动处理绑定的作业id
        :param ip:list	监控的ip范围
        :param prform_cate:string	ip/set/topo,监控范围的类型
        :param cc_set:list	监控的集群范围
        :param cc_module:list	监控的模块范围
        :param topo:list	监控的业务拓扑范围
        :param unit:string	监控项的单位
        :param hostindex_id:string	主机指标ID(主机监控策略专用)
        :param alarm_strategy_id:int	监控策略id,如果为0是创建,否则为更新
        :param rules:dict	触发及收敛规则
        :param scenario:string	监控场景(performance/log/custom/uptimecheck/dashboard-custom)
        :param is_enabled:boolean	是否启用
        :param bk_biz_id:int	业务ID
        :param nodata_alarm:int	无数据告警配置,0为不开启
        :param is_classify_notice:boolean	是否分级告警
        :param alarm_level_config:dict	告警配置
        :param solution_is_enable:boolean	是否开启接近自动处理
        :param solution_type:string	自动处理类型,目前只有job
        :param solution_params_replace:string	解决方案参数
        :param monitor_id:int	监控项ID
        :param display_name:string	策略名称
        :param condition:list	匹配条件
        :return:result
        """
        # kwargs = {
        #     "bk_token": self.bk_token,
        #     "bk_biz_id": bk_biz_id,
        #     "alarm_strategy_id": alarm_strategy_id,
        #     "hostindex_id": hostindex_id,
        #     "scenario": scenario,
        #     "prform_cate": prform_cate,
        #     "is_classify_notice": is_classify_notice,
        #     "ip": ip,
        #     "cc_set": cc_set,
        #     "cc_module": cc_module,
        #     "topo": topo,
        #     "condition": condition,
        #     "solution_is_enable": solution_is_enable,
        #     "rules": rules,
        #     "nodata_alarm": nodata_alarm,
        #     "solution_type": solution_type,
        #     "solution_task_id": solution_task_id,
        #     "solution_params_replace": solution_params_replace,
        #     "alarm_level_config": alarm_level_config,
        # }
        kwargs = {
            # "alarm_strategy_id": 8,
            "hostindex_id":
            "7",
            "scenario":
            "performance",
            "prform_cate":
            "topo",
            # "is_classify_notice": False,
            "ip": ["172.27.16.120"],
            "cc_set": [23],
            "cc_module": [124],
            "topo": [{
                "host_count":
                0,
                "default":
                0,
                "bk_obj_name":
                "业务",
                "bk_obj_id":
                "biz",
                "service_instance_count":
                0,
                "child": [{
                    "host_count":
                    0,
                    "default":
                    0,
                    "bk_obj_name":
                    "集群",
                    "bk_obj_id":
                    "set",
                    "service_instance_count":
                    0,
                    "child": [{
                        "host_count": 0,
                        "default": 0,
                        "bk_obj_name": "模块",
                        "bk_obj_id": "module",
                        "service_instance_count": 0,
                        "child": [],
                        "service_template_id": 0,
                        "bk_inst_id": 124,
                        "bk_inst_name": "考试主机"
                    }],
                    "service_template_id":
                    0,
                    "bk_inst_id":
                    23,
                    "bk_inst_name":
                    "考试集群"
                }],
                "service_template_id":
                0,
                "bk_inst_id":
                4,
                "bk_inst_name":
                "考试"
            }],
            # "condition": [
            #     []
            # ],
            # "solution_is_enable": False,
            # "rules": {
            #     "check_window": 5,
            #     "count": 3,
            #     "alarm_window": 1440
            # },
            # "nodata_alarm": 0,
            # "solution_type": "job",
            # "solution_task_id": "",
            # "solution_params_replace": "",
            # "solution_notice": [],
            "alarm_level_config": {
                2: {
                    "monitor_level":
                    2,
                    "responsible": [],
                    "notice_start_time":
                    "00:00",
                    "detect_algorithm": [{
                        "config": {
                            "threshold": 95,
                            "message":
                            "当前指标值(${metric|value}${metric|unit}) ${method} (${threshold}${metric|unit})",
                            "method": "gte"
                        },
                        "display": "当前值≥阈值:95%",
                        "name": "静态阈值",
                        "algorithm_id": 1000
                    }],
                    "notice_end_time":
                    "23:59",
                    "phone_receiver": [],
                    "notify_way": ["mail"],
                    "is_recovery":
                    False,
                    "role_list": ["Operator", "BakOperator"]
                }
            },
            "bk_biz_id":
            4
        }
        # save_json("kwargs",kwargs)
        data = self.client.monitor.save_alarm_strategy(kwargs)
        result = {"result": False, "message": "nothing", "data": {}}
        save_json("save_alarm_strategy", data)
        if data.get("result", False):
            result['result'] = data['result']
        else:
            logger.warning(
                f"{get_now_time()} 创建/更新监控策略失败:{data['message']} 接口名称(save_alarm_strategy) 请求参数({kwargs}) 返回参数({data})"
            )

        result['message'] = data['message']

        return result
Ejemplo n.º 28
0
 def warning(msg, *args, **kwargs):
     bk_logger.warning(msg, *args, **kwargs)
     if ISDEV:
         print(msg, *args)