- Communauté Orange
- ➔
- internet & fixe
- ➔
- Livebox
- ➔
- Script shell de collecte des statistiques xDSL LB4...
Vous avez une question ?
Interrogez la communautéScript shell de collecte des statistiques xDSL LB4 v4.65.0
- S'abonner au fil RSS
- Marquer le sujet comme nouveau
- Marquer le sujet comme lu
- Placer ce Sujet en tête de liste pour l'utilisateur actuel
- Marquer
- S'abonner
- Page imprimable
- Marquer comme nouveau
- Marquer
- S'abonner
- S'abonner au fil RSS
- Imprimer
- Signaler
Script shell de collecte des statistiques xDSL LB4 v4.65.0
Bonjour à toutes et tous.
Après celui pour contourner le bug de la perte de l'admin distante après reboot sur LB4 en v4.65.0 (voir ici ), et celui pour récupérer les règles firewall qui "disparaissent" (voir là ) en voici un autre pour relever automatiquement les données de synchro xDSL de l'onglet "Informations système / DSL" (et "DSL Advanced").
Nécessite curl et jq (à installer au préalable si besoin avec "sudo apt install curl jq").
Fonctionne également sous Windows (10) avec WSL (testé ok avec valeur de TIMEOUT augmentée).
Devrait fonctionner sur n'importe quel Unix like, MacOs, un NAS, etc (pas testé).
#!/usr/bin/env bash
# Script de récupération des stats xdsl sur LB4.
# Testé sur Sercomm v4.65.0 en ADSL seulement.
# Devrait probablement fonctionner aussi sur LB3, à tester.
# Dé commenter pour debug.
# set -xv
DELAIS="295" # Délais en secondes entre deux interrogations de la box, en local l'interrogation prend ~3sec et un peu plus en distant. La session tombe si inactive plus d'environ 10min.
TIMEOUT=5 # Valeur de timeout pour curl.
# Dé commenter pour exécution en admin distante.
# PROTO="-k https"
# URL="Mon-Nom-DNS.no-ip.org" # Nom DNS, à adapter.
# PORT="12345" # Port utilisé, à adapter.
# USERNAME="matrix-bx" # Nom à adapter.
# PASSWORD="Sup3rSecret" # À adapter.
# Commenter pour exécution en admin distante.
PROTO="http"
URL="192.168.1.1" # Adapter si besoin.
PORT="80"
USERNAME="admin"
PASSWORD="MonMotDePasseSuperSecret" # À adapter.
LB4Login () {
CONTEXTID=$(curl -m $TIMEOUT -c .cookies-jar.txt -s $PROTO://$URL:$PORT/ws \
-H 'Authorization: X-Sah-Login' \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
--data-raw $'{"service":"sah.Device.Information","method":"createContext","parameters":{"applicationName":"webui","username":"'$USERNAME'","password":"'$PASSWORD'"}}' 2>/dev/null | \
jq -r '.data.contextID' 2>/dev/null)
SESSIONID=$(awk /$URL/'{print $NF}' .cookies-jar.txt)
COOKIEID=$(awk /$URL/'{print $6}' .cookies-jar.txt | cut -d "/" -f1)
! [[ -z $SESSIONID ]] && ! [[ -z $COOKIEID ]] && rm .cookies-jar.txt && return 0
[[ $CONTEXTID == "null" ]] && echo "Échec d'ouverture de session, vérifier les paramètres." && exit 1
} # Fonction d'ouverture de session sur la box, durée max session inactive env 10 min.
GetLB4MACAddress () {
LB4MACAddress=$(curl -m $TIMEOUT -s $PROTO://$URL:$PORT/ws \
-H 'Authorization: X-Sah '$CONTEXTID \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
-H 'X-Context: '$CONTEXTID -H 'Cookie: '$COOKIEID'/sessid='$SESSIONID'; sah/contextId='$CONTEXTID \
--data-raw '{"service":"NMC","method":"getWANStatus","parameters":{}}' 2>/dev/null | \
jq -r '.data.MACAddress' 2>/dev/null)
[[ $LB4MACAddress == "null" ]] && LB4Login && GetLB4MACAddress
[[ -z $LB4MACAddress ]] && LB4Login && GetLB4MACAddress
! [[ -z $LB4MACAddress ]] && return 0
} # Fonction de récupération de l'adresse MAC de la box et de réouverture de session en cas d'échec.
GetLB4xDSLStats () {
XDSLSTATS=$(date +%Y%m%d-%H%M%S)" "\
$(curl -m $TIMEOUT -s $PROTO://$URL:$PORT/ws \
-H 'Authorization: X-Sah '$CONTEXTID \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
-H 'X-Context: '$CONTEXTID \
-H 'Cookie: '$COOKIEID'/sessid='$SESSIONID'; sah/contextId='$CONTEXTID \
--data-raw $'{"service":"NeMo.Intf.dsl0","method":"get","parameters":"dsl0"}' 2>/dev/null | \
jq -r '.status.LineStatus, .status.Line_LastChangeTime, .status.ModulationType, .status.StandardUsed, .status.Line_ACTINP, .status.Line_ATN70, .status.Line_UpstreamAttenuation, .status.Line_UpstreamLineAttenuation, .status.Line_DownstreamAttenuation, .status.Line_DownstreamLineAttenuation, .status.UpstreamCurrRate, .status.Line_UpstreamMaxRate, .status.Line_DownstreamCurrRate, .status.Line_DownstreamMaxRate, .status.Line_UpstreamNoiseMargin, .status.Line_DownstreamNoiseMargin' 2>/dev/null)" "\
$(curl -m $TIMEOUT -s $PROTO://$URL:$PORT/ws \
-H 'Authorization: X-Sah '$CONTEXTID \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
-H 'X-Context: '$CONTEXTID \
-H 'Cookie: '$COOKIEID'/sessid='$SESSIONID'; sah/contextId='$CONTEXTID \
--data-raw $'{"service":"NeMo.Intf.dsl0","method":"getDSLStats","parameters":{}}' 2>/dev/null | \
jq -r '.status.LinkRetrain, .status.LossOfFraming, .status.ErroredSecs, .status.SeverelyErroredSecs, .status.FECErrors, .status.ATUCFECErrors, .status.CRCErrors, .status.ATUCCRCErrors' 2>/dev/null)
echo $XDSLSTATS | tee -a $(date +%Y%m%d)"_"$URL"_Stats_xDSL.log" # Remplacer "| tee -a" par ">>" pour ne rien afficher à l'écran, à faire également plus bas pour la génération du fichier log.
} # Fonction de récupération des stats xDSL.
# Fonction générique de récupération des valeurs xDSL "avancées".
GetLB4xDSL_Advanced () {
case $1 in
BITs) TYPE=BITs ;;
RNC_QLN) TYPE=RNC_QLN ;;
HLOG) TYPE=HLOG ;;
SNR) TYPE=SNR ;;
*) echo "Type mesure non supporté !" ; return 1 ;;
esac
LB4xDSL_Advanced=$(curl -m $TIMEOUT -s $PROTO://$URL:$PORT/ws \
-H 'Authorization: X-Sah '$CONTEXTID \
-H 'Content-Type: application/x-sah-ws-4-call+json' \
-H 'X-Context: '$CONTEXTID \
-H 'Cookie: '$COOKIEID'/sessid='$SESSIONID'; sah/contextId='$CONTEXTID \
--data-raw $'{"service":"NeMo.Intf.dsl0","method":"getXDSLNoiseMeasure","parameters":{"typeMeasure":"'$TYPE'"}}' 2>/dev/null | \
jq -r '.status.'$TYPE'' 2>/dev/null )
echo $(date +%Y%m%d-%H%M%S)" "$LB4xDSL_Advanced >> $(date +%Y%m%d)"_"$URL"_xDSL_"$TYPE".log"
}
BouclePrincipale () {
while true
do
if ! [[ -f $(date +%Y%m%d)_"$URL"_Stats_xDSL.log ]] # Création automatique d'un fichier de log avec entêtes.
then
echo "Date Status LastChangeTime ModulationType StandardUsed ACTINP ATN70 UpstreamAttenuation UpstreamLineAttenuation DownstreamAttenuation DownstreamLineAttenuation UpstreamCurrRate UpstreamMaxRate DownstreamCurrRate DownstreamMaxRate UpstreamNoiseMargin DownstreamNoiseMargin LinkRetrain LossOfFraming ErroredSecs SeverelyErroredSecs FECErrors ATUCFECErrors CRCErrors ATUCCRCErrors" | tee -a $(date +%Y%m%d)_"$URL"_Stats_xDSL.log # Remplacer "| tee -a" par ">>" pour ne rien afficher à l'écran, à faire également plus haut dans la fonction GetLB4xDSLStats.
fi
GetLB4MACAddress # sert juste à vérifier si la session est valide et à en ré ouvrir une sinon.
GetLB4xDSLStats # Récupère, log et affiche les valeurs. Modifier la fonction GetLB4xDSLStats pour ne rien afficher.
# GetLB4xDSL_Advanced BITs # À dé commenter si voulu, n'affiche rien, enregistre dans un fichier.
# GetLB4xDSL_Advanced RNC_QLN # Chaque interrogation prend un peu de temps, adapter éventuellement le DELAIS en fonction.
# GetLB4xDSL_Advanced HLOG
# GetLB4xDSL_Advanced SNR
sleep $DELAIS
done
}
if [[ $(ps aux | grep -v -E "pluma|gedit|nano" | grep -c $0 ) -gt 4 ]] # On vérifie si il y a déjà une instance du script active, on quitte si c'est le cas.
then
echo "Script $0 déjà en cours d’exécution !"
exit 1
fi
BouclePrincipaleLancé via cron au démarrage (@reboot ~/LB4_Monitor_xDSL.sh).
Pensez à rendre exécutable le script avec "chmod +x ~/LB4_Monitor_xDSL.sh".
Bonne journée.
Suggérer, expliquer, démontrer ne suffit parfois pas. On apprend de ses erreurs, enfin la plupart. "I'm All Out of Gum."