Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env bash
- ### Usage:
- ### speedtest-csv [options]
- ###
- ### Options:
- ### --debug Output extra debug information
- ### --header Display field names (only)
- ### --help This help
- ### --last Use most recent stats, iff available
- ### --quote <str> Use <str> as quotation mark
- ### --sep <str> Use <str> as field separator
- ### --standardize Standardize units and number formats
- ### --version Display version
- ###
- ### Example:
- ### speedtest-csv --standardize --sep '\t'
- ###
- ### Copyright: 2014-2016 Henrik Bengtsson
- ### License: GPL (>= 2.1) [http://www.gnu.org/licenses/gpl.html]
- call="$0 $*"
- # Temporary file holding speedtest-cli output
- user=$USER
- if test -z $user; then
- user=$USERNAME
- fi
- log=/tmp/$user/speedtest-csv.log
- # Local functions
- function mecho() { echo "$@" 1>&2; }
- function mdebug() {
- if [[ $debug == TRUE ]]; then
- mecho "[DEBUG] $@";
- fi
- }
- function str_extract() {
- pattern=$1
- # Extract
- res=`grep "$pattern" $log | sed "s/$pattern//g"`
- # Drop trailing ...
- res=`echo $res | sed 's/[.][.][.]//g'`
- # Trim
- res=`echo $res | sed 's/^ *//g' | sed 's/ *$//g'`
- echo $res
- }
- debug=FALSE
- header=FALSE
- standardize=FALSE
- last=FALSE
- version=FALSE
- help=FALSE
- # Character for separating values
- sep=";"
- quote=""
- # Parse command-line options
- while [[ $# > 0 ]]; do
- opt=$1
- if test "$opt" == "--header"; then
- header=TRUE
- elif test "$opt" == "--quote"; then
- quote=$2
- shift
- elif test "$opt" == "--sep"; then
- sep=$2
- shift
- elif test "$1" == "--standardize"; then
- standardize=TRUE
- elif test "$1" == "--last"; then
- last=TRUE
- elif test "$1" == "--debug"; then
- debug=TRUE
- elif test "$1" == "--version"; then
- version=TRUE
- elif test "$1" == "--help"; then
- help=TRUE
- fi
- shift
- done
- if [[ -n "$SPEEDTEST_CSV_SKIP" ]]; then
- mdebug "\$SPEEDTEST_CSV_SKIP => --last"
- last=TRUE
- fi
- if [[ $debug == TRUE ]]; then
- mdebug "call: $call"
- mdebug "header: $header"
- mdebug "standardize: $standardize"
- mdebug "last: $last"
- mdebug "version: $version"
- mdebug "field delimeter: '$sep'"
- mdebug "quotation mark: $quote"
- fi
- if [[ $version == TRUE ]]; then
- echo "1.1.1"
- exit 0
- fi
- if [[ $help == TRUE ]]; then
- grep "^###" $0 | grep -v "^####" | cut -b 5-
- exit 0
- fi
- # Display header?
- if [[ $header == TRUE ]]; then
- mdebug "Generating header"
- start="start"
- stop="stop"
- from="from"
- from_ip="from_ip"
- server="server"
- server_dist="server_dist"
- server_ping="server_ping"
- download="download"
- upload="upload"
- share_url="share_url"
- else
- mkdir -p $(dirname $log)
- start=$(date +"%Y-%m-%d %H:%M:%S")
- if [[ $last == TRUE && -f "$log" ]]; then
- # Reuse existing results (useful for debugging)
- mdebug "Reusing existing results: $log"
- else
- # Query Speedtest
- mdebug "Querying Speedtest using 'speedtest-cli --share'"
- speedtest-cli --share > $log
- fi
- stop=$(date +"%Y-%m-%d %H:%M:%S")
- # Parse
- mdebug "Parsing results"
- from=$(str_extract "Testing from ")
- from_ip=$(echo $from | sed 's/.*(//g' | sed 's/).*//g')
- from=$(echo $from | sed 's/ (.*//g')
- server=$(str_extract "Hosted by ")
- server_ping=$(echo $server | sed 's/.*: //g')
- server=$(echo $server | sed 's/: .*//g')
- server_dist=$(echo $server | sed 's/.*\[//g' | sed 's/\].*//g')
- server=$(echo $server | sed 's/ \[.*//g')
- download=$(str_extract "Download: ")
- upload=$(str_extract "Upload: ")
- share_url=$(str_extract "Share results: ")
- # Standardize units?
- if [[ $standardize == TRUE ]]; then
- ## Mbits/s -> Mbit/s
- mdebug "Standardize to Mbit/s"
- download=$(echo $download | sed 's/Mbits/Mbit/')
- upload=$(echo $upload | sed 's/Mbits/Mbit/')
- ## commas to periods
- mdebug "Standardize to periods (not commas)"
- download=$(echo $download | sed 's/,/./')
- upload=$(echo $upload | sed 's/,/./')
- server_dist=$(echo $server_dist | sed 's/,/./')
- server_ping=$(echo $server_ping | sed 's/,/./')
- fi
- mdebug "start: '$start'"
- mdebug "stop: '$stop'"
- mdebug "from: '$from'"
- mdebug "from_ip: '$from_ip'"
- mdebug "server: '$server'"
- mdebug "server_dist: '$server_dist'"
- mdebug "server_ping: '$server_ping'"
- mdebug "download: '$download'"
- mdebug "upload: '$upload'"
- mdebug "share_url: '$share_url'"
- fi
- # Output CSV results
- sep="$quote$sep$quote"
- #printf "$quote$start$sep$stop$sep$from$sep$from_ip$sep$server$sep$server_dist$sep$server_ping$sep$download$sep$upload$sep\n"
- echo $start "Upload:" $upload "Download" $download
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement