ping: don't return success on failed pings
fixes #6298 License: MIT Signed-off-by: Steven Allen <steven@stebalien.com>
Steven Allen committed
May 8, 2019 at 22:19 UTC
cab9ddf1ed0d1ab353803539595cc92c011f541c
3 files changed
+55
-36
core/commands/ping.go
+25
-16
@@ -105,39 +105,48 @@ trip latency information.
105
106
ctx, cancel := context.WithTimeout(req.Context, kPingTimeout*time.Duration(numPings))
107
defer cancel()
108
- pings, err := ping.Ping(ctx, n.PeerHost, pid)
109
- if err != nil {
110
- return res.Emit(&PingResult{
111
- Success: false,
112
- Text: fmt.Sprintf("Ping error: %s", err),
113
- })
114
- }
108
+ pings := ping.Ping(ctx, n.PeerHost, pid)
109
116
- var total time.Duration
110
+ var (
111
+ count int
112
+ total time.Duration
113
+ )
114
ticker := time.NewTicker(time.Second)
115
defer ticker.Stop()
116
+
117
for i := 0; i < numPings; i++ {
120
- t, ok := <-pings
118
+ r, ok := <-pings
119
if !ok {
120
break
121
}
122
125
- if err := res.Emit(&PingResult{
126
- Success: true,
127
- Time: t,
128
- }); err != nil {
123
+ if r.Error != nil {
124
+ err = res.Emit(&PingResult{
125
+ Success: false,
126
+ Text: fmt.Sprintf("Ping error: %s", r.Error),
127
+ })
128
+ } else {
129
+ count++
130
+ total += r.RTT
131
+ err = res.Emit(&PingResult{
132
+ Success: true,
133
+ Time: r.RTT,
134
+ })
135
+ }
136
+ if err != nil {
137
return err
138
}
139
132
- total += t
133
-
140
select {
141
case <-ticker.C:
142
case <-ctx.Done():
143
return ctx.Err()
144
}
145
}
140
- averagems := total.Seconds() * 1000 / float64(numPings)
146
+ if count == 0 {
147
+ return nil
148
+ }
149
+ averagems := total.Seconds() * 1000 / float64(count)
150
return res.Emit(&PingResult{
151
Success: true,
152
Text: fmt.Sprintf("Average latency: %.2fms", averagems),
go.mod
+8
-8
@@ -62,20 +62,20 @@ require (
62
github.com/jbenet/go-random v0.0.0-20190219211222-123a90aedc0c
63
github.com/jbenet/go-random-files v0.0.0-20190219210431-31b3f20ebded
64
github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2
65
- github.com/jbenet/goprocess v0.1.0
66
- github.com/libp2p/go-libp2p v0.0.21
65
+ github.com/jbenet/goprocess v0.1.2
66
+ github.com/libp2p/go-libp2p v0.0.23
67
github.com/libp2p/go-libp2p-autonat-svc v0.0.5
68
- github.com/libp2p/go-libp2p-circuit v0.0.4
69
- github.com/libp2p/go-libp2p-connmgr v0.0.3
70
- github.com/libp2p/go-libp2p-crypto v0.0.1
71
- github.com/libp2p/go-libp2p-host v0.0.2
72
- github.com/libp2p/go-libp2p-interface-connmgr v0.0.3
68
+ github.com/libp2p/go-libp2p-circuit v0.0.6
69
+ github.com/libp2p/go-libp2p-connmgr v0.0.4
70
+ github.com/libp2p/go-libp2p-crypto v0.0.2
71
+ github.com/libp2p/go-libp2p-host v0.0.3
72
+ github.com/libp2p/go-libp2p-interface-connmgr v0.0.4
73
github.com/libp2p/go-libp2p-kad-dht v0.0.10
74
github.com/libp2p/go-libp2p-kbucket v0.1.1
75
github.com/libp2p/go-libp2p-loggables v0.0.1
76
github.com/libp2p/go-libp2p-metrics v0.0.1
77
github.com/libp2p/go-libp2p-net v0.0.2
78
- github.com/libp2p/go-libp2p-peer v0.1.0
78
+ github.com/libp2p/go-libp2p-peer v0.1.1
79
github.com/libp2p/go-libp2p-peerstore v0.0.5
80
github.com/libp2p/go-libp2p-pnet v0.0.1
81
github.com/libp2p/go-libp2p-protocol v0.0.1
go.sum
+22
-12
@@ -267,8 +267,8 @@ github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2 h1:vhC1
267
github.com/jbenet/go-temp-err-catcher v0.0.0-20150120210811-aac704a3f4f2/go.mod h1:8GXXJV31xl8whumTzdZsTt3RnUIiPqzkyf7mxToRCMs=
268
github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8 h1:bspPhN+oKYFk5fcGNuQzp6IGzYQSenLEgH3s6jkXrWw=
269
github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY=
270
-github.com/jbenet/goprocess v0.1.0 h1:Dyy3+CibR6zXp050l0hSrXkv9MB4uhYqJw1PF5B3PYQ=
271
-github.com/jbenet/goprocess v0.1.0/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4=
270
+github.com/jbenet/goprocess v0.1.2 h1:TfvRwwUfgT/umj/REz2B8IxAKzUEX84+xdRAQ+eF2B8=
271
+github.com/jbenet/goprocess v0.1.2/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4=
272
github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
273
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
274
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
@@ -305,8 +305,8 @@ github.com/libp2p/go-libp2p v0.0.2 h1:+jvgi0Zy3y4TKXJKApchCk3pCBPZf1T54z3+vKie3g
305
github.com/libp2p/go-libp2p v0.0.2/go.mod h1:Qu8bWqFXiocPloabFGUcVG4kk94fLvfC8mWTDdFC9wE=
306
github.com/libp2p/go-libp2p v0.0.12 h1:UbZO296s6/Cvoz4LmymvL7LrXtHkD58Xtt8Iddx/N+I=
307
github.com/libp2p/go-libp2p v0.0.12/go.mod h1:l8kmLMc4DToz2TtA0aWEaE4/jVMALRKw8Kv2WTR0LHc=
308
-github.com/libp2p/go-libp2p v0.0.21 h1:Mc8T1G/5DsDe83/vc5wVliyiRWNVJsUowKOMLHjcJyQ=
309
-github.com/libp2p/go-libp2p v0.0.21/go.mod h1:fwhRaZJcLTSAga5HwobjX20lO2pOBx4vQSiKrZv6i/A=
308
+github.com/libp2p/go-libp2p v0.0.23 h1:r/LrjFWHVBTikzCTfNi8AG+7TilnoazAZcGq2a1IeK0=
309
+github.com/libp2p/go-libp2p v0.0.23/go.mod h1:LCZG1r7NRqnBKxrA9sU4KR7cAzze0DgL9j1GxyBFRyg=
310
github.com/libp2p/go-libp2p-autonat v0.0.2 h1:ilo9QPzNPf1hMkqaPG55yzvhILf5ZtijstJhcii+l3s=
311
github.com/libp2p/go-libp2p-autonat v0.0.2/go.mod h1:fs71q5Xk+pdnKU014o2iq1RhMs9/PMaG5zXRFNnIIT4=
312
github.com/libp2p/go-libp2p-autonat v0.0.3 h1:PUD+pAx8Qs9hh+Bowzxq8RCkg/Vwrz5oCFC4peixXQk=
@@ -323,12 +323,16 @@ github.com/libp2p/go-libp2p-circuit v0.0.1 h1:DYbjyQ5ZY3QVAVYZWG4uzBQ6Wmcd1C82Bk
323
github.com/libp2p/go-libp2p-circuit v0.0.1/go.mod h1:Dqm0s/BiV63j8EEAs8hr1H5HudqvCAeXxDyic59lCwE=
324
github.com/libp2p/go-libp2p-circuit v0.0.4 h1:yOgEadnSVFj3e9KLBuLG+edqCImeav0VXxXvcimpOUQ=
325
github.com/libp2p/go-libp2p-circuit v0.0.4/go.mod h1:p1cHJnB9xnX5/1vZLkXgKwmNEOQQuF/Hp+SkATXnXYk=
326
+github.com/libp2p/go-libp2p-circuit v0.0.6 h1:egD2CKFVdqnHgIHzPkM6J7m3MKZpFqoTPDfxBqQ7kRQ=
327
+github.com/libp2p/go-libp2p-circuit v0.0.6/go.mod h1:W34ISBRpoCPUeOR26xzTbLo+s3hDO9153hJCfvHzBlg=
328
github.com/libp2p/go-libp2p-connmgr v0.0.1 h1:9KP7UbP4a6fauLw954LhTGfovhkmMwvJsIf8G4CCons=
329
github.com/libp2p/go-libp2p-connmgr v0.0.1/go.mod h1:eUBBlbuwBBTd/eim7KV5x0fOD2UHDjSwhzmBL6miIx8=
328
-github.com/libp2p/go-libp2p-connmgr v0.0.3 h1:02yLgFXTcvnRFcBkEu5DjrHz3ttVdgjTQDhbuSdhk3w=
329
-github.com/libp2p/go-libp2p-connmgr v0.0.3/go.mod h1:pEeSX0NrJcgFxGDzvNGj5wP8x6fJWNj+MQwbtx6kZsI=
330
+github.com/libp2p/go-libp2p-connmgr v0.0.4 h1:eX42qNshgJOo/jHJHu2GHPKcUx//5t1sNy01T2mWwSc=
331
+github.com/libp2p/go-libp2p-connmgr v0.0.4/go.mod h1:C5FPJ5CPvrC+q3pNLI7PiqJeb3iB4uxaBpD/3peDGGI=
332
github.com/libp2p/go-libp2p-crypto v0.0.1 h1:JNQd8CmoGTohO/akqrH16ewsqZpci2CbgYH/LmYl8gw=
333
github.com/libp2p/go-libp2p-crypto v0.0.1/go.mod h1:yJkNyDmO341d5wwXxDUGO0LykUVT72ImHNUqh5D/dBE=
334
+github.com/libp2p/go-libp2p-crypto v0.0.2 h1:TTdJ4y6Uoa6NxQcuEaVkQfFRcQeCE2ReDk8Ok4I0Fyw=
335
+github.com/libp2p/go-libp2p-crypto v0.0.2/go.mod h1:eETI5OUfBnvARGOHrJz2eWNyTUxEGZnBxMcbUjfIj4I=
336
github.com/libp2p/go-libp2p-daemon v0.0.6/go.mod h1:nkhjsjSzkF+tg6iScsTTgq9m+VfyMtXNpycYG4CFvC8=
337
github.com/libp2p/go-libp2p-discovery v0.0.1 h1:VkjCKmJQMwpDUwtA8Qc1z3TQAHJgQ5nGQ6cdN0wQXOw=
338
github.com/libp2p/go-libp2p-discovery v0.0.1/go.mod h1:ZkkF9xIFRLA1xCc7bstYFkd80gBGK8Fc1JqGoU2i+zI=
@@ -336,12 +340,12 @@ github.com/libp2p/go-libp2p-discovery v0.0.2 h1:Rf+20nsFcCnHo4Kxvf8ofAft75+fW+cX
340
github.com/libp2p/go-libp2p-discovery v0.0.2/go.mod h1:ZkkF9xIFRLA1xCc7bstYFkd80gBGK8Fc1JqGoU2i+zI=
341
github.com/libp2p/go-libp2p-host v0.0.1 h1:dnqusU+DheGcdxrE718kG4XgHNuL2n9eEv8Rg5zy8hQ=
342
github.com/libp2p/go-libp2p-host v0.0.1/go.mod h1:qWd+H1yuU0m5CwzAkvbSjqKairayEHdR5MMl7Cwa7Go=
339
-github.com/libp2p/go-libp2p-host v0.0.2 h1:UnyDP7gmaUIYG3EUPnGc54K+KLFmI6V0Ozm+BQU9VQ8=
340
-github.com/libp2p/go-libp2p-host v0.0.2/go.mod h1:JACKb5geZ28rUiChzlzSFRC8XYYcLwsZq38h+a4D4Hs=
343
+github.com/libp2p/go-libp2p-host v0.0.3 h1:BB/1Z+4X0rjKP5lbQTmjEjLbDVbrcmLOlA6QDsN5/j4=
344
+github.com/libp2p/go-libp2p-host v0.0.3/go.mod h1:Y/qPyA6C8j2coYyos1dfRm0I8+nvd4TGrDGt4tA7JR8=
345
github.com/libp2p/go-libp2p-interface-connmgr v0.0.1 h1:Q9EkNSLAOF+u90L88qmE9z/fTdjLh8OsJwGw74mkwk4=
346
github.com/libp2p/go-libp2p-interface-connmgr v0.0.1/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
343
-github.com/libp2p/go-libp2p-interface-connmgr v0.0.3 h1:uN9FGH9OUJAtQ2G19F60Huu7s3TIYRBaJLUaW0PlCUo=
344
-github.com/libp2p/go-libp2p-interface-connmgr v0.0.3/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
347
+github.com/libp2p/go-libp2p-interface-connmgr v0.0.4 h1:/LngXETpII5qOD7YjAcQiIxhVtdAk/NQe5t9sC6BR0E=
348
+github.com/libp2p/go-libp2p-interface-connmgr v0.0.4/go.mod h1:GarlRLH0LdeWcLnYM/SaBykKFl9U5JFnbBGruAk/D5k=
349
github.com/libp2p/go-libp2p-interface-pnet v0.0.1 h1:7GnzRrBTJHEsofi1ahFdPN9Si6skwXQE9UqR2S+Pkh8=
350
github.com/libp2p/go-libp2p-interface-pnet v0.0.1/go.mod h1:el9jHpQAXK5dnTpKA4yfCNBZXvrzdOU75zz+C6ryp3k=
351
github.com/libp2p/go-libp2p-kad-dht v0.0.4/go.mod h1:oaBflOQcuC8H+SVV0YN26H6AS+wcUEJyjUGV66vXuSY=
@@ -370,6 +374,8 @@ github.com/libp2p/go-libp2p-peer v0.0.1 h1:0qwAOljzYewINrU+Kndoc+1jAL7vzY/oY2Go4
374
github.com/libp2p/go-libp2p-peer v0.0.1/go.mod h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J0AMzcDUVruVoo=
375
github.com/libp2p/go-libp2p-peer v0.1.0 h1:9D1St1vqXRkeAhNdDtpt8AivS1bhzA6yH+YWrVXWcWI=
376
github.com/libp2p/go-libp2p-peer v0.1.0/go.mod h1:nXQvOBbwVqoP+T5Y5nCjeH4sP9IX/J0AMzcDUVruVoo=
377
+github.com/libp2p/go-libp2p-peer v0.1.1 h1:qGCWD1a+PyZcna6htMPo26jAtqirVnJ5NvBQIKV7rRY=
378
+github.com/libp2p/go-libp2p-peer v0.1.1/go.mod h1:jkF12jGB4Gk/IOo+yomm+7oLWxF278F7UnrYUQ1Q8es=
379
github.com/libp2p/go-libp2p-peerstore v0.0.0-20190226201924-e2df3e49eabf/go.mod h1:lLfgn0N3z2t+ER57a88K7NTZjMO27ez5TyWSURd428E=
380
github.com/libp2p/go-libp2p-peerstore v0.0.1 h1:twKovq8YK5trLrd3nB7PD2Zu9JcyAIdm7Bz9yBWjhq8=
381
github.com/libp2p/go-libp2p-peerstore v0.0.1/go.mod h1:RabLyPVJLuNQ+GFyoEkfi8H4Ti6k/HtZJ7YKgtSq+20=
@@ -505,8 +511,8 @@ github.com/multiformats/go-multihash v0.0.5 h1:1wxmCvTXAifAepIMyF39vZinRw5sbqjPs
511
github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po=
512
github.com/multiformats/go-multistream v0.0.1 h1:JV4VfSdY9n7ECTtY59/TlSyFCzRILvYx4T4Ws8ZgihU=
513
github.com/multiformats/go-multistream v0.0.1/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg=
508
-github.com/multiformats/go-multistream v0.0.2 h1:uWy8f8Icfo9t/U80+CR5oqM84gSgNqh8xLB7rVslfcw=
509
-github.com/multiformats/go-multistream v0.0.2/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg=
514
+github.com/multiformats/go-multistream v0.0.3 h1:sRTU9QWosQWXteaM0PHCFVWSIHWxOyjdwL4MF7Lsdfg=
515
+github.com/multiformats/go-multistream v0.0.3/go.mod h1:fJTiDfXJVmItycydCnNx4+wSzZ5NwG2FEVAI30fiovg=
516
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
517
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
518
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
@@ -561,6 +567,10 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykE
567
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
568
github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa h1:E+gaaifzi2xF65PbDmuKI3PhLWY6G5opMLniFq8vmXA=
569
github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa/go.mod h1:2RVY1rIf+2J2o/IM9+vPq9RzmHDSseB7FoXiSNIUsoU=
570
+github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a h1:/eS3yfGjQKG+9kayBkj0ip1BGhq6zJ3eaVksphxAaek=
571
+github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0=
572
+github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU=
573
+github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc=
574
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=
575
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
576
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=