From a9ea07699e4f8c7b65d9ccb84d1ccc993f9e3cad Mon Sep 17 00:00:00 2001 From: Steph Enders Date: Sat, 11 Nov 2023 22:55:28 -0500 Subject: Initial commit of simple functional speedtest log This series of scripts simply calls speedtest-cli python module to basically log its data to a tsv file (expected log.tsv) This will basically allow then ./plot.sh to plot the file datapoints The idea is to set this up as a cron and then you can plot the data over time --- .gitignore | 2 ++ README | 19 +++++++++++++++++++ chart.gnuplot | 12 ++++++++++++ log.sh | 24 ++++++++++++++++++++++++ plot.sh | 1 + requirements.txt | 1 + 6 files changed, 59 insertions(+) create mode 100644 .gitignore create mode 100644 README create mode 100644 chart.gnuplot create mode 100755 log.sh create mode 100755 plot.sh create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2f10f56 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +log.tsv +.venv diff --git a/README b/README new file mode 100644 index 0000000..9e90f50 --- /dev/null +++ b/README @@ -0,0 +1,19 @@ +# speedtest logger + +This is basically just speedtest-cli --csv running indefinetly + +## CSV layout + +The current CSV headers are: + +Server ID,Sponsor,Server Name,Timestamp,Distance,Ping,Download,Upload,Share,IP Address + +To get just the download speeds in Mbps you can do: + +tail -n +2 log.txt | cut -f7 | numfmt --to-unit=M + +and similarly with -f8 for upload speeds + +## Ploting + +I've added a gnuplot script to generate these as a plot straight from the raw log file \ No newline at end of file diff --git a/chart.gnuplot b/chart.gnuplot new file mode 100644 index 0000000..1d674e3 --- /dev/null +++ b/chart.gnuplot @@ -0,0 +1,12 @@ +set datafile separator ' ' +#set xlabel "timestamp" +set ylabel "Mbps" +set title "Speedtest" +#set xdata time +#set timefmt "%Y-%m-%dT%H:%M:%S%Z" +#set format x "%m-%dT%H" +set format y "%.2s%cb" +#plot "log.tsv" using 4:7 with lines title "Download", \ +#"log.tsv" using 4:8 with lines title "Upload" +plot "log.tsv" using :7 with linespoint title "Download", \ +"log.tsv" using :8 with linespoint title "Upload" \ No newline at end of file diff --git a/log.sh b/log.sh new file mode 100755 index 0000000..7357c76 --- /dev/null +++ b/log.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +WORKING_DIR=$(dirname $0) +python3 -m venv $WORKING_DIR/.venv +source $WORKING_DIR/.venv/bin/activate +python3 -m pip install -r $WORKING_DIR/requirements.txt + +if [[ $# -ne 1 ]]; then + echo "You must supply a target file" + exit 1 +fi + +OUTPUT=$1 + +if [[ ! -f $OUTPUT ]]; then + speedtest-cli --csv-header | sed -E 's/,/\t/g' > $OUTPUT +fi + +len=$(wc -l $OUTPUT | cut -d' ' -f1) +if [[ $len -le 0 ]]; then + speedtest-cli --csv-header | sed -E 's/,/\t/g' > $OUTPUT +fi + +speedtest-cli --csv-delimiter ' ' --csv >> $OUTPUT diff --git a/plot.sh b/plot.sh new file mode 100755 index 0000000..dd7fa6c --- /dev/null +++ b/plot.sh @@ -0,0 +1 @@ +gnuplot -p chart.gnuplot diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..4b024b7 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +speedtest-cli -- cgit v1.2.3-54-g00ecf