Surveiller des sites automatiquement (http 200) avec Google Sheets et un script

Nous allons voir comment lire le statut HTTP d’un site internet avec Google Sheets et envoyer un email automatique en cas d’anomalie.

J’ai rencontré des soucis (non résolus 10 jours après mon premier signalement…) avec mon hébergement Plesk. Il arrive que la base de données de l’hébergement soit en panne et on n’a aucun moyen de le savoir sans essayer d’accéder à l’un des sites de l’hébergement. Les systèmes habituels de vérification par « ping » ne donne pas satisfaction car les sites répondent à un ping mais sont inaccessible depuis un navigateur (le code HTTP n’est pas 200). Comme mon fournisseur d’hébergement se montre incapable d’accepter qu’il y a un problème ou au moins de générer une alerte automatique en cas de panne de la base de données, j’ai décidé de créer un système d’alerte automatique.

Obtenir le code HTTP de réponse d’un site avec Google Sheets

Je me suis inspirée de cet article : How to Pull an HTTP Response Code in Google Sheet.

J’ai créé un fichier Google Sheets dans lequel j’ai placé le tableau suivant :

site url statut
parcours-P parcours-performance.com =VALUE(HTTPResponse(B3))
knowledge PP knowledge.parcours-performance.com =VALUE(HTTPResponse(B4))

Ce qui donne ce qui suit dans Google Sheets :

Google Sheets : surveiller le code httpde sites
Google Sheets : surveiller le code httpde sites

 

Avec l’éditeur de scripts (menu « Outils »), j’ai créé la fonction HTTPResponse .

/*****************************************************************
* check websites for http response
*****************************************************************/

function HTTPResponse( uri )
{
 /* source https://atulhost.com/how-to-pull-an-http-response-code-in-google-sheet */
 var response_code ;
try {
 response_code = UrlFetchApp .fetch( uri ) .getResponseCode() .toString() ;
 }
catch( error ) {
 response_code = error .toString() .match( / returned code (\d\d\d)\./ )[1] ;
 }
finally {
 return response_code ;
 }
}

J’ai ensuite cliqué sur « enregistrer ».

Lorsque je retourne dans ma feuille de calcul, si les sites fonctionnent, je vois « 200 » dans la troisième colonne de mon tableau, celle qui contient =VALUE(HTTPResponse(Bx)) .

Régler la fréquence de vérification

Je veux vérifier au moins toutes les heures que les sites sont opérationnels.

Dans l’éditeur de scripts, je sélectionne (A) la fonction HTTPResponse puis je clique sur le bouton « déclencheur du projet actuel » (B). Ensuite, je régle le déclenhement pour que le script s’exécute à chaque heure :

Régler le déclencheur d'un script Google Sheets
Régler le déclencheur d’un script Google Sheets
Déclencher un script Google Sheets toutes les heures
Déclencher un script Google Sheets toutes les heures

Générer un mail automatique en cas d’anomalie avec Google Sheets

Pour cette partie, je me suis beaucoup inspirée de « Automating Google Spreadsheets – Email Reminders« .

Dans l’éditeur de script, j’ai placé la fonction checkStatut() :

/*****************************************************************
* Send an alert if somme http responses are not 200 OK
*****************************************************************/
function checkStatut() {
  
  /* source https://www.withoutthesarcasm.com/automating-google-spreadsheets-email-reminders/ */
  
  // get the spreadsheet object
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  // set the first sheet as active
  SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
  // fetch this sheet
  var sheet = spreadsheet.getActiveSheet();
   
  // figure out what the last row is
  var lastRow = sheet.getLastRow();
 
  // the rows are indexed starting at 1, and the second row
  // is the headers, so start with row 3
  var startRow = 3;
 
  // grab column 3 (the 'statut' column) 
  // getRange(row, column, numRows, numColumns)
  var range = sheet.getRange(startRow, 3,lastRow-startRow+1,1 );
  var numRows = range.getNumRows();
  var statut_values = range.getValues();

  // Now, grab the site name column (2)
  range = sheet.getRange(startRow, 2, lastRow-startRow+1, 1);
  var site_name_values = range.getValues();
  var warning_count = 0;
  var msg = "";
   
  // Loop over statut values
  for (var i = 0; i <= numRows - 1; i++) {
    var statut = statut_values[i][0];
    if(statut != 200) {
      var site_name = site_name_values[i][0];
       
      msg = msg + "Site : "+site_name+" ne fonctionne pas HTTP code "+statut+" .\n";
      warning_count++;
    }
  }
   
  if(warning_count) {
    MailApp.sendEmail("mail@parcours-performance.com", 
        "Des sites en panne", msg);
  }
};

Cette fonction identifie le bon onglet (0) de la feuille de calcul puis lit toutes les données de statut. Lorsqu’un statut n’est pas égal à 200 (OK), la fonction lit le nom du site correspondant. La fonction crée un message (msg) avec tous les dysfonctionnements puis, s’il y a des alertes, m’envoie un mail pour m’en informer.

Le déclencheur de la fonction est un changement dans la feuille de calcul (lorsque  HTTPResponse se déclenche et indique une réponse différente de ce qui précédait) :

Déclencher un script Google Sheets lorsque la feuille change
Déclencher un script Google Sheets lorsque la feuille change

 

J’ai vérifié que ça fonctionne en placant « 404 » dans l’une des cellules de statut et je reçois bien un mail d’alerte.

Et maintenant

Je suis en train de regarder comment changer d’hébergeur mais je dispose maintenant d’un système d’alerte des anomalies. Si je reçois un mail, je me connecte à mon interface client et je redémarre le VPS. En quelques minutes tous mes sites fonctionnent de nouveau.

4
Poster un Commentaire

avatar
  S’abonner  
plus récent plus ancien Le plus populaire
Notifier de
Olivier
Invité

Moi j’utilise ce site : https://uptimerobot.com
C’est gratuit en plus 😉

Il surveille des sites en http ou https
On peut faire surveiller des port spécifique aussi…

et ça envois un mail quand c’est down 🙂

Sylvain
Invité
Sylvain

Bonjour et merci pour ce système très intéressant mais j’ai une question : est-ce qu’une fois la page de Google Sheets fermée le script continue de surveiller les sites ?