MCS Examples

MCS Flow Filter

let flowData = `<_MasterCVX>:/Sysdb/mcs/status/cvp/groups/*/sources/<_source>`
if str(_group) != "" {
    if dictHasKey(flowData, _group){
        let flowData = newDict() | setFields(_group, flowData[_group])
    }else{
        let flowData = newDict()
    }
}

let mcsReceiver = `<_MasterCVX>:/Sysdb/mcs/status/cvp/groups/*/sources/<_source>/receiver`
if str(_group) != "" {
    if dictHasKey(mcsReceiver, _group){
    let mcsReceiver = newDict() | setFields(_group, mcsReceiver[_group])
    }else{
        let mcsReceiver = newDict()
    }
}
let hopDevice = `<_MasterCVX>:/Sysdb/mcs/status/cvp/groups/*/sources/<_source>/hopDevice`
if str(_group) != "" {
    if dictHasKey(hopDevice, _group){
    let hopDevice = newDict() | setFields(_group, hopDevice[_group])
    }else{
        let hopDevice = newDict()
    }
}

let flowStatus = `<_MasterCVX>:/Sysdb/mcs/status/cvp/groups/*/sources/<_source>/status`
if str(_group) != ""{
    if dictHasKey(flowStatus, _group) {
    let flowStatus = newDict() | setFields(_group, flowStatus[_group])
    }else{
        let flowStatus = newDict()
    }
}

let status = newDict()
for group, groupDetails in flowStatus{
    let statusData = merge(groupDetails)
    for statusKey, statusVal in statusData{
        let statusKey = complexKey(str(statusKey))
        if statusVal["Name"] != "noError"{
            status[statusKey["device"] + " intf " + statusKey["intfId"]] =  "Error Code "+ str(statusVal["Value"])+ " with Value " + statusVal["Name"]
        }
    }
}

let source = str(_source)
let isGroup = false
if str(_group) != "" {
    let isGroup = true
}
let result = newDict()
let flowBw = ""
let isInactiveReceiver = true

for group, groupDetails in flowData{
    let data = merge(groupDetails)
    if dictHasKey(data, "flowBw"){
        let flowBw = str(data["flowBw"]["value"]) + " " + data["flowBw"]["type"]["Name"]
    }

    if dictHasKey(data, "sender") && data["sender"]["devId"] != "00:00:00:00:00:00"{
        let mcsSender = data["sender"]

        let senderDevice = mcsSender["devId"]
        let senderKey = ""
        let iifneighborIntfId = (mcsSender["iif"]["neighborIntfId"] != "") ? mcsSender["iif"]["neighborIntfId"] : "N/A"
        let iifintfId = (mcsSender["iif"]["intfId"] != "") ? mcsSender["iif"]["intfId"] : "N/A"
        let iifneighborHostname = (mcsSender["iif"]["neighborHostname"] != "") ? mcsSender["iif"]["neighborHostname"] : "N/A"
        let iifneighDevId = (mcsSender["iif"]["neighborDevId"] != "") ? mcsSender["iif"]["neighborDevId"] : "N/A"

        if dictHasKey(mcsSender, "oifs"){
            for oifDetail, value in mcsSender["oifs"]{

                let oifIntfId = (oifDetail["intfId"] != "") ? oifDetail["intfId"] : "N/A"
                let senderKey = senderDevice + " intf " + oifIntfId + " source "+str(_source) + " " + str(group)
                let neighborDevId = (oifDetail["neighborDevId"] != "") ? oifDetail["neighborDevId"] : "N/A"
                let neighborHostname = (oifDetail["neighborHostname"] != "") ? oifDetail["neighborHostname"] : "N/A"
                let neighborIntfId = (oifDetail["neighborIntfId"] != "") ? oifDetail["neighborIntfId"] : "N/A"

                if !dictHasKey(result,senderKey){
                    result[senderKey] = newDict()
                    result[senderKey]["FLOW BW"] = flowBw
                    if ! isGroup{
                        result[senderKey]["GROUP"] = group
                    }

                    result[senderKey]["MAC ADDRESS"] = senderDevice
                    result[senderKey]["HOSTNAME (incl roles and trackingId)"] = mcsSender["hostname"] + " has sender " + " with trackingId "+str(mcsSender["iif"]["trackingId"])
                    result[senderKey]["INACTIVE RECEIVER"] = isInactiveReceiver
                    result[senderKey]["OIF (OUT)"] = ""
                    result[senderKey]["OIF neighbor information"] = "mac address - " + neighborDevId
                    result[senderKey]["IIF neighbor information"] = "mac address - " + iifneighDevId + " hostname - "+ iifneighborHostname +" interface -"+ iifneighborIntfId
                    result[senderKey]["IIF (IN)"] = iifintfId
                    result[senderKey]["FAIL STATUS"] = ""
                    result[senderKey]["SENDER LABEL"] = mcsSender["iif"]["label"]

                    let isInactiveReceiver = false
                    result[senderKey]["INACTIVE RECEIVER"] = false
                }

                result[senderKey]["OIF (OUT)"] = oifIntfId
                result[senderKey]["OIF neighbor information"] = "mac address - " + neighborDevId + " hostname - "+ neighborHostname +" interface -"+ neighborIntfId
                }
            }
        if senderKey == ""{
            let senderKey = senderDevice + " source "+str(_source) + " " + str(group)
        }

        if !dictHasKey(result,senderKey){
            result[senderKey] = newDict()
            result[senderKey]["FLOW BW"] = flowBw
            if ! isGroup{
                result[senderKey]["GROUP"] = group
            }

            result[senderKey]["MAC ADDRESS"] = senderDevice
            result[senderKey]["HOSTNAME (incl roles and trackingId)"] = mcsSender["hostname"] + " has sender " + " with trackingId "+str(mcsSender["iif"]["trackingId"])
            result[senderKey]["INACTIVE RECEIVER"] = isInactiveReceiver
            result[senderKey]["OIF (OUT)"] = ""
            result[senderKey]["OIF neighbor information"] = ""
            result[senderKey]["FAIL STATUS"] = ""

            result[senderKey]["IIF (IN)"] = iifintfId

            result[senderKey]["IIF neighbor information"] =  "mac address - " + iifneighDevId + " hostname - "+ iifneighborHostname +" interface -"+ iifneighborIntfId
            result[senderKey]["SENDER LABEL"] = mcsSender["iif"]["label"]

            let isInactiveReceiver = false
            result[senderKey]["INACTIVE RECEIVER"] = false
        }
    }
}
for group, groupDetails in mcsReceiver{
        let receiverData = merge(groupDetails)
        for dev, devDetails in receiverData{
        let receiverKey = ""
        let iifneighborHostname = (devDetails["iif"]["neighborHostname"] != "") ? devDetails["iif"]["neighborHostname"] : "N/A"
        let iifneighborIntfId = (devDetails["iif"]["neighborIntfId"] != "") ? devDetails["iif"]["neighborIntfId"] : "N/A"
        let iifintfId = (devDetails["iif"]["intfId"] != "") ? devDetails["iif"]["intfId"] : "N/A"
        let iifneighDevId = (devDetails["iif"]["neighborDevId"] != "") ? devDetails["iif"]["neighborDevId"] : "N/A"


        for oifDetail, value in devDetails["oifs"]{

            let oifIntfId = (oifDetail["intfId"] != "") ? oifDetail["intfId"] : "N/A"
            let neighborDevId = (oifDetail["neighborDevId"] != "") ? oifDetail["neighborDevId"] : "N/A"
            let neighborHostname = (oifDetail["neighborHostname"] != "") ? oifDetail["neighborHostname"] : "N/A"
            let neighborIntfId = (oifDetail["neighborIntfId"] != "") ? oifDetail["neighborIntfId"] : "N/A"
            let receiverKey = dev + " intf " + oifIntfId+ " source "+str(_source) + " " + str(group)

            if !dictHasKey(result,receiverKey){
                    result[receiverKey] = newDict()
                    result[receiverKey]["MAC ADDRESS"] = dev
                    if ! isGroup{
                        result[receiverKey]["GROUP"] = group
                    }
                    result[receiverKey]["FLOW BW"] = flowBw
                     result[receiverKey]["FAIL STATUS"] = ""
                    result[receiverKey]["HOSTNAME (incl roles and trackingId)"] = devDetails["hostname"]+ " has receiver " + " with trackingId " +str(oifDetail["trackingId"])
                    result[receiverKey]["INACTIVE RECEIVER"] = isInactiveReceiver
                    result[receiverKey]["OIF (OUT)"] = ""
                    result[receiverKey]["OIF neighbor information"] = ""
                    result[receiverKey]["IIF (IN)"] = iifintfId
                    result[receiverKey]["IIF neighbor information"] =  "mac address - " + iifneighDevId + " hostname - "+ iifneighborHostname +" interface -"+ iifneighborIntfId
                    if dictHasKey(status, dev + " intf " + oifIntfId){
                        result[receiverKey]["FAIL STATUS"] = status[dev + " intf " + oifIntfId]
                    }

                }
            if dictHasKey(result, receiverKey){
                result[receiverKey]["HOSTNAME (incl roles and trackingId)"] = result[receiverKey]["HOSTNAME (incl roles and trackingId)"] + " has receiver " + " with trackingId " +str(oifDetail["trackingId"])

            }

            result[receiverKey]["OIF (OUT)"] =  oifIntfId
            result[receiverKey]["OIF neighbor information"] = "mac address - " + neighborDevId + " hostname - "+ neighborHostname +" interface -"+ neighborIntfId
        }
        if receiverKey == ""{
                let receiverKey = dev+ " source "+str(_source) + " " + str(group)
        }
        if ! dictHasKey(result, receiverKey){

            let neighborHostname = (devDetails["iif"]["neighborHostname"] != "") ? devDetails["iif"]["neighborHostname"] : "N/A"
            let neighborIntfId = (devDetails["iif"]["neighborIntfId"] != "") ? devDetails["iif"]["neighborIntfId"] : "N/A"
            let intfId = (devDetails["iif"]["intfId"] != "") ? devDetails["iif"]["intfId"] : "N/A"
            result[receiverKey]["IIF (IN)"] = intfId
            result[receiverKey]["IIF neighbor information"] =  "mac address - " + iifneighDevId + " hostname - "+ iifneighborHostname +" interface -"+ iifneighborIntfId
            result[receiverKey]["OIF (OUT)"] = ""

        }

    }
}
for group, groupDetail in hopDevice{
    let hopData = merge(groupDetail)
    for dev, devDetails in hopData{
        let resultKey = dev + " source "+str(_source) + " " + str(group)
        if ! dictHasKey(result, dev){
            result[resultKey] = newDict()
            result[resultKey]["MAC ADDRESS"] = dev
            result[resultKey]["FLOW BW"] = ""
            if ! isGroup{
                result[resultKey]["GROUP"]= group
            }

            result[resultKey]["FAIL STATUS"] = ""
            result[resultKey]["HOSTNAME (incl roles and trackingId)"] = devDetails["hostname"]+ " has hopDevice "
            result[resultKey]["FLOW BW"] = flowBw
            result[resultKey]["INACTIVE RECEIVER"] = isInactiveReceiver
            let neighborHostname = (devDetails["iif"]["neighborHostname"] != "") ? devDetails["iif"]["neighborHostname"] : "N/A"
            let neighborIntfId = (devDetails["iif"]["neighborIntfId"] != "") ? devDetails["iif"]["neighborIntfId"] : "N/A"
            let intfId = (devDetails["iif"]["intfId"] != "") ? devDetails["iif"]["intfId"] : "N/A"
            let iifneighDevId = (devDetails["iif"]["neighborDevId"] != "") ? devDetails["iif"]["neighborDevId"] : "N/A"

            result[resultKey]["IIF (IN)"] = intfId
            result[resultKey]["IIF neighbor information"] =  "mac address - " + iifneighDevId + " hostname - "+ iifneighborHostname +" interface -"+ iifneighborIntfId
            result[resultKey]["OIF (OUT)"] = ""
        }
        for oifDetail, value in devDetails["oifs"]{
            let oifIntfId = (oifDetail["intfId"] != "") ? oifDetail["intfId"] : "N/A"
            let neighborHostname = (oifDetail["neighborHostname"] != "") ? oifDetail["neighborHostname"] : "N/A"
            let neighborIntfId = (oifDetail["neighborIntfId"] != "") ? oifDetail["neighborIntfId"] : "N/A"
            let neighborDevId = (oifDetail["neighborDevId"] != "") ? oifDetail["neighborDevId"] : "N/A"
            result[resultKey]["OIF neighbor information"] = "mac address - " + neighborDevId + " hostname - "+ neighborHostname +" interface -"+ neighborIntfId
            result[resultKey]["OIF (OUT)"] = result[resultKey]["OIF (OUT)"] + oifIntfId

        }
    }
}
result
EoL Planning

Download the Dashboard JSON here