@cryptotaxi247 / kubo / commits / 6a91d1488

ping: compute average latency when interrupted

(this should always have been done on the client, IMO, but, oh well...) License: MIT Signed-off-by: Steven Allen <steven@stebalien.com>

Steven Allen committed May 8, 2019 at 22:54 UTC 6a91d14888ccb4d40ee427c5511ecb1110b21ce7
1 file changed +38
core/commands/ping.go
+38
@@ -153,6 +153,44 @@ trip latency information.
153 })
154 },
155 Type: PingResult{},
156 + PostRun: cmds.PostRunMap{
157 + cmds.CLI: func(res cmds.Response, re cmds.ResponseEmitter) error {
158 + var (
159 + total time.Duration
160 + count int
161 + )
162 +
163 + for {
164 + event, err := res.Next()
165 + switch err {
166 + case nil:
167 + case io.EOF:
168 + return nil
169 + case context.Canceled, context.DeadlineExceeded:
170 + if count == 0 {
171 + return err
172 + }
173 + averagems := total.Seconds() * 1000 / float64(count)
174 + return re.Emit(&PingResult{
175 + Success: true,
176 + Text: fmt.Sprintf("Average latency: %.2fms", averagems),
177 + })
178 + default:
179 + return err
180 + }
181 +
182 + pr := event.(*PingResult)
183 + if pr.Success && pr.Text == "" {
184 + total += pr.Time
185 + count++
186 + }
187 + err = re.Emit(event)
188 + if err != nil {
189 + return err
190 + }
191 + }
192 + },
193 + },
194 Encoders: cmds.EncoderMap{
195 cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, out *PingResult) error {
196 if len(out.Text) > 0 {