2010-11-04 4 views
3

Quelle est la meilleure façon de créer un "Est-ce que mon site est en panne?" dans Ruby? Comment dois-je le faire pour le vérifier en utilisant HTTP (s) et Ping?"Mon site est-il en panne?" Howto

Merci.

+1

pourrait simplement utiliser les services existants pour que si le scénario Web ouvert applique: http://downforeveryoneorjustme.com/stackoverflow.com – BrokenGlass

+0

@BrokenGlass, la même idée) – Nakilon

+0

@BrokenGlass: Le site ne semble pas retourner des résultats fiables. Il est revenu: "Ce n'est pas seulement vous! Http://google.com regarde d'ici." pendant que je demandais le statut pour google.com – haltTm

Répondre

3

Fondamentalement, il suffit d'utiliser une bibliothèque http pour voir si vous pouvez obtenir (en fait, HEADing serait mieux) la page vers laquelle ils pointent. Si vous obtenez une réponse, le serveur est en marche, sinon (il ne répond pas ou expire) il est en panne et vous alertez l'utilisateur en conséquence.

Ce n'est pas la plus propre façon de le faire, mais au fond:

require 'net/http' 
require 'uri' 

def isUp(url) 
    uri = URI.parse(url) 

    begin 
     Timeout::timeout(5) { 
      Net::HTTP.start(uri.host, uri.port) { |http| 
       http.head(uri.path) 
      } 
     } 
    rescue Timeout::Error 
     return false 
    end 

    return true 
end 

Vous pouvez probablement obtenir de ne pas attendre que le délai d'attente, et/ou augmenter le délai d'attente pour éviter le délai d'attente pour éviter de faux positif, mais c'est un exemple simple.

2

(tricheur)

require 'uri' 
require 'open-uri' 
site = "http://stackoverflow.com/" 
open("http://downforeveryoneorjustme.com/#{URI.parse(site).host}"){|f|f.read}["It's not just you!"]