---
# System prepended metadata

title: WP-OPS notes and todos
tags: [' fsd', fsd@EPFL]

---

---
tags: fsd@EPFL, fsd
---

[TOC]

# WP-OPS notes and todos

# Backlog

## WP-Manager

- [ ] Se débarasser de wp-manager : nécessite le fait de pouvoir lister la liste des plugins et leurs versions installées + disponibles pour savoir s'il faut mettre à jour. Exemple: wp-media-folder, version installé = 2, version disponible = 3 → il faut le mettre à jour.
    - [ ] Les nouvelles versions sont affichées sous le nom du plugin dans la liste sur wp-admin
    - [ ] Les versions des plugins hebergé sur wordpress.org sont disponibles via l'API (https://codex.wordpress.org/WordPress.org_API#Plugins), par exemple https://api.wordpress.org/plugins/info/1.0/polylang.json. WP Media Folder n'est PAS hébergé sur wordpress.org mais sur joomunited...

## Openshift / infra

- [x] Déplacer le monitoring interne sur wp-infra, du moins préparer le terrain


## Alert-tg-bot et alertmanager

- [ ] Remettre des alertes par mail et les tester, dans le but de pouvoir utiliser wp-monitoring@groupes.epfl.ch avec le NOC
    - [] Recevoir une alerte par mail pour les backups.
    Mais les sites supprimés ont encore présent dans la pushgateway
    ![](https://i.imgur.com/fWkcvw4.png)
    Que faire? Proposition: lors de la suppression du site, 
    on fait un dernier backup (à vérifier), on en profite pour ajouter/modifier la valeur d'un label pour exprimer le fait que le site est supprimé. Ainsi nous pourrons filtrer les sites supprimés dans la requete prometheus du printscreen => (time() - restic_success{job="backup",wp_env!="sandbox"}) / 3600 > 48 => donne moi tous les sites sont les backups ont plus de 48h.

- [ ] Dans le but d'alerter les utilisateurs, utiliser les alertes mail et les groupes https://cadiwww.epfl.ch/listes/viewlist?list=wordpressadmin.idev-fsd@epfl.ch ou https://cadiwww.epfl.ch/listes/viewlist?list=wordpresseditor.idev-fsd@epfl.ch en fonction de l'unité de rattachement des sites.


### Nouvelles métriques (blocs, plugins, etc.)

De manière générales, certaines métriques sont encore nécessaires et non accessible via l'API de wordpress. Voici une liste de métrics que nous pourrions avoir à moyen termes :

- [x] Coming soon → on doit savoir si le comimg soon est actif/armé.
    - [x] Checker si le plugin est présent
    - [x] Checker si le plugin est activé ou non
    - [x] Si le plugin est activé, checker si le coming soon (ou la maintenance) sont armé
    - [x] ...
- [x] Liste des plugins installés sur un site (trouver le bon format de métriques)
      `wp_site_plugin{url="http://www.epfl.ch/",plugin="eww"} 1/0`
      → status, version ?
- [x] Blocks list : savoir quels sites (et quels posts/pages ?) utilistent tel ou tel blocks.
- [ ] Au même titre que les plugins, lister les thèmes présents et celui qui est actif
- [ ] Comme pour les pages, mettre les posts ?


### Amélioration du bot Telegram

- [x] `/silences` ne fonctionne plus sur la prod
- [ ] Lorsqu'on reçoit une alerte, il faudrait pouvoir identifier le site dans le pop-up de notification :
     ![](https://i.imgur.com/kwWjfot.png)
- [ ] comprendre la différence en Alerting et Firing
- [ ] checker le temps par défaut entre les alertes (est-il possible de recevoir les alertes toutes les 8 heures plutôt que le défaut à 3 ou 4 heures)
- [ ] améliorer les boutons: 
    - [ ] silence jusqu'au lendemain matin / lundi matin
    - [ ] silence 1h pas utile
    - [x] lien vers le silence de l'alerte
    - [ ] et lien vers les silences du groupe de l'alerte
- [ ] Améliorer les alertes, par exemple site is not 200 n'est pas très parlant, il faudrait mieux être explicite: site status code = 404
- [x] Trouver une solution pour que le bot de test soit actif que lorsque nous en avons besoin, c'est à dire, ne pas envoyer de notification le reste du temps.


## Probers (WWP) (wpprobe / disk-size-usage)

Les metrics du prober sont actuellement des informations concernant les menus et les langues des sites wordpress.
- [x] Question : est-ce que tous les sites unmanaged sont des wordpress ? Si oui, on pourrait les remettre dans le configurator et les exclure du check des menus.  
  > Oui mais ils sont voués à disparaitre. Est-ce que cela vaut la peine d'améliorer le prober pour qu'il sonde les unmanaged sans les menus ?
- [x] Creuser les containers "disque size" et remonter des infos, par exemple taille de wp-content de chaque site, etc...


## Pushgateway (WWP)

Pour le moment, le pushgateway "wwp" reçoit des metrics via un curl uniquement lorsque les commandes Ansible -t wp.backup sont lancées.

- [x] Confirmer qu'une tâche "AWX" fera cela de manière journalière
- [x] Ajouter des metrics, tels que l'espaces disques ou des informations qui ne pourraient pas être recueillies via site/wp-json/..., par exemple des informations sur les plugins.


## Blackbox exporter (NOC)

- [ ] Checker les règles du blackbox exporter pour éviter des alertes inutiles ou des faux positifs, par exemple un site retourne HTTP 200 alors qu'il ne devrait pas, etc...
- [ ] Le blackbox exporter devrait "remonter" les sites en "coming soon"
- [ ] Trouver un moyen de traiter correctement les nouveaux sites ajoutés dans wp-veritas mais qui n'ont pas encore été créés: par exemple, si site pas créé après X jours, alerter.


## Grafana (NOC)

- [ ] Tester un panel "alerting" : https://grafana.com/docs/grafana/latest/panels/visualizations/alert-list-panel/
- [ ] Faire une PR pour https://github.com/grafana/grafana/issues/2908
- [ ] Faire des aggrégations par préfix dans prometheus ou grafana ? (arbre dunombre de pages en partant de www.epfl.ch)


## Cloud-flare

- [ ] Trouver une solution pour monitorer les sites sans cloud-flare et sans mettre down l'infra (c.f. [§Problèmes](#Probl%C3%A8me-cache-cloud-flare)) / module `http_head` ?
- [x] Laisser canari en 200 et voir si uptime robot le voit un jour → non
- [ ] Cloudflare cache les page → le blackbox exporter ne peut donc pas les sonder correctement
    - [ ] Solution 1: activer le `Origin Cache Contol` dans cloud-flare : problème: un attaquant peut l'utiliser.
    - [ ] Solution 2: modifier le module http_get du blackbox exporter pour ajouter des cookies → \o/ Cookie: 
      - [x] curl -H "Cookie: wordpress_logged_in_test=on" -I https://www.epfl.ch/campus/service/canari/ versus curl -I https://www.epfl.ch/campus/service/canari/
      - /!\ infra fragile !!!
    - [ ] Solution 3: modifier les targets de prometheus pour ajouter un hash aux urls sondées, e.g. ?toto=tutu
    - [ ] Solution 4: utiliser le prometheus-wwp (interne au cluster) pour prober les sites et utiliser le federate déjà en place. Cela sous-entend que le prober du NOC (externe) mesure cloudflare et que le prober wwp (interne) mesure en interne sans cloud-flare. Signifie également que nous pouvons voir les éventuelles différences entre les deux prober. Problème: le prometheus-wwp (interne) n'a pas actuellement de blackbox exporter.
    → Approcher c2c ?
    → Déplacer sur wp-infra
    - [ ] Solution 5: créer un nouveau prober, e.g. en node.js, pour sonder les sites avec un cookie
- [-] comprendre pourquoi uptime-robot peut voir les status 500 (e.g. servir la debugapi sur idev-fsd.ml et voir les requêtes uptime robot. Hypothèse: un ?hash est ajouté à l'URL)
  En fait il ne peux pas, c'était à cause du bypass cache de cloudflare.
- [ ] Faire un graph des caches MISS de cloudflare ?
      * https://github.com/cloudflare/cloudflare-grafana-app/issues/2
      * https://developers.cloudflare.com/analytics/graphql-api/tutorials/build-your-own-analytics
      * https://grafana.com/grafana/plugins/cloudflare-app
      * Voir aussi: https://github.com/vanadium23/cf-metrics et https://github.com/vanadium23/cf-metrics
      * 💡 Faire une PR sur https://github.com/cloudflare/cloudflare-grafana-app pour ajouter ces metrics
      * 💡 Faire notre propre exporter (DOJO)


# Objectifs généraux

- [x] POC : un graph grafana qui reprend des infos depuis prometheus qu'il aura récupérées depuis le prober wwp.
    - [x] Encore pousser la modif `epfl-functions.php` ce jeudi
- [ ] Monitoring des backups : en tant que service manager je veux être avertis lorsqu'un site n'a pas été backupé depuis plus d'un jour.
  - [~] Créer une alerte dans prometheus qui se base sur la différence entre les metrics `restic_start` et `restic_success` pour un même site. Ou de manière plus générale, lister tous les sites qui n'ont pas un `restic_success` depuis plus d'un jour.
  - [x] Automatiser (depuis AWX?), le backup des sites
- [ ] Monitoring d'un site : en tant webmaster d'un site je veux recevoir un mail lorsque mon site est down pendant plus de 5 minutes.
- [x] En tant que wwp-members ou service manager, j'aimerais avoir un dashboard de l'état des 700 sites wordpress :
  - [x] Nombre de sites UP / DOWN
  - [x] Status des langues
  - [x] Status des backups
  - [ ] etc...


# Requêtes "utilisateurs" lors de la présentation
- [ ] Dans grafana, obtenir le nombre de pages accrochés au menu qui sont des custom links et/ou des liens vers un site enfants (nb de pages réélement actives) (demandeur Luc)
- [ ] Dans grafana, santé générale de la flotte => histogramme des points (les points sont attribués en fonction des métriques bonnes ou mauvaises). (demandeur Dominique)
     - [ ] A discuter: comment créer de manière intelligente les points de santé ? Mélange de métrics: Site avec problème, vieux backups, etc. => créer une formule par site.
- [x] Blocs utilisés par site et inversement savoir qu'un site utilise tels ou tels blocs (demandeur Luc)
- [x] Plugins utilisés par site et inversement savoir qu'un site utilise tels ou tels plugins (demandeur Luc)
- [ ] Savoir quels liens "customs" d'un menu retourne un 404