Català  

Diferencia entre revisiones de «Servidor de gráficas»

De Guifi.net - Wiki Hispano

(Definicion)
 
(No se muestran 22 ediciones intermedias realizadas por 2 usuarios)
Línea 1: Línea 1:
__TOC__
+
El servidor de gráficas se basa en el servicio de Guifi.net llamado [[SNPServices]].
  
= Definicion =
 
El servidor de gráficas se baas en el servicio de GUIFI llamado SNPServices.
 
 
El servidor SNPServices, y para ser mas exactos cliente SNPServices es un servidor linux, con php, apache, mrtg y rrdtool, no
 
El servidor SNPServices, y para ser mas exactos cliente SNPServices es un servidor linux, con php, apache, mrtg y rrdtool, no
 
necesita nada mas.
 
necesita nada mas.
Le llamamos cliente porque el servidor Master SNPServices es un servidor que nos enviará informacion a nuestro servidor cliente SNPServices.
 
Aqui tienes un esquema que te hará ver claro esta definicion.
 
  
 +
== Definición ==
 +
Le llamamos cliente porque el servidor Master SNPServices es un servidor que nos enviará información a nuestro servidor cliente SNPServices.
  
Definicion para expertos
+
A continuación se muestra un esquema de esta definición:
El cliente SNPServices consulta al Master snpservices la lista de nodos a monitorear, recogida previamente del servidor web mediante CNML, se parsea la lista y formatea scripts mrtg y los
+
ejecuta (pings y trafico) para generar un rrd y con consultas http desde el servidor web, se ejecuta un php que convierte los .rrd en imagenes y las muestra.
+
  
El servidor WEB de guifi.net conoce la url del servidor de graficas de la zona de un nodo, o sea, los SNPServices clientes de cada zona. La web muestra sus datos locales y los datos remotos.
+
[[Archivo:SNPServices.png|center]]
  
Definicion extendida
+
=== Definición para expertos ===
  
 +
El cliente SNPServices consulta al Master SNPServices la lista de nodos a monitorizar, recogida previamente del servidor web mediante [[CNML]], se parsea la lista y formatea scripts mrtg y los ejecuta (pings y trafico) para generar un rrd. Con consultas http desde el servidor web, se ejecuta un php que convierte los .rrd en imágenes y las muestra.
  
Un nodo crea un servicio de servidor de gráficas en la web. Este servicio le concede un numero que le identifica. A este valor le llamamos '''$SNPGraphServerId'''
+
El servidor web de Guifi.net conoce la url del servidor de gráficas de la zona de un nodo, o sea, los SNPServices clientes de cada zona. La web muestra sus datos locales y los datos remotos.
Aquest servidor de gràfics, s'instalara un servei Apache, php i els ervei SNPServices. La direccio web l'anomenarem com '''$SNPDataServer_url'''
+
  
Este servicio puede ser ademas supernodo de una zona y por tanto tiene el código de la zona. A este valor el llamamos '''$rootZone'''
+
== Funcionamiento paso a paso ==
Al crearse este nodo, se actualiza la BBDD de la web- Esta base de datos contiene toda la información de los nodos,servicios y demas de GUIFI.NET
+
  
Abans de continuar amb el treball que fa el servidor SNPServices client, el Master SNPServices ha de fer un treball.
+
'''Paso 1'''. Un nodo crea un servicio de servidor de gráficas en la web. Este servicio le concede un número único que lo identifica. A este valor le llamamos '''$SNPGraphServerId'''.  
El Master SNPServices consulta al servidor Web una lista de todos los nodos de una zona. Aquesta pregunta la fa amb el script php que es diu '''refresh_cnml.php.''' . El servidor web li torna una llista de nodes en format CNML que enmagatzema en un arxiu que es diu /var/lib/snpservices/data/guifi.cnml
+
  
Exactament l'arxiu que obre es aixi $SNPDataServer_url."/guifi/cnml/".$rootZone."/detail"
+
En este servidor de gráficas se instalará un servicio Apache, con php y el paquete [[SNPServices]]. La dirección web la llamaremos '''$SNPDataServer_url'''.
  
El servidor web torna un arxiu i el servidor SNPServices el guarda a /var/lib/snpservices/data/guifi.cnml
+
Este servicio puede ser además supernodo de una zona y por tanto tiene el código de la zona. A este valor el llamamos '''$rootZone'''.
  
= Manuales =
+
'''Paso 2'''. Al crearse este nodo, se actualiza la BBDD de la web. Esta base de datos contiene toda la información de los nodos, servicios y demás datos de Guifi.net.
* [[Servidor de gráficas 1]] (Debian/Ubuntu) método apt + configuración virtualhost apache
+
* [[Servidor de gráficas 2]] (Debian/Ubuntu) método dpkg
+
* [[Servidor de gráficas 3]] (Debian/Ubuntu) extendido
+
  
= Como trabaja el cliente SNPServices =
+
'''Pasos 3 y 4''' Antes de continuar con el trabajo que hace el servidor SNPServices client, el Master SNPServices debe hacer un trabajo.
El cliente SNPServices tiene varios passos a realizar para poder recopilar datos y hacer un escaneo en las direcciones cercanas.
+
El Master SNPServices consulta al servidor Web una lista de todos los nodos de una zona. Esta pregunta la hace con el script php que se llama '''refresh_cnml.php.'''. El servidor web le devuelve una lista de nodos en formato [[CNML]] que almacena en un archivo llamado ''/var/lib/snpservices/data/guifi.cnml''.
 
+
La lista de nodos a buscar se hace mediante cnml2mrtgcsv.php
+
Cuando tiene esta lista hace un escaneo a los nodos
+
La información que ha de buscar en los nodos se hace mediante el archivo mrtgcsv2mrtgcfg.php
+
  
 +
Esta es la cabecera del archivo ''guifi.cnml'':
 
<pre>
 
<pre>
<?php
+
<?xml version="1.0"?>
 +
<cnml version="0.1" server_id="1" server_url="http://guifi.net" generated="20121105 1247">
 +
</pre>
  
if (file_exists("/var/www/guifi/snpservices/common/config.php")) {
+
El archivo que abre exactamente es: http:// $SNPDataServer_url /guifi/cnml/ $rootZone /detail
  include_once("/var/www/guifi/snpservices/common/config.php");
+
} else {
+
  include_once("/var/www/guifi/snpservices/common/config.php.template");
+
}
+
  
$now = time();
+
El servidor web devuelve un archivo y el servidor SNPServices lo guarda en ''/var/lib/snpservices/data/guifi.cnml''. Este archivo se actualiza de tanto en tanto y es necesario hacerlo ya que los cambios en la web no se reflejarían en los servicios a monitorizar.
$mlast= @fopen("/tmp/last_mrtg", "r");
+
if ($mlast)
+
  $last = fgets($mlast);
+
else
+
  $last = 0;
+
print "Last: ".date('Y/m/d H:i:s',((int)$last)+(60*60))."\n";
+
print "Now: ".date('Y/m/d H:i:s',(int)$now)."\n";
+
print "ServerId: ".$SNPGraphServerId."\n";
+
#
+
# Looks if the files has been refreshed at least between 60 an 90 mins ago
+
# range 60..90 depends on $SNPGraphServerId mod 30
+
# if is still fresh, does not even looks to the server to check if it has changed
+
#
+
$secs = $SNPGraphServerId % 285;
+
$mins = $SNPGraphServerId % 30;
+
$nanos = $SNPGraphServerId % 10;
+
if (($last) and ($now < ($last +  ((60 + $mins) * 60)))) {
+
  fclose($mlast);
+
  echo "Still fresh.\n";
+
  exit();
+
}
+
  
#
+
'''Pasos 5 y 6'''. Volvemos al servidor cliente SNPServices que estamos montando.
# Local file is not fresh, so looks to the server and cheks if has changed
+
#
+
$hlastnow = @fopen($SNPDataServer_url."/guifi/cnml", "r") or die('Error reading changes\n');
+
$last_now = fgets($hlastnow);
+
fclose($hlastnow);
+
$hlast= @fopen("/tmp/last_update.mrtg", "r");
+
if (($hlast) and ($last_now == fgets($hlast))) {
+
  fclose($hlast);
+
  echo "No changes.\n";
+
  $hlast= @fopen("/tmp/last_mrtg", "w+") or die('Error!');
+
  fwrite($hlast,$now);
+
  fclose($hlast);
+
  exit();
+
}
+
}
+
print "Sever CNML dated as: ".date('Y/m/d H:i:s',$last_now)."\n";
+
  
#
+
El servidor SNPServices tiene una dirección donde buscar el archivo cnml creado por el Master SNPServices:
# Server CNML has changed, so going to call the server for the new file
+
$MRTGConfigSource = '$SNPDataServer_url . "/graphs/cnml2mrtgcsv.php?server" . =' . $SNPGraphServerId;
# Befoge calling, sleep $SNPGrahServerId mod 285 (4 min, 45 segs) to spread across that
+
# timeslot.
+
#
+
  
print "Waiting for  ".$secs.".".$nanos." seconds\n";
+
En esta dirección se descarga la lista de nodos a monitorizar y transforma el contenido en un archivo que contiene los nodos a monitorizar y en un lenguaje que puede entender el servicio mrtg.
time_nanosleep($secs,($nanos * 10000000));
+
print date('Y/m/d H:i:s')."\n";
+
  
$hf = @fopen($MRTGConfigSource,"r") or die('Error reading MRTG csv input\n"');
+
Esta es la cabecera del archivo ''mrtg.cfg'':
$cf = @fopen('../data/mrtg.cfg','w+');
+
<pre>
 +
# PathAdd: /usr/local/rrdtool-1.2.12/bin
 +
# LibAdd: /usr/local/rrdtool-1.2.12/lib/perl/5.8.8/i386-linux-thread-multi
 +
HtmlDir: /var/lib/snpservices/rrimg/
 +
ImageDir: /var/lib/snpservices/rrimg/
 +
LogDir: /var/lib/snpservices/rrdb/
 +
LogFormat: rrdtool
 +
ThreshDir: /var/lib/snpservices/rrdb/
 +
Forks: 12
 +
Title[11833_ping]: Temps del ping de Futbol-Remei-VicRd1
 +
</pre>
  
fputs($cf,sprintf($rrdtool_header,$rrdimg_path,$rrdimg_path,$rrddb_path,$rrddb_path));
+
Para ver esta lista en formato CSV desde web la podemos pedir así:
  
while ( $buffer = fgets($hf, 4096) ) {
+
$SNPDataServer_url/snpservices/graphs/cnml2mrtgcsv.php?server=$SNPGraphServerId
  $node_line_array = explode(",",$buffer);
+
  $line = $node_line_array[count($node_line_array) - 1];
+
  if ( substr($buffer,0,1) == '#' || $line == "Planned\n" || $line == "Dropped\n" || $line == "Building\n" || $line == "Reserved\n" )
+
          continue;
+
  
  $buffer = str_replace("\n","",$buffer);
+
Ejemplo:
  $dev=explode(',',$buffer);
+
  http://192.168.1.44/snpservices/graphs/cnml2mrtgcsv.php?server=6833
  if ( count($dev) != 5 ) {
+
                $dev[0] = $dev[0];
+
                $dev[1] = $dev[1];
+
                $dev[2] = $dev[2];
+
                $dev[3] = 'eth0;';
+
                $dev[4] = $dev[3];
+
  }
+
  fputs($cf,sprintf($mrtg_ping_template,
+
                $dev[0],
+
                $dev[1],
+
                $dev[0],
+
                $dev[1],
+
                $dev[1],
+
                $dev[2],
+
                $dev[0],
+
                $dev[2],
+
                $dev[0],
+
                $dev[0],
+
                $dev[0],
+
                $dev[0],
+
                $dev[0],
+
                $dev[0],
+
                $dev[0],
+
                $dev[0])
+
      );
+
  $t = explode('|',$dev[3]);
+
  
  foreach ($t as $k=>$r)  {
+
De paso, veremos si hasta ahora funciona todo.
    // is the snmp Index given??
+
    if (is_numeric($r)) {
+
      $rn = $dev[0].'-'.$r;
+
      $trap = $r;
+
      $wn = 'wLan';
+
    } // end if numeric snmp Index
+
    else {
+
      $rn = $dev[0].'-'.$k;
+
      // snmp is given by interface name
+
      $d = explode(';',$r);
+
      $wn = $d[1];
+
      $trap = '\\'.$d[0];
+
    }
+
    fputs($cf,sprintf($mrtg_traffic_template."\n",
+
                  $rn,
+
                  $trap,
+
                  $dev[2],
+
                  $rn,
+
                  $dev[2],
+
                  $dev[1],
+
                  $rn, $rn,
+
                  $wn,
+
                  $dev[1],
+
                  $rn,
+
                  $wn,
+
                  $dev[1],
+
                  $dev[1],
+
                  $wn)
+
        );
+
  
  } // foreach interface
+
El log del sistema que guarda los movimientos de este proceso están en ''/var/log/snpservices/mrtgccfg.log''.
}
+
fclose($hf);
+
fclose($cf);
+
  
$hlast= @fopen("/tmp/last_update.mrtg", "w+") or die('Error!');
+
Al instalar el servicio SNPServices, se nos añade un cron.
fwrite($hlast,$last_now);
+
Este cron (script que se ejecuta automáticamente según el tiempo definido) está en ''/etc/cron.d/snpservices''.
fclose($hlast);
+
$hlast= @fopen("/tmp/last_mrtg", "w+") or die('Error!');
+
fwrite($hlast,$now);
+
fclose($hlast);
+
  
?>
+
<pre>
 +
*/30 *  * * *  root    if [ -x /usr/bin/php ]; then env LANG=C /usr/bin/php /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php >> /var/log/snpservices/mrtgccfg.log 2>&1; fi
 +
*/5 *  * * *  root    if [ ! -x /var/lock/mrtg ]; then mkdir /var/lock/mrtg ; fi; if [ -x /usr/bin/mrtg ] && [ -r /var/lib/snpservices/data/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /var/lib/snpservices/data/mrtg.cfg --lock-file /var/lock/mrtg/guifi_l >> /var/log/snpservices/mrtg.log 2>&1; fi
 +
/usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php
 
</pre>
 
</pre>
  
 +
Este quiere decir que mediante el script ''/usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php'', consulte el archivo ''guifi.cnml'' antes descrito y transforme el contenido en un XML disponible para el servicio mrtg. Lo almacena en ''/var/lib/snpservices/data/mrtg.cfg''.
  
este archivo es  
+
Una vez que nuestro servidor SNPServices client tiene los datos de los nodos a monitorizar, es cuando se ejecuta el proceso de búsqueda de datos con el sistema mrtg. Lo hace con:
<pre>
+
/usr/bin/mrtg /var/lib/snpservices/data/mrtg.cfg
<?php
+
  
  $rootZone = 52771;
+
'''Paso 7'''. El servicio mrtg consulta los datos con ping y los envía a rrdtool que fabrica la gráfica.
#3671;
+
  
  $minX = 999;
+
El log de los movimientos del servicio mrtg están en ''/var/log/snpservices/mrtgc.log''
  $minY = 999;
+
  $maxX = -999;
+
  $maxY = -999;
+
  
  $members = array();
+
Los datos para hacer la gráfica se almacenan en ''/var/lib/snpservices/rrdb''.
  
  $hlastnow = @fopen("http://guifi.net/guifi/refresh/maps", "r") or die('Error reading changes\n');
+
'''Paso 8'''. Los clientes que quieren información de los nodos, la buscan en el servidor web. Éste buscalos datos y los encuentra dentro de su  MySQL, pero las gráficas las busca en el servidor de gráficas de aquel nodo, es decir, en el servidor $SNPGraphServerId.
  $last_now = fgets($hlastnow);
+
  fclose($hlastnow);
+
  $hlast= @fopen("/tmp/last_update.cnml", "r");
+
  if (($hlast) and ($last_now == fgets($hlast))) {
+
    fclose($hlast);
+
    echo "No changes.\n";
+
    exit();
+
  }
+
  
  echo "Getting CNML file\n";
+
== Véase también ==
  $hcnml = @fopen("http://guifi.net/guifi/cnml/".$rootZone."/detail", "r");
+
* [[Instalar servidor de gráficas en OpenWRT]]
  $wcnml = @fopen("guifi.cnml", "w+");
+
* [[SNPservices]] Instalacion SNPServices mediante GIT. Aqui hay explicacion interesante, pero GIT no esta actualizado. Mejor usar instalacion de snpservices como servicio de Debian con metodo at-get
  while (!feof($hcnml)) {
+
* [[Servidor de gráficas 1]]  (Debian/Ubuntu) método apt + configuración virtualhost apache
      $buffer = fgets($hcnml, 4096);
+
* [[Servidor de gráficas 2]] (Debian/Ubuntu) método dpkg
      fwrite($wcnml,$buffer);
+
* [[Servidor de gráficas 3]] (Debian/Ubuntu) extendido
  }
+
* [[Servidor de gráficas en una red mesh con QMP y Airmax]]
  fclose($hcnml);
+
  fclose($wcnml);
+
  
  $hlast= @fopen("/tmp/last_update.cnml", "w+") or die('Error!');
+
== Preguntas más frecuentes ==
  fwrite($hlast,$last_now);
+
  fclose($hlast);
+
?>
+
</pre>
+
 
+
= PMF =
+
 
* [[Regenerar los ficheros rrd]]
 
* [[Regenerar los ficheros rrd]]
 
* tener en cuenta que al connectar un dispositivo por cable ponerlo en Lan o en la ubicacion que sea, sino puede que no grafique correctamente.
 
* tener en cuenta que al connectar un dispositivo por cable ponerlo en Lan o en la ubicacion que sea, sino puede que no grafique correctamente.
  
 +
== Referencias ==
 +
* [http://www.guifi.net/proxy-debian manual debian de guifi.net]
 +
* [http://asociacionjuvenilelcueto.info/node/156 manual de la associació Juvenil el Cueto (Rioja)]
  
= Referencias =
+
== Enlaces externos ==
*[http://www.guifi.net/proxy-debian manual debian de guifi.net]
+
* [http://www3.uji.es/~vrubert/guifi_linux/graph.html Tutorial servicio SNPServices]
*[http://asociacionjuvenilelcueto.info/node/156 manual de la associació Juvenil el Cueto (Rioja)]
+
 
+
  
[[ca:Servidor_de_gràfiques]]
+
[[ca:Servidor de gràfiques]]

Última revisión de 00:31 14 feb 2014

El servidor de gráficas se basa en el servicio de Guifi.net llamado SNPServices.

El servidor SNPServices, y para ser mas exactos cliente SNPServices es un servidor linux, con php, apache, mrtg y rrdtool, no necesita nada mas.

Definición

Le llamamos cliente porque el servidor Master SNPServices es un servidor que nos enviará información a nuestro servidor cliente SNPServices.

A continuación se muestra un esquema de esta definición:

SNPServices.png

Definición para expertos

El cliente SNPServices consulta al Master SNPServices la lista de nodos a monitorizar, recogida previamente del servidor web mediante CNML, se parsea la lista y formatea scripts mrtg y los ejecuta (pings y trafico) para generar un rrd. Con consultas http desde el servidor web, se ejecuta un php que convierte los .rrd en imágenes y las muestra.

El servidor web de Guifi.net conoce la url del servidor de gráficas de la zona de un nodo, o sea, los SNPServices clientes de cada zona. La web muestra sus datos locales y los datos remotos.

Funcionamiento paso a paso

Paso 1. Un nodo crea un servicio de servidor de gráficas en la web. Este servicio le concede un número único que lo identifica. A este valor le llamamos $SNPGraphServerId.

En este servidor de gráficas se instalará un servicio Apache, con php y el paquete SNPServices. La dirección web la llamaremos $SNPDataServer_url.

Este servicio puede ser además supernodo de una zona y por tanto tiene el código de la zona. A este valor el llamamos $rootZone.

Paso 2. Al crearse este nodo, se actualiza la BBDD de la web. Esta base de datos contiene toda la información de los nodos, servicios y demás datos de Guifi.net.

Pasos 3 y 4 Antes de continuar con el trabajo que hace el servidor SNPServices client, el Master SNPServices debe hacer un trabajo. El Master SNPServices consulta al servidor Web una lista de todos los nodos de una zona. Esta pregunta la hace con el script php que se llama refresh_cnml.php.. El servidor web le devuelve una lista de nodos en formato CNML que almacena en un archivo llamado /var/lib/snpservices/data/guifi.cnml.

Esta es la cabecera del archivo guifi.cnml:

<?xml version="1.0"?>
<cnml version="0.1" server_id="1" server_url="http://guifi.net" generated="20121105 1247">

El archivo que abre exactamente es: http:// $SNPDataServer_url /guifi/cnml/ $rootZone /detail

El servidor web devuelve un archivo y el servidor SNPServices lo guarda en /var/lib/snpservices/data/guifi.cnml. Este archivo se actualiza de tanto en tanto y es necesario hacerlo ya que los cambios en la web no se reflejarían en los servicios a monitorizar.

Pasos 5 y 6. Volvemos al servidor cliente SNPServices que estamos montando.

El servidor SNPServices tiene una dirección donde buscar el archivo cnml creado por el Master SNPServices:

$MRTGConfigSource = '$SNPDataServer_url . "/graphs/cnml2mrtgcsv.php?server" . =' . $SNPGraphServerId;

En esta dirección se descarga la lista de nodos a monitorizar y transforma el contenido en un archivo que contiene los nodos a monitorizar y en un lenguaje que puede entender el servicio mrtg.

Esta es la cabecera del archivo mrtg.cfg:

# PathAdd: /usr/local/rrdtool-1.2.12/bin
# LibAdd: /usr/local/rrdtool-1.2.12/lib/perl/5.8.8/i386-linux-thread-multi
HtmlDir: /var/lib/snpservices/rrimg/
ImageDir: /var/lib/snpservices/rrimg/ 
LogDir: /var/lib/snpservices/rrdb/
LogFormat: rrdtool
ThreshDir: /var/lib/snpservices/rrdb/
Forks: 12
Title[11833_ping]: Temps del ping de Futbol-Remei-VicRd1 

Para ver esta lista en formato CSV desde web la podemos pedir así:

$SNPDataServer_url/snpservices/graphs/cnml2mrtgcsv.php?server=$SNPGraphServerId

Ejemplo:

http://192.168.1.44/snpservices/graphs/cnml2mrtgcsv.php?server=6833

De paso, veremos si hasta ahora funciona todo.

El log del sistema que guarda los movimientos de este proceso están en /var/log/snpservices/mrtgccfg.log.

Al instalar el servicio SNPServices, se nos añade un cron. Este cron (script que se ejecuta automáticamente según el tiempo definido) está en /etc/cron.d/snpservices.

*/30 *  * * *   root    if [ -x /usr/bin/php ]; then env LANG=C /usr/bin/php /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php >> /var/log/snpservices/mrtgccfg.log 2>&1; fi
*/5 *   * * *   root    if [ ! -x /var/lock/mrtg ]; then mkdir /var/lock/mrtg ; fi; if [ -x /usr/bin/mrtg ] && [ -r /var/lib/snpservices/data/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /var/lib/snpservices/data/mrtg.cfg --lock-file /var/lock/mrtg/guifi_l >> /var/log/snpservices/mrtg.log 2>&1; fi
/usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php 

Este quiere decir que mediante el script /usr/share/snpservices/graphs/mrtgcsv2mrtgcfg.php, consulte el archivo guifi.cnml antes descrito y transforme el contenido en un XML disponible para el servicio mrtg. Lo almacena en /var/lib/snpservices/data/mrtg.cfg.

Una vez que nuestro servidor SNPServices client tiene los datos de los nodos a monitorizar, es cuando se ejecuta el proceso de búsqueda de datos con el sistema mrtg. Lo hace con:

/usr/bin/mrtg /var/lib/snpservices/data/mrtg.cfg

Paso 7. El servicio mrtg consulta los datos con ping y los envía a rrdtool que fabrica la gráfica.

El log de los movimientos del servicio mrtg están en /var/log/snpservices/mrtgc.log

Los datos para hacer la gráfica se almacenan en /var/lib/snpservices/rrdb.

Paso 8. Los clientes que quieren información de los nodos, la buscan en el servidor web. Éste buscalos datos y los encuentra dentro de su MySQL, pero las gráficas las busca en el servidor de gráficas de aquel nodo, es decir, en el servidor $SNPGraphServerId.

Véase también

Preguntas más frecuentes

  • Regenerar los ficheros rrd
  • tener en cuenta que al connectar un dispositivo por cable ponerlo en Lan o en la ubicacion que sea, sino puede que no grafique correctamente.

Referencias

Enlaces externos

Herramientas personales