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

0 Membres et 1 Invité sur ce sujet

Hugues

  • AS2027 MilkyWan
  • Modérateur
  • *
  • Messages: 12 459
  • Lyon (69) / St-Bernard (01)
    • Twitter
Encore des serveurs de kikoo qui ont des VPS 100Mbit/s...

vivien

  • Administrateur
  • *
  • Messages: 47 228
    • Twitter LaFibre.info
Encore un petit souci dans mon script : dans certains cas quand le serveur n’existe pas j'ai une erreur qui apparaît à l'écran :

Test n°13 / 91 Stella Telecom - Courbevoie : 2189 Mb/s - 3 ms
Test n°14 / 91 Ozone          - Courbevoie : 290 Mb/s - 3 ms
Test n°15 / 91 Scaleway/Online- Vitry/Seine./comp-speedtest.sh: ligne 20 : [: ERROR: No matched servers: 5022 : nombre entier attendu comme expression
./comp-speedtest.sh: ligne 23: ERROR: No matched servers: 5022/1000000 : erreur de syntaxe dans l'expression (le symbole erroné est « : No matched servers: 5022/1000000 »)
Test n°16 / 91 TestDebit.info - Massy      : 6131 Mb/s - 1 ms
Test n°17 / 91 Orange         - Lyon       : 1989 Mb/s - 10 ms

Voici le fichier .csv correspondant :
14821,Stella Telecom,Courbevoie,2019-01-29T15:59:29.370026Z,3.84,2189251675.1414304
11644,Ozone,Courbevoie,2019-01-29T15:59:31.126164Z,3.515,290151149.63092244
ERROR: No matched servers: 5022
2231,TestDebit.info,Massy,2019-01-29T15:59:41.612295Z,1.596,6131316465.165352
4273,Orange,Lyon,2019-01-29T15:59:42.392964Z,10.762,1989638792.0900528

Dans le code, la ligne 20 correspond à la ligne if [ "$debit" -ge 1000000 ]; 2>/dev/null qui a pour but de ne pas aller plus loin si la chiffre n'est pas > 1000000.
Comment écrire ça pour que si ce n'est pas un chiffre la condition ne soit pas remplie sans erreur ?

La fonction :
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}) 2>/dev/null
   debit=$(echo $resultat | cut -d',' -f 6 | cut -d'.' -f 1) 2>/dev/null
   if [ "$debit" -ge 1000000 ]; 2>/dev/null
   then
      latence=$(echo $resultat | cut -d',' -f 5 | cut -d'.' -f 1) 2>/dev/null
      echo ": $(($debit/1000000)) Mb/s - $latence ms"
   else
      echo ": Échec du test" 2>/dev/null
   fi
}

willemijns

  • Abonné FreeMobile
  • *
  • Messages: 2 681
if [ "$debit" -ge 1000000 ]; 2>/dev/null
=>
if [ "$debit" -ge 1000000 ];

je vois pas ce que tu veux cacher dans un if ;)


vivien

  • Administrateur
  • *
  • Messages: 47 228
    • Twitter LaFibre.info
L'erreur qui apparaît, qui me dit "nombre entier attendu comme expression" mais visiblement cela ne fonctionne pas.

Bref en entrée j'ai n'importe quoi et je ne veut continuer que si c'est un chiffre >  1000000 (soit 1 Mb/s)

willemijns

  • Abonné FreeMobile
  • *
  • Messages: 2 681
ici dans ce sample il met pas de guillement

If [ $var1 -gt 30]
    then
        echo "$var is greater than 30"
    else
        echo "$var1 is less than 30"
fi

Thornhill

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

Comment écrire ça pour que si ce n'est pas un chiffre la condition ne soit pas remplie sans erreur ?


Condition $debit contient un nombre uniquement :

if expr "$debit" : "^[0-9][0-9]*$" >/dev/null ; then  ...

vivien

  • Administrateur
  • *
  • Messages: 47 228
    • Twitter LaFibre.info
Merci Thornhill , cela fonctionne bien, même si je trouve le code très lourd pour juste un petit test...

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 expr "$debit" : "^[0-9][0-9]*$" >/dev/null
   then
      latence=$(echo $resultat | cut -d',' -f 5 | cut -d'.' -f 1)
      if [ "$debit" -ge 1000000 ];
      then
         echo ": $(($debit/1000000)) Mb/s - $latence ms"
      else
         echo ": Échec débit nul - $latence ms"
      fi
   else
      echo ": Échec serveur indisponible"
   fi
}

underground78

  • Expert
  • Abonné Free fibre
  • *
  • Messages: 7 437
  • Orsay (91)
    • FreePON : suivi géographique du déploiement fibre EPON chez Free
Sinon tu testes d'abord si la chaine est vide et ensuite si c'est un entier avec les bonnes propriétés.

vivien

  • Administrateur
  • *
  • Messages: 47 228
    • Twitter LaFibre.info
Voici ce que cela donne, merci pour vos propositions, c'est vraiment plus sympa qu'avec mon premier script qui n'affichait rien pendant le test.
Le fichier .csv est toujours présent, c'est lui qui est utilisé pour créer cet affichage.

Si vous avez un accès 10 Gb/s, n'hésiter pas à m'envoyer votre fichier de résultat pour que je puisse classer les différents serveurs.

Test réalisé avec un accès Bouygues Telecom 10 Gb/s :


DamienC

  • Abonné Sosh fibre
  • *
  • Messages: 2 217
  • FTTH ↓ 300Mbps ↑ 300 Mbps sur Brest (29)
Hello,

J'ai un serveur 10 Gbps sous la main, mais impossible de faire les tests :/
Pourtant le speedtest-cli lancé à la main:
Hosted by TestDebit.info (Massy) [468.53 km]: 6.78 ms
Testing download speed................................................................................
Download: 4663.76 Mbit/s
Testing upload speed...............................................................................................
.....
Upload: 656.20 Mbit/s

Thornhill

  • Abonné SFR fibre FttH
  • *
  • Messages: 3 976
  • Saint-Médard-en-Jalles (33)
je trouve le code très lourd pour juste un petit test...

Si tu veux simplifier et accélérer les traitements de lignes en Shell, il faut passer par awk :


echo "$resultat" | awk -F "," ' { if ($6~/^[0-9][0-9.]*$/) { if($6<1000000) print ": Échec débit nul - " int($5) " ms" ;  else print ": " int($6/1000000) " Mb/s - " int($5) " ms" }  else print ": Échec du test" } '


Je te conseille aussi de stocker le résultat du speedtest dans une variable, pour éviter de reparser par tail tout le fichier de log à chaque test de débit.

Outre la compacité du code, tu remplaces 5 créations de processus (4 cut et 1 tail - echo étant un builtin shell) par 1 seul (awk), pour chaque ligne traitée.

Sur un fichier de cette taille la différence est négligeable, mais sur un fichier en centaine de milliers de lignes ça peut devenir énorme, le fork() étant extrêmement couteux.

speedtest ()
{
   resultat=$(speedtest-cli --no-upload --csv --timeout 1 --secure --server $1 2>&1 | cut -d',' -f 1,2,3,4,6,7  2>/dev/null)
   echo "$resultat" >> ${FILE_LOG}
   echo "$resultat" | awk -F "," ' { if ($6~/^[0-9][0-9.]*$/) { if($6<1000000) print ": Échec débit nul - " int($5) " ms" ;  else print ": " int($6/1000000) " Mb/s - " int($5) " ms" }  else print ": Échec du test" } '
}


vivien

  • Administrateur
  • *
  • Messages: 47 228
    • Twitter LaFibre.info
J’apprécie d'avoir un fichier .csv qui est le retour fidèle de speedtest-cli et qui n'est pas modifié (exception faite de deux colonnes qui sont supprimées car contenant des information personnelles).

Cas concret :
Hello,

J'ai un serveur 10 Gbps sous la main, mais impossible de faire les tests :/
Pourtant le speedtest-cli lancé à la main:

Le détail de l'erreur est dans le fichier .csv, tu pourrais le poster et indiquer la version de Linux utilisée + la version de speedtest-cli ?

Il faut speedtest-cli 2.0. ou supérieur. Les versions proposés avec Ubuntu 18.04, Ubuntu 18.10, Ubuntu 19.04, Debian Buster 10 (testing) et Debian Sid (unstable) sont ok.

Pour Debian 9 ou Ubuntu 16.04 => https://lafibre.info/tester-son-debit/comp-speedtest/msg618947/#msg618947