{
    "name"  : "诊断内存不足",
    "problems" : {
        "memory_status" : {
            "desc"      : "【问题】匹配到${0}",
            "advice"    : "【建议】参考故障${1}的处理方法,\r\n故障描述：${2},\r\n故障原因：${3},\r\n故障解决方法：${4}"
        }
    },
    "task_ID" : {
        "LISR INT"        : "6169",
        "buffcopy"        : "6169",
        "tnet dhcps_task" : "6169",
        "dhcps_task"      : "6169",
        "ncc"             : "5152",
        "snmpd"           : "7103"
    },
    
    "task_note": {
        "6169": {
            "task_dscr"   : "设备内存告警，CPU高，断网。详见附件。内网是傻瓜交换机，跑的是无盘系统。",
            "task_reason" : "确认了上诉问题，属于大量环路报文上进程导致：现场有大量环路报文，抗攻击也没开启，大量报文上进程自然很耗内存和CPU，应该是正常的；同时没开BGP，但有BGP告警，这是由于内存不足触发的，和BGP负责人钟建强确认，这也属于正常现象",
            "task_method" : "建议更换RSR E/F新品,老RSR20内存很小，会不断提示内存不足，导致上述现象。20-14E/F的内存比老20大很多,没有这个问题。至于CPU，遇到攻击上升高属于正常现象"
        },
        "5152": {
            "task_dscr"   : "网络中断，设备远程无法登陆管理，通过基本信息查看可以断定是内存耗尽。但由于可能没有收集底层信息就重启设备，因此无法明确是哪个模块问题。Console登陆查看提示：【16:40:18】*Aug 1 16:42:35: %SYS-2-MEMORY: Low-memory debug exception (low=1212 free=1212)【16:40:18】not enough memory! cli excute fail!",
            "task_reason" : "客户网络中存在VOIP的报文，而实际设备上并没有开启VOIP功能，当设备收到VOIP报文时，还是进行了处理。在异常处理过程中出现异常，而未将报文释放，从而出现故障的现象，内存一致被耗用，运行一段时间后，出现内存不足现象",
            "task_method" : "此问题已经在4974通过临时版本解决，并且基线也是10.3(5b6)p2，与此品控版本相同。建议更新版本。"
        },
        "7103": {
            "task_dscr"   : "在运行过程中，提示内存不足，校内无法访问互联网，由于大量内存不足的日志提示导致console无法输入，但是设备重启后，设备运行正常，大概2-4小时会复现一次。目前定位可能与snmp有关。当将snmp host 删除后，提示大量的snmp 认证失败 怀疑为snmp受到攻击。",
            "task_reason" : "SNMP造成内存泄露",
            "task_method" : "开启SNMP抗攻击,开启ACL过滤，只允许合法的SNMP报文"
        }
    }
}
---------------------------code-------------------------------
cli('debug support')
res = cli('show pool')
#res = 'Pool/Task  |     NULL     nsmd   dvmrpd     ldpd    msdpd     bgpd    pim6d   ripngd\r\n  Pool/Task      |     buffcopy   dvmrpd     ldpd    msdpd bgpd    pim6d   ripngd\r\n'
tasks = res.match(/Task\s+\|(.*)\r?\n/ig)
print tasks
task0 = tasks[0]
task0 = task0.replace(/(^\s*)|(\s*$)/g,"")
taskArr = task0.split(/\s+/)
task1 = tasks[1]
task1 = task1.replace(/(^\s*)|(\s*$)/g,"")
taskArr1 = task1.split(/\s+/)

task7 = taskArr1[2]
task8 = taskArr1[3]
task9 = taskArr1[4]
taskArr.push(task7)
taskArr.push(task8)
taskArr.push(task9)

print taskArr

isProblemFound = false
taskAllName = 'LISR INT buffcopy tnet dhcps_task ncc snmpd'
i = 0
taskStr = ''
taskIDStr = ''
taskDscrStr =''
taskReasonStr = ''
taskMethodStr = ''
taskNoteJson = {}
task_ID        = get_configure_value('task_ID')
task_note      = get_configure_value('task_note')
#task_dscr      = get_configure_value('task_dscr')
#task_reason    = get_configure_value('task_reason')
#task_method    = get_configure_value('task_method')

while  i < taskArr.length :
    taskName = taskArr[i]
    if taskAllName.indexOf(taskName) >= 0 :
        isProblemFound = true
        taskStr = taskStr + taskName
        taskID = task_ID[taskName]
        if taskIDStr.indexOf(taskID) < 0 :
            taskIDStr = taskIDStr + taskID
            taskNoteJson = task_note[taskID]
            taskDscrStr = taskDscrStr + taskNoteJson['task_dscr']
            taskReasonStr = taskReasonStr + taskNoteJson['task_reason']
            taskMethodStr = taskMethodStr + taskNoteJson['task_method']
        end
    end
    i = i + 1
end

if isProblemFound :
    add_problem('memory_status',[taskStr,taskIDStr,taskDscrStr,taskReasonStr,taskMethodStr])
    return 'warn'
else:
    return 'success'
end




