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.

Print Friendly, PDF & Email
0 0 votes
Évaluation de l'article
4
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x