2011-01-14 9 views
6

Yo (como la mayoría de los administradores de tecnología, supongo) tengo bastantes informaciones de estado de los servicios programados en mi bandeja de entrada. Sin embargo, cuando falla un correo electrónico de servicio, obviamente no se envía ningún correo electrónico. Así que simplemente quiero un servicio que mire en mi bandeja de entrada y diga "¡Oye, este servicio no envió un informe de correo electrónico ayer - ¡algo malo!".Reciba una advertencia si no se ha recibido un correo electrónico de informe de programación esperado

Éste debería resolverse en algún lugar, supongo. Quizás Gmail (u otro proveedor de correo electrónico) tenga un servicio de este tipo, sería genial.

Respuesta

3

¿No sería una mejor opción tener una solución de monitoreo centralizada como Nagios que configure de tal manera que solo envíe notificaciones cuando un servicio pierda el latido de su corazón, alcance altas marcas de agua, se quede sin combustible? Y después de su curso de una segunda solución de monitoreo que monitorea la solución de monitorización principal ....

http://www.nagios.org/documentation

No estoy al tanto de cualquier servicio que usted describe, pero una rutina manual puede ir así:

Tener una estructura de carpetas/etiqueta de la siguiente manera:

Services\Hourly-[NumberOfServices] (or add a folder per service) 
Services\Daily-[NumberOfServicves] 
Services\Weekly-[NumberOfServicves] 
Services\Monthly-[NumberOfServicves] 

tienen reglas para el correo entrante para filtrar cada notificación servicio específico y moverlo a la carpeta correcta en función de su calendario esperado.

Despierte cada hora y compruebe si hay mensajes no leídos en su carpeta Hourly. El número de mensajes no leídos debe ser el mismo que el número de servicios mencionado en la carpeta. Leer/Procesarlos y asegúrese de marcarlos como Leídos. Cualquier servicio que no se haya enviado por correo electrónico se detecta fácilmente.

Desperté a las 0:00 y compruebe si hay mensajes no leídos en su carpeta diaria. etc. etc.

Despertamos a las 0:00 y los sábados y verificamos si hay mensajes no leídos en su carpeta Semanal. etc .....

Se despierta a las 0:00 del primer día del mes y verifica si hay mensajes no leídos en la carpeta Semanal. etc etc etc ...

Mi consejo sería reducir el ruido generado por los servicios.

Si todavía siente que necesita un servicio que sólo puede proporcionar una implementación muy muy básico .Net o menos basado en el proceso anterior y funciona con Gmail ... Esto también es portátil a PowerShell ...

static void Main(string[] args) 
     { 
      var resolver = new XmlUrlResolver 
      { 
       Credentials = new NetworkCredential("yourgoolgeaccount", "yourpassword") 
      }; 

      var settings = new XmlReaderSettings(); 

      settings.XmlResolver = resolver; 

      var xr = XmlReader 
       .Create("https://mail.google.com/mail/feed/atom/[name of your filter]" 
       , settings); 

      var navigator = new XPathDocument(xr).CreateNavigator(); 

      var ns = new XmlNamespaceManager(new NameTable()); 
      ns.AddNamespace("fd", "http://purl.org/atom/ns#"); 

      var fullcountNode = navigator.SelectSingleNode(
       "/fd:feed/fd:fullcount" 
       , ns); 

      Console.WriteLine(fullcountNode.Value); 

      int fullcount = Int32.Parse(fullcountNode.Value); 
      int expectCount = 10; 

      if (expectCount > fullcount) 
      { 
       Console.WriteLine("*** NOT EVERY ONE REPORTED BACK"); 
      } 
} 
+0

Muy interesante, gracias. Estaba interesado en el lector atom de gmail. Lo probaré. Nagios parecía un poco complicado para sumergirse en (?) – joeriks

+0

@joeriks Bueno, siempre hay una compensación entre sus requisitos y una herramienta, pero tenía nagios en funcionamiento en un vpc de Debian en 30 minutos y lo había enviado todo mi equipo la hora ... – rene

2

Mencionaste Gmail, por lo que te puede interesar Googlecl, que te ofrece controles de línea de comandos para cosas como Google Calendar y Documentos. Lamentablemente, todavía no son compatibles con Gmail, pero si su preferencia a largo plazo es utilizar una cuenta de Gmail como el centro de sus informes de estado, entonces googlecl puede ser su mejor opción.

En el corto plazo, puede probar googlecl ahora con los comandos para Calendario, Blogger o Documentos, todos los cuales ya son compatibles. Por ejemplo, estos comandos agregan eventos a Google Calendar:

google calendar add --cal server1 "I'm still alive at 13:45 today" 
google calendar add "Server 1 is still alive at 2011-02-08 19:43" 

...y estos comandos de consulta el calendario:

google calendar list --fields title,when,where --cal "commitments" 
google calendar list -q party --cal ".*" 

Ahora que lo pienso de ella, usted puede incluso encontrar que Calendar, Blogger o Docs son un lugar más apropiado que Gmail para el seguimiento de las actualizaciones de estado. Por ejemplo, una hoja de cálculo o un formato de calendario debería facilitar la generación de una representación gráfica de cuándo un servicio determinado estaba activo o inactivo.

Aún necesita escribir un pequeño programa que utiliza googlecl para consultar el calendario (o blog, o documentos, o lo que sea), pero una vez que tiene líneas de comando simples a su disposición, el resto debe ser bastante sencillo. Aquí hay un enlace a más información sobre GoogleCL:

http://code.google.com/p/googlecl/

Si realmente desea utilizar Gmail, y utilizarlo en este momento, que ofrecen una interfaz IMAP. Con IMAP, puede realizar numerosas operaciones simples, como determinar si existe un mensaje que contiene una línea de asunto especificada. He aquí un buen lugar para aprender acerca de los detalles:

http://mail.google.com/support/bin/answer.py?hl=en&answer=75725

Aquí está un ejemplo rápido que utiliza IMAP y Python a la lista de los diez correos electrónicos más-recientes que tienen una "etiqueta" dada Gmail:



import getpass, imaplib 
# These gmail_* utilties are from https://github.com/drewbuschhorn/gmail_imap                         
import gmail_mailboxes, gmail_messages, gmail_message 

# Update these next lines manually, or turn them into parms or somesuch.                           
gmail_account_name = "[email protected]" # Your full gmail address.                          
mailbox_name = "StatusReports" # Use Gmail "labels" to tag the relevant msgs.                         

class gmail_imap: 
    def __init__ (self, username, password): 
     self.imap_server = imaplib.IMAP4_SSL("imap.gmail.com",993) 
     self.username = username 
     self.password = password 
     self.loggedIn = False 
     self.mailboxes = gmail_mailboxes.gmail_mailboxes(self) 
     self.messages = gmail_messages.gmail_messages(self) 
    def login (self): 
     self.imap_server.login(self.username,self.password) 
     self.loggedIn = True 
    def logout (self): 
     self.imap_server.close() 
     self.imap_server.logout() 
     self.loggedIn = False 

# Right now this prints a summary of the most-recent ten (or so) messages                          
# which have been labelled in Gmail with the string found in mailbox_name.                          
# It won't work unless you've used Gmail settings to allow IMAP access.                           
if __name__ == '__main__': 
    gmail = gmail_imap(gmail_account_name,getpass.getpass()) 
    gmail.messages.process(mailbox_name) 
    for next in gmail.messages: 
     message = gmail.messages.getMessage(next.uid) 
     # This is a good point in the code to insert some kind of search                           
     # of gmail.messages. Instead of unconditionally printing every                           
     # entry (which is what the code below does), issue some sort of                           
     # warning if the expected email (message.From and message.Subject)                           
     # did not arrive within the expected time frame (message.date).                           
     print message.date, message.From, message.Subject 
    gmail.logout() 

Como se menciona en los comentarios del código, puede adaptarlo para emitir algún tipo de advertencia si los mensajes más recientes en ese buzón no contienen un mensaje esperado. A continuación, ejecute el programa Python una vez al día (o el período de tiempo que necesite) para ver si el mensaje de correo electrónico esperado nunca se recibió.

+0

Ok. Me gusta la idea de usar una hoja de cálculo para una buena representación visual: Google Spreadsheets API es agradable. Tal vez podría configurar las reglas en la primera columna de la hoja y tener un servicio que se ejecute en cualquier lugar para completar los estados en una columna para cada día. Y otro servicio que informa si la suma de los estados no es la esperada. Pero - realmente esperaba una solución preparada. – joeriks

Cuestiones relacionadas