#1 26-08-2015 23:40:42

Cracky
Membre
Date d'inscription: 20-09-2013
Messages: 57

TP-LINK TD-W8960N - Script sh - Trace au format CSV les stats ADSL

Bonjour,

Réalisé rapidement pour un besoin ponctuel :
http://www.forum-orange.com/viewtopic.php?id=73446
CJ un script sh (doit passer également en bash ou ksh) qui génère un fichier CSV avec les traces des statistique ADSL d'un TD-W8960N récoltées approximativement toutes les minutes.

Ce script utilise l'interface http du modem. Il est paramétré pour la configuration (IP et login/password d'accès) par défaut d'un TD-W8960N. Si vous avez changé la configuration, il vous faudra adapter le paramétrage, voir les commentaires dans le script.

Script testé/utilisé pour ma part :
- sur une distribution Linux Mageia 5. Curl doit être installé (testé avec curl version 7.40) ;
- avec un TD-W8960N v5, firmware 141107.

Sans aucune garantie et à vos risques et périls !

Quand j'aurai un peu de temps je regarderai si je peux en faire une jolie version Python plus portable sur différents systèmes ...

Code:

#!/bin/sh

# stats.sh : Trace au format CSV les stats ADSL d'un TD-W8960N
# Usage :
#   stats.sh
# Description :
#   Génère un fichier stats.sh.csv avec les traces des stats ADSL
#   d'un TD-W8960N récoltées approximativement toutes les minutes.

NOM_PGR=`basename "$0"`
DIR_PGR=`dirname "$0"`

# IP accès http du TD-W8960N
IP="192.168.1.1"
# login:password encodé base64
# ex: printf "admin:admin" | base64 => YWRtaW46YWRtaW4=
AUTH="YWRtaW46YWRtaW4="
                        
# Délai entre 2 mesures
DELAY="1m"

CSV_FILE="${DIR_PGR}/${NOM_PGR}.csv"
CSV_HEAD="time;rateD;rateU;snrD;snrU;atnD;atnU;crcD;diff_crcD;crcU;diff_crcU;fecD;diff_fecD;fecU;diff_fecU;hecD;diff_hecD;hecU;diff_hecU;esD;diff_esD;esU;diff_esU;sesD;diff_sesD;sesU;diff_sesU"
if [ -s "${CSV_FILE}" ]; then
  # sauvegarde ancien .csv
  time=`date '+%Y%m%d_%H%M%S'`
  mv -f "${CSV_FILE}" "${CSV_FILE}.avant_${time}.csv"
fi

## @fonctions statsadslreset
## ADSL stats reset
## %argument
## %retour
statsadslreset() {
  curl -s -e "http://${IP}/" --header "Cookie: Authorization=Basic ${AUTH}" --header "Content-Type: text/plain; charset=UTF-8" "http://${IP}/statsadslreset.html" >/dev/null
  echo "${CSV_HEAD}"
  echo "${CSV_HEAD}" > "${CSV_FILE}"
  first=1
}

## @fonctions get_statsadsl
## Get ADSL stats
## %argument
## %retour ADSL stats
get_statsadsl() {
  adslStats=`curl -s -e "http://${IP}/" --header "Cookie: Authorization=Basic ${AUTH}" --header "Content-Type: text/plain; charset=UTF-8" "http://${IP}/statsadsl.html"`
  snrD=`echo "${adslStats}" | grep -o "<tr><td class='hd'>SNR Margin (0.1 dB):</td><td colspan='2'>[^<]*</td><td colspan='2'>[^<]*" | cut -d">" -f5 | cut -d"<" -f1`
  snrU=`echo "${adslStats}" | grep -o "<tr><td class='hd'>SNR Margin (0.1 dB):</td><td colspan='2'>[^<]*</td><td colspan='2'>[^<]*" | cut -d">" -f7 | cut -d"<" -f1`
  atnD=`echo "${adslStats}" | grep -o "<tr><td class='hd'>Attenuation (0.1 dB):</td><td colspan='2'>[^<]*</td><td colspan='2'>[^<]*" | cut -d">" -f5 | cut -d"<" -f1`
  atnU=`echo "${adslStats}" | grep -o "<tr><td class='hd'>Attenuation (0.1 dB):</td><td colspan='2'>[^<]*</td><td colspan='2'>[^<]*" | cut -d">" -f7 | cut -d"<" -f1`
  rateD=`echo "${adslStats}" | grep -o "<tr><td class='hd'>Rate (Kbps):</td><td>[^<]*</td><td>[^<]*" | cut -d">" -f5 | cut -d"<" -f1 | sed "s/,//g"`
  rateU=`echo "${adslStats}" | grep -o "<tr><td class='hd'>Rate (Kbps):</td><td>[^<]*</td><td>[^<]*" | cut -d">" -f7 | cut -d"<" -f1 | sed "s/,//g"`
  crcD=`echo "${adslStats}" | grep -o "<tr><td class='hd'>Super Frame Errors:</td><td>[^<]*</td><td>[^<]*" | cut -d">" -f5 | cut -d"<" -f1 | sed "s/,//g"`
  crcU=`echo "${adslStats}" | grep -o "<tr><td class='hd'>Super Frame Errors:</td><td>[^<]*</td><td>[^<]*" | cut -d">" -f7 | cut -d"<" -f1 | sed "s/,//g"`
  fecD=`echo "${adslStats}" | grep -o "<tr><td class='hd'>RS Correctable Errors:</td><td>[^<]*</td><td>[^<]*" | cut -d">" -f5 | cut -d"<" -f1 | sed "s/,//g"`
  fecU=`echo "${adslStats}" | grep -o "<tr><td class='hd'>RS Correctable Errors:</td><td>[^<]*</td><td>[^<]*" | cut -d">" -f7 | cut -d"<" -f1 | sed "s/,//g"`
  hecD=`echo "${adslStats}" | grep -o "<tr><td class='hd'>HEC Errors:</td><td>[^<]*</td><td>[^<]*" | cut -d">" -f5 | cut -d"<" -f1 | sed "s/,//g"`
  hecU=`echo "${adslStats}" | grep -o "<tr><td class='hd'>HEC Errors:</td><td>[^<]*</td><td>[^<]*" | cut -d">" -f7 | cut -d"<" -f1 | sed "s/,//g"`
  esD=`echo "${adslStats}" | grep -o "<tr><td class='hd'>Total ES:</td><td>[^<]*</td><td>[^<]*" | cut -d">" -f5 | cut -d"<" -f1 | sed "s/,//g"`
  esU=`echo "${adslStats}" | grep -o "<tr><td class='hd'>Total ES:</td><td>[^<]*</td><td>[^<]*" | cut -d">" -f7 | cut -d"<" -f1 | sed "s/,//g"`
  sesD=`echo "${adslStats}" | grep -o "<tr><td class='hd'>Total SES:</td><td>[^<]*</td><td>[^<]*" | cut -d">" -f5 | cut -d"<" -f1 | sed "s/,//g"`
  sesU=`echo "${adslStats}" | grep -o "<tr><td class='hd'>Total SES:</td><td>[^<]*</td><td>[^<]*" | cut -d">" -f7 | cut -d"<" -f1 | sed "s/,//g"`
}

## @fonctions main
## Traitement principal
## %argument
## %retour

# RAZ
statsadslreset

# Bloucle infinie, avec DELAY delai entre 2 mesures 
while [ 1 -eq 1 ]; do

  get_statsadsl

  time=`date '+%Y-%m-%d %H:%M:%S'`
  if [ ${first} -eq 1 ]; then
    first=0
  else
    diff_crcD=`expr $crcD - $lastCrcD`
    diff_crcU=`expr $crcU - $lastCrcU`
    diff_fecD=`expr $fecD - $lastFecD`
    diff_fecU=`expr $fecU - $lastFecU`
    diff_hecD=`expr $hecD - $lastHecD`
    diff_hecU=`expr $hecU - $lastHecU`
    diff_esD=`expr $esD - $lastEsD`
    diff_esU=`expr $esU - $lastEsU`
    diff_sesD=`expr $sesD - $lastSesD`
    diff_sesU=`expr $sesU - $lastSesU`
  fi
  mesures="$time;$rateD;$rateU;$snrD;$snrU;$atnD;$atnU;$crcD;$diff_crcD;$crcU;$diff_crcU;$fecD;$diff_fecD;$fecU;$diff_fecU;$hecD;$diff_hecD;$hecU;$diff_hecU;$esD;$diff_esD;$esU;$diff_esU;$sesD;$diff_sesD;$sesU;$diff_sesU"
  echo "$mesures"
  echo "$mesures" >> "${CSV_FILE}"
  lastCrcD="$crcD"
  lastCrcU="$crcU"
  lastFecD="$fecD"
  lastFecU="$fecU"
  lastHecD="$hecD"
  lastHecU="$hecU"
  lastEsD="$esD"
  lastEsU="$esU"
  lastSesD="$sesD"
  lastSesU="$sesU"

  sleep ${DELAY}

done

Cordialement,
Cracky

Dernière modification par Cracky (27-08-2015 00:00:20)

Hors ligne

 

Powered by PunBB
© Copyright 2002–2008 PunBB