Archivo de la etiqueta: Code-hacks

Routerconfigs de cacti no se ejecuta automáticamente

Me he encontrado con este problema y ha resultado ser un fallo en la gestión de la base de datos, routerconfigs establece una opción global que indica si ya se está ejecutando un proceso en de backups. Por algún motivo (posiblemente alguna de mis pruebas mientras desarrollaba las modificaciones para soportar ssh) esta variable se quedó establecida a 1 y esto impide la ejecución automática de este plugin. La variable es “plugin_routerconfigs_running” y se encuentra en la tabla “settings” de la base de datos de cacti, para comprobar su valor ejecutar desde un terminal:

mysql -u cacti -p cacti -e “select * from settings where name=’plugin_routerconfigs_running’;”
Enter password:
+—————————————+——-+
| name                                                      | value |
+—————————————+——-+
| plugin_routerconfigs_running   | 1         |
+—————————————+——-+

Si la columna value está establecida a 1 routerconfigs no se ejecutará así que para solucionarlo tan solo hay que ejecutar:

mysql -u cacti -p cacti -e “REPLACE INTO settings (name, value) VALUES (‘plugin_routerconfigs_running’, 0);”
Enter password:

Y para asegurar que todo ha ido bien

mysql -u cacti -p cacti -e “select * from settings where name=’plugin_routerconfigs_running’;”
Enter password:
+—————————————+——-+
| name                                                      | value |
+—————————————+——-+
| plugin_routerconfigs_running   | 0         |
+—————————————+——-+

Con esto routerconfigs se debería ejecutar a la perfección ;)…

O al menos eso pensaba… jejeje tras un día de ejecución volvió a fallar con el mismo resultado así que algo en el código no funciona como debe… entro en modo debugging debugging debugging uuuups que me me sa metio un bug 😛 bueno pues eso tras unas horas de estudio del código y debuggings varios hay un caso en el que un include hace un return antes de hacer el replace pertinente en esta tabla. El archivo en cuestión es el router-download.php, en la línea 66 encontramos un return solito dentro de un else tal que así

if (!empty($devices)) {

.

.

.

} else {
return;
}

para solucionar el problema el else debe quedar de esta otra forma

} else {
db_execute(“REPLACE INTO settings (name, value) VALUES (‘plugin_routerconfigs_running’, 0)”);
return;
}

Y ahora sí con esto va como la seda os lo juro que ya lleva meses rulandooooo

byte byte my nerds 😛

Plugin routerconfigs de cacti a traves de ssh

Actualmente uso cacti para recolectar datos sobre el estado de la red en el trabajo, también tenemos el Cisco Works para la administración de la misma y desde el principio lo usé para hacer copias de seguridad de las configuraciones de los dispositivos. La cuestión es que no me gusta nada el Cisco Works, creo que consume una cantidad absurda de recursos de la máquina, buscar información en los logs es una verdadera odisea y los servicios dejan de funcionar cuando les apetece, sí se pueden detectar las caidas de los servicios mediante la configuración de alertas de las tareas que ejecute, de modo que si dejas  de recibir correos sabes que ha caido el servicio de automatización de tareas: el JRN (seria algo equivalente al CRON de Unix o al planificador de tareas de Windows). Pero es que dejó de gustarme desde el principio, los que vendieron el servicio pretendias que se usase como plataforma de monitorización pero es muy poco flexible: tan solo permite el envío de alertas a una única cuenta de correo, las alerta son muy poco configurables y cuando he recibido algún correo de alerta no me ha notificado la recuperación del dispositivo. Debo decir que no he dedicado grandes esfuerzos ni tiempo a comprender este software pero la gente a la que he consultado mis dudas, que tienen certificaciones, no han sabido responder mis dudas. Así que desde el principio preferí enfocar mis esfuerzos a Nagios y posteriormente añadí Cacti obteniendo una plataforma con niveles de soporte a los que alertar diferentes criticidades en los dispositivos y tiempos de respuesta para cada nivel, algo mucho más flexible no? 🙂 además junté la capacidad de backup del Cisco Works a la de alerta de Nagios de modo que se envía la versión y la configuración del dispositivo que esté fallando junto a los datos de contacto y localización de la oficina, a eso le llamo yo un buen sistema de alertas.

Bueno ya vale de royos lo que sí tiene chulo el CiscoWorks es la capacidad de ver las diferencias entre dos versiones de las configuraciones de un dispositivo esa fué la razón de seguir usandolo para los backups, sino habría creado un servicio de Nagios que realizase la tarea, pero como ya lo realizaba un software preferí coger las configuraciones por sftp desde la máquina de Nagios… hasta que descubrí el plugin routerconfigs que también dispone de esta funcionalidad genial!. Tras instalarlo y configurarlo vi que no tenia soporte para Cisco ASA ni para CSS y que además tan solo realiza conexiones por telnet así que los dispositivos configurados para ssh no funcionan. Bueno es software libre tengo el código así que ha modificarlo. Las modificaciones que he realizado son:

  • Soporte para copiar a través de SSH
  • Mejoras en rendimiento (muy básicas, seguro que se pueden realizar más)
  • Agregado soporte para ASA y CSS
  • Integración con el sistema de logs de Cacti durante la conexión
  • Copiar el startup-config en lugar del running-config

He modificado la versión 0.1 que cuelgo aquí por si puede ser de utilidad para alguien:

para aplicar el patch una vez descargado el plugin y el patch en el mismo directorio:

tar zxf routerconfigs-0.1.tar.gz

patch -p0 < routerconfigs_0.1_ssh.patch

Espero que os sea útil 😉

Desarrollando una extensión para F-spot

Me he decidido a desarrollar una extensión para f-spot, me gusta la filosofía de este estupendo gestor fotografico pero hecho en falta alguna funcionalidad, en concreto me voy a centrar en un buscador que muestre las fotos que no han sido exportadas nunca o que no han sido exportadas mediante alguna extensión de exportación en concreto. Iré explicando los detalles del proceso en este post ¿sere capaz de programar esta extensión? ¿llegará a tener calidad suficiente como para que la añadan al core del programa? ¿servira este post como guía para otros desarrolladores?… Todas estas dudas se iran solventando en futuros episodios, así que no te pierdas el próximo en este mismo canal y a la misma hora.

Sigue leyendo