Zipkin span fix: use the first available IPv4 address from net.LookupIP
Bas van Beek
8 years ago
47 | 47 | if err != nil { |
48 | 48 | return nil |
49 | 49 | } |
50 | portInt, err := strconv.ParseInt(port, 10, 16) | |
51 | if err != nil { | |
52 | return nil | |
53 | } | |
50 | 54 | addrs, err := net.LookupIP(host) |
51 | 55 | if err != nil { |
52 | 56 | return nil |
53 | 57 | } |
54 | if len(addrs) <= 0 { | |
55 | return nil | |
56 | } | |
57 | portInt, err := strconv.ParseInt(port, 10, 16) | |
58 | if err != nil { | |
58 | // we need the first IPv4 address. | |
59 | var addr net.IP | |
60 | for i := range addrs { | |
61 | addr = addrs[i].To4() | |
62 | if addr != nil { | |
63 | break | |
64 | } | |
65 | } | |
66 | if addr == nil { | |
67 | // none of the returned addresses is IPv4. | |
59 | 68 | return nil |
60 | 69 | } |
61 | 70 | endpoint := zipkincore.NewEndpoint() |
62 | endpoint.Ipv4 = (int32)(binary.BigEndian.Uint32(addrs[0].To4())) | |
71 | endpoint.Ipv4 = (int32)(binary.BigEndian.Uint32(addr)) | |
63 | 72 | endpoint.Port = int16(portInt) |
64 | 73 | endpoint.ServiceName = serviceName |
65 | 74 | return endpoint |