Hello together,
after switching to another base image for our GenieACS Docker image, we noticed that the ping functionality does not work anymore because the ping API (e.g. /api/ping/8.8.8.8) doesn’t return all values:
{
"packetsTransmitted": 3,
"packetsReceived": 3,
"packetLoss": 0,
"min": null,
"avg": null,
"max": null,
"mdev": null
}
After some testing and looking at the relevant source code (https://github.com/genieacs/genieacs/blob/master/lib/ping.ts#L29) and testing at the CLI I noticed that the ping util from the busybox binary has other output than the standard iputils-ping linux util:
Busybox (v1.36.1):
/ # ping -w 1 -i 0.2 -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=63 time=14.593 ms
64 bytes from 8.8.8.8: seq=1 ttl=63 time=15.441 ms
64 bytes from 8.8.8.8: seq=2 ttl=63 time=15.628 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 14.593/15.220/15.628 ms
iputils-ping (iputils 20221126):
/ # ping -w 1 -i 0.2 -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=63 time=14.6 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=63 time=13.6 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=63 time=14.5 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 401ms
rtt min/avg/max/mdev = 13.623/14.232/14.616/0.435 ms
Problem seems to be the last line where rtt
is replaced by round-trip
(?) and the mdev
parameter missing This causes the RegEx to fail and therefore the output of the API call to be incomplete.
I could provide a pull request to include RegEx support for the busybox output but then the mdev
parameter would still be unpopulated. Another option would be to advise users to install iputils-ping
when using minimal distros or base images like alpine. Tested with node:18-alpine3.18
.
Any suggestions?