Statistics from Freebox Revolution into Xymon server

       766 words, 4 minutes

For those who may not know, the “Freebox Revolution” is the 6th release of the access box from the French ADSL/FTTH provider named “Free”. In my case, it provides Internet access via FTTH. The box has a Web management interface from where you can configure and check statistics. The only “sad” news is that it does not provide any SNMP service. The only way to keep a eye on what goes through the ports is to log on the Web interface.

Here’s how I use the Web interface to grab metrics and show them in Xymon.

Grab the metrics

The first thing to do is to be able to get the metrics from a script. What’s a bit tricky is that the Web interface doesn’t use authentication parameters through the session. You can only set them once and any non-authenticated request sends you back to the authentication page.

Hopefully, you can use Cookies to authenticate once and browse the interface pages.

In my particular case, I use the `wget` command. Mostly because it is available on (m)any OS.

The magic strings that grab the metrics are:

  # populate data files
  FBOXCOO="/tmp/fbox_cookie"
  FBOXLOG="/tmp/fbox_login.log"
  FBOXWAN="/tmp/fbox_status.log"
  FBOXFTH="/tmp/fbox_ftth.log"
  FBOXLAN="/tmp/fbox_switch.log"
  WGETCMD="wget -q --load-cookies $FBOXCOO"
  
  $WGETCMD --save-cookies $FBOXCOO -O $FBOXLOG \
  "http://mafreebox.freebox.fr/login.php?login=freebox&passwd=s3cr3t"
  $WGETCMD -O $FBOXWAN \
  "http://mafreebox.freebox.fr/settings.php?page=conn_status"
  $WGETCMD -O $FBOXFTH \
  "http://mafreebox.freebox.fr/settings.php?page=conn_ftth"
  $WGETCMD -O $FBOXLAN \
  "http://mafreebox.freebox.fr/settings.php?page=net_ethsw_stats"

You now own 4 files which you can parse to get the metrics you want. Quite simple.

Format the Xymon output

As usual with Xymon, the first thing to do is to create your custom script. Mine is xymon/server/ext/fbox_net.sh.

Here’s the bit of code I use to tell Xymon if everything is correct or not:

  # get the FTTH status
  FTTHOUT="\
  `egrep "Module FTTH :|Signal FTTH :|Lien :|Alimentation :|Puissance" $FBOXFTH \
  | sed -e 's;^.*
  
  <li>
    [ ]*;;' -e 's; : ;:;g' -e 's;
  </li>.*$;;'`"
  
  FTTHVAL=(`echo "$FTTHOUT" \
  | awk '{ FS=":"; print $2 }' | xargs`)
  
  # set the status color
  [[ `expr "${FTTHVAL[0]}" : 'Pr.*sent'` -ne 8 ]] && \
    COLOR="red" || FTTHVAL[0]="Installed"
  [[ `expr "${FTTHVAL[1]}" : 'Pr.*sent'` -ne 8 ]] && \
    COLOR="red" || FTTHVAL[1]="Received"
  [[ `expr "${FTTHVAL[2]}" : 'Up'` -ne 2 ]] && COLOR="red"
  [[ `expr "${FTTHVAL[3]}" : 'Ok'` -ne 2 ]] && COLOR="red"
  
  # prints the FTTH status
  NETINFO="$NETINFO
  `printf "%-15s%10s" "FTTH module" "${FTTHVAL[0]}"`
  `printf "%-15s%10s" "FTTH signal" "${FTTHVAL[1]}"`
  `printf "%-15s%10s" "Link" "${FTTHVAL[2]}"`
  `printf "%-15s%10s" "Power supply" "${FTTHVAL[3]}"`
  `printf "%-15s%10s" "Received power" "${FTTHVAL[4]} ${FTTHVAL[5]}"`
  `printf "%-15s%10s" "Send power" "${FTTHVAL[6]} ${FTTHVAL[7]}"`
  "
  (...)
  # print the informations
  $BB $BBDISP "status $HOSTNAME.$COLUMN $COLOR `date`
  
  $NETINFO
  "

Configure the Xymon polling

Once the script produces whatever output you need, configure it to run every 5 minutes. In my xymon/server/etc/tasks.d/tasks.cfg, I added:

  [fbox_net]
  	ENVFILE /usr/local/www/xymon/server/etc/xymonserver.cfg
  	NEEDS xymond
  	CMD $XYMONHOME/ext/fbox_net.sh
  	LOGFILE $XYMONSERVERLOGS/fbox_net.log
  	INTERVAL 5m
  

Then, in the xymon/server/etc/hosts.cfg, I added the following line:

  192.168.0.1	freebox		# fbox_net

A few minutes later, I got such output:

Graphing the metrics

To get the metrics graphed, you first need to parse and convert them into a proper format. The Web interface gives you (french) “human-converted” string. So a part of the process is calculating proper Byte numbers and text conversion (if you want it to be English).

Here’s the code I use for the “WAN” part ; the interface connected to the Internet:

  # get the WAN metrics
  WANOUT="\
  `egrep "conn_rate_down|conn_rate_up" $FBOXWAN \
  | sed -e 's;^.*conn_rate_[a-z]*">;;' -e 's; (max .*$;;' -e 's/,/\./g'`"
  
  WANVAL=($(echo "$WANOUT" \
  | awk ' \
  /Go/ { print $1*1073741824 }
  /Mo/ { print $1*1048576 }
  /Ko/ { print $1*1024 }
  /octet/ { print $1*1 }
  ' | xargs))

To populate the RRD file, I use:

  $BB $BBDISP "data $HOSTNAME.trends
  [${BBHTAG}.wan.rrd]
  `echo "DS:in:GAUGE:600:0:U ${WANVAL[0]}"`
  `echo "DS:out:GAUGE:600:0:U ${WANVAL[1]}"`
  "

To define the graph to render, I put the following lines in the xymon/server/etc/graphs.cfg:

  [fbox_net]
          FNPATTERN ^fbox_net.(.+).rrd
          TITLE Network traffic
          YAXIS Traffic (bps)
          -b 1000
          DEF:ibyt@RRDIDX@=@RRDFN@:in:AVERAGE
          DEF:obyt@RRDIDX@=@RRDFN@:out:AVERAGE
          CDEF:ibit@RRDIDX@=ibyt@RRDIDX@,8,*
          CDEF:obit@RRDIDX@=obyt@RRDIDX@,8,*
          CDEF:nibit@RRDIDX@=ibit@RRDIDX@,-1,*
          COMMENT:
          COMMENT: Cur\:
          COMMENT:Min\:
          COMMENT:Avg\:
          COMMENT:Max\:  \j
          AREA:nibit@RRDIDX@#66CC33CC:@RRDPARAM@ Download
          LINE:nibit@RRDIDX@#66CC33FF:
          GPRINT:ibit@RRDIDX@:LAST:%6.2lf%s
          GPRINT:ibit@RRDIDX@:MIN:%6.2lf%s
          GPRINT:ibit@RRDIDX@:AVERAGE:%6.2lf%s
          GPRINT:ibit@RRDIDX@:MAX:%6.2lf%s\j
          AREA:obit@RRDIDX@#3366CC99:@RRDPARAM@ Upload
          LINE:obit@RRDIDX@#3366CCFF:
          GPRINT:obit@RRDIDX@:LAST:%6.2lf%s
          GPRINT:obit@RRDIDX@:MIN:%6.2lf%s
          GPRINT:obit@RRDIDX@:AVERAGE:%6.2lf%s
          GPRINT:obit@RRDIDX@:MAX:%6.2lf%s\j
          COMMENT: \j

Then, to have it rendered, edit the etc/xymonserver.cfg, locate the GRAPHS variable and add the graph description to the list. Because my script grabs data for 1 WAN and 4 LAN interfaces, I set “fbox_net::1” so that Xymon graphs one PNG per RRD file, hence interface.

Wait a few hours and have a look at your graphs.

The graphs may not be very precise as you get a flow rate at the polling time. But for operation that last more than 5 minutes, you should get real traffic values.

Source

An initial work is described, in French, here: Freebox v6 stats Cacti templates