Auteur Sujet: Vous avez une connexion 10 Gb/s ? Aidez-moi à comparer les serveurs SpeedTest !  (Lu 29500 fois)

0 Membres et 1 Invité sur ce sujet

STRAT38

  • Invité
Fait.  Sous Ubuntu 18.10
CM Asus Tuff Z270 Mark1 // I7-7700K // SSD Nvme 960PRO 1TO // Intel X520-DA2 // FREEBOX DELTA // PON FTTH // NRA STA38


willemijns

  • Abonné FreeMobile
  • *
  • Messages: 2 680
Ca aurait été bien de mettre une formule de math "/1000000" pour le dernier chiffre pour le repasser de Ko en Go quite à utiliser des fichiers/répertoires temporaires dans une fonction

Voici un code "torché" d'une fonction

funky ()
{ # This is about as simple as functions get.
  echo "$1"
/usr/bin/speedtest-cli --no-upload --csv --secure --server $1 | cut -d',' -f 1,2,3,4,6,7 >> ${FILE_LOG}
} # Function declaration must precede call.

FILE_LOG=./comp-speedtest.csv

echo >  ${FILE_LOG}

echo "DEBUT:"

echo "Test n°1 / 88 Orange - Paris"
funky 5559
echo "Test n°2 / 88 SFR - Paris"
funky 12746
echo "FIN"
read $r




vivien

  • Administrateur
  • *
  • Messages: 47 079
    • Twitter LaFibre.info
J'ai retravaillé mon script pour prendre en compte vos remarques => comp-speedtest.sh

Voici le début :

#!/usr/bin/env bash
set -o errexit
# Comparateur de serveurs SpeedTest
# https://lafibre.info/tester-son-debit/comp-speedtest/
# Vivien GUEANT / LaFibre.info
# Version du 28 janvier 2019

#### Dépendances à installer avant de lancer le script
# sudo apt install speedtest-cli

#### Ficheir de log au format .csv
FILE_LOG=./comp-speedtest.csv

#### Fonction de test de débit
speedtest ()
{
   speedtest-cli --no-upload --csv --timeout 1 --secure --server $1  | cut -d',' -f 1,2,3,4,6,7 >> ${FILE_LOG} 2>&1
   resultat=$(tail -n1 ${FILE_LOG})
   debit=$(echo $resultat | cut -d',' -f 6 | cut -d'.' -f 1)
   latence=$(echo $resultat | cut -d',' -f 5 | cut -d'.' -f 1)
   echo ": $(($debit/1000000)) Mb/s - $latence ms"
}

#### Début du bash
echo "Merci de ne pas utiliser votre PC pendant les tests"

# Gérer l'en-tête du fichier CSV
speedtest-cli --csv-header >> ${FILE_LOG}
#echo -n "En-tête CSV: "
#tail -n1 ${FILE_LOG}

# Tests de débit
echo -n "Test n° 1 / 88 Orange         - Paris      "
speedtest 5559
echo -n "Test n° 2 / 88 SFR            - Paris      "
speedtest 12746
echo -n "Test n° 3 / 88 SiriusHD       - Paris      "
speedtest 10676
echo -n "Test n° 4 / 88 Naitways       - Paris      "
speedtest 16476
...

@Vivien : les bonnes pratiques pour le développement de script Bash recommandent un shebang se basant sur le binaire env, pour rendre le script portable. Plus spécifiquement : #!/usr/bin/env bash
J'ai mis
#!/usr/bin/env bashtoutefois, je ne vois presque aucun script avec cette en-tête... (et pas ceux livrés avec Ubuntu / Debian)

Personnellement j’utilisais dash et non bash pour mes scripts, car il est plus économe en ram (exemple: https://lafibre.info/serveur-linux/serveur-miroir-ubuntu/msg194715/#msg194715 ) et j'avais changé car  il me semble que c'est pas le top pour la portabilité.

Pour la portabilité, j'ai également supprimé les chemins en dur pour aller chercher les programmes appelés, toutefois je me demande si ce n'est pas moins bon pour la sécurité (si le script était lancé avec les droits root, ce qui n'est pas le cas, il me semble qu'il est préférable de spécifier le chemin pour éviter qu'un programme malveillant du même nom soit lancé à la place, non ?)


Ainsi que l'usage de set -o errexit en début de script (même si dans ce cas précis le script n'est pas supposé modifier quelque chose sur le système, on est d'accord. C'est plutôt histoire de prendre l'habitude :))
C'est vrai que sortir du script en cas d'échec peut éviter une suite non prévue...
J'ai rajouté set -o errexit


Ca aurait été bien de mettre une formule de math "/1000000" pour le dernier chiffre pour le repasser de Ko en Go quite à utiliser des fichiers/répertoires temporaires dans une fonction
Dans ma nouvelle version, j'affiche le résultat dans un format humainement lisible immédiatement après le test.

Exemple avec une connexion 100 Mb/s :

$ ./comp-speedtest.sh
Merci de ne pas utiliser votre PC pendant les tests
Test n° 1 / 88 Orange         - Paris      : 90 Mb/s - 24 ms
Test n° 2 / 88 SFR            - Paris      : 95 Mb/s - 11 ms
Test n° 3 / 88 SiriusHD       - Paris      : 94 Mb/s - 11 ms
Test n° 4 / 88 Naitways       - Paris      : 95 Mb/s - 24 ms
Test n° 5 / 88 fdcservers.net - Paris      : 95 Mb/s - 10 ms
Test n° 6 / 88 CCleaner       - Paris      : 95 Mb/s - 29 ms
Test n° 7 / 88 HarryLafranc   - Paris      : 95 Mb/s - 11 ms
Test n° 8 / 88 Interoute VDC  - Paris      : 95 Mb/s - 11 ms
Test n° 9 / 88 Cloudwatt      - Paris      : 94 Mb/s - 13 ms
Test n°10 / 88 Télécom Paris  - Paris      : 94 Mb/s - 11 ms
Test n°11 / 88 Stella Telecom - Courbevoie : 91 Mb/s - 11 ms
Test n°12 / 88 Ozone          - Courbevoie : 95 Mb/s - 11 ms
Test n°13 / 88 ONLINE         - Vitry/SeineERROR: No matched servers: 5022
: 95 Mb/s - 11 ms
Test n°14 / 88 TestDebit.info - Massy      : 92 Mb/s - 11 ms
Test n°15 / 88 Orange         - Lyon       : 94 Mb/s - 16 ms
Test n°16 / 88 LaFibre.info   - Lyon       : 93 Mb/s - 16 ms


J'ai par contre un souci, quand un serveur est temporairement HS, ce qui est encore le cas du serveur Onine ce soir : plus rien n'est écrit dans le fichier, et donc il reprend les données du tests précédents.

Dans le fichier .csv il n'y a aucune ligne pour le test Online :

$ cat comp-speedtest.csv
Server ID,Sponsor,Server Name,Timestamp,Distance,Ping,Download,Upload,Share,IP Address
5559,Orange,Paris,2019-01-28T20:50:19.246997Z,24.684,90209256.58145234
12746,SFR SAS,Paris,2019-01-28T20:50:30.439361Z,11.176,95970511.59154809
10676,SiriusHD,Paris,2019-01-28T20:50:41.976634Z,11.649,94615741.67714977
16476,Naitways,Paris,2019-01-28T20:50:52.644899Z,24.142,95392816.3812573
6027,fdcservers.net,Paris,2019-01-28T20:51:03.281347Z,10.696,95898821.35093606
16676,CCleaner,Paris,2019-01-28T20:51:13.769965Z,29.856,95613976.38210441
10176,HarryLafranc,Paris,2019-01-28T20:51:24.438006Z,11.095,95216962.68863644
10265,Interoute VDC,Paris,2019-01-28T20:51:35.013089Z,11.339,95906463.81967354
5582,Cloudwatt,Paris,2019-01-28T20:51:45.547548Z,13.808,94699330.91819578
11977,Télécom ParisTech,Paris,2019-01-28T20:51:56.177949Z,11.001,94739890.70328823
14821,Stella Telecom,Courbevoie,2019-01-28T20:52:06.815686Z,11.039,91086384.80362199
11644,Ozone,Courbevoie,2019-01-28T20:52:17.331333Z,11.542,95814858.94514553
2231,TestDebit.info,Massy,2019-01-28T20:52:28.224050Z,11.806,92810245.29910661
4273,Orange,Lyon,2019-01-28T20:52:39.434077Z,16.414,94370915.52613337
2023,LaFibre.info,Lyon,2019-01-28T20:52:50.122450Z,16.328,93663589.9174563


J'ai pourtant mis "2>&1" à la fin de ma ligne de commande pour rediriger la sotie des erreurs vers le fichier de log :
speedtest-cli --no-upload --csv --timeout 1 --secure --server $1  | cut -d',' -f 1,2,3,4,6,7 >> ${FILE_LOG} 2>&1

willemijns

  • Abonné FreeMobile
  • *
  • Messages: 2 680
perso j'aurais nettoyé au debut de la fonction les valeurs sans trop chercher à comprendre ;)
resultat=
debit=
latence=

autre tactique tu peux dire que si la 5ieme, 6ieme valeur ou 7ieme valeur (la vitesse je crois) est vide alors ne rien faire sinon le faire:

if 5ieme valeur == ""
 then
 else
 resultat=$(tail -n1 ${FILE_LOG})
 debit=$(echo $resultat | cut -d',' -f 6 | cut -d'.' -f 1)
 latence=$(echo $resultat | cut -d',' -f 5 | cut -d'.' -f 1)
  echo ": $(($debit/1000000)) Mb/s - $latence ms"
fi
 

vivien

  • Administrateur
  • *
  • Messages: 47 079
    • Twitter LaFibre.info
Mon script affiches les données en lisant la dernière ligne du fichier de log (resultat=$(tail -n1 ${FILE_LOG})), donc cleaner les valeurs ne changera rien car la dernière ligne est un test valide.

Il faut juste bien rediriger l'erreur vers le fichier .csv pour que l'affichage soit ok.

willemijns

  • Abonné FreeMobile
  • *
  • Messages: 2 680
essaye de voir si il y a un errorlevel en cas de #fail

ou alors compare le 1er chiffre de ta ligne de log qui doit etre celui de $1 ;)

STRAT38

  • Invité
je vais tester a différentes heures du jour et de la nuit comme tu le demande.

Suggestion pour le output du fichier log, utiliser un format
#### Ficheir de log au format .csv
FILE_LOG=./`date +%H%M%d%m%Y`comp-speedtest.csv

Thornhill

  • Abonné SFR fibre FttH
  • *
  • Messages: 3 976
  • Saint-Médard-en-Jalles (33)

J'ai pourtant mis "2>&1" à la fin de ma ligne de commande pour rediriger la sotie des erreurs vers le fichier de log :
speedtest-cli --no-upload --csv --timeout 1 --secure --server $1  | cut -d',' -f 1,2,3,4,6,7 >> ${FILE_LOG} 2>&1


Là tu ne rediriges que la sortie erreur de cut, pas de speedtest-cli.
Si tu veux rediriger tout il faut, en fonction de ce que tu veux parser avec cut, regrouper ton pipeline entre parenthèses ou bien ajouter la redirection stderr aussi au niveau de speedtest-cli :

speedtest-cli --no-upload --csv --timeout 1 --secure --server $1 2>&1 | cut -d',' -f 1,2,3,4,6,7 >> ${FILE_LOG} 2>&1

ou

( speedtest-cli --no-upload --csv --timeout 1 --secure --server $1 | cut -d',' -f 1,2,3,4,6,7 ) >> ${FILE_LOG} 2>&1

Harvester

  • Abonné Free fibre
  • *
  • Messages: 344
  • Freebox Révolution - Limours (91)
    • Site perso
Suggestion générale : pourquoi ne pas versionner le script sur une plateforme gérant git (GitHub/GitLab/whatever) ? Comme il y a pas mal de suggestions sur ce thread, ça permettrait d'ourir des tickets de proposer des pull requests pour les modifications mineures :)

vivien

  • Administrateur
  • *
  • Messages: 47 079
    • Twitter LaFibre.info
J'ai mis à jour le script avec vos retours.

STRAT38 : J'ai suivit ta proposition en mettant "FILE_LOG=./`date +%Y%m%d-%H%M`-comp-speedtest.csv"
=> Cela permet un classement chronologique quand on trie par ordre alphabétique
=> L'heure est plus lisible car séparée par un tiret

Merci Thornhill  :

Je ne suis intéressé que pour loguer l'erreur renvoyée par speedtest-cli donc j'ai modifié comme ça :
speedtest ()
{
   speedtest-cli --no-upload --csv --timeout 1 --secure --server $1 2>&1 | cut -d',' -f 1,2,3,4,6,7 >>${FILE_LOG} 2>/dev/null
   resultat=$(tail -n1 ${FILE_LOG})
   debit=$(echo $resultat | cut -d',' -f 6 | cut -d'.' -f 1)
   latence=$(echo $resultat | cut -d',' -f 5 | cut -d'.' -f 1)
   echo ": $(($debit/1000000)) Mb/s - $latence ms" 2>/dev/null
}

Harvester : bonne idée

vivien

  • Administrateur
  • *
  • Messages: 47 079
    • Twitter LaFibre.info
Le script est sur github : https://github.com/vivienfr/comp-speedtest

J'ai rajouté une vérification avant de réaliser la division pour éviter une erreur en cas d'échec du test de débit ou si le débit est inférieur à 1 Mb/s :
#### Fonction de test de débit
speedtest ()
{
   speedtest-cli --no-upload --csv --timeout 1 --secure --server $1 2>&1 | cut -d',' -f 1,2,3,4,6,7 >>${FILE_LOG} 2>/dev/null
   resultat=$(tail -n1 ${FILE_LOG})
   debit=$(echo $resultat | cut -d',' -f 6 | cut -d'.' -f 1)
   if [ "$debit" -ge 1000000 ];
   then
      latence=$(echo $resultat | cut -d',' -f 5 | cut -d'.' -f 1)
      echo ": $(($debit/1000000)) Mb/s - $latence ms"
   else
      echo ": Échec du test" 2>/dev/null
   fi
}

vivien

  • Administrateur
  • *
  • Messages: 47 079
    • Twitter LaFibre.info
Je vies de mettre à jour le script, Ookla a rajouté 3 serveurs SpeedTest :
- Extragornax   Paris   Île-de-France
- Host-Heberg   Paris   Île-de-France
- BERNARDO.FM   Chur   Suisse

C'est la version 1.00