Test Estado web y mandar mail desde Python

En relación al post anterior, aún no puedo encontrar el problema de Glassfish (no se por qué se pierden los datos de las aplicaciones o el JavaMail)… por lo que me armé un script para comprobar el estado del servidor y mandarme un mail si el server o las aplicaciones están abajo.

Como siempre, para esta clase de problemas, recurro a mi querido Python🙂

Lo primero, es revisar mis servidores (tengo 2) si alguno me devuelve un 200, están funcionando los 2 y no necesito ningún mail. Si cualquiera de ellos no me da el 200, es porque tiene fallas. Simple como un

web_principal = urllib.urlopen("http://10.0.0.62").getcode()
ZonaMedicos = urllib.urlopen("http://10.0.0.62:8080/ZonaMedicos").getcode()

if(web_principal != 200 or ZonaMedicos != 200):
  #mando mail

Pero, puede darse el caso de que no esté corriendo el servidor en si, por lo que no recibiría ninguna respuesta. Para eso, agrego un try:except

try:
  web_principal = urllib.urlopen("http://10.0.0.62").getcode()
  ZonaMedicos = urllib.urlopen("http://10.0.0.62:8080/ZonaMedicos").getcode()

  if(web_principal != 200 or ZonaMedicos != 200):
    mensaje.append("<h1>Estado Servidores</h1><ul>")
    mensaje.append("<li><strong>Estado Web Principal</strong>: "+ str(web_principal)+ "</li>")
    mensaje.append("<li><strong>Estado ZonaMedicos</strong>: "+ str(ZonaMedicos)+ "</li>")
    mensaje.append("</ul>")

except IOError, e:
  mensaje.append("<h1>Exception Estado Servidores</h1><ul>")
  if hasattr(e, "reason"):
    mensaje.append("<li>Error al conectar con servidor.<br />")
    mensaje.append("Motivo: "+ e.reason +"</li>")
  elif hasattr(e, "code"):
    mensaje.append("El servidor no pudo completar la peticion.<br />")
    mensaje.append("Codigo error: "+ str(e.code)+"</li>")
  else:
    mensaje.append("<li>Exception al revisar: "+ str(e)+"</li>")
  mensaje.append("</ul>")

y listo. mensaje es un array que tengo declarado. Si viene vacío, no necesito mandar mail. Si no (ya sea por que los servidores responden bien, o porque se colgó el script) envío el mail de esta forma pasando por GMail.

if( len(mensaje) > 0 ):
  import smtplib
  from email.mime.text import MIMEText

  USERNAME = "mario.cares.c@gmail.com"
  PASSWORD = "macoy123"
  MAILTO  = "mario.cares.c@gmail.com"

  msg = MIMEText("".join(mensaje), "html")
  msg['Subject'] = 'Estado Servidores'
  msg['From'] = USERNAME
  msg['To'] = MAILTO

  server = smtplib.SMTP('smtp.gmail.com:587')
  server.ehlo_or_helo_if_needed()
  server.starttls()
  server.ehlo_or_helo_if_needed()
  server.login(USERNAME,PASSWORD)
  server.sendmail(USERNAME, MAILTO, msg.as_string())
  server.quit()

Como ven, es bastante simple, llenan con sus datos para autenticarse y mandan el mail (en mi caso, a mi mismo xD).
Eso es todo, lo agregan a CRON para revisar periódicamente y listo🙂

Acerca de MaritoCares

Ingeniero Informático. Con tendencias a la programación en [C#, VB].NET, Java(Web principalmente...), PHP, JavaScript, algo mínimo de [ruby, python], y el clásico C.
Esta entrada fue publicada en Python, Tips. Guarda el enlace permanente.

2 respuestas a Test Estado web y mandar mail desde Python

  1. Buena entrada, solo recomendar que no muestres IP’s de servidores o datos que comprometan uno, incluso tu dirección de correo, lo digo por seguridad..

    saludos desde santiago..

    • MaritoCares dijo:

      Hola ! Gracias por el comentario.
      Las IPs son locales, por lo que no es problema.

      Y mi correo es público, por lo que no me preocupa😀

      Obviamente, los datos que SE que puedan ser peligrosos tenerlos al aire no los publico

      Saludos desde Iquique

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s