You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If the JSON response from speedtest does not contain a property with the
value - `"type": "result"`, then a problem has occurred and the script
should not attempt to extract the values from the JSON object or perform
a database save.
Currently, a non-user friendly error message is shown when a problem
occurs, but we should prevent this script error and show a more friendly
message.
Another side effect of not handling the error is that the script will
exit with a non-zero status, in effect killing the container.
Network problems may be intermittent, and if the container is running
the speed tests in a loop, we want to be able to handle those
intermittent problems without the container dying.
Before this change:
```sh
docker run -e SPEEDTEST_SERVER_ID=123 -e LOOP=true -e LOOP_DELAY=5 barryevans80/speedtest:wip
Running speedtest forever... ♾️
Running a Speed Test with Server ID 123...
{"type":"log","timestamp":"2024-06-17T13:34:56Z","message":"Configuration - No servers defined (NoServersException)","level":"error"}
./speedtest.sh: 33: arithmetic expression: expecting primary: " / 125000 "
```
After this change:
```sh
docker run -e SPEEDTEST_SERVER_ID=123 -e LOOP=true -e LOOP_DELAY=5 barryevans80/speedtest:wip
Running speedtest forever... ♾️
Running a Speed Test with Server ID 123...
{"type":"log","timestamp":"2024-06-17T13:33:29Z","message":"Configuration - No servers defined (NoServersException)","level":"error"}
[error] Unable to retrieve JSON results from speedtest, please see previous log message
Running next test in 5s...
Running a Speed Test with Server ID 123...
{"type":"log","timestamp":"2024-06-17T13:33:36Z","message":"Configuration - No servers defined (NoServersException)","level":"error"}
[error] Unable to retrieve JSON results from speedtest, please see previous log message
Running next test in 5s...
```
---
The validation required to make the script more robust is achieved by
using a simple jq `select` function:
- `echo "$JSON" | jq 'select(.type == "result")'`
See more about the jq `select` function here:
- https://jqlang.github.io/jq/manual/#select
---
Some shellcheck fixes have been applied:
1. `$/${} is unnecessary on arithmetic variables.` - https://github.com/koalaman/shellcheck/wiki/SC2004
2. `Double quote to prevent globbing and word splitting.` - https://github.com/koalaman/shellcheck/wiki/SC2086
---
Sample successful json response
```json
{
"type": "result",
"timestamp": "2024-06-17T05:27:00Z",
"ping": {
"jitter": 0.852,
"latency": 288.814,
"low": 287.153,
"high": 289.37
},
"download": {
"bandwidth": 1591349,
"bytes": 22220160,
"elapsed": 15010,
"latency": {
"iqm": 286.068,
"low": 282.946,
"high": 293.54,
"jitter": 1.568
}
},
"upload": {
"bandwidth": 38988010,
"bytes": 493973670,
"elapsed": 15005,
"latency": {
"iqm": 295.051,
"low": 286.54,
"high": 379.607,
"jitter": 7.626
}
},
...
}
```
Sample failed json response
```json
{
"type": "log",
"timestamp": "2024-06-17T05:25:48Z",
"message": "Configuration - No servers defined (NoServersException)",
"level": "error"
}
```
0 commit comments