Site Audit : une commande drush

https://www.drupal.org/project/site_audit n'est pas un module (à mettre dans son dossier drush/commands)

C'est une plateforme d'analyse de sites drupal (analyse statique de programmes), qui sort des rapports txt, html et JSON, avec les reco. Rien n'est à installer sur les sites à tester, l'étude est non-intrusive.
Donne des stats, check la conf du cache drupal, analyse Google PageSpeed Insights, recherche d'exploits (entrées du menu router), liste des roles, recherche s'il y a des types de contenus non utilisés et les vocab, conf des caches des Views, Watchdog: compte les 404 et erreurs php...

ex de rapport: drush ac --html --detail > ~/Desktop/report.html
avec un max de détail, sans google insights et avec Twitter Bootstrap: drush aa --html --bootstrap --detail --skip=insights > ~/Desktop/report.html

Fonctionne avec Launch Check (Pantheon), Drupalgeddon, Hacked! et Security review

En avril 2015: v 7.x-1.13 de Fev 2015, et 2 versions dev 7.x-1.x-dev et 8.x-2.x-dev de mars 2015.

Installer dans drush

Install Copier le dossier complet dans drush/commands, puis drush cc drush
drush help --filter=site_audit
drush site-audit-version

Usage

audit du cache: drush ac
créer rapport : drush ac --html --detail > ~/Desktop/report.html
"audit all, avec Twitter Bootstrap et sans Google insights": drush aa --html --bootstrap --detail --skip=insights > ~/Desktop/report.html

Note: pour désactiver un check, $conf array dans settings.php avec la meme chaine de texte utilisée dans --skip
Ex (désac report Compression Page): $conf['site_audit']['opt_out']['CachePageCompression'] = TRUE;

Pour ajouter un rapport, il faut savoir qu'il y a 2 classes:

  • SiteAuditReport : collection de check (lancés dans un certain ordre)
    Si un check met la propriété annuler à TRUE (abort), les tests suivants ne seront pas lancés (test séquentiel simple). Les noms de chaque test sont définis dans hook_drush_command avec la clé "checks". Les noms d'un test doit correspondre exactement au nom du fichier du test en cours (casse comprise).
  • SiteAuditCheck : un check (individuel)

La classe AuditCheck a les propriétés:

  • abort - si mis à TRUE, on demande au rapport "n'execute plus les autres tests".
    Par ex, on vérifie Views mais ce module n'a pas été activé -> abort.
  • html - si mis à TRUE, indique que la répopnse comporte des caractères HTML.
  • registry - à utiliser pour transmettre des données d'un test à l'autre, dans le test ?!?
    A utiliser avec parcimonie, car ce registre n'est pas nettoyé. C'est plus sûr que un global.

Tests et Rapports personnalisés

En général, pour un seul projet. Il faut créer un fichier de commande drush pour le projet, pas de contrainte coté structure de fichier. On peux par ex créer un fichier project.site_audit.inc dans le projet.

Dans hook_drush_command() définir une commande :

$items['audit_REPORT'] = array(
  // Describe the Report.
  'description' => dt('DESCRIPTION.'),
  // alias court pour la commande. Check site_audit.drush.inc pour éviter les doublons
  'aliases' => array('aN'),
  // Paramètre le bootstrap max requis pour vos Tests; si une interaction avec
  // le site Drupal est requise, alors mettre DRUSH_BOOTSTRAP_DRUPAL_FULL.
  'bootstrap' => DRUSH_BOOTSTRAP_DRUPAL_FULL,
  // Noms des tests unitaires, dans leur ordre d'execution.
  'checks' => array(
    // If a Check is defined in its own file, the location can be passed to a
    // require_once within the Report execution.
    array(
     'name' => 'FirstCheck',
     'location' => __DIR__ . '/site_audit/checks/FirstCheck.php',
    );
    // If just the name of the check is defined, the assumption is made that the
    // code has already been loaded.
    'SecondCheck',
    'ThirdCheck',
    'LastCheck',
  ),
  // Options available for all site_audit commands. You can add your own options
  // as well, but make sure to combine the arrays.
  'options' => site_audit_common_options(),
);

... readme.txt