Aller au contenu

[Tuto] Installation de Cacti


hpsmartyz

Messages recommandés

Quand je vois les tutos sur le monitoring qu'il est possible de mettre en place sur les versions plus récentes des NAS, je me dis que ce thread ne doit plus intéresser grand monde 😑

Pas grave 😀

Comme je suis passé sur une Livebox5 j'ai commencé à mettre en place les scripts adaptés. Voilà les premiers graphs des interfaces (wifi = 2.4+5, 2.4GHZ, 5GHz et les deux ports phy 0 et 3).

Prochaine étape: sortir les stats (traffic et qualité signal) par device.
Par la suite je regarderai ce que je peux extraire du pont Philipps Hue.

wifi.jpg

eth.jpg

Lien vers le commentaire
Partager sur d’autres sites

ca m'a couté qques apprentissages en shell, mais voilà la mesure du signal wifi du pc depuis lequel je rédige ce message. l'axe des ordonnées n'est que pour le snr car la puissance wifi se mesure en dbm < 0. j'ai pas trouvé mieux comme representation que de faire 100 - cette valeur et de le ploter ainsi donc ce sont les couleurs qui parlent.

image.png.d479c09d50ac0d8feb6e4d26f2160164.png

par contre je me demande si il n'y a pas un problème avec les stats de l'ONT:

image.png.b7545ad38a9d4c853d4572d9b6ffe9d9.png

c'est pas très parlant car ce n'est pas en bytes/s mais en bytes (en fait en bytes/5min) mais quand même à ce rythme là je suis en train de me faire siphonner tous mon réseau ! Les stats des interfaces internes sont presque plates. Donc, ou je les mesure mal et je suis vraiment en train de me faire aspirer tout, ou bien le compteur de l'ONT est en vrac, ou bien les valeurs sont en bits et non bytes (malgré les variables qui s'appellent RxBytes et TxBytes).

si des personnes sont intéressées je peux partager le script pour la livebox 5.

 

Modifié par hpsmartyz2
Lien vers le commentaire
Partager sur d’autres sites

@hpsmartyz2

Bonjour,

Au passage, sacré déterrage de sujet vieux de plus de 14 ans !🤣

Comme toi je fais du monitoring d'informations de ma Livebox (voir mon TUTO) et je suis intéressé par ton script car je constate que tu arrives à récupérer des informations dynamiques pour afficher de belles courbes de suivi. De mon coté, ce qui était possible avec une connexion ADSL ne l'est plus avec la Fibre. Plus moyen de suivre par exemple les flux entrants/sortants Rx/Tx.

Aussi je serai bien volontiers preneur d'explications sur le processus que tu utilises pour obtenir ces infos dynamiques car je n'en ai pas trouvé dans le datamodel de la Livebox, non pas qu'elles existent pas mais les tables correspondantes ne sont pas accessibles via des requêtes externes (du moins celles que j'utilise avec sysbus) . D'où ma forte curiosité sur ta méthode.

En attendant ta réponse.

Cordialement

oracle7😉

Lien vers le commentaire
Partager sur d’autres sites

@.Shad.

oui, rrd permet ça nativement avec un COUNTER (là c'est du GAUGE, mais un peut modifié).
Les compteurs de la livebox sont cumulatifs (et se reset à 2^32), mais en fait je calcule moi-même le delta entre deux valeurs successives et c'est ça que j'affiche. Avoir la notion de volume n'est pas inutile. Je ferai sûrement à terme les mêmes graphs en bytes/s par la suite.
Dans tous les cas même si c'était exprimé en débit ca ne changerait rien au profil et à la quantité de données échangées.
Je vais faire qquess test pour comprendre d'où viennent ces valeurs.

il y a 55 minutes, oracle7 a dit :

@hpsmartyz2

Bonjour,

Au passage, sacré déterrage de sujet vieux de plus de 14 ans !🤣

Comme toi je fais du monitoring d'informations de ma Livebox (voir mon TUTO) et je suis intéressé par ton script car je constate que tu arrives à récupérer des informations dynamiques pour afficher de belles courbes de suivi. De mon coté, ce qui était possible avec une connexion ADSL ne l'est plus avec la Fibre. Plus moyen de suivre par exemple les flux entrants/sortants Rx/Tx.

Aussi je serai bien volontiers preneur d'explications sur le processus que tu utilises pour obtenir ces infos dynamiques car je n'en ai pas trouvé dans le datamodel de la Livebox, non pas qu'elles existent pas mais les tables correspondantes ne sont pas accessibles via des requêtes externes (du moins celles que j'utilise avec sysbus) . D'où ma forte curiosité sur ta méthode.

En attendant ta réponse.

Cordialement

oracle7😉

@oracle7

bonjour.

oui sacré déterrage mais étant le posteur originel je me suis permis.

Sacré boulot ton tuto!

Je peux te donner les commandes (curl) sans soucis, mais suis pas sûr de comprendre ce que tu entends par dynamique.

Modifié par hpsmartyz2
Lien vers le commentaire
Partager sur d’autres sites

@hpsmartyz2

Bonjour,

il y a 7 minutes, hpsmartyz2 a dit :

Je peux te donner les commandes (curl) sans soucis,

Je prends !🤣

il y a 8 minutes, hpsmartyz2 a dit :

mais suis pas sûr de comprendre ce que tu entends par dynamique.

La quasi totalité des données accessibles sur la Livebox sont des données que je qualifie de "statiques" car elles n'évoluent que très peu dans le temps, du moins à intervalle assez grand. Par ex les informations système qui sont affichées dans l'interface d'admin de la Livebox à une ou deux exceptions près.

Les données dites "dynamiques" sont celles qui changent à intervalle très court par ex : les débits (Nombres d'octets échangés i.e. envoyés/reçus) WiFi, WAN, LAN. C'est justement ceux-là que je souhaite monitorer et afficher leurs courbes d'évolution dans le temps et comme tu sembles le faire, j'aimerai bien comprendre comment tu y arrives et ainsi voir si je peux transposer cela pour compléter ma méthode.

Cordialement

oracle7😉

 

Lien vers le commentaire
Partager sur d’autres sites

@hpsmartyz2

Bonjour,

il y a 39 minutes, hpsmartyz2 a dit :

je suis super preneur du data model que tu aurais réussis à extraire,

Le datamodel ne s'extrait pas dans sa globalité. il faut faire des requêtes ciblées. Je te laisse lire mon TUTO, tout est expliqué dans le préambule d'introduction et les liens sont fournis pour l'usage du script sysbus.py qui te permettra d'analyser le datamodel de la Livebox. Tu en sortiras les vues qui t’intéresse. Inspires-toi aussi des requêtes que j'ai faites dans le shell script du TUTO. Rien de bien compliqué, tout est commenté.

Cordialement

oracle7😉

Lien vers le commentaire
Partager sur d’autres sites

je fais ici.

la base vient des scripts que l'on trouve sur le web (notamment ici) et les commandes spécifiques sont dérivées d'une analyse des requêtes faites lors de la navigation sur l'interface web et inspectées via les outils "développeur" intégrés dans chrome.
 

myLivebox=#ip-de-la-box
myPassword=#mdp-de-la-box

myBashDir=#un-chemin-sur-le-syno

myOutput=$myBashDir/myOutput.txt
myCookies=$myBashDir/myCookies.txt

curl -s -o "$myOutput" -X POST -c "$myCookies" -H 'Content-Type: application/x-sah-ws-4-call+json' -H 'Authorization: X-Sah-Login' -d "{\"service\":\"sah.Device.Information\",\"method\":\"createContext\",\"parameters\":{\"applicationName\":\"so_sdkut\",\"username\":\"admin\",\"password\":\"$myPassword\"}}" http://$myLivebox/ws > /dev/null

myContextID=$(tail -n1 "$myOutput" | sed 's/{"status":0,"data":{"contextID":"//1'| sed 's/",//1' | sed 's/"groups":"http,admin//1' | sed 's/"}}//1')

#traffic wifi
#2.4GHz + 5GHz
WifiStats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NMC.Wifi\",\"method\":\"getStats\",\"parameters\":{}}" http://$myLivebox/ws`
WifiStatsRxBytes=`echo $WifiStats | cut -d"{" -f3 | cut -d"," -f1 | cut -d":" -f2`
WifiStatsTxBytes=`echo $WifiStats | cut -d":" -f5 | cut -d"}" -f1`

#2.4GHz
wl0Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.wl0\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
Wifi2StatsRxBytes=`echo $wl0Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
Wifi2StatsTxBytes=`echo $wl0Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`

#5GHz
eth4Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.eth4\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
Wifi5StatsRxBytes=`echo $eth4Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
Wifi5StatsTxBytes=`echo $eth4Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`

#port eth 1
eth0Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.eth0\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
Lan0StatsRxBytes=`echo $eth0Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
Lan0StatsTxBytes=`echo $eth0Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`

#port eth 2
eth1Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.eth1\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
Lan1StatsRxBytes=`echo $eth1Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
Lan1StatsTxBytes=`echo $eth1Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`

#port eth 3
eth2Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.eth2\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
Lan2StatsRxBytes=`echo $eth2Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
Lan2StatsTxBytes=`echo $eth2Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`

#port eth 4
eth3Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.eth3\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
Lan3StatsRxBytes=`echo $eth3Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
Lan3StatsTxBytes=`echo $eth3Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`

#Wan
veip0Stats=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"NeMo.Intf.veip0\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws`
WanStatsRxBytes=`echo $veip0Stats | cut -d"{" -f3 | cut -d"," -f3 | cut -d":" -f2`
WanStatsTxBytes=`echo $veip0Stats | cut -d"{" -f3 | cut -d"," -f4 | cut -d":" -f2`

#Signal Strength per Device
#dev de la forme: "Devices.Device.mac-adddress"
devInfo=`curl -s -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"$dev\",\"method\":\"get\",\"parameters\":{}}" http://$myLivebox/ws`
searchstring="SignalStrength"
rest=${devInfo#*$searchstring}
pos=$(( ${#devInfo} - ${#rest} - ${#searchstring} ))
sub=${devInfo:$pos:44}

signalStrength=`echo $sub | cut -d"," -f1 | cut -d":" -f2`
snr=`echo $sub | cut -d"," -f2 | cut -d":" -f2`

on peut aussi récupérer les stats de traffic par device via la "MIB" lan mais elle est assez lourde donc je cherche un autre moyen. Manifestement il y a un event listener qui se trimbale dans le code et qui push les stats de traffic de chacun des devices mais je n'ai pas réussit à me brancher dessus. si quelqu'un sait, je suis preneur

Modifié par hpsmartyz2
Lien vers le commentaire
Partager sur d’autres sites

Il y a 1 heure, oracle7 a dit :

@hpsmartyz2

Bonjour,

Le datamodel ne s'extrait pas dans sa globalité. il faut faire des requêtes ciblées. Je te laisse lire mon TUTO, tout est expliqué dans le préambule d'introduction et les liens sont fournis pour l'usage du script sysbus.py qui te permettra d'analyser le datamodel de la Livebox. Tu en sortiras les vues qui t’intéresse. Inspires-toi aussi des requêtes que j'ai faites dans le shell script du TUTO. Rien de bien compliqué, tout est commenté.

Cordialement

oracle7😉

soit dit en passant, sauf erreur, le data model peut s'extraire dans sa globalité. ce que je cherchais c'était la version uml qui me semble plus exploitable, ainsi que le graph des interfaces.

Lien vers le commentaire
Partager sur d’autres sites

@hpsmartyz2

Bonjour,

MERCI pour tes requêtes. J'y ai découvert des services et méthodes que je n'avais pas encore identifiées.

Dès que j'aurais une minute devant moi, je regarderai ce que ramènent comme données ces services/méthodes.

Sinon à la vue des tes graphiques ci-dessus, quelle fréquence d'acquisition de données avais-tu retenue , car moi, pour l'instant dans mon script je ne acquiers les données que tous les 12h00 puisqu'elles étaient "statiques". Maintenant pour prendre en compte des données "dynamiques" c'est à dire acquises (je l'imagine au moins) toutes les 30 s à 1 min, cela va être une autre paire de manches pour intégrer cela dans mon script car je ne souhaite pas trop solliciter la Livebox afin de ne pas la déstabiliser, déjà quelle a un comportement erratique (elle n'aime pas et plante) quand on fait trop de requêtes consécutives sur elle, mais bon je vais y réfléchir à tête reposée.

Sinon tes graphes, c'est du Cacti je suppose ? car il faudra que je ramène cela sous graphana pour l'inclure à mon monitoring global (NAS, Docker, Caméras de surveillance, etc ...).

Il y a 1 heure, hpsmartyz2 a dit :

oui mais sysbus je ne l'ai que sous cygwin sur pc et je n'ai pas tous les autres librairies pour extraire le dm. pas envie non plus d'instaler sysbus sur le nas. tant pis.

Pour ma part, j'ai installé Ubuntu 20.04 via le Windows Service pour Linux (WSL 2) sur mon Win11 et j'ai ensuite installé le script sysbus selon le Readme.md du Github. C'est hyper simple et souple sans "quitter" l'environnement Win11.

il y a 4 minutes, hpsmartyz2 a dit :

ce que je cherchais c'était la version uml qui me semble plus exploitable

Tu l'obtiens avec une commande du type : sysbus <service> -model qui va te créer des diagramme de classes UML du service en question et qui sont consultables ensuite avec l'outil plantuml  ou tout autre outil capable d'ouvrir des fichier .svg.

687474703a2f2f72656e652d642e676974687562

il y a 13 minutes, hpsmartyz2 a dit :

ainsi que le graph des interfaces.

Là c'est la commande : sysbus -graph qui répondra à ton besoin.

687474703a2f2f72656e652d642e676974687562

Cordialement

oracle7😉

Lien vers le commentaire
Partager sur d’autres sites

oui, ce sont des graphs Cacti, après tout on est dans le thread à ce sujet.

les requêtes sont faites toutes les 5min.

le code que je t'ai donné place les valeurs dans des variables, c'est indépendant de Cacti. A toi de voir comment tu utilises ces variables pour finalement injecter la valeur dans ton infrastructure de monitoring.

pour ce qui est de sysbus, j'ai lu la doc, pas d'inquiétude 😉

En fait je ne tirerai pas plus de l'uml ou de la topo que du modèle en texte que j'ai déjà. le problème est que le modèle ne donne pas les nom des fonctions intéressantes à appeler. J'esperais que tu puisses les avoir.

La meilleure méthode, à ma connaissance, reste donc d'observer les requêtes dans un navigateur, même si c'est assez limité.

Dans le jours prochains je tenterai de sortir les stats de traffic par device. je te posterai la requête

attention, pour la requête de la qualité du wifi il faut créer une variable 'dev' qui contient:

Devices.Devices.12:34:56:78:90:AB

où '12:34:56:78:90:AB' est l'adresse MAC du Device en question

dernière note il est possible de récupérer dans la même mib les stats de traffic et de qualité de signal:

NeMo.Intf.eth4 / getMIBs

 

NeMo.Intf.wl0 / getMIBs
Lien vers le commentaire
Partager sur d’autres sites

je poste des requêtes que j'avais collectées au cas où certains y trouvent leur bonheur:

Je n'ai cependant pas réussi à déterminer comment passer les paramètres dans les commandes curl ...

{service: "DeviceInfo", method: "get", parameters: {}}
{service: "NMC", method: "get", parameters: {}}
{service: "UserInterface", method: "getLanguage", parameters: {}}
{service: "UserInterface", method: "getState", parameters: {}}
{service: "UserManagement", method: "getUser", parameters: {name: "admin"}}
{service: "HTTPService", method: "getCurrentUser", parameters: {}}
{service: "Manifests", method: "retrieve", parameters: {user: "admin", option: "wm_settings"}}
{service: "IoTService", method: "getStatus", parameters: {}}
{service: "NMC", method: "getWANStatus", parameters: {}}
{service: "NMC.OrangeTV", method: "getIPTVStatus", parameters: {}}
{service: "VoiceService.VoiceApplication", method: "listTrunks", parameters: {}}
{service: "NMC", method: "getVoIPConfig", parameters: {}}
{service: "NMC.Wifi", method: "get", parameters: {}}
{service: "VoiceService.VoiceApplication", method: "getCallList", parameters: [{line: "1"}]}
{service: "VoiceService.VoiceApplication", method: "listGroups", parameters: {}}
{service: "NMC", method: "get", parameters: {}}
{service: "NMC.OrangeTV", method: "getIPTVConfig", parameters: {}}
{service: "Scheduler", method: "getCompleteSchedules", parameters: {type: "WLAN"}}
{service: "Time", method: "getTime", parameters: {type: "WLAN"}}
{service: "Devices", method: "get", parameters: {expression: "voice handset physical"}}
{service: "NeMo.Intf.guest", method: "getMIBs", parameters: {mibs: "wlanvap"}}
{service: "NeMo.Intf.lan", method: "getMIBs", parameters: {mibs: "base wlanradio"}}
{service: "NeMo.Intf.data", method: "getMIBs", parameters: {mibs: "dhcp"}}
{service: "NMC", method: "getLANIP", parameters: {}}
{service: "DHCPv4.Server", method: "getDHCPServerPool", parameters: {id: "default"}}
{service: "Scheduler", method: "getCompleteSchedules", parameters: {type: "ToD"}}
{service: "DHCPv4.Server.Pool.default", method: "getStaticLeases", parameters: "default"}
{service: "Devices", method: "get", parameters: {expression: ".Active==true"}}
{service: "DHCPv4.Server.Pool.default", method: "getStaticLeases", parameters: "default"}
{service: "TopologyDiagnostics", method: "buildTopology", parameters: {SendXmlFile: false}}

 

ah bah si, je viens de trouver 😀

pour passer 

{service: "NeMo.Intf.wl0", method: "getMIBs", parameters: {mibs: "wlanvap"}}

il faut écrire:

 

{\"service\":\"NeMo.Intf.wl0\",\"method\":\"getMIBs\",\"parameters\":{\"mibs\": \"wlanvap\"}}

dans la commande curl

Lien vers le commentaire
Partager sur d’autres sites

une commande pour récupérer l'état de la mémoire de la box:

curl -s -o "$myBashDir/device.txt" -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"DeviceInfo.MemoryStatus\",\"method\":\"get\",\"parameters\":{}}" http://$myLivebox/ws
 

Lien vers le commentaire
Partager sur d’autres sites

@oracle7

j'ai trouvé beaucoup mieux pour récupérer le traffic des interfaces:

curl -s -o "$myBashDir/hl.txt" -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"HomeLan.Interface.wl0.Stats\",\"method\":\"get\",\"parameters\":{}}" http://$myLivebox/ws

et changer le service par les noms suivants, selon l'interface voulue:

instance 1: 'sysbus.HomeLan.Interface.wl0' (name: 1)
    parameter:  FriendlyName         : string     = '2.4GHz-Private_SSID'
    parameter:  Name                 : string     = 'wl0'
    parameter:  Alias                : string     = 'WiFi'
    parameter:  NumberOfStoredMeasures : uint32     = '2968'
instance 2: 'sysbus.HomeLan.Interface.eth4' (name: 2)
    parameter:  FriendlyName         : string     = '5GHz-Private_SSID'
    parameter:  Name                 : string     = 'eth4'
    parameter:  Alias                : string     = 'WiFi'
    parameter:  NumberOfStoredMeasures : uint32     = '2968'
instance 3: 'sysbus.HomeLan.Interface.eth0' (name: 3)
    parameter:  FriendlyName         : string     = 'eth1'
    parameter:  Name                 : string     = 'eth0'
    parameter:  Alias                : string     = 'Eth'
    parameter:  NumberOfStoredMeasures : uint32     = '2967'
instance 4: 'sysbus.HomeLan.Interface.eth1' (name: 4)
    parameter:  FriendlyName         : string     = 'eth2'
    parameter:  Name                 : string     = 'eth1'
    parameter:  Alias                : string     = 'Eth'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 5: 'sysbus.HomeLan.Interface.eth2' (name: 5)
    parameter:  FriendlyName         : string     = 'eth3'
    parameter:  Name                 : string     = 'eth2'
    parameter:  Alias                : string     = 'Eth'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 6: 'sysbus.HomeLan.Interface.eth3' (name: 6)
    parameter:  FriendlyName         : string     = 'eth4'
    parameter:  Name                 : string     = 'eth3'
    parameter:  Alias                : string     = 'Eth'
    parameter:  NumberOfStoredMeasures : uint32     = '2968'
instance 7: 'sysbus.HomeLan.Interface.eth3_wan' (name: 7)
    parameter:  FriendlyName         : string     = 'WAN_Ethernet'
    parameter:  Name                 : string     = 'eth3'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '2968'
instance 8: 'sysbus.HomeLan.Interface.vlan_data' (name: 8)
    parameter:  FriendlyName         : string     = 'WAN_Ethernet-Internet'
    parameter:  Name                 : string     = 'vlan_data'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 9: 'sysbus.HomeLan.Interface.vlan_multi' (name: 9)
    parameter:  FriendlyName         : string     = 'WAN_Ethernet-MultiServices'
    parameter:  Name                 : string     = 'vlan_multi'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 10: 'sysbus.HomeLan.Interface.vlan_voip' (name: 10)
    parameter:  FriendlyName         : string     = 'WAN_Ethernet-VoIP'
    parameter:  Name                 : string     = 'vlan_voip'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 11: 'sysbus.HomeLan.Interface.vlan_iptv1' (name: 11)
    parameter:  FriendlyName         : string     = 'WAN_Ethernet-IPTV_VOD'
    parameter:  Name                 : string     = 'vlan_iptv1'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 12: 'sysbus.HomeLan.Interface.vlan_iptv2' (name: 12)
    parameter:  FriendlyName         : string     = 'WAN_Ethernet-IPTV_Live'
    parameter:  Name                 : string     = 'vlan_iptv2'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 13: 'sysbus.HomeLan.Interface.veip0' (name: 13)
    parameter:  FriendlyName         : string     = 'WAN_GPON'
    parameter:  Name                 : string     = 'veip0'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '2968'
instance 14: 'sysbus.HomeLan.Interface.gvlan_data' (name: 14)
    parameter:  FriendlyName         : string     = 'WAN_GPON-Internet'
    parameter:  Name                 : string     = 'gvlan_data'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 15: 'sysbus.HomeLan.Interface.gvlan_multi' (name: 15)
    parameter:  FriendlyName         : string     = 'WAN_GPON-MultiServices'
    parameter:  Name                 : string     = 'gvlan_multi'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '2966'
instance 16: 'sysbus.HomeLan.Interface.gvlan_voip' (name: 16)
    parameter:  FriendlyName         : string     = 'WAN_GPON-VoIP'
    parameter:  Name                 : string     = 'gvlan_voip'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 17: 'sysbus.HomeLan.Interface.gvlan_iptv1' (name: 17)
    parameter:  FriendlyName         : string     = 'WAN_GPON-IPTV_VOD'
    parameter:  Name                 : string     = 'gvlan_iptv1'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 18: 'sysbus.HomeLan.Interface.gvlan_iptv2' (name: 18)
    parameter:  FriendlyName         : string     = 'WAN_GPON-IPTV_Live'
    parameter:  Name                 : string     = 'gvlan_iptv2'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '2959'
instance 19: 'sysbus.HomeLan.Interface.wlguest2' (name: 19)
    parameter:  FriendlyName         : string     = '2.4GHz-Guest_SSID'
    parameter:  Name                 : string     = 'wlguest2'
    parameter:  Alias                : string     = 'WiFi'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 20: 'sysbus.HomeLan.Interface.wlguest5' (name: 20)
    parameter:  FriendlyName         : string     = '5GHz-Guest_SSID'
    parameter:  Name                 : string     = 'wlguest5'
    parameter:  Alias                : string     = 'WiFi'
    parameter:  NumberOfStoredMeasures : uint32     = '0'


 

pour récupérer les stats du wan:

curl -s -o "$myBashDir/hl.txt" -b "$myCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $myContextID" -d "{\"service\":\"HomeLan\",\"method\":\"getWANCounters\",\"parameters\":{}}" http://$myLivebox/ws

Lien vers le commentaire
Partager sur d’autres sites

@hpsmartyz2

Bonjour,

Il y a 17 heures, hpsmartyz2 a dit :

le problème est que le modèle ne donne pas les nom des fonctions intéressantes à appeler. J'esperais que tu puisses les avoir.

Non et pour cause, même si on voit des choses dans le datamodel ce n'est pas pour autant que l'on faire une requête pour récupérer les données correspondantes. Orange verrouille/protège ainsi son datamodel.

Par ailleurs comme j'utilise ma Livebox comme "simple modem" car j'ai un routeur derrière en DMZ qui est bien plus performant, je ne me suis pas intéressé à certains services/méthodes que tu cites. Ce qui touche pas exemple au Wifi car il est désactivé sur la Livebox au profit du Wifi de mon routeur et parce que je n'en avais pas compris l'usage ou la pertinence des infos qu'elles comportaient. Je serai plus porté à récupérer le traffic E/S coté WAN et de même coté LAN afin de voici ce qui se passe globalement.

Je constate aussi la qu'entre ma Livebox 4 et ta Livebox 5, le datamodel est différent. Bien que je sois en Fibre j'ai encore dans celui-ci des infos liées à l'ADSL et au VDSL (certainement pour des raisons de compatibilité d'usage de la Livebox) alors que chez toi il y a des infos par ex liées au WAN_GPON (veip0) que je n'ai pas.

Il y a 17 heures, hpsmartyz2 a dit :

Dans le jours prochains je tenterai de sortir les stats de traffic par device. je te posterai la requête

Oui je serai curieux de voir.

Cordialement

oracle7😉

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour

ah! je n'avais pas compris que tu étais sous LB4.

l'instance du modèle doit être différente, mais pas le modèle en soit. Les commandes pour accès aux stats que j'ai postées hier soir je les ai trouvées dans le data model, tu dois pouvoir faire de même avec celui de ta lb.

Je serais étonné qu'Orange ait des modèles par box. c'est ingérable. donc le modèle doit être unique et s'instancie de différentes manières dépendant de la box. Dans le cas des interfaces plus haut, ce sont des instances de l'objet générique interface et c'est donc normal que je n'aie rien relatif à l'A/V-DSL.

je crois néanmoins que le nom de certaines interfaces pourrait avoir changé entre LB4 et LB5

Ultimement tu passes des commandes curl avec les noms de fonctions récupérées dans le dm ou via chrome et tu vois ce que ça rend.

Il y a 1 heure, oracle7 a dit :

oui je serai curieux de voir.

je suis en train de retravailler complètement le script car j'ai pas mal de devices. Tu m'as fait un peu peur et je ne voudrais pas qu'un burst d'une cinquantaine de requêtes simultanées pour récupérer la qualité du signal, les stats des devices et le traffic des interfaces plus qques autres trucs ne pourrissent ma box donc je vais tout faire en un appel et ferai Cacti traiter le résultat de manière indépendante. 

Modifié par hpsmartyz2
Lien vers le commentaire
Partager sur d’autres sites

@hpsmartyz2

Bonjour,

il y a 32 minutes, hpsmartyz2 a dit :

Je serais étonné qu'Orange ait des modèles par box. c'est ingérable. donc le modèle doit être unique et s'instancie de différentes manières dépendant de la box. Dans le cas des interfaces plus haut, ce sont des instances de l'objet générique interface et c'est donc normal que je n'aie rien relatif à l'A/V-DSL.

Bah manifestement non, les datamodel sont bien différents. Avec Orange et leur gestion de leurs Dev, plus rien ne m'étonne 🤣 Pour preuve l'extrait du datamodel Livebox4 pour le service "HomeLan.Interface" (je n'utilise pas la fonction 'curl' mais le script 'sysbus' c'est bien plus simple à l'usage et cela revient au même en terme de sortie ...) :

Citation

root@MonNAS:~# sysbus HomeLan.Interface -model

=========================================== level 0
OBJECT NAME: 'HomeLan.Interface'  (name: Interface)
parameter:  FriendlyName         : string     = ''
parameter:  Name                 : string     = ''
parameter:  Alias                : string     = ''
parameter:  NumberOfStoredMeasures : uint32     = '0'
--> templateInfo 1
--> instances 27
instance 1: 'HomeLan.Interface.wl0' (name: 1)
    parameter:  FriendlyName         : string     = '2.4GHz-Private_SSID'
    parameter:  Name                 : string     = 'wl0'
    parameter:  Alias                : string     = 'WiFi'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 2: 'HomeLan.Interface.eth6' (name: 2)
    parameter:  FriendlyName         : string     = '5GHz-Private_SSID'
    parameter:  Name                 : string     = 'eth6'
    parameter:  Alias                : string     = 'WiFi'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 3: 'HomeLan.Interface.wlguest2' (name: 3)
    parameter:  FriendlyName         : string     = '2.4GHz-Guest_SSID'
    parameter:  Name                 : string     = 'wlguest2'
    parameter:  Alias                : string     = 'WiFi'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 4: 'HomeLan.Interface.wlguest5' (name: 4)
    parameter:  FriendlyName         : string     = '5GHz-Guest_SSID'
    parameter:  Name                 : string     = 'wlguest5'
    parameter:  Alias                : string     = 'WiFi'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 5: 'HomeLan.Interface.eth1' (name: 6)
    parameter:  FriendlyName         : string     = 'eth1'
    parameter:  Name                 : string     = 'eth1'
    parameter:  Alias                : string     = 'Eth'
    parameter:  NumberOfStoredMeasures : uint32     = '8680'
instance 6: 'HomeLan.Interface.eth2' (name: 7)
    parameter:  FriendlyName         : string     = 'eth2'
    parameter:  Name                 : string     = 'eth2'
    parameter:  Alias                : string     = 'Eth'
    parameter:  NumberOfStoredMeasures : uint32     = '8680'
instance 7: 'HomeLan.Interface.eth3' (name: 😎
    parameter:  FriendlyName         : string     = 'eth3'
    parameter:  Name                 : string     = 'eth3'
    parameter:  Alias                : string     = 'Eth'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 8: 'HomeLan.Interface.eth4' (name: 9)
    parameter:  FriendlyName         : string     = 'eth4'
    parameter:  Name                 : string     = 'eth4'
    parameter:  Alias                : string     = 'Eth'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 9: 'HomeLan.Interface.dsl0' (name: 10)
    parameter:  FriendlyName         : string     = 'xDSL'
    parameter:  Name                 : string     = 'dsl0'
    parameter:  Alias                : string     = ''
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 10: 'HomeLan.Interface.dsl0_sync' (name: 11)
    parameter:  FriendlyName         : string     = 'xDSL-Sync'
    parameter:  Name                 : string     = 'dsl0'
    parameter:  Alias                : string     = ''
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 11: 'HomeLan.Interface.atm_data' (name: 12)
    parameter:  FriendlyName         : string     = 'ADSL-Internet'
    parameter:  Name                 : string     = 'atm_data'
    parameter:  Alias                : string     = 'xDSL_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 12: 'HomeLan.Interface.atm_multi' (name: 13)
    parameter:  FriendlyName         : string     = 'ADSL-MultiServices'
    parameter:  Name                 : string     = 'atm_multi'
    parameter:  Alias                : string     = 'xDSL_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 13: 'HomeLan.Interface.atm_voip' (name: 14)
    parameter:  FriendlyName         : string     = 'ADSL-VoIP'
    parameter:  Name                 : string     = 'atm_voip'
    parameter:  Alias                : string     = 'xDSL_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 14: 'HomeLan.Interface.atm_iptv1' (name: 15)
    parameter:  FriendlyName         : string     = 'ADSL-IPTV_VOD'
    parameter:  Name                 : string     = 'atm_iptv1'
    parameter:  Alias                : string     = 'xDSL_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 15: 'HomeLan.Interface.atm_iptv2' (name: 16)
    parameter:  FriendlyName         : string     = 'ADSL-IPTV_Zapping'
    parameter:  Name                 : string     = 'atm_iptv2'
    parameter:  Alias                : string     = 'xDSL_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 16: 'HomeLan.Interface.atm_iptv3' (name: 17)
    parameter:  FriendlyName         : string     = 'ADSL-IPTV_Live1'
    parameter:  Name                 : string     = 'atm_iptv3'
    parameter:  Alias                : string     = 'xDSL_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 17: 'HomeLan.Interface.atm_iptv4' (name: 18)
    parameter:  FriendlyName         : string     = 'ADSL-IPTV_Live2'
    parameter:  Name                 : string     = 'atm_iptv4'
    parameter:  Alias                : string     = 'xDSL_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 18: 'HomeLan.Interface.vvlan_data' (name: 19)
    parameter:  FriendlyName         : string     = 'VDSL-Internet'
    parameter:  Name                 : string     = 'vvlan_data'
    parameter:  Alias                : string     = 'xDSL_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 19: 'HomeLan.Interface.vvlan_multi' (name: 20)
    parameter:  FriendlyName         : string     = 'VDSL-MultiServices'
    parameter:  Name                 : string     = 'vvlan_multi'
    parameter:  Alias                : string     = 'xDSL_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 20: 'HomeLan.Interface.vvlan_voip' (name: 21)
    parameter:  FriendlyName         : string     = 'VDSL-VoIP'
    parameter:  Name                 : string     = 'vvlan_voip'
    parameter:  Alias                : string     = 'xDSL_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 21: 'HomeLan.Interface.vvlan_iptv1' (name: 22)
    parameter:  FriendlyName         : string     = 'VDSL-IPTV'
    parameter:  Name                 : string     = 'vvlan_iptv1'
    parameter:  Alias                : string     = 'xDSL_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 22: 'HomeLan.Interface.eth0' (name: 23)
    parameter:  FriendlyName         : string     = 'WAN_Ethernet'
    parameter:  Name                 : string     = 'eth0'
    parameter:  Alias                : string     = ''
    parameter:  NumberOfStoredMeasures : uint32     = '8680'
instance 23: 'HomeLan.Interface.vlan_data' (name: 24)
    parameter:  FriendlyName         : string     = 'WAN_Ethernet-Internet'
    parameter:  Name                 : string     = 'vlan_data'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 24: 'HomeLan.Interface.vlan_multi' (name: 25)
    parameter:  FriendlyName         : string     = 'WAN_Ethernet-MultiServices'
    parameter:  Name                 : string     = 'vlan_multi'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '8680'
instance 25: 'HomeLan.Interface.vlan_voip' (name: 26)
    parameter:  FriendlyName         : string     = 'WAN_Ethernet-VoIP'
    parameter:  Name                 : string     = 'vlan_voip'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 26: 'HomeLan.Interface.vlan_iptv1' (name: 27)
    parameter:  FriendlyName         : string     = 'WAN_Ethernet-IPTV_VOD'
    parameter:  Name                 : string     = 'vlan_iptv1'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '0'
instance 27: 'HomeLan.Interface.vlan_iptv2' (name: 28)
    parameter:  FriendlyName         : string     = 'WAN_Ethernet-IPTV_Live'
    parameter:  Name                 : string     = 'vlan_iptv2'
    parameter:  Alias                : string     = 'WAN_Virtual'
    parameter:  NumberOfStoredMeasures : uint32     = '8680'

=========================================== level 1
OBJECT NAME: 'HomeLan.Interface.Stats'  (name: Stats)
parameter:  BytesSent            : uint64     = '0'
parameter:  BytesReceived        : uint64     = '0'
--> instances 0

Compares-le à ce que tu as donné dans ton précédent post pour le même service (partir de l'instance 7 chez toi et de l'instance 9 chez moi) et tu verras ...

il y a 32 minutes, hpsmartyz2 a dit :

Tu m'as fait un peu peur et je ne voudrais pas qu'un burst d'une cinquantaine de requêtes simultanées pour récupérer la qualité du signal, les stats des devices et le traffic des interfaces plus qques autres trucs ne pourrissent ma box

Le problème est qu'une requête te ramène les données à un instant T (c'est en quelque sorte une photo). Donc si tu veux visualiser une évolution dans le temps (donc faire une vidéo ou un assemblage ontinu de photos) il te faut faire une requête (photo) tous les x sec/min. Cette fréquence d'acquisition est à affiner pour ne pas charger la Livebox. Par exemple, pour le monitoring du NAS en SNMP, la fréquence d'acquisition standard de telegraf est toutes les 30 sec. Je crains que ce soit beaucoup trop fréquent pour ne pas déstabiliser la Livebox qui alors passerait le plus clair de son temps à répondre aux requêtes d'où j'imagine une charge trop importante pour son processeur et système d'exploitation. Mais ce n'est que mon avis , je peux me tromper aussi ...

Cordialement

oracle7😉

 

Modifié par oracle7
Lien vers le commentaire
Partager sur d’autres sites

le problème n'est pas tant le numéro de l'instance ni leur nombre mais plutôt de remarquer que sur la box4 l'interface Wifi 5GHz s'appelle eth6 alors qu'elle s'appelle eth4 sur la LB5. Néanmoins, dans les deux cas l'objet Interface reste le même donc le modèle générique est identique, au moins à ce sujet.

ca ne sert pas à grand chose de récupérer les stats trop fréquemment. Sur des routeurs de coeur de réseau qui traitent des tera en transit le minimum théorique est de l'ordre de 10s et le cas le plus fréquent pratique c'est 1 à 5 min pour des stats de débit. ca dépend bien sûr de l'utilisation mais la surveillance du traffic n'est pas faite pour détecter des évènements nécessitant une réponse rapide, inutile donc d'avoir l'info très fréquemment et la LB n'est pas un routeur de coeur.

avec mon script actuel et sa liaison à cacti je fais je lance le script autant de fois que j'ai de graphs et chaque appel au script génère une authentification et extrait le/les paramètre(s) necessaire(s) pour le graph ayant généré la requête.

chaque graph est mis à jour toutes les 5 minutes.

donc si je me retrouve avec +70 graphs ca va faire un burst de 70 requêtes auth+extraction toutes les 5 min

pour optimiser un peu je vais faire 1 requête d'authentification + extraction des 70 paramètres toutes les 5min, tout stocker dans une base et faire cacti interroger cette base, indépendamment.

 

 

Modifié par hpsmartyz2
Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

Bon, vu que je suis pas super doué en ash ça m'a pris un peu de temps, ainsi que farfouiller dans les recoins de la Livebox 5.
Pour ceux que cela intéresse voilà mon script.
Il extrait

  • les stats de trafic des interfaces wifi, lan, wan de la box
  • les stats de trafic des interfaces wifi du répéteur
  • la puissance du signal et le rapport signal sur bruit de chacun des terminaux connectés (à la box ou au répéteur)
  • la mémoire vive disponible sur la box

je ne récupère que les port 1 (eth0) et 4 (eth3) du lan, mais ça se généralise aux deux autres très simplement.

Je compléterai ce script au fur et à mesure avec d'autres paramètres.

Pour l'instant je n'ai pas encore trouvé comment extraire les stats des terminaux filaires. Plus précisément j'ai trouvé un moyen (récupérer les flow stats) mais qui n'est pas le plus évident qui soit et donc il faut que j'y travaille encore.

Le script inscrit les paramètres dans un fichier texte selon un format donné mais ce n'est pas la partie intéressante. Ce qui est susceptible de vous intéresser c'est l'ensemble des fonctions appelées.

 

#!/bin/sh

# credits to https://blog.tetsumaki.net/ for LB connection/authentication method

lbDataDir=/var/services/web/cacti/scripts/livebox

if [ -f $lbDataDir/lock ]; then
	echo "lock file should not exist"
else
	touch $lbDataDir/lock
	
	myLivebox="ip-de-la-box"
	myExtender="ip-du-repeteur"
	passwd="mot-de-passe-de-la-box/du-repeteur"
	
	lbOutput=$lbDataDir/lbOutput.txt
	lbCookies=$lbDataDir/lbCookies.txt
	extOutput=$lbDataDir/extOutput.txt
	extCookies=$lbDataDir/extCookies.txt
	
	rm $lbDataDir/livebox-infos.txt
	touch $lbDataDir/livebox-infos.txt

	#***********************************#
	#              LIVEBOX              #
	#***********************************#
	#connect to livebox
	curl -s -o "$lbOutput" -X POST -c "$lbCookies" -H 'Content-Type: application/x-sah-ws-4-call+json' -H 'Authorization: X-Sah-Login' -d "{\"service\":\"sah.Device.Information\",\"method\":\"createContext\",\"parameters\":{\"applicationName\":\"so_sdkut\",\"username\":\"admin\",\"password\":\"$passwd\"}}" http://$myLivebox/ws > /dev/null
	lbContextID=$(tail -n1 "$lbOutput" | sed 's/{"status":0,"data":{"contextID":"//1'| sed 's/",//1' | sed 's/"groups":"http,admin//1' | sed 's/"}}//1')
	
	#Get traffic stats of interfaces
	intfList="veip0 eth0 eth3 wl0 eth4"
	prefix="NeMo.Intf."
	for intf in $intfList; do
		srv="${prefix}${intf}"
		output=$(curl -s -b "$lbCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $lbContextID" -d "{\"service\":\"$srv\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myLivebox/ws)
		verif=$(echo "$output" | cut -d":" -f2 | cut -d"," -f1)
		if [ "$verif" = "null" ]; then
			echo "interface ${intf} does not exist or could not be retreived"
		else
			rx=$(echo "$output" | awk -F'RxBytes' '{print $2}' | awk -F\: '{print $2}' | awk -F\, '{print $1}')
			tx=$(echo "$output" | awk -F'TxBytes' '{print $2}' | awk -F\: '{print $2}' | awk -F\, '{print $1}')
			echo "lb_$intf>rx:$rx,tx:$tx" >> $lbDataDir/livebox-infos.txt
		fi
	done
	
	#Get traffic and signal stats of wireless terminals. Only Active Associated Devices are considered.
	prefix="NeMo.Intf."
	intfList="wl0 eth4"
	for intf in $intfList; do
		srv="${prefix}${intf}"
		output=$(curl -s -b "$lbCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $lbContextID" -d "{\"service\":\"$srv\",\"method\":\"getStationStats\",\"parameters\":{}}" http://$myLivebox/ws)
		verif=$(echo "$output" | cut -d":" -f2 | cut -d"," -f1)
		if [ "$verif" = "null" ]; then
			echo "error retreiving ${srv}:getStationStats"
		else
			n=1
			nAD=$(echo "$output" | awk -F'MACAddress' '{print NF-1}')
			while [ $n -le $nAD ]; do
				isActive=$(echo "$output" | awk -F'Active' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
				mac=$(echo "$output" | awk -F'"MACAddress":' "{print \$$((n+1))}" | awk -F\, '{print $1}' | awk -F\" '{print $2}')
				if [ "$isActive" = "true" ]; then
					rx=$(echo "$output" | awk -F'RxBytes' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
					tx=$(echo "$output" | awk -F'TxBytes' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
					sst=$(echo "$output" | awk -F'"SignalStrength":' "{print \$$((n+1))}" | awk -F\, '{print $1}')
					snr=$(echo "$output" | awk -F'SignalNoiseRatio' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')

					sst=$((sst + 100))
					if [ $sst -gt 70 ]; then
						sig="r1:10,r2:10,r3:10,r4:3,r5:7,r6:10,r7:20,r8:$((sst - 70)),snr:$snr"
					elif [ $sst -gt 50 ]; then
						sig="r1:10,r2:10,r3:10,r4:3,r5:7,r6:10,r7:$((sst - 50)),r8:0,snr:$snr"
					elif [ $sst -gt 40 ]; then
						sig="r1:10,r2:10,r3:10,r4:3,r5:7,r6:$((sst - 40)),r7:0,r8:0,snr:$snr"
					elif [ $sst -gt 33 ]; then
						sig="r1:10,r2:10,r3:10,r4:3,r5:$((sst - 33)),r6:0,r7:0,r8:0,snr:$snr"
					elif [ $sst -gt 30 ]; then
						sig="r1:10,r2:10,r3:10,r4:$((sst - 30)),r5:0,r6:0,r7:0,r8:0,snr:$snr"
					elif [ $sst -gt 20 ]; then
						sig="r1:10,r2:10,r3:$((sst - 20)),r4:0,r5:0,r6:0,r7:0,r8:0,snr:$snr"
					elif [ $sst -gt 10 ]; then
						sig="r1:10,r2:$((sst - 10)),r3:0,r4:0,r5:0,r6:0,r7:0,r8:0,snr:$snr"
					elif [ $sst -gt 0 ]; then
						sig="r1:$sst,r2:0,r3:0,r4:0,r5:0,r6:0,r7:0,r8:0,snr:$snr"
					fi
					echo "lb_$mac>rx:$rx,tx:$tx,$sig" >> $lbDataDir/livebox-infos.txt
				else
					echo "device ${mac} is Associated but inactive. It might be connected to an extender or could become out of range soon"
				fi
				n=$((n + 1))
			done
		fi
	done

	output=$(curl -s -b "$lbCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $lbContextID" -d "{\"service\":\"DeviceInfo.MemoryStatus\",\"method\":\"get\",\"parameters\":{}}" http://$myLivebox/ws)
	verif=$(echo "$output" | cut -d"{" -f2 | cut -d":" -f2)
	if [ "$verif" = "null" ]; then
		echo "error retreiving DeviceInfo.MemoryStatus"
	else
		mf=$(echo "$output" | awk -F'Free' '{print $2}'| awk -F\: '{print $2}' | awk -F\, '{print $1}' | awk -F\} '{print $1}')
		echo "$myLivebox>MemFree:$mf" >> $lbDataDir/livebox-infos.txt
	fi
	
	#disconnect from livebox
	curl -s -b "$lbCookies" -X POST http://$myLivebox/logout
	rm "$lbCookies" "$lbOutput"
	
	
	#***********************************#
	#             REPETEUR              #
	#***********************************#
	#connect to extender
	curl -s -o "$extOutput" -X POST -c "$extCookies" -H 'Content-Type: application/x-sah-ws-4-call+json' -H 'Authorization: X-Sah-Login' -d "{\"service\":\"sah.Device.Information\",\"method\":\"createContext\",\"parameters\":{\"applicationName\":\"so_sdkut\",\"username\":\"admin\",\"password\":\"$passwd\"}}" http://$myExtender/ws > /dev/null
	extContextID=$(tail -n1 "$extOutput" | sed 's/{"status":0,"data":{"contextID":"//1'| sed 's/",//1' | sed 's/"groups":"http,admin//1' | sed 's/"}}//1')

	#Get traffic stats of interfaces
	intfList="wl0 vap5g0priv"
	prefix="NeMo.Intf."
	for intf in $intfList; do
		srv="${prefix}${intf}"
		output=$(curl -s -b "$extCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $extContextID" -d "{\"service\":\"$srv\",\"method\":\"getNetDevStats\",\"parameters\":{}}" http://$myExtender/ws)
		verif=$(echo "$output" | cut -d":" -f2 | cut -d"," -f1)
		if [ "$verif" = "null" ]; then
			echo "interface ${intf} does not exist or could not be retreived"
		else
			rx=$(echo "$output" | awk -F'RxBytes' '{print $2}' | awk -F\: '{print $2}' | awk -F\, '{print $1}')
			tx=$(echo "$output" | awk -F'TxBytes' '{print $2}' | awk -F\: '{print $2}' | awk -F\, '{print $1}')
			#adding prefix to differenciate intf name between box and extender (only usefull for wl0)
			echo "ext_$intf>rx:$rx,tx:$tx" >> $lbDataDir/livebox-infos.txt
		fi
	done

	prefix="NeMo.Intf."
	intfList="wl0 vap5g0priv"
	for intf in $intfList; do
		srv="${prefix}${intf}"
		output=$(curl -s -b "$extCookies" -X POST -H 'Content-Type: application/x-sah-ws-4-call+json' -H "X-Context: $extContextID" -d "{\"service\":\"$srv\",\"method\":\"getStationStats\",\"parameters\":{}}" http://$myExtender/ws)
		verif=$(echo "$output" | cut -d":" -f2 | cut -d"," -f1)
		if [ "$verif" = "null" ]; then
			echo "error retreiving ${srv}:getStationStats"
		else
			n=1
			nAD=$(echo "$output" | awk -F'MACAddress' '{print NF-1}')
			while [ $n -le $nAD ]; do
				isActive=$(echo "$output" | awk -F'Active' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
				mac=$(echo "$output" | awk -F'"MACAddress":' "{print \$$((n+1))}" | awk -F\, '{print $1}' | awk -F\" '{print $2}')
				if [ "$isActive" = "true" ]; then
					rx=$(echo "$output" | awk -F'RxBytes' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
					tx=$(echo "$output" | awk -F'TxBytes' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')
					sst=$(echo "$output" | awk -F'"SignalStrength":' "{print \$$((n+1))}" | awk -F\, '{print $1}')
					snr=$(echo "$output" | awk -F'SignalNoiseRatio' "{print \$$((n+1))}" | awk -F\: '{print $2}' | awk -F\, '{print $1}')

					sst=$((sst + 100))
					if [ $sst -gt 70 ]; then
						sig="r1:10,r2:10,r3:10,r4:3,r5:7,r6:10,r7:20,r8:$((sst - 70)),snr:$snr"
					elif [ $sst -gt 50 ]; then
						sig="r1:10,r2:10,r3:10,r4:3,r5:7,r6:10,r7:$((sst - 50)),r8:0,snr:$snr"
					elif [ $sst -gt 40 ]; then
						sig="r1:10,r2:10,r3:10,r4:3,r5:7,r6:$((sst - 40)),r7:0,r8:0,snr:$snr"
					elif [ $sst -gt 33 ]; then
						sig="r1:10,r2:10,r3:10,r4:3,r5:$((sst - 33)),r6:0,r7:0,r8:0,snr:$snr"
					elif [ $sst -gt 30 ]; then
						sig="r1:10,r2:10,r3:10,r4:$((sst - 30)),r5:0,r6:0,r7:0,r8:0,snr:$snr"
					elif [ $sst -gt 20 ]; then
						sig="r1:10,r2:10,r3:$((sst - 20)),r4:0,r5:0,r6:0,r7:0,r8:0,snr:$snr"
					elif [ $sst -gt 10 ]; then
						sig="r1:10,r2:$((sst - 10)),r3:0,r4:0,r5:0,r6:0,r7:0,r8:0,snr:$snr"
					elif [ $sst -gt 0 ]; then
						sig="r1:$sst,r2:0,r3:0,r4:0,r5:0,r6:0,r7:0,r8:0,snr:$snr"
					fi
					#adding prefix to differenciate terminal mac between box and extender
					#traffic and signal data are specific to connection point
					echo "ext_$mac>rx:$rx,tx:$tx,$sig" >> $lbDataDir/livebox-infos.txt
				else
					echo "device ${mac} is Associated but inactive. It might be connected to an extender or could become out of range soon"
				fi
				n=$((n + 1))
			done
		fi
	done
	
	#disconnect from extender
	curl -s -b "$extCookies" -X POST http://$myExtender/logout
	rm "$extCookies" "$extOutput"
	
	rm $lbDataDir/lock
fi

 

Modifié par hpsmartyz2
Lien vers le commentaire
Partager sur d’autres sites

@hpsmartyz2

Bonjour,

il y a 46 minutes, hpsmartyz2 a dit :

La mémoire disponible de la box diminue, c'est peut-être pas bon signe

Tu est sûr de ton coup là sur la mémoire disponible ?

A mon humble avis, c'est la mémoire Utilisée que tu affiches dans ton graphe (vu son titre) et du coup ton graphe indiquerait alors que tu consommes moins de mémoire.

Chez moi (Livebox 4) j'ai ceci : EkLVeFJ.png

Cordialement

oracle7😉

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

bonne question. j'extraie l'info d'ici:

OBJECT NAME: 'sysbus.DeviceInfo.MemoryStatus'  (name: MemoryStatus)
parameter:  Total                : uint32     = '490944'
parameter:  Free                 : uint32     = '184368'

et je plote Free (en ayant pris l'hypothèse qu'il fallait multiplier par 1024.

D'où viennent vos chiffres ? Merci.


 

 

Lien vers le commentaire
Partager sur d’autres sites

@hpsmartyz2

Bonjour,

il y a 14 minutes, hpsmartyz2 a dit :

D'où viennent vos chiffres ?

Comme toi Service DeviceInfo/MemoryStatus et methode get.

{
  "status": {
    "Total": 959176,
    "Free": 690768
  }
}

Ce qui est étonnant c'est qu'à la vue de tes chiffres, ta LB5 n'aurait que 512Ko de mémoire alors que j'ai 1Mo sur ma LB4, bizarre, non ?

Sinon pour info :

TZX4ewm.png

Cordialement

oracle7😉

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.