de LinuxmanR4, 2 años han pasado desde su publicación, escrito en Lua.
Insertar vínculo
  1. #!/usr/bin/env ruby
  2.  
  3. # RubyPing
  4. # =======================================================================
  5. # Hace ping a una lista de servidores de un archivo y si existe un error
  6. # manda un correo electrónico al administrador.
  7. #
  8. # Este programa es software libre. Puede redistribuirlo y/o
  9. # modificarlo bajo los términos de la Licencia Pública General
  10. # de GNU según es publicada por la Free Software Foundation,
  11. # bien de la versión 2 de dicha Licencia o bien (según su
  12. # elección) de cualquier versión posterior.
  13. #
  14. # Este programa se distribuye con la esperanza de que sea
  15. # útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía
  16. # MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN
  17. # PROPÓSITO PARTICULAR. Para más detalles, véase la Licencia
  18. # Pública General de GNU.
  19. #
  20. # Autor: LinuxmanR4 inguanzo@gmail.com http://linuxmanr4.com
  21. # versión 0.1
  22. # =======================================================================
  23.  
  24. require 'timeout'
  25. require 'socket'
  26. require 'csv'
  27. require 'net/smtp'
  28.  
  29. # Reemplazar por los parámetros de su instalación
  30. ARCHIVO = "/home/usuario/directorio/servidores_csv.txt"
  31. CORREO_ORIGEN ="rubyping@dominio.com"
  32. CORREO_DESTINO = "destino@dominio.com"
  33. SERVIDOR_SMTP ="smtp.dominio.com"
  34.  
  35. def ping(host)
  36.   begin
  37.     Timeout.timeout(5) do
  38.       s = TCPSocket.new(host, 'echo')
  39.       s.close
  40.       return true
  41.     end
  42.   rescue Errno::ECONNREFUSED
  43.     return true
  44.   rescue Timeout::Error, Errno::ENETUNREACH, Errno::EHOSTUNREACH
  45.     return false
  46.   end
  47. end
  48.  
  49. # Recuperar la información contenida en el archivo y guardarla en una variable.
  50. # La estructura del archivo debe de ser como sigue:
  51. #
  52. # Servidor 1,IP Servidor 1
  53. # Servidor 2,IP Servidor 2
  54. # Servidor n,IP Servidor n
  55.  
  56. csv_text = File.read(ARCHIVO)
  57. csv = CSV.parse(csv_text, :headers => false)
  58.  
  59. datos = Hash.new
  60. i = 0 # indice inicial (los indices comienzan en cero)
  61.  
  62. csv.each do |linea|
  63.     datos[[i,:nombre]] = linea[0]
  64.     datos[[i,:ip]] = linea[1]    
  65.     i +=1
  66. end
  67.  
  68. indice = 0
  69.  
  70. while indice < i
  71.     if ping datos[[indice,:ip]]
  72.         puts datos[[indice,:nombre]] +" [OK]"
  73.     else
  74.         puts datos[[indice,:nombre]] +" [Error]"
  75.        
  76.         mensaje_correo = "From: Ruby Ping<#{CORREO_ORIGEN}>
  77. To: #{CORREO_DESTINO}
  78. Subject: Error de conexión en #{datos[[indice,:nombre]]}
  79.  
  80. Existe un problema de conexión en el equipo #{datos[[indice,:nombre]]} con dirección IP #{datos[[indice,:ip]]}.
  81.  
  82. Este es sólo un mensaje de aviso. No es necesario que conteste este mensaje.
  83.  
  84. Atentamente,
  85.  
  86. Ruby Ping :)"
  87.  
  88.  
  89.         # Código para enviar un correo usando un servidor smtp.
  90.         Net::SMTP.start(SERVIDOR_SMTP, 25) do |smtp|
  91.             smtp.send_message mensaje_correo, CORREO_ORIGEN, CORREO_DESTINO
  92.             smtp.finish
  93.         end #net
  94.     end #if
  95.     indice +=1    
  96. end #while