def ev_smu_card_state_rpt_info(data): ''' { "eventid": "EV_SMU_CARD_STATE_RPT_INFO", "devid": "1111", "devtype": "jd10000", "rpttime": "2014/06/16:09:57:50", "collectorid": "xxx", "smu_state": { "card_guid": "yyyyyyyyy", // 板卡的moid "card_pos": 5, // 板卡插槽位置 "card_ip": ”172.16.81.101”, // 板卡ip地址 "card_state": 0 // 板子状态(0: 拔掉,1: 插上) "smu_guid": ”xxxxxxxxxxxx”, // 机框的moid } } ''' if data['smu_state']['card_guid']: nms_redis.ev_smu_cards_info( data['smu_statue']['smu_guid'], data['smu_statue']['card_guid'], data['smu_statue']['card_ip'], data['smu_statue']['card_state'], data['collectorid'] ) warning_handler( data['devid'], data['smu_state']['card_state'] == 0, 3010, data['rpttime'], 'p_server' )
def ev_alarm_report(data): ''' 安全告警信息上报 告警流程: 1. 如果有多个模块上报同一告警, 只告警一次, 再收到同样的告警码, 不再继续告警; 2. 如果收到告警解除, 只有所有模块的告警都解除后, 才能解除告警; { "eventid":"EV_ALARM_REPORT", "devid":"1111" "devtype":"pas", "rpttime":"2014/06/16:09:57:50", "alarm_info": { "module_type":"xxxx", //内部模块 "alarm_code":2003, //告警码 "alarm_status":1 //告警状态,0:解除告警,1:产生告警 } } ''' r = nms_redis.ev_alarm_report(data['devid'], data['alarm_info']['module_type'], data['alarm_info']['alarm_code'], data['alarm_info']['alarm_status']) if r: warning_handler(data['devid'], r['warning_trigger_flag'], data['alarm_info']['alarm_code'], data['rpttime'], 'l_server')
def ev_dev_offline(data): ''' 逻辑服务器下线 { "eventid": "EV_DEV_OFFLINE", "devid": "1111", "devtype": "SERVICE_TS_SRV_MPCD", "collectorid": "60a44c502a60" } ''' if data['devtype'] == 'pas': nms_redis.offline_pas(data['devid'], data['collectorid']) elif data['devtype'] == 'ejabberd': nms_redis.offline_ejabberd(data['devid'], data['collectorid']) elif data['devtype'] == 'media-worker': nms_redis.offline_mediaworker(data['devid'], data['collectorid']) elif data['devtype'] == 'vrs': nms_redis.offline_vrs(data['devid'], data['collectorid']) elif data['devtype'] == 'cmu': nms_redis.offline_cmu(data['devid'], data['collectorid']) elif data['devtype'] == 'dcs': nms_redis.offline_dcs(data['devid'], data['collectorid']) r = nms_redis.ev_dev_offline_l(data['devid'], data['collectorid']) # nms接入数量阈值告警 warning_handler(r['collector_p_server_moid'], r['warning_trigger_flag'], 2016, data['rpttime'], 'p_server', **r) # 下线告警 warning_handler(data['devid'], True, 2015, data['rpttime'], 'l_server')
def ev_modb_warning_info(data): ''' MODB告警 { "eventid":"EV_MODB_WARNING_INFO", "devid":"1111" "devtype":"modb", "rpttime":"2014/06/16:09:57:50", "version":"5.0.1", "warning_info": { "status":1, //告警状态 0:修复告警,1:产生告警 'last_right_ver":" A:123,B:22,C:11",// 最近一次正确的版本号 "srv_ip":"172.16.81.90" //服务器IP } } ''' r = nms_redis.ev_modb_warning_info(data['devid']) warning_handler(data['devid'], data['warning_info']['status'], 2020, data['rpttime'], 'l_server') # 通知BMC, 鬼知道为啥... :( if data['warning_info']['status']: from threads.mq_threads import rmq_produce_thread msg = { 'type': 'NmsModbWarnging', 'serverMoid': data['devid'], 'fromIp': data['warning_info']['srv_ip'], 'serviceDomainMoid': r, 'lastUpdateFullVersion': data['warning_info']['last_right_ver'] } rmq_produce_thread.push( ('movision.nms.ex', 'movision.warning.k', json.dumps(msg)))
def update_license_warning(): now = datetime.now() licenses = nms_redis.update_license_warning() for info in licenses: exp_date = datetime.strptime(info['date'], '%Y-%m-%d') d = exp_date - now if d.days <= 7: warning_handler(info['p_server_moid'], True, 2066, now, 'p_server') elif d.days <= 30: warning_handler(info['p_server_moid'], True, 2065, now, 'p_server')
def ev_mps_info(data): ''' 传统会议资源 { "eventid": "EV_MPS_INFO", "devid": "1111" "devtype": "mps", "rpttime": "2014/06/16:09:57:50", "mps_resource_info": { "mps_guid": "12345678", // MPU的GUID "total_vmp": 8, // 此MPU上的合成器总数 "used_vmp": 2, // 此MPU上已经使用的合成器数 "total_mixer": 8, // 此MPU上的混音器总数 "used_mixer": 4, // 此MPU上已经使用的的混音器数 "total_abas": 16, // 此MPU上总的ABas数 "used_abas": 8, // 此MPU上已经使用的ABas数 "total_vbas": 8, // 此MPU上总的VBas数 "used_vbas": 2, // 此MPU上已经使用的VBas数 "dev_type": "JD2000", // 外设的类型,JD2000/JD6000/JD10000/PHYSICALSERVER "dev_ip": "172.16.81.101", // 外设的ip地址 "conf_count": 2 // 此MPU上的会议数 "conf_info": [ { "conf_e164": "0513**77", // 会议E164号 "used_vbas": 2, // 此会议使用的VBas数 "used_abas": 2, // 此会议使用的ABas数 "used_vmp": 2, // 此会议使用的合成器数 "used_mixer": 2 // 此会议使用的的混音器数 } ] } } ''' r = nms_redis.ev_mps_info(data['devid'], json.dumps(data['mps_resource_info'])) # vmp使用率 total = int(data['mps_resource_info']['total_vmp']) used = int(data['mps_resource_info']['used_vmp']) vmp_usage = 0 if total == 0 else used / total * 100 # mixer使用率 total = int(data['mps_resource_info']['total_mixer']) used = int(data['mps_resource_info']['used_mixer']) mixer_usage = 0 if total == 0 else used / total * 100 r['current_value'] = vmp_usage warning_handler(data['devid'], r['threshold_value'] <= vmp_usage, 2026, data['rpttime'], 'l_server', **r) r['current_value'] = mixer_usage warning_handler(data['devid'], r['threshold_value'] <= mixer_usage, 2025, data['rpttime'], 'l_server', **r)
def ev_pas_info(data): ''' pas上的终端在线详情 { "eventid": " EV_PAS_INFO ", "devid": "1111", "devtype": "pas", "rpttime": "2014/06/16:09:57:50", "version": "1.06", "pasinfo": { "maxcallcount": 1234, // 支持的最大呼叫数 "maxonlinecount": 123, // 支持的最大注册数 "curonlinecount": 123, // 当前注册的终端总数 "h323onlinecount": 123, // H323类型的终端注册数 "siponlinecount": 123, // SIP类型的终端注册数 "monitoronlinecount": 123, // 监控类型的终端在线数 "callingcount": 123, // 当前的总呼叫数 "rtconlinecount":123, //rtc类型终端在线数 "confmtcount": 123 } } ''' r = nms_redis.ev_pas_info( data['devid'], data['pasinfo'].get('h323onlinecount', 0), data['pasinfo'].get('siponlinecount', 0), data['pasinfo'].get('monitoronlinecount', 0), data['pasinfo'].get('rtconlinecount', 0), data['pasinfo'].get('maxcallcount', 0), data['pasinfo'].get('callingcount', 0), data['pasinfo'].get('maxonlinecount', 0), data['pasinfo'].get('curonlinecount', 0)) # 呼叫对阈值告警 threshold_value = int(r['callpair']) current_value = int(data['pasinfo']['callingcount']) warning_handler(data['devid'], threshold_value <= current_value, 2006, data['rpttime'], 'l_server', threshold_value=threshold_value, current_value=current_value) # pas接入阈值告警 threshold_value = int(r['pas']) current_value = int(data['pasinfo']['curonlinecount']) warning_handler(data['devid'], threshold_value <= current_value, 2005, data['rpttime'], 'l_server', threshold_value=threshold_value, current_value=current_value)
def ev_pfminfo_disk(data): ''' 磁盘状态 { "eventid":"EV_PFMINFO_DISK", "devid":"1111", "devtype":"x86_server", "rpttime":"2014/06/16:09:57:50", "disknum": 2, "diskinfo":[ # old { "totalsize" : 128, //磁盘总空间(G) "used":28479932, //已使用空间大小 "userate":3, //磁盘空间使用率 "diskname": "sda1" }, # new { "totalsize" : 128, //磁盘总空间 "usesize":1024, //已使用空间大小(M) "userate":3 //磁盘空间使用率 "diskname": "sda2" } ] } ''' if isinstance(data['diskinfo'], list): diskinfo = [ { "totalsize": info["totalsize"], "usesize": round(info["usesize"]/1024), "userate": info["userate"], "diskname": info["diskname"], } for info in data['diskinfo'] ] else: diskinfo = [{ "totalsize": round(data['diskinfo']["total"]/1024/1024), "usesize": round(data['diskinfo']["used"]/1024/1024), "userate": data['diskinfo']["userate"], "diskname": 'disk' }] totalsize = sum((info['totalsize'] for info in diskinfo)) usesize = sum((info['usesize'] for info in diskinfo)) total_usereate = int(usesize/totalsize*100) r = nms_redis.ev_pfminfo_disk( data['devid'], total_usereate, json.dumps(diskinfo) ) code = 2018 if data['devtype'] == 'x86_server' else 3009 warning_handler(data['devid'], r['waring'], code, data['rpttime'], 'p_server', **r)
def ev_usb_storage_state(data): ''' USB状态 { "eventid": "EV_USB_STORAGE_STATE", "devid": "1111", "devtype": "x86_server", "rpttime": "2014/06/16:09:57:50", "usb_storage_exists": 0 } ''' warning_handler(data['devid'], data['usb_storage_exists'] == 0, 2044, data['rpttime'], 'p_server')
def ev_systime_sync(data): ''' 时间同步 { "eventid": "EV_SYSTIME_SYNC", "devid": "1111", "devtype": "x86_server", "rpttime": "2014/06/16:09:57:50", "syncstate": 0 //时间同步状态,0:未同步,1:同步 } ''' warning_handler(data['devid'], int(data['syncstate']) == 0, 2004, data['rpttime'], 'p_server')
def ev_dev_online(data): ''' { "eventid": "EV_DEV_ONLINE", "devid": "1.2.1", "devtype": "SERVICE_KDV_MT_TS6610", "collectorid": "60a44c502a60" } ''' e164 = data['devid'][20:33] r = nms_redis.ev_dev_online_t(e164, data['devtype'], data['collectorid']) if r: warning_handler(r['collector_p_server_moid'], r['warning_trigger_flag'], 2016, data['rpttime'], 'p_server', **r)
def ev_dev_offline(data): ''' { "eventid": "EV_DEV_OFFLINE", "devid": "1111", "devtype": "SERVICE_TS_SRV_MPCD", "collectorid": "60a44c502a60" } ''' e164 = data['devid'][20:33] r = nms_redis.ev_dev_offline_t(e164, data['devtype'], data['collectorid']) # nms接入数量阈值告警 if r is not None: return warning_handler(r['collector_p_server_moid'], r['warning_trigger_flag'], 2016, data['rpttime'], 'p_server', **r)
def ev_dev_offline(data): ''' { "eventid": "EV_DEV_OFFLINE", "devid": "1111", "devtype": "SERVICE_TS_SRV_MPCD", "collectorid": "60a44c502a60" } ''' r = nms_redis.ev_dev_offline_t48(data['devid'], data['collectorid']) if r is None: return warning_handler(r['collector_p_server_moid'], r['warning_trigger_flag'], 2016, data['rpttime'], 'p_server', **r) # 48终端上线状态 mysql_write_thread.push((nms_mysql.offline_old_terminal, data['devid']))
def ev_dev_online(data): ''' 逻辑服务器上线 { "eventid": "EV_DEV_ONLINE", "devid": "1111", "devtype": "SERVICE_TS_SRV_MPCD", "collectorid": "xxxx" } ''' r = nms_redis.ev_dev_online_l(data['devid'], data['devtype'], data['collectorid']) # nms接入数量阈值告警 warning_handler(r['collector_p_server_moid'], r['warning_trigger_flag'], 2016, data['rpttime'], 'p_server', **r) # 下线告警 warning_handler(data['devid'], False, 2015, data['rpttime'], 'l_server')
def del_license(data): ''' { "operation": "del_license", // 操作类型说明字符串 "moid": "1", // 机房的moid "licenseId": "0", // 许可证序号 } ''' from datetime import datetime nms_redis.del_license( data['moid'], data['licenseId']) p_server_moid = nms_redis.get_device_moid_by_license(data['licenseId']) if p_server_moid: now = datetime.now() warning_handler(p_server_moid, False, 2066, now, 'p_server') warning_handler(p_server_moid, False, 2065, now, 'p_server')
def ev_ds_data_throughput_report(data): ''' 上报转发流量 { "eventid":"EV_DS_DATA_THROUGHPUT_REPORT", "devid":"1111" "devtype":"dss-worker", "rpttime":"2014/06/16:09:57:50", "data_throughput": { "rate_of_flow":7 } } ''' r = nms_redis.ev_ds_data_throughput_report( data['devid'], data['data_throughput']['rate_of_flow']) warning_handler(r['p_server_moid'], r['warning_trigger_flag'], 2046, data['rpttime'], 'p_server', **r)
def ev_pfminfo_disk_speed(data): ''' 磁盘速率 仅检测最后4/3次, 判定告警或修复 { "eventid": "EV_PFMINFO_DISK_SPEED", "devid": "1111", "devtype": "x86_server", "rpttime": "2014/06/16:09:57:50", "speedlist": [123, 234, 112, 115, 238, 245, 100, 444, 356, 290] } ''' disk_speed_threshold = int(nms_redis.get_warning_server_limit( data['devid'], 'diskwritespeed')) * 1024 if all([speed >= disk_speed_threshold for speed in data['speedlist'][-4:]]): warning_handler(data['devid'], True, 2047, data['rpttime'], 'p_server') elif all([speed < disk_speed_threshold for speed in data['speedlist'][-3:]]): warning_handler(data['devid'], False, 2047, data['rpttime'], 'p_server')
def ev_smu_cards_info(data): ''' { "eventid": "EV_SMU_CARDS_INFO", "devid": "1111", "devtype": "jd10000", "rpttime": "2014/06/16:09:57:50", "smu_guid": "xxxxxxxxxxxx", // 机框的moid "cards_num": 2, // 板卡数量 "collectorid": "xxx" "cards_info": [ { "card_guid": "yyyyyyyyy", // 板卡的moid "card_pos": 5, // 板卡插槽位置 "card_ip": "172.16.81.101", // 板卡ip地址 "card_state": 1 // 板子状态(0: 拔掉,1: 插上) }, { "card_guid": "zzzzzzzzzz", // 板卡的GUID "card_pos": 7, // 板卡插槽位置 "card_ip": "172.16.81.102", // 板卡ip地址 "card_state": 1 // 板子状态(0: 拔掉,1: 插上) } ] } ''' for info in data['cards_info']: if info['card_guid']: nms_redis.ev_smu_cards_info( data['smu_guid'], info['card_guid'], info['card_ip'], info['card_state'], data['collectorid'] ) warning_handler( info['card_guid'], info['card_state'] == 0, 3010, data['rpttime'], 'p_server' )
def ev_dev_offline(data): ''' 物理服务器下线 { "eventid": "EV_DEV_OFFLINE", "devid": "111", "devtype": "SERVICE_SRV_PHY", "collectorid": "60a44c502a60" } ''' r = nms_redis.ev_dev_offline_p( data['devid'], data['collectorid']) # nms接入数量阈值告警 warning_handler(r['collector_p_server_moid'], r['warning_trigger_flag'], 2016, data['rpttime'], 'p_server', **r) # 下线告警 code = 2015 if data['devtype'] == 'x86_server' else 3010 warning_handler(data['devid'], True, code, data['rpttime'], 'p_server')
def ev_pfminfo_disk_age(data): ''' 磁盘寿命 { "eventid":"EV_PFMINFO_DISK_AGE", "devid":"1111", "devtype":"x86_server", "rpttime":"2014/06/16:09:57:50", "diskage": [ {"dev": "sda1", "age": 20}, {"dev": "sda2", "age": 20} ] } ''' diskage = {info['dev']: info['age'] for info in data['diskage'] if info} if diskage: nms_redis.ev_pfminfo_disk_age(data['devid'], json.dumps(diskage)) max_age = max(diskage.values()) warning_handler(data['devid'], max_age >= SERVER_RESOURCE_LIMIT['diskage'], 2045, data['rpttime'], 'p_server', threshold_value=SERVER_RESOURCE_LIMIT['diskage'], current_value=max_age)
def ev_alarm_msg(data): ''' { "devid": "1.2.2", "devtype": "Skywalker for Windows", "alarm_info": { "code_id": 1003, "report_time": "2014/05/08:12:08:08", "status": 0 }, "eventid": "EV_ALARM_MSG" } ''' e164 = data['devid'][20:33] moid = nms_redis.get_terminal_moid(e164=e164) warning_handler(moid, data['alarm_info']['status'], data['alarm_info']['code_id'], data['rpttime'], 'terminal', device_type=data['devtype'])
def ev_pfminfo_cpu(data): from dao.graphite_statistic import add_cpu_resource_statistic ''' cpu状态 { "eventid": "EV_PFMINFO_CPU", "devid": "1111", "devtype": "x86_server", "rpttime": "2014/06/16:09:57:50", "cpuinfo": { "cpuusage": 80, // 总的cpu使用率 "cpucorecount": 8, // cpu个数 "coreinfo": [ {"cpucore1": 100}, {"cpucore2": 10}, {"cpucore3": 20}, {"cpucore4": 30}, {"cpucore5": 40}, {"cpucore6": 50}, {"cpucore7": 60}, {"cpucore8": 70} ] } } ''' coreinfo = {} for info in data['cpuinfo']['coreinfo']: coreinfo.update(info) r = nms_redis.ev_pfminfo_cpu( data['devid'], data['cpuinfo']['cpuusage'], data['cpuinfo']['cpucorecount'], json.dumps(coreinfo)) for key, value in coreinfo.items(): add_cpu_resource_statistic( r['machine_room_moid'], data['devid'], key, value, int(time.time())) add_cpu_resource_statistic( r['machine_room_moid'], data['devid'], 'cpuusage', data['cpuinfo']['cpuusage'], int( time.time()) ) code = 2002 if data['devtype'] == 'x86_server' else 3007 warning_handler(data['devid'], r['warning'], code, data['rpttime'], 'p_server', **r)
def ev_srv_warning_info(data): ''' 告警消息 { "eventid": "EV_SRV_WARNING_INFO", "devid": "1111", "devtype": "x86_server", "rpttime": "2014/06/16:09:57:50", "warning_info": { "code": 2015, // 告警码 "status": 0, // 告警状态 0:告警解除 1:告警产生 "time": "2014/06/16:09:57:50", // 告警产生时间 "guid": "123456789" // 产生告警的服务器moid } } ''' code = data['warning_info']['code'] status = data['warning_info']['status'] if code == 2023 or code == 2027: # 物理服务器告警 warning_handler(data['warning_info']['guid'], status, code, data['warning_info']['time'], 'p_server') else: # 逻辑服务器告警 warning_handler(data['warning_info']['guid'], status, code, data['warning_info']['time'], 'l_server') if code == 2021 or code == 2022: # 主备告警, 无修复消息, 立刻清除 warning_handler(data['warning_info']['guid'], False, code, data['warning_info']['time'], 'l_server')
def ev_x86frame_warning_info(data): ''' { "eventid": "EV_X86FRAME_WARNING_INFO", "devid": "1111", "devtype": "jd2000", "rpttime": "2014/06/16:09:57:50", "warning_info": { "warning_code": 5001, // 告警码 "warning_status": 0 // 告警状态, 0: 解除告警,1: 产生告警 # 告警等级默认严重 2 } } ''' frame_code = data['warning_info']['warning_code'] nms_code = smu_warning_code_2_nms(frame_code, 2) warning_handler( data['devid'], data['warning_info']['warning_status'], nms_code, data['rpttime'], 'p_server' )
def ev_pfminfo_mem(data): from dao.graphite_statistic import add_mem_resource_statistic ''' 内存状态 { "eventid":"EV_PFMINFO_MEM", "devid":"1111", "devtype":"x86_server", "rpttime":"2014/06/16:09:57:50", "meminfo":{ "total":2048, //总的mem大小 "used":1024, //已使用的mem大小 "userate":50 ////mem使用率(单位:万分之几) } } ''' r = nms_redis.ev_pfminfo_mem( data['devid'], data['meminfo']['total'], data['meminfo']['used'], data['meminfo']['userate'] ) add_mem_resource_statistic( r['machine_room_moid'], data['devid'], data['meminfo']['userate'], int(time.time())) code = 2003 if data['devtype'] == 'x86_server' else 3008 warning_handler(data['devid'], r['waring'], code, data['rpttime'], 'p_server', **r)
def ev_smu_warning_info(data): ''' smu告警消息 { "eventid": "EV_SMU_WARNING_INFO", "devid": "1111", "devtype": "smu", "rpttime": "2014/06/16:09:57:50", "smu_warning_info": { "card_guid": "yyyyyyyy", # 板卡guid "code": 5001, # 告警码 "level": 1, # 告警等级,0:普通告警,1:重要告警,2:严重告警 "status": 1 #告警状态,0: 解除告警,1: 产生告警 } } ''' smu_code = data['smu_warning_info']['code'] nms_code = smu_warning_code_2_nms( smu_code, data['smu_warning_info']['level']) repair_code_list = [ smu_warning_code_2_nms(smu_code, level) for level in (0, 1, 2) ] if smu_code in (SMU_ALAM_CODE_TVS4000_TEMPERATURE, SMU_ALAM_CODE_CHIP_FAULT, SMU_ALAM_CODE_FANSPEED): warning_handler( data['devid'], data['smu_warning_info']['status'], nms_code, data['rpttime'], 'p_server' ) else: for code in repair_code_list: warning_handler( data['devid'], False, code, data['rpttime'], 'p_server' ) if data['smu_warning_info']['status']: warning_handler( data['devid'], True, nms_code, data['rpttime'], 'p_server' )
def ev_mediaresource_info(data): ''' 端口会议资源 { "eventid": "EV_MEDIARESOURCE_INFO", "devid": "1111" "devtype": "media-worker", "rpttime": "2014/06/16:09:57:50", "mediaresource_info": { "ceu_guid": "23456789", // CEU板卡的GUID "total_port": 64, // h.264端口资源总数 "used_port": 32, // 已经使用的h.264端口数 "h265_total_port": 64, // h.265端口资源总数 "h265_used_port": 28, // 已经使用的h.265端口数 "total_vmp": 32, // 合成器总数 "used_vmp": 16, // 已使用的合成器数 "total_mixer": 64, // 混音器总数 "used_mixer": 48, // 已使用的混音器数 "conf_count": 12, // 会议数 "conf_info": [ { "conf_e164": "0513**88" // 会议E164号码 }, { "conf_e164": "0513**99" } ] } } ''' r = nms_redis.ev_mediaresource_info(data['devid'], json.dumps(data['mediaresource_info'])) # 端口使用率 total = int(data['mediaresource_info']['total_port']) used = int(data['mediaresource_info']['used_port']) port_usage = 0 if total == 0 else used / total * 100 # H265端口使用率 total = int(data['mediaresource_info']['h265_total_port']) used = int(data['mediaresource_info']['h265_used_port']) h265_port_usage = 0 if total == 0 else used / total * 100 # vmp使用率 total = int(data['mediaresource_info']['total_vmp']) used = int(data['mediaresource_info']['used_vmp']) vmp_usage = 0 if total == 0 else used / total * 100 # mixer使用率 total = int(data['mediaresource_info']['total_mixer']) used = int(data['mediaresource_info']['used_mixer']) mixer_usage = 0 if total == 0 else used / total * 100 r['current_value'] = max(port_usage, h265_port_usage) warning_handler(data['devid'], r['threshold_value'] <= r['current_value'], 2007, data['rpttime'], 'l_server', **r) # r['current_value'] = h265_port_usage # warning_handler(data['devid'], r['threshold_value'] >= # port_usage, 2007, data['rpttime'], 'l_server', **r) r['current_value'] = vmp_usage warning_handler(data['devid'], r['threshold_value'] <= vmp_usage, 2026, data['rpttime'], 'l_server', **r) r['current_value'] = mixer_usage warning_handler(data['devid'], r['threshold_value'] <= mixer_usage, 2025, data['rpttime'], 'l_server', **r)
def ev_pfminfo_netcard(data): from dao.graphite_statistic import add_netcard_down_statistic, add_netcard_up_statistic, add_total_up_statistic, add_total_down_statistic ''' 网卡状态消息 单位: 阈值Mbps, 消息KBps, 告警和redis:Kbps { "eventid": "EV_PFMINFO_NETCARD", "devid": "1111", "devtype": "x86_server", "rpttime": "2014/06/16:09:57:50", "netcardinfo": { "netcardcount": 2, # 网卡个数 "recvpktloserate": 0, # 总的网卡接受丢包率 "recvkbps": 0, # 总的网卡接收速率 KBps "sendkbps": 0, # 总的网卡发送速率 KBps "netcards":[ { "recvpktloserate": 0, # 单个网卡的接受丢包率 "recvkbps": 0, # 单个网卡的接收速率 "sendkbps": 0, # 单个网卡的发送速率 "ifname": "eth0" # 单个网卡的名称 }, { "recvpktloserate": 0, "sendkbps": 0, "recvkbps": 0, "ifname": "eth1" # 单个网卡的名称 } ] } } old { 'netcardinfo': { 'recvpktloserate': 0, 'netcards': [ { 'netcard1': { 'recvpktloserate': 0, 'recvkbps': 0, 'sendkbps': 0, 'ifname': 'eth0' } }, { 'netcard2': { 'recvpktloserate': 0, 'recvkbps': 7, 'sendkbps': 0, 'ifname': 'eth1' } }, { 'netcard3': { 'recvpktloserate': 0, 'recvkbps': 0, 'sendkbps': 0, 'ifname': 'eth2' } } ] } } ''' netcard_info = [] netcards = data['netcardinfo']['netcards'] if not netcards: return if 'ifname' not in netcards[0]: tmp = [] for element in netcards: tmp += list(element.values()) netcards = tmp for info in netcards: netcard_info.append(info['ifname']) netcard_info.append(info['recvkbps'] * 8) netcard_info.append(info['sendkbps'] * 8) netcard_info.append(info['recvpktloserate']) r = nms_redis.ev_pfminfo_netcard( data['devid'], data['netcardinfo']['recvkbps'] * 8, data['netcardinfo']['sendkbps'] * 8, data['netcardinfo']['recvpktloserate'], data['netcardinfo']['netcardcount'], *netcard_info ) timestamp = int(time.time()) for info in netcards: add_netcard_up_statistic( r['machine_room_moid'], data['devid'], info['ifname'], info['sendkbps'], timestamp) add_netcard_down_statistic( r['machine_room_moid'], data['devid'], info['ifname'], info['recvkbps'], timestamp) add_total_up_statistic(r['machine_room_moid'], data['devid'], data['netcardinfo']['sendkbps'], timestamp) add_total_down_statistic( r['machine_room_moid'], data['devid'], data['netcardinfo']['recvkbps'], timestamp) warning_handler(data['devid'], r['warning'], 2019, data['rpttime'], 'p_server', **r) # 丢包率告警 # 5% 和 10% 分别对应告警码 2013 和 2014 lost_list = [info['recvpktloserate'] for info in netcards] lost_10 = any(map(lambda x: x >= 10, lost_list)) lost_5 = any(map(lambda x: x >= 5, lost_list)) warning_handler(data['devid'], lost_10, 2014, data['rpttime'], 'p_server') warning_handler(data['devid'], lost_5, 2013, data['rpttime'], 'p_server')