
{
    "name"  : "是否端口反复震荡",
    "precondition" : ["name"],
    "problems" : {
        "upDown_Fiber" : {
            "desc"      : "【问题】检测出端口${0}出现反复震荡，该问题会影响到上网质量。",
            "advice"    : "【建议】建议检查光纤线是否有污染、损坏，尝试更换正常使用光纤线及光模块看业务是否恢复。"
        },
        "upDown_Copper" : {
            "desc"      : "【问题】端口${0}存在大量错包导致端口丢包，该问题会严重影响上网质量。若丢包为历史遗留，可在特权模式下执行clear counter清除错包记录。",
            "advice"    : "【建议】建议更好其它正常使用的网线，查看是否业务恢复。"
        }
    }
}

---------------------------code-------------------------------
response = cli('show version detail')
if response.indexOf('11.') == -1:
	return 'skip'
end
intf = precondition('name')
intf_cmd = format('show interface %s link-state-change statistics',intf)
intf_upDown = cli(intf_cmd)
reg = /\w+[^ ]+\s+\w+\s+(\d+)\s+[^ ]+\s+[^ ]+/
reg_type = /[^ ]+Ethernet\s+[^ ]+\s+\w+\s+[^ ]+\s+[^ ]+\s+\d+M\s+(\w+)/
r = intf_upDown.match(reg)
if r != null:
    count = r[1]
    if count >= 500:
        inft_cmd = format('show interface %s status',intf)
        type_log = cli(inft_cmd)
        r_type = type_log.match(reg_type)
        if r_type != null:
            type = r_type[1]
            if type == "fiber":
                change_title('检测出端口存在反复震荡')
                add_problem('upDown_Fiber',[intf])
                return 'warn'
            end
            if type == "copper":
                change_title('检测出端口存在反复震荡')
                add_problem('upDown_Copper',[intf])
                return 'warn'
            end
        end
    end
end

change_title('检测出端无反复震荡')
return 'success'

