{
    "name"  : "诊断异常重启",
    "problems" : {
        "exception_status" : {
            "desc"      : "【问题】${0}", 
            "advice"    : "【建议】${1}"
        }
    },
    "current_thread" : {
        "ktimer"                   : "5167 5614",
        "<0x1b006000>paramter"     : "5357",
        "<0x3086000>rl_con"        : "5765",
        "idle"                     : "5941",
        "<0x1fa46000>N/A"          : "6342",
        "rl_con"                   : "6348",
        "N/A"                      : "6384 7526 7650",
        "ipsec_event_processs"     : "6465",
        "<0x1a0a6000>ncc"          : "6622",
        "<0x58e45000>ef_bfd"       : "7083",
        "dhcpsnp_task"             : "7276",
        "<0x0>N/A"                 : "7534",
        "<0x7ff9d000>idle"         : "7602"
    },
    "system_exception" : {
        "Program (0x00700)"                  : "5167 5357 5614",
        "DSI exception (0x00300)"            : "5765",
        "Address error exception (store)"    : "5941",
        "Instruction TLB error (0x01000)"    : "6342",
        "XTLB Miss Exception"                : "6348",
        "CacheError Exception"               : "6384",
        "Invalid Opcode"                     : "6465",
        "Instruction TLB error (0x01000)"    : "6622",
        "Machine check (0x00200)"            : "7083",
        "Trap exception"                     : "7276",
        "NMI exception"                      : "7526",
        "Watchdog Timer exception (0x00B00)" : "7534",
        "Data TLB error (0x01100)"           : "7602",
        "NMI exception"                      : "7650"  
    },
    
    "stack_frame1" : {
        "5167" : "006F93C4$->005AD36C$->005F2770$->005E2B60$->005E2D58$->005E7F7C$->005E8A3C$->005E9AB4$->005EF7B4$->005DEF80$->005B9074$->005CE534$->0015D80C$->001A32F0$->005A18AC$->0059A624$",
        "5357" : "0xb109bc->0x9163b8->0x8e28d0->0x107714->0x10fda0->0x15410->0x15908->0x16c30->0x25bf28->0x25c158->0x25c208->0x2[06-04-12:03]5ca40->0x8fb000",
        "5614" : "00733BE4$->005E8DF4$->005DB74C$->005DCF58$->005D5988$",
        "5765" : "00701550$->001AD4D4$->001B7BCC$->0001D054$->0001B644$->0001CAC4$->000151AC$->00015DC8$->00018450$->00036300$->005C720C$",
        "5941" : "0x767ca8->0x762e70->0x759978->0x115a0",
        "6342" : "0xb10988->0xb24f64->0xb1b8c8->0xb1d350->0x8df530->0xb15c84->0x8df530->0x8df890->0xb154b0",
        "6348" : "0x623108->0x623228->0x1f518->0x24218->0x16070->0x18788->0x37f30->0x81b708",
        "6384" : "0x9b08b8",
        "6465" : "0xdf648->0xc0070->0xd2220->0xca3f8->0xabfb0->0xb2c78->0x81cfc8",
        "6622" : "0xa9c594->0x1234c24->0x31e95c->0x31f8dc->0x3488e8->0x34a0e4->0x3477b0->0x31b884->0x31bed4->0x8904fc",
        "7534" : "0xe2ddd0->0x17b4790->0xbbee30->0xe31df4->0xe2dd14->0x17b4790"
    },
    
    
    "stack_frame2" : {
        "7083" : "0x0089aa90 0x009110e4 0x00911e74 0x00723020",
        "7276" : "0x00b4d490 0x00b1c958 0x00b1d7e0 0x002e8b10 0x002edb18 0x002f2cc0 0x00b35898",
        "7083" : "0x00628ca8 0x0094b968 0x0094c790 0x00946b18",
        "7083" : "0x008b7748 0x00951ff8 0x008c880c 0x008ca988 0x008c4650 0x008c6928 0x008c6b1c 0x0070ffc4 0x007299d8",
        "7083" : "0x00ae7fd0 0x00ddb920 0x00ddbf00 0x00ddf270 0x00d97958 0x00d8b6d0 0x00d8e1f0 0x00b1b710 0x00d846f8 0x00d7ff54"
        
    },
    
    "task_note": {
        "5167": {
            "task_dscr"   : "RSR20-14运行一段时间异常重启并且RGOS无法加载，需要重新灌软件版本，才能恢复。",
            "task_reason" : "本故障现象，是由于文件系统的summary数据结构被破坏，导致RGOS主程序丢失。而且summary数据结构被破坏后，文件系统内部检查到该错误（属于严重错误），报告错误后重启系统，进而暴露了主程序丢失的故障。",
            "task_method" : "升级到新的设备版本(该版本必须具备summary数据结构保护功能，已知的解决分支是10.4(3T107))"
        },
        "5357": {
            "task_dscr"   : "1、RSR30-44 10.4（3b11）版本，在主程序模式下升级到10.4（3b12）p1版本，版本拷入flash成功，但是重启设备，升级失败，无法正常进入主程序。\r\n2、在CTRL层通过tftp方式进行升级，10.4（3b12）p1版本正常拷入flash，重启设备，无法正常启动，有如下报错信息\r\n3、在CTRL模式下，通过tftp方式升级到10.4（3b11）版本，设备正常启动。",
            "task_reason" : "PKI在配置trustpoint的时候需要建立两级目录/pkistore/CA，建立第一级目录的代码通过hb_add_param_after_init_hook注册的回调调用，可能在刷配置之前还没有被调用，所以/pkistore目录没有建立的时候，刷配置就开始调用文件系统的接口创建/pkistore/CA，调用这个接口污染了堆空间，导致调用kfree释放内存的时候死机。",
            "task_method" : "升级新版本，另该问题有一个规避方法：可以通告命令手工创建/pkistore目录后再进行升级，这样可以升级成功"
        },
        "5614": {
            "task_dscr"   : "将主引擎卡拔掉的时候，SIP2出现异常重启现象。",
            "task_reason" : "PCIE芯片故障，备卡完全下电有延时，在这个期间备主控检测到中断并执行UP/NT的快速切换，UP/NT的非正常切换，导致线卡与主主控之间的PCIE不通，线卡10s后重启。",
            "task_method" : "升级到新版本(其对应的内测 BUGID: 186510， 对应项目: 10.4(3b21))"
        },
        "5765": {
            "task_dscr"   : "路由器上使用xmodem功能后，show run、保存配置等操作设备就死机重启了。",
            "task_reason" : "在实现nmx-24esw xmodem升级功能的时候，只考虑了rsr20主机，没有考虑rsr10.导致在10上获取异步口的tty的时候判断条件有误。从flash拷贝文件到xmodem的时候，会出现功能不可用的现象。当从xmode拷贝文件到flash的时候，在获取到tty为空，打印了较多的调试信息。而以前的代码中，使用了一个数组来保存调试信息信息，当打印信息较多的时候就会溢出，导致死机。",
            "task_method" : "目前RSR10/20老品已经停产，亦没有新版本规划，该问题已经在新的P版本导入解决，对应的内测bug id：189007"
        },
        "5941": {
            "task_dscr"   : "做了ip ref在所有三层接口配置的操作，结果是一配置上RSR50就不断重启了。",
            "task_reason" : "客户网络中存在VOIP的报文，而实际设备上并没有开启VOIP功能，当设备收到VOIP报文时，还是进行了处理。在处理过程中出现异常，最终出现内存不足现象，这个品控总共出现了3个死机，分别是：\r\n1.加密驱动死锁，被狗咬死，重启；\r\n2.清除隧道，把隧道SA的地址置为0，转发面在读SA地址时候，出现读0地址死机；\r\n3.重复释放ACL内存导致死机。",
            "task_method" : "升级到新版本"
        },
        "6342": {
            "task_dscr"   : "设备自动重启出现堆栈。",
            "task_reason" : "异常报文导致buff链被破坏，触发异常重启",
            "task_method" : "升级到新版本"
        },
        "6348": {
            "task_dscr"   : "RSR20-14E设备自动重启，底层可见系统挂起信息。debug模式下，show ex发现有设备System HALT!日志信息，单体进行测试，System HALT!信息未再复现。",
            "task_reason" : "1，BUG只出现一次，现场再重复操作也没有重现。\r\n2，室内进行大量软件和硬件分析也没有找到问题原因。与张世伟达成一致，设置成悬而未决状态。但跟据流程必须先设置成提供解决方案状态。。",
            "task_method" : "该问题研发得不到有效信息，内部多次重现无果，仍处于未解决状态，故请联系技术支持人员，收集信息进行后续的分析解决。"
        },
        "6384": {
            "task_dscr"   : "设备返回后，上电确认故障重现。主机可以正常加载及运行主程序，但主程序加载完成后，过大概2分钟后即重启，尔后待主程序再次加载完成后，过大概2分钟后又再次重启，如此反复。",
            "task_reason" : "对硬件CPU外围电路再次进行了排查，没有发现有异常；基本可以确认是CPU本身问题。",
            "task_method" : "可能是CPU硬件问题，请技术人员确认CPU是否匹配后续信息:\r\n  CPU料号：V-39130039-000\r\n  型号：Networking Processors,CN5010-500BG564-SCP-G,500MHz,BGA_564,F=1.0mm,盘装\r\n如匹配则需要更换设备或者CPU。"
        },
        "6465": {
            "task_dscr"   : "RSR10-02E设备自动重启，底层可见系统挂起信息。debug模式下，show ex发现有设备System HALT!日志信息。与一台RSR20-14E模拟了一下vpn server，和故障设备直连，做了个测试，如附件“模拟测试log.txt”。通过测试，发现ping数据包触发ipsec隧道后设备重启。设备重启时候有一条日志如下：Not support CRYPTO。",
            "task_reason" : "CPU用料错误，由维修段引入。",
            "task_method" : "设备硬件故障，请更换设备或者返回生产厂家维修。"
        },
        "6622": {
            "task_dscr"   : "RSR30巡检发现死机堆栈信息。",
            "task_reason" : "故障设备的信息只能定位问题是语音模块访问非法地址造成设备重启，但无法定位具体原因。分析故障信息无法找到重现方法，而室内尝试重现也没有成功，只能走查代码。经过努力最终终于定位问题：通话结束服务中心话务员需要用户评价服务的时候，用户没有评价服务而是马上直接挂掉了电话，导致RSR30设备将portnum号置为初始值，这时如果切换到话评会进行空媒体集协商，而由于分配的portnum已经置为了初始值，所以获取到的boradnum就会出错，从而导致死机。",
            "task_method" : "升级到新版本，对应分支是10.4(3B11)p2T1或10.4(3b13)p2。"
        },
        "7083": {
            "task_dscr"   : "RSR77路由器的线卡突然中断了两次，业务切换备机上运行，并且有日志提示错误。从日志看，线卡发生重启，所有接口断开。在引擎界面下看 无Exception信息，在vtty 1/1 下，存在3个Exception信息。",
            "task_reason" : "通过复现可以确认FNM-4GE线卡在对内存进行频繁的访问时会触发总线访问异常，可以确认是硬件单卡故障，客户现场通过替换备件可以解决问题。",
            "task_method" : "硬件故障，需替换新的FNM-4GE线卡"
        },
        "7276": {
            "task_dscr"   : "RSR20-14E做二级路由，在运行过程中发现设备死机，无法重启，随后在boot层下将原来config.text删除后，重启成功。该路由器做为二级路由，下联终端，做dhcp服务器。",
            "task_reason" : "进dhcp snooping模块，重复释放内存死机,在dhcp snooping功能的设备上有可能走入该流程。",
            "task_method" : "删除dhcp snooping的配置"
        },
        "7526": {
            "task_dscr"   : "将主引擎卡拔掉的时候，SIP2出现异常重启现象RSR7708做校园网出口与SAM进行联动；在9月13日进行设备巡检时，发现FNM-2XFS 线卡有重启的情况，并有堆栈信息。",
            "task_reason" : "1、NLB代码走查，用户链表节点回收存在问题，会导致RCU机制下，读用户链有可能读到空闲链，在空闲链上遍历时，由于head已经变化，会导致存在死循环的可能。",
            "task_method" : "升级到特定版本，如10.4(3b31)T3 release(191365)或者10.4(3b32)T10 release(191365)"
        },
        "7534": {
            "task_dscr"   : "2014年9月客户采购锐捷RSR30-44替换原来友商设备作为外联单位出口。在9月14日，客户收到系统短信，外联路由器ip地址不可达，经过查看设备面板系统状态灯闪烁，链路灯不亮，确定设备正在重启，4、5分钟后网络正常。事后一线去现场收集信息，发现存在堆栈信息，主要集中在9月份，其中8号两次，9号有5次，11号6次，14号1次。",
            "task_reason" : "为了解决某个外联单位的e1接口会有频繁updown的情况，运营商动过RSR3044 e1接口卡线缆，由于线卡没有旋紧紧固螺钉，导致线卡松动，信号接触不良，触发软件访问异常。",
            "task_method" : "可能是线卡插头接触不良，导致电压不稳定，请紧固线卡及线卡上的螺钉。"
        },
        "7602": {
            "task_dscr"   : "使用我司12台RSR77设备以及1台50e-40，主要业务为BGP mpls。24日项目部署上线了9台77，1台50e，在25日有初步业务运行过程中，发现有两台77以及RSR50E-40的FNM-4GE-1出现异常重启复位。",
            "task_reason" : "本BUG 在3b31暴露，是因为MPLS的邻接调整了数据结构，将邻接ID的最高位(31bit)置1了。用做了某种用途。而本bug场景下（MPLS场景PE设备MPLS侧接口IP重定向），导致一个隐藏的bug暴露了出来，原来这个最高位没有置1，所以没有暴露。以前的版本，虽然IP重定向功能失效，但也不会导致死机，在现实网络中影响也不大。",
            "task_method" : "将版本回退到3b21, 3B21的版本不会暴露这个死机问题。"
        },
        "7650": {
            "task_dscr"   : "使用RSR20-14E做网点接入，在11月18日以及11月9日分别出现两起RSR20-14E挂死现象，导致网点业务受阻，需重启设备恢复业务。由于广东农行支行网点设备定牌为锐捷设备，全网大概有3000多台锐捷设备在运行。",
            "task_reason" : "室内已经重现问题，11个MAC地址5秒安全通道重新认证一次，大概3小时出现，也就是重现概率大概是118800次。根据银行设备的使用频率来看，出现概率极低。",
            "task_method" : "研发在新版本中解决了该bug，售后根据情况在适当的时候更新农行推荐版本用于后继例行的版本升级维护。"
        }
    }
    
}
---------------------------code-------------------------------
isBigbox =  precondition('bigbox')

cli('enable')
if isBigbox :
    selectedSlot = precondition('selectedSlot')
    if ((selectedSlot != 'M1') && (selectedSlot != 'M2')) :
        clicmd = 'vtty ' + selectedSlot
        cli(clicmd,'controled')
        cli('enable')
    end
end

startTimeRes = cli('show version')
#print startTimeRes
startTimeArr = startTimeRes.match(/System start time\s+:\s+(.*)\r?\n/)
startTime = startTimeArr[1]

cli('debug support')
stackInfoRes = cli('show exception')
#stackInfoRes = "Ruijie(support)#show exception\r\nException address is 0x110000!\r\n======================================================================\r\nException Head Information\r\n======================================================================\r\nTime: 2016-01-13 19:9:29               size: 931\r\nException Message:\r\nSystem Exception Occured  : Program (0x00700)\r\nTrace Stack Frame:\r\n00733BE4$->005E8DF4$->005DB74C$->005DCF58$->005D5988$<end>\r\nCurrent Thread Name: ktimer\r\n"

threadNameJson = get_configure_value('current_thread')
systemExceptionJson = get_configure_value('system_exception')
stackFrameJson1 = get_configure_value('stack_frame1')
stackFrameJson2 = get_configure_value('stack_frame1')
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')

#第一种异常格式
if stackInfoRes.indexOf('Time:') != -1  && stackInfoRes.indexOf('Exception address is') != -1: 

    stackTimeArr = stackInfoRes.match(/Time:\s+(.*)size/)
    threadNameArr =  stackInfoRes.match(/Current Thread Name:\s+(.*)\r?\n/)
    stackExceptionArr = stackInfoRes.match(/System Exception Occured\s+:\s+(.*)\r?\n/)
    stackFrameArr = stackInfoRes.match(/Trace Stack Frame:\r?\n(.*)<end>\r?\n/)
    
    #对比时间差在一小时内
    stackTime = stackTimeArr[1]
    startTimeSplitArr = startTime.match(/(.*)-(.*)-(.*)\s+(.*):(.*):(.*)/)
    stackTimeSplitArr = startTime.match(/(.*)-(.*)-(.*)\s+(.*):(.*):(.*)/)
    startTimeYear = startTimeSplitArr[1]
    startTimeMonth = startTimeSplitArr[2]
    startTimeDay = startTimeSplitArr[3]
    startTimeHour = startTimeSplitArr[4]
    startTimeMinute = stackTimeSplitArr[5]
    stackTimeYear = stackTimeSplitArr[1]
    stackTimeMonth = startTimeSplitArr[2]
    stackTimeDay = stackTimeSplitArr[3]
    stackTimeHour = stackTimeSplitArr[4]
    stackTimeMinute = stackTimeSplitArr[5]
    
    if (startTimeYear == stackTimeYear && startTimeMonth == stackTimeMonth && startTimeDay == stackTimeDay) && ((stackTimeHour*3600+stackTimeMinute*60) - (startTimeHour*3600+startTimeMinute*60) > -3600 && (stackTimeHour*3600+stackTimeMinute*60) - (startTimeHour*3600+startTimeMinute*60) < 3600) :
        thread_task = ''
        exception_task = ''
        stackFrame_task = ''
        
        threadName = threadNameArr[1]
        if threadNameJson.hasOwnProperty(threadName):
            thread_task = threadNameJson[threadName]
        end
        
        stackException = stackExceptionArr[1]
        if systemExceptionJson.hasOwnProperty(stackException):
            exception_task = systemExceptionJson[stackException]
        end
        
        #判断堆栈json中是否含有该堆栈
        stackFrame = stackFrameArr[1]
        stackFrame = stackFrame.replace(/\s+/g,"")
        stackFrameTaskIdArr = []
        foreach stackFramekey in stackFrameJson1 :
            stackFrameTemp = stackFrameJson1[stackFramekey]
            stackFrameTemp = stackFrameTemp.replace(/\s+/g,"")
            if stackFrameTemp == stackFrame :
                stackFrameTaskIdArr.push(stackFramekey)
            end
        end 

        thread_task = thread_task.trim()
        exception_task = exception_task.trim()
        #stackFrame_task = stackFrame_task.trim()
        threadTaskIdArr = thread_task.split(/\s+/)
        exceptionTaskIdArr = exception_task.split(/\s+/)
        #stackFrameTaskIdArr = stackFrame_task.split(/\s+/)
        
        print threadTaskIdArr
        print exceptionTaskIdArr
        print stackFrameTaskIdArr
        
        if thread_task == '' || exception_task == '' || stackFrameTaskIdArr.length == 0 :
            add_problem('exception_status',['未知故障','收集信息反馈给研发'])    
            return 'warn'   
        end 
        
        i = 0
        twoSameId = []
        while i < threadTaskIdArr.length :
            j = 0
            while j < exceptionTaskIdArr.length :
                if exceptionTaskIdArr[j] == threadTaskIdArr[i] :
                    threadTaskIDTemp = threadTaskIdArr[i]
                    twoSameId.push(threadTaskIDTemp)
                end
                j = j + 1
            end
            i = i + 1
        end
        
        m = 0
        n = 0
        k = 0
        threeSameId = []
        if twoSameId.length == 0 :
            if threadTaskIdArr.length > 0 :
                while k < threadTaskIdArr.length :
                    ID = threadTaskIdArr[k]
                    taskID = '参考故障 ' + ID
                    taskNoteJson = task_note[ID]
                    solver = '故障描述:' + taskNoteJson['task_dscr'] + '\r\n' + '故障原因:' + taskNoteJson['task_reason'] + '\r\n' + '故障解决方法：' + taskNoteJson['task_method']
                    add_problem('exception_status',[taskID,solver])
                    k = k + 1
                end
                return 'warn'
            end
        else :
            while m < twoSameId.length :
                n = 0
                while n < stackFrameTaskIdArr.length :
                    if stackFrameTaskIdArr[n] == twoSameId[m] :
                        threadTaskIDTemp = twoSameId[m]
                        threeSameId.push(threadTaskIDTemp)
                    end
                    n = n + 1
                end
                m = m + 1 
            end
        end
        
        if threeSameId.length == 0 :
            if threadTaskIdArr.length > 0 :
                ID = threadTaskIdArr[0]
                taskID = '参考故障:' + ID
                taskNoteJson = task_note[ID]
                solver = '故障描述:' + taskNoteJson['task_dscr'] + '\r\n' + '故障原因:' + taskNoteJson['task_reason'] + '\r\n' + '故障解决方法：' + taskNoteJson['task_method']
                add_problem('exception_status',[taskID,solver])
                return 'warn'
            end
        else :
            ID = threeSameId[0]
            taskID = '故障:' + ID
            taskNoteJson = task_note[ID]
            solver = '故障描述:' + taskNoteJson['task_dscr'] + '\r\n' + '故障原因:' + taskNoteJson['task_reason'] + '\r\n' + '故障解决方法：' + taskNoteJson['task_method']
            add_problem('exception_status',[taskID,solver])
            return 'warn'
        end 
        
    else :
        return 'success'
    end
    
    
else if stackInfoRes.indexOf('Time:') != -1  && stackInfoRes.indexOf('Exception Message:') != -1:

    stackTimeArr = stackInfoRes.match(/Time\s+:(.*)size/)
    threadNameArr =  stackInfoRes.match(/Current Thread:\s+<.*>(.*)\r?\n/)
    stackFrameArr = stackInfoRes.match(/name\r?\n(.*)<end>\r?\n/)
    
    #对比时间差在一小时内
    stackTime = stackTimeArr[1]
    startTimeSplitArr = startTime.match(/(.*)-(.*)-(.*)\s+(.*):(.*):(.*)/)
    stackTimeSplitArr = startTime.match(/(.*)-(.*)-(.*)\s+(.*):(.*):(.*)/)
    startTimeYear = startTimeSplitArr[1]
    startTimeMonth = startTimeSplitArr[2]
    startTimeDay = startTimeSplitArr[3]
    startTimeHour = startTimeSplitArr[4]
    startTimeMinute = stackTimeSplitArr[5]
    stackTimeYear = stackTimeSplitArr[1]
    stackTimeMonth = startTimeSplitArr[2]
    stackTimeDay = stackTimeSplitArr[3]
    stackTimeHour = stackTimeSplitArr[4]
    stackTimeMinute = stackTimeSplitArr[5]
    
    if (startTimeYear == stackTimeYear && startTimeMonth == stackTimeMonth && startTimeDay == stackTimeDay) && ((stackTimeHour*3600+stackTimeMinute*60) - (startTimeHour*3600+startTimeMinute*60) > -3600 && (stackTimeHour*3600+stackTimeMinute*60) - (startTimeHour*3600+startTimeMinute*60) < 3600) :
        thread_task = ''
        #stackFrame_task = ''
        
        threadName = threadNameArr[1]
        if threadNameJson.hasOwnProperty(threadName):
            thread_task = threadNameJson[threadName]
        end
        
        #将获取的堆栈拼接成字符串
        stackFrameString = stackFrameArr[1]
        stackSignleArr = stackFrameString.split(/\r?\n/)
        stackFrame = ''
        stackNum = 0 
        while stackNum < stackSignleArr.length - 1 :
            stackTemp = stackSignleArr[stackNum]
            stackFrame = stackFrame + stackTemp
            stackNum = stackNum + 1
        end
        
        #判断堆栈json中是否含有该堆栈
        stackFrameTaskIdArr = []
        foreach stackFramekey in stackFrameJson2 :
            stackFrameTemp = stackFrameJson2[stackFramekey]
            stackFrameTemp = stackFrameTemp.replace(/\s+/g,"")
            if stackFrameTemp == stackFrame :
                stackFrameTaskIdArr.push(stackFramekey)
            end
        end 
        
        thread_task_temp = thread_task.trim()
        threadTaskIdArr = thread_task_temp.split(/\s+/)
        
        if threadTaskIdArr.length == 0 || stackFrameTaskIdArr.length == 0 :
            add_problem('exception_status',['未知故障','收集信息反馈给研发'])    
            return 'warn'   
        end 
        
        i = 0
        j = 0
        twoSameId = []
        while i < threadTaskIdArr.length :
            j = 0
            while j < stackFrameTaskIdArr.length :
                if stackFrameTaskIdArr[j] == threadTaskIdArr[i] :
                    threadTaskIDTemp = threadTaskIdArr[i]
                    twoSameId.push(threadTaskIDTemp)
                end
                j = j + 1
            end
            i = i + 1
        end
        
        if twoSameId.length == 0 :
            if threadTaskIdArr.length > 0 :
                ID = threadTaskIdArr[0]
                taskID = '参考故障 ' + threadTaskIdArr[0]
                solver = '故障描述:' + task_dscr[ID] + '\r\n' + '故障原因:' + task_reason[ID] + '\r\n' + '故障解决方法：' + task_method[ID]
                add_problem('exception_status',[taskID,solver])
                return 'warn'
            end
        else :
            ID = twoSameId[0]
            taskID = '故障:' + ID
            solver = '故障描述:' + task_dscr[ID] + '\r\n' + '故障原因:' + task_reason[ID] + '\r\n' + '故障解决方法：' + task_method[ID]
            add_problem('exception_status',[taskID,solver])
            return 'warn'
        end
        
    else :
        return 'success'
    end
    
else :
    return 'success'
end



