Hola viejos amigos!. Algo que me han preguntado bastante es como hacer que el cliente o nosotros mismos veamos las graficas de consumo con el API de Mikrotik. Y para su sorpresa les cuento que esta parte se hace sin el API.
Estudiemos la ruta que nos da mikortik para ver el graph de un cliente:
Nota: Comprobar que en /tools/graphing este graficando todos los queues.
http://200.20.30.40:8080/graphs/queue/%3Cpppoe-fduckardt52104%3E/
OK como veran.. aqui pueden haber 3 datos variables:
- La direccion IP del RouterOS.
- El puerto de www (/ip/services).
- El nombre del pppoe: fduckardt52104
Si Inspeccionamos el código de esta imagen con en el navegador veremos que solo se agrega /daily.gif al final de la URL quedando así:
http://200.20.30.40:8080/graphs/queue/%3Cpppoe-fduckardt52104%3E/daily.gif
Hagamoslo mas interesante:
Ahora que ya sabemos la ruta exacta de cada gráfica (no tuvimos que usar el api), es cuestión de armar esto con PHP, pero para que sea un poco mas interesante vamos dale uso del API para hacer que si el usuario pppoe esta activo, mostramos el Graph usando la ruta anterior, pero si no esta conectado, mostramos el log del usuario. Para ello vamos a armar un buscador de usuarios activos.
Archivos importantes:
- log.php: Este es el archivo raiz principal, aquí esta el formulario y los contenedores desde donde se carga el JS, estilos, etc. Ademas, en este archivo debemos modificar las variables de Session.
<!-- //////////////////////////////////////////////////////////////////// // ESTE EJEMPLO SE DESCARGO DE www.tech-nico.com /////////////////// // Creado por: Nicolas Daitsch. Guatrache. La Pampa //////////////// // Contacto: administracion@tech-nico.com ////////////////////////// // RouterOS API: Busco Usuario PPPoE activo y muestro Graph o Log // //////////////////////////////////////////////////////////////////// --> <?php session_start(); $_SESSION['api_ip'] ="192.168.0.1"; // Tu RouterOS $_SESSION['api_user'] ="tu_usuario"; $_SESSION['api_pass'] ="tu_password"; $_SESSION['api_port'] =8728; $_SESSION['www_port'] =80; ?>
Desde este archivo se configura todo!!. Solo tienes que modificar las variables que están justo aquí arriba en el archivo log.php.
Si sigues mirando un poco mas abajo de los seteos veras que en esta ocasión estoy usando el framework de Mootools, aunque por el poquito código que estamos usando tranquilamente podríamos hacerlo todo con javascript (ajax). Lo dejo a tu criterio.
- api/isonline_soporte.php: Este archivo se ocupa de conectarse mediante el API, a tu servidor Mikrotik. Chequea si el usuario esta activo y muestra la grafica en una etiqueta IMG. Miren el código porque esta muy fácil de entender.
- api/log.php: Este codigo trae todo el log y filtra por nombre de secret para mostrarte solo por usuario.
Importante: para buscar tienes que escribir el nombre exacto del secret. Y luego presionar la tecla Enter.
Espero que te haya gustado, puedes probar, investigar mi código y ademas modificarlo, pero asegúrate de no quitar las lineas del autor.
Descarga aqui el codigo de este ejemplo
Este post fue escrito por Nicolas. Primero en tech-nico.com/blog
Muy buen aporte.
Estoy implementando algo parecido a lo que has posteado, la unica diferencia es que quiero hacerlo a tiempo real.
Ahora mismo estoy algo atascado. He conseguido obtener los datos para la grafica.
@$ARRAY = $API->comm(«/queue/simple/print
=stats=»);
$regtable = $ARRAY[12];
$rate = $regtable[‘rate’];
$updo = explode(‘/’,$rate);
$up = $updo[0];
$down = $updo[1];
echo »;
echo $up. ‘ ‘ ;
echo $down ;
echo »;
OK, Yo tomaria el rate de cada interfaz y no del queue simple porque tiene un pequeño delay. Un gran saludo.! Nico
Gracias por el aporte!
en mi caso no uso queues simples, uso hotspot y queues tree+ pcq, hay forma de que pueda ver los graficos ?
Si Laura, Mikrotik grafica solo interfaces o Queues Simples. Lo que yo haría en tu caso es generar un queue manual con la IP del cliente. (1 queue por cliente) y con un limite «data-rate» alto, supongamos 100 Mb cosa que no te encole a ningun cliente y simplemente grafique el trafico de navegacion. Recuerda que tienes que activar las graficas dentro del menu «Tools».
Busca otro post que dice «API MIKROTIK – Crear queues simples con PHP (con validacion)». Saludos. Nico
Hola buen día, viendo tu módulo de consulta (muy interesante, al aplicarlo me indica Undefined offset, me puedes indicar porque ocurre esto?
Hola buen dia. Estoy utilizando hotspot. Requiero de logear y pueda ver una estadística: cuanta gente se conecta a navegar y ver cuánto MB fue lo que ésta consumio. Tengo un trabajo que podría ser bien remunerado. daniel.jorquera.j@gmail.com
Muy buena la API tengo una pregunta si quisiera guardar las graficas de todos mis usuarios para poder consultarlas en cualquier momento tendiendo el historico con esta API se puede??
Si se puede (con este ejemplo podrias guardar en mysql) pero vas a generar muchas peticiones de API cada X tiempo y a la base de datos. Es innecesario!! (imaginate que por cada cliente deberias tener un cron ejecutandose). Mikrotik RouterOS ya hace ese trabajo. Simplemente vas a Tools y en graphs le activas que grabe en disco asi no se borran al reiniciar.
Para cada cliente vas a poder acceder a las graficas de cada queue. Saludos.
Me parece que no me funciona, estoy revisando el código y sólo sirve para conexión RADIUS…. /ppp/active/print devuelve 0 en la terminal.
Oscar, No es para Radius, Es para los que usan PPPoE.
nico consulta, el formulario funciona bien, pero tengo un problema, en unos de los mk que tengo los pppoe estan por nombre de lote y barrio, por ejemplo t-1 veo que la busqueda con funciona si esta con limitacion de caracter – podras decirme como se puede solucionar? desde ya muchas gracias
Silvio, en la linea 17 del archivo /api/isonline_soporte.php tenes que agregar el «-» dentro de la expresion regular.
Reemplazala por esto y proba nuevamente:
muchas gracias funciono de maravilla, lo modifique un poco para que me muestre la ip y el uptime debajo de conectado, lo que no logro hacer es tomar la ip que encuentra y asociarla a un formulario de ping, tendras una idea de como hacerlo? osea la idea es busco cliente. me muestra conectado, el grafico etc, y tener un boton que diga ping y al hacerle click me pase al form que publicaste en el blog pero tomando ya la ip
Para hacer ping usando el API podes seguir este ejemplo.
Creo que con ese ejemplo vas a poder lograrlo sin problemas.
Notice: Undefined index: name in C:\xampp\htdocs\api\log.php on line 45
Notice: Undefined variable: receiveddone in C:\xampp\htdocs\api\api_mt_include2.php on line 301
Intento implementar la solución y me arroja esos errores, sin embargo, muestra el contenido del archivo log del mk.
Ojala puedas ayudarme.
hola
disculpa, si el usuario pppoe se descoencta, puedo tener un historial de grafica? o la grafica solo se veria desde que se vuelva a conectar?
gracias
Esse codigo é para ser adicionado dentro do mikrotik ? Caso não onde adiciono para conseguir poder usar ?
Hola men, creo que el script dejo de funcionar en versiones recientes de la API, me esta tirando error del mootools
Nicolas Es normal que te pase eso al actualizar; Mikroitk hizo grandes cambios de seguridad, Tenes que modificar el archivo del API como se explica en el ultimo post.
http://www.tech-nico.com/blog/cambios-en-routeros-6-43-api-class-con-passwords-en-texto-plano/
Tene en cuenta los comentarios que hacen una aclaracion importante.
Hola yo quiero monitorear una insterface tanto Tx rate y Rx rate y que cuando supero el 80% del trafico me envie un mail, con esto lo podria hacer?
Estimado, buenas tardes! necesito guardar el historico de cada pppoe, actualmente cuando la conexion pppoe se interrumpe, la grafica se pierde. Como puedo lograr guardar las graficas??
Seteando en RouterOS Queues estaticas en vez de dinamicas y configurando las graphs para que se almacenen en disco.
Hola gente…. necesito ayuda….. quiero ver desde php, el rate de una placa, interface de un mikrotik para controlar si esta en 10gbps o 100 o 1gbps y no logro hacerlo. Desde mkt es ; put ([/interface ethernet monitor ether1 once as-value]->»rate»)