func path2data(path *table.Path) (map[string]interface{}, map[string]string) { fields := map[string]interface{}{ "RouterID": path.GetSource().ID, } if asPath := path.GetAsPath(); asPath != nil { fields["ASPath"] = asPath.String() } if origin, err := path.GetOrigin(); err == nil { typ := "-" switch origin { case bgp.BGP_ORIGIN_ATTR_TYPE_IGP: typ = "i" case bgp.BGP_ORIGIN_ATTR_TYPE_EGP: typ = "e" case bgp.BGP_ORIGIN_ATTR_TYPE_INCOMPLETE: typ = "?" } fields["Origin"] = typ } if med, err := path.GetMed(); err == nil { fields["Med"] = med } tags := map[string]string{ "PeerAddress": path.GetSource().Address.String(), "PeerAS": fmt.Sprintf("%v", path.GetSource().AS), "Timestamp": path.GetTimestamp().String(), } if nexthop := path.GetNexthop(); len(nexthop) > 0 { fields["NextHop"] = nexthop.String() } if originAS := path.GetSourceAs(); originAS != 0 { fields["OriginAS"] = fmt.Sprintf("%v", originAS) } if err := bgp.FlatUpdate(tags, path.GetNlri().Flat()); err != nil { log.Error(err) } for _, p := range path.GetPathAttrs() { if err := bgp.FlatUpdate(tags, p.Flat()); err != nil { log.Error(err) } } return fields, tags }
func path2data(path *table.Path) (map[string]interface{}, map[string]string) { fields := map[string]interface{}{ "ASPath": path.GetAsPath().String(), } if origin, err := path.GetOrigin(); err == nil { typ := "-" switch origin { case bgp.BGP_ORIGIN_ATTR_TYPE_IGP: typ = "i" case bgp.BGP_ORIGIN_ATTR_TYPE_EGP: typ = "e" case bgp.BGP_ORIGIN_ATTR_TYPE_INCOMPLETE: typ = "?" } fields["Origin"] = typ } if med, err := path.GetMed(); err == nil { fields["Med"] = med } var prefix, prefixLen string l := strings.Split(path.GetNlri().String(), "/") if len(l) == 2 { prefix = l[0] prefixLen = l[1] } tags := map[string]string{ "PeerAddress": path.GetSource().Address.String(), "PeerAS": fmt.Sprintf("%v", path.GetSource().AS), "Prefix": prefix, "PrefixLen": prefixLen, "NextHop": path.GetNexthop().String(), "OriginAS": fmt.Sprintf("%v", path.GetSourceAs()), "Timestamp": path.GetTimestamp().String(), } return fields, tags }