petit update:
- mon temps dispo est très réduit en ce moment, a peine quelques heures par semaine. Mais d'ici la fin du mois/début mai je devrais pouvoir consacrer 100% de mon temps a ce projet et ce jusqu'en septembre voir plus.
- le langage retenu est donc Go. principalement pour sa maturité et la facilité de son aspect multi-plateforme .
- j'ai mis sur github dans la partie 'projet' ce sur quoi je me focalise en ce moment('in progress') et ce qu'il reste à faire pour la phase 1 ('todo'):
https://github.com/kgersen/nspeed/projects/1La section 'todo' n'est pas figée et pourra évoluer en fonction des remarques faites ici.
- le dossier 'research' (
https://github.com/kgersen/nspeed/tree/master/research ) contient des bouts de code, des notes, etc pour certains aspects du projet. ceci évoluera au fur et a mesure.
Il y a 2 sous parties importantes a finaliser en terme d'étude pour la P1:
- comment obtenir l'interface réseau utilisée (ou les interfaces dans des cas plus rares), son type et ses caractéristiques (ethernet, wifi, débit max, etc) et comment mesurer le crosstalk sur cette interface
- comment obtenir la charge cpu pendant le test, par cpu, par coeur, pour le process nspeed, pour tout l'OS ? idéalement obtenir aussi les specs de la machine (type cpu, mémoire, etc).
Ces 2 parties sont par nature différentes d'un OS a l'autre. Il faut donc soit trouver du code existant multiplate-forme qui fait déjà cela soit développer du nouveau code soit combiner avec du code existant spécifique a une plateforme.
Par exemple pour le CPU il y a peut-etre
https://github.com/shirou/gopsutil mais je n'ai pas encore évalué cette lib. Si quelqu'un connait ou veut faire des tests avec c'est le moment.
Pour l'interface et le crosstalk je vois comment faire en théorie, notamment avec Windows et Linux (Mac aucune idée). J'ai mis un script shell qui permet d'avoir le crosstalk d'un curl sous Linux:
https://github.com/kgersen/nspeed/blob/master/research/p1/crosstalk_linux.shpar exemple:
sh crosstalk_linux.sh <url>
va télécharger avec curl l'url et afficher le crosstalk (en principe...).
Le script utilise 'ip route get' pour trouver l'interface mais appeler la commande Linux 'ip' depuis un programme en Go n'est pas recommandé car cette commande n'est pas forcement dispo sur tous les variantes de Linux par défaut. Du coup une meilleur approche est de comprendre comment 'ip route' fonctionne et le refaire en Go ou trouver une lib qui fait deja cela.
Pour le crosstalk c'est de la lecture dans sysfs , un système de fichier virtuel exposant des éléments du kernel et a priori dispo sur tous les variantes de Linux/Unix (a vérifier).
par exemple:
cat /sys/class/net/eth0/statistics/rx_bytes
Affiche le compteur instantané d'octets reçus de l'interface eth0. C'est facile a lire une fois qu'on a le nom de l'interface (eth0 ou autre).
Pour Windows c'est plus complexe car il faut passer par WMI a priori ou trouver les appels systèmes direct s'il y en a. Il y a un programme en Go que j'utilise,
https://github.com/martinlindhe/wmi_exporter, qui permet de collecter les stats de Windows (cpu, disque, réseau,etc) pour Prometheus. Ce code peut servir d'inspiration pour cette partie (et pour le cpu aussi).
Pour la P2, j'ai plein d'idées mais rien de concret encore. Idem pour la P3 et P4 mais bien qu'on a le temps pour ca, n’hésitez a soumettre des idées car elles peuvent influer sur la façon donc la P1 est architecturée.
rappel:
P1: client nspeed en ligne de commande
P2: interface web 'locale' exposée par le client nspeed
P3: serveur nspeed
P4: backend nspeed. collecte, automation et présentation (=proposer des sondes nspeed, automatiser la collection des résultats, faire des graphes, etc).
Si vous n'est pas programmeur et souhaiter contribuer vous pouvez:
- trouver des idées/concepts d'interface pour P2 (ie ce qu'on appelle l’expérience utilisateur = UX.
https://wireframe.cc/ permet de faire des esquisses rapidement ou
https://moqups.com pour des choses plus poussées)
- trouver des URL a télécharger et les caractériser (en partant de la liste de willemijns par exemple). caractériser = localisation du DC ou situé le serveur , ip4/ipv6 , quel(s) version(s) d'http sont supportés, quel débit max peut-on obtenir au mieux, etc et faire des listes de tests
Pour les interactions plus instantanées j'ai crée un canal 'nspeed' sur le Discord non officiel de LaFibre:
https://discord.gg/hWu2e4 mais c'est plus pour discuter des détails. Privilégier ce sujet pour les discussions de 'fond'.