SUPERVISION
26/09/2026 17:29 ← Site Backoffice Grafana
✦ Rapport de supervision ✦
IIIF GLAM
vps-16e2ed1f.vps.ovh.net · 26/09/2026 à 17:29:52
🎉
Tous les tests passés
324 tests passés · 0 échecs · 0 avertissements
Couverture des tests — 27 sections
Sections 1–20 · Tests de base (Keycloak, Cantaloupe, RBAC, MinIO, Nginx, TLS, Prometheus…) ✅
Section 21 · Performance images & tuiles ✅
Section 22 · Disponibilité IPv6 & réseau ✅
Section 23 · Tables PostgreSQL étendues ✅
Section 24 · Générateur de manifests ✅
Section 25 · TLS — alertes renouvellement ✅
Section 26 · Test de charge ✅
Section 27 · Tests de régression ✅
Tests passés
324
sur 324 tests
Échecs
0
à corriger
Avertissements
0
à surveiller
Taux de succès
100%
324 tests au total
Filtrer :
Obtention des tokens de test
1 · Keycloak — Authentification & Sécurité
✅Obtenir token viewer-testPASS
✅Refuser mauvais mot de passePASS
✅Brute force — erreurs cohérentesPASS
✅Introspection token valide = activePASS
✅Introspection token invalide = inactifPASS
✅OIDC discovery endpoint = 200PASS
✅JWKS endpoint = 200PASS
✅universal-viewer Direct Access Grants désactivéPASS
✅Token contient realm_access.rolesPASS
✅Token viewer ne contient pas manage-users/realmPASS
2 · Cantaloupe — Auth & Images IIIF
✅info.json sans token = 401PASS
✅info.json avec Authorization header = 200PASS
✅info.json avec cookie kc_token = 200PASS
✅info.json avec faux token = 403PASS
✅info.json contient dimensions validesPASS
✅info.json context IIIF v2PASS
✅info.json contient profile IIIFPASS
✅Thumbnail 200px public (sans token) = 200PASS
✅Thumbnail endpoint /thumbnail/ = 200PASS
✅Thumbnail requireAuth absent (public)PASS
✅Tuile sans token = 401PASS
✅Tuile full = 200PASS
✅Tuile crop 512x512 = 200PASS
✅Tuile resize 400px = 200PASS
✅Tuile rotation 90° = 200PASS
✅Tuile grayscale = 200PASS
✅Tuile avec faux token = 403PASS
✅Tuile content-type = image/jpegPASS
✅IIIF v3 info.json = 200PASS
✅Admin Cantaloupe nécessite auth (non 200 sans creds)PASS
✅Cantaloupe health = 200PASS
3 · RBAC — Contrôle d'accès par rôle
✅viewer-test accède photos--meteo.jpgPASS
✅carte-admin accède cartes--carte_nice_1882.jpgPASS
✅Token JWT expiré = 401 ou 403PASS
4 · Manifests IIIF — iiif-manifest-node
✅Manifest sans token = 200 (public)PASS
✅Manifest avec token = 200PASS
✅Manifest avec cookie = 200PASS
✅Manifest @context IIIF v2PASS
✅Manifest @type = sc:ManifestPASS
✅Manifest contient au moins 1 canvasPASS
✅Manifest resource URL pointe vers iiif-glam.techPASS
✅Manifest avec faux token = 200 (optionalAuth)PASS
5 · MinIO — Stockage S3
✅MinIO health = 200PASS
✅MinIO ready = 200PASS
✅MinIO console = 200PASS
✅Bucket iiif non public (403/401)PASS
✅Bucket iiif-photos non public (403/401)PASS
✅Bucket iiif-manuscrits non public (403/401)PASS
✅Bucket iiif-cartes non public (403/401)PASS
✅Bucket iiif-peintures non public (403/401)PASS
✅Bucket iiif-videos non public (403/401)PASS
✅Bucket iiif-archives non public (403/401)PASS
✅User cantaloupe MinIO = policy iiif-readonlyPASS
6 · Universal Viewer & Frontend
✅Page principale = 200PASS
✅UV.js = 200PASS
✅uv.css = 200PASS
✅index.html contient Mirador 3PASS
✅index.html implémente PKCEPASS
✅index.html stocke token en cookie kc_tokenPASS
✅index.html référence le manifestPASS
✅Bouton upload masqué par défaut (viewer)PASS
7 · Sécurité HTTP & TLS
✅HTTP → HTTPS redirection (301/302)PASS
✅HSTS header présentPASS
✅X-Frame-Options ou CSP présentPASS
✅X-Content-Type-Options présentPASS
✅Server header non verbeuxPASS
✅TLS 1.2 ou 1.3 uniquementPASS
✅Certificat TLS valide > 14 joursPASS
✅Certificat TLS > 30 jours avant renouvellementPASS
✅Port 8182 fermé publiquementPASS
✅Port 8180 fermé publiquementPASS
✅Port 9000 fermé publiquementPASS
✅Aucun secret résiduel cantaloupe.propertiesPASS
✅Aucun secret en clair delegates.rbPASS
✅Cantaloupe TLS verify — VERIFY_NONE localhost uniquementPASS
✅Node.js TLS verify activé (rejectUnauthorized: false absent)PASS
8 · Performance & Latence
✅Latence IIIF info.json | 93ms HTTP=200PASS
✅Latence tuile full | 116ms HTTP=200PASS
✅Latence manifest | 7ms HTTP=000PASS
✅Latence Keycloak OIDC discovery | 37ms HTTP=200PASS
✅Latence page principale | 21ms HTTP=200PASS
✅5 requêtes parallèles sans erreurPASS
9 · Services Système
✅Service cantaloupe = activePASS
✅Service keycloak = activePASS
✅Service minio = activePASS
✅Service nginx = activePASS
✅Service pm2-manifest-node = activePASS
✅Service firewalld = activePASS
✅Mémoire libre > 10%PASS
✅Disque root < 90% utiliséPASS
✅Disque /data < 85% utiliséPASS
✅Load average < 80% CPUs (4 cores)PASS
✅PM2 manifest-node < 10 erreurs récentesPASS
✅fail2ban actifPASS
✅fail2ban jail nginx-badbotsPASS
✅fail2ban jail nginx-iiif-attacksPASS
✅fail2ban jail nginx-scanPASS
✅fail2ban jail sshdPASS
10 · Backup & Configuration
✅Backup Keycloak < 7 joursPASS
✅Permissions .env restrictives (600)PASS
✅Backup delegates.rb présentPASS
11 · Monitoring — Prometheus & Grafana
✅Prometheus healthPASS
✅Prometheus targets actifsPASS
✅Grafana healthPASS
✅Grafana accessible HTTPSPASS
✅Grafana dashboards présentsPASS
✅Node Exporter actifPASS
✅Nginx Exporter actifPASS
✅PostgreSQL Exporter actifPASS
✅Blackbox Exporter actifPASS
✅Cantaloupe Exporter actifPASS
✅Node.js /metrics endpointPASS
12 · Sécurité étendue
✅Port 8080 fermé publiquementPASS
✅Port 8180 fermé publiquementPASS
✅Port 8182 fermé publiquementPASS
✅Port 8443 fermé publiquementPASS
✅Port 9000 fermé publiquementPASS
✅Port 9001 fermé publiquementPASS
✅Port 3000 fermé publiquementPASS
✅Port 9090 fermé publiquementPASS
✅Port 3001 fermé publiquementPASS
✅Port 5432 fermé publiquementPASS
✅Header Content-Security-Policy présentPASS
✅Header Permissions-Policy présentPASS
✅Header X-Content-Type-Options présentPASS
✅rpcbind désactivéPASS
✅Cockpit désactivéPASS
✅auth.iiif-glam.tech HTTPS = 200PASS
✅Keycloak lié à localhostPASS
✅Apache lié à localhostPASS
✅Certificat auth.iiif-glam.tech > 14 joursPASS
13 · Annotations & Base de données
✅PostgreSQL connexion iiif_annotationsPASS
✅Table annotations accessiblePASS
✅API annotations GET = 200PASS
✅Export annotations W3C = 200PASS
14 · Manifests multi-pages
✅Manifests multi-pages accessiblesPASS
✅URL multi-pages sans doublon /manifests/manifests/PASS
✅Manifest multi-pages JSON validePASS
15 · Backoffice & Interfaces
✅Backoffice accessible HTTPS = 200PASS
✅Upload-app accessible HTTPS = 200PASS
✅API stats accessiblePASS
✅MinIO console accessible HTTPSPASS
✅Bucket iiif-thumbs existePASS
16 · APIs IIIF — Search, Discovery, Auth
✅Search API — HTTP 200PASS
✅Search API — @context IIIF SearchPASS
✅Search API — type sc:AnnotationListPASS
✅Search API — within présentPASS
✅Autocomplete API — HTTP 200PASS
✅Discovery API — HTTP 200PASS
✅Discovery API — type OrderedCollectionPASS
✅Discovery API — totalItems > 0PASS
✅Discovery page/0 — HTTP 200PASS
✅Auth API token — HTTP 200PASS
✅Auth API token — @contextPASS
✅Auth API logout — HTTP 200PASS
17 · Endpoints Manifests IIIF
✅Recent — HTTP 200PASS
✅Recent — images présentesPASS
✅Featured — HTTP 200PASS
✅Collection all — HTTP 200PASS
✅Collection all — manifests > 0PASS
✅Export manifest — HTTP 200PASS
✅Search manifests — HTTP 200PASS
18 · RBAC — Contrôle accès par collection
✅carte-admin accède cartesPASS
✅carte-admin bloqué sur photos (403)PASS
✅photo-admin accède photosPASS
✅photo-admin bloqué sur cartes (403)PASS
✅viewer-test accède toutes collectionsPASS
19 · Conformité IIIF
✅Manifest v3 — 0 erreur conformitéPASS
✅Manifest v3 — summary présentPASS
✅Manifest v3 — thumbnail présentPASS
✅Manifest v3 — seeAlso v2+v3+DC+PREMISPASS
✅Manifest v3 — rendering présentPASS
✅Manifest v3 — homepage présentPASS
✅Manifest v3 — motivation paintingPASS
✅CORS Access-Control-Allow-OriginPASS
20 · Interfaces Web
✅Landing page — HTTP 200PASS
✅API Docs — HTTP 200PASS
✅Viewer index — HTTP 200PASS
✅Supervision — HTTP 200PASS
✅Landing — section collections présentePASS
✅API Docs — endpoints IIIF présentsPASS
✅Viewer — Mirador chargéPASS
21 · Performance Images & Tuiles
✅Tuile 256px — latence < 2000msPASS
✅Tuile 512px — latence < 2000msPASS
✅Tuile 1024px — latence < 2000msPASS
✅Thumbnail cache — HTTP 200PASS
✅info.json latence < 500msPASS
22 · Disponibilité IPv6 & Réseau
✅DNS A record iiif-glam.techPASS
✅DNS AAAA record iiif-glam.techPASS
✅IPv4 landing page = 200PASS
✅IPv6 landing page = 200PASS
✅auth.iiif-glam.tech IPv4 = 200PASS
✅storage.iiif-glam.tech accessiblePASS
23 · Tables PostgreSQL étendues
✅Table collections existePASS
✅Table documents existePASS
✅Table users existePASS
✅Table metadata existePASS
✅Table api_logs existePASS
✅Table search_index existePASS
✅Collections peuplées (7)PASS
✅Documents indexés > 0PASS
✅Index GIN search_index actifPASS
24 · Générateur de Manifests
✅Génération manifest v3 — HTTP 200PASS
✅Manifest généré — type ManifestPASS
✅Manifest généré — label présentPASS
✅Manifest généré — canvas présentPASS
✅Export manifest JSON — HTTP 200PASS
25 · TLS — Alertes Renouvellement
✅TLS iiif-glam.tech > 30 joursPASS
✅TLS iiif-glam.tech > 14 joursPASS
✅TLS auth.iiif-glam.tech > 30 joursPASS
✅TLS auth.iiif-glam.tech > 14 joursPASS
✅TLS storage.iiif-glam.tech > 30 joursPASS
✅TLS storage.iiif-glam.tech > 14 joursPASS
26 · Test de Charge
✅10 requêtes landing sans timeoutPASS
✅20 requêtes manifests sans crashPASS
✅Node.js actif après chargePASS
✅Cantaloupe actif après chargePASS
✅Performance — 10 tuiles parallèles < 2000msPASS
✅Cache Redis manifest < 400ms (2 req)PASS
✅SLO Error Budget < 0.5%PASS
✅iiif-vector actif après chargePASS
27 · Tests de Régression
✅Auto-login viewer présent dans index.htmlPASS
✅Sidebar accordion présentPASS
✅Toolbar viewer présentPASS
✅hideAuthMessage présentPASS
✅Landing page — hero image présentePASS
✅Landing page — section APIs présentePASS
✅API docs page complètePASS
✅delegates.rb auth JWT actifPASS
✅Node.js routes toutes chargéesPASS
✅PostgreSQL tables (8 minimum)PASS
28 · Apache HTTPD
✅Apache — service actifPASS
✅Apache — activé au bootPASS
✅Apache — port 8080 écoutePASS
✅Apache — port 8182 CantaloupePASS
✅Apache — syntaxe config OKPASS
✅Apache — module proxyPASS
✅Apache — module rewritePASS
✅Apache — module sslPASS
✅Apache — module headersPASS
✅Apache — Cantaloupe HTTP 200PASS
✅Apache — config cantaloupe.confPASS
✅Apache — processus actifsPASS
29 · OAI-PMH — Moissonnage métadonnées
✅OAI-PMH — Identify HTTP 200PASS
✅OAI-PMH — protocolVersion 2.0PASS
✅OAI-PMH — repositoryName présentPASS
✅OAI-PMH — ListSets HTTP 200PASS
✅OAI-PMH — 6 sets disponiblesPASS
✅OAI-PMH — ListMetadataFormats HTTP 200PASS
✅OAI-PMH — format oai_dc présentPASS
✅OAI-PMH — ListIdentifiers 52 recordsPASS
✅OAI-PMH — GetRecord HTTP 200PASS
✅OAI-PMH — dc:title dans GetRecordPASS
✅OAI-PMH — dc:identifier URI présentPASS
✅OAI-PMH — verb invalide → badVerbPASS
✅OAI-PMH — ListRecords photos HTTP 200PASS
✅OAI-PMH — IPv6 accessiblePASS
✅OAI-PMH — CORS header présentPASS
30 · Dublin Core — Métadonnées
✅Dublin Core XML — HTTP 200PASS
✅Dublin Core XML — content-type XMLPASS
✅Dublin Core XML — dc:title présentPASS
✅Dublin Core XML — dc:identifier URIPASS
✅Dublin Core XML — dc:language frPASS
✅Dublin Core XML — dcterms:isPartOfPASS
✅Dublin Core — seeAlso 5 entréesPASS
31 · PREMIS — Préservation Numérique
✅PREMIS — API stats HTTP 200PASS
✅PREMIS — 41 objets indexésPASS
✅PREMIS — fixity SHA-256 présentPASS
✅PREMIS — format PRONOM présentPASS
✅PREMIS — XML accessiblePASS
✅PREMIS — 5 formats PRONOMPASS
32 · Jest — Tests automatisés
✅Jest — tests unitaires PASSPASS
✅Jest — tests PREMIS/OAIS PASSPASS
✅Jest — tests manifests PASSPASS
✅Jest — 0 test en échecPASS
✅Jest — 8 suites passéesPASS
✅Jest — 211 tests totauxPASS
33 · IIIF AV — Audio, Multipage & Recherche sémantique
✅IIIF AV — manifest audio dur>0PASS
✅IIIF AV — 4 manifests audioPASS
✅IIIF AV — thumbnail audio HTTP 200PASS
✅IIIF AV — manifest Sound body typePASS
✅IIIF AV — format audio/mpegPASS
✅Multipage — 1 manifest présentPASS
✅Multipage — 5 CanvasPASS
✅Multipage — behavior pagedPASS
✅Multipage — HTTP 200 sans tokenPASS
✅iiif-vector.service actifPASS
✅Vector search — HTTP 200PASS
✅Vector search — résultats > 0PASS
✅Vector search — mode vectorPASS
✅Vector search — microservice port 5001PASS
34 · Redis — Cache distribué
✅Redis — PONGPASS
✅Redis — clés en cache > 0PASS
✅Redis — mémoire < 100MBPASS
✅Redis — backend Node.js = redisPASS
✅Redis — maxmemory 512MBPASS
✅Redis — policy allkeys-lruPASS
35 · OAIS — Pipeline Préservation
✅OAIS — stats HTTP 200PASS
✅OAIS — 42 SIP ingérésPASS
✅OAIS — 42 AIP actifsPASS
✅OAIS — AIP photos--chateau-valrose.jpgPASS
✅OAIS — AIP liens IIIF présentsPASS
✅OAIS — SIP endpoint HTTP 200PASS
36 · Jaeger — Distributed Tracing
✅Jaeger service actifPASS
✅Jaeger UI — HTTP 200PASS
✅Jaeger API services — HTTP 200PASS
✅Jaeger — iiif-glam-node tracéPASS
✅Jaeger — traces présentesPASS
✅Jaeger — OTLP HTTP port 4320 actifPASS
✅Jaeger — port 4317 Netdata actifPASS
37 · Loki — Agrégation logs
✅Loki service actifPASS
✅Promtail service actifPASS
✅Loki — ready HTTP 200PASS
✅Loki — labels indexésPASS
✅Loki — job nginx actifPASS
✅Loki — job keycloak actifPASS
✅Loki — job fail2ban actifPASS
✅Loki — 5+ jobs actifsPASS
✅Loki datasource GrafanaPASS
38 · GoAccess — Analyse trafic
✅GoAccess installéPASS
✅GoAccess — rapport HTML présentPASS
✅GoAccess — rapport récent < 24hPASS
✅GoAccess — rapport accessible HTTPSPASS
✅GoAccess — cron actifPASS