chore(scripts): add graylog validation runner
This commit is contained in:
parent
f2be837a1e
commit
d6834cf648
2 changed files with 199 additions and 1 deletions
|
|
@ -14,7 +14,10 @@
|
||||||
"qa:backend:check": "cd src-tauri && cargo check",
|
"qa:backend:check": "cd src-tauri && cargo check",
|
||||||
"qa:backend:test": "cd src-tauri && cargo test",
|
"qa:backend:test": "cd src-tauri && cargo test",
|
||||||
"qa:backend:clippy": "cd src-tauri && cargo clippy -- -D warnings",
|
"qa:backend:clippy": "cd src-tauri && cargo clippy -- -D warnings",
|
||||||
"qa": "npm run qa:frontend && npm run qa:backend:check && npm run qa:backend:test && npm run qa:backend:clippy"
|
"qa": "npm run qa:frontend && npm run qa:backend:check && npm run qa:backend:test && npm run qa:backend:clippy",
|
||||||
|
"validate:graylog": "bash scripts/validate-graylog-flow.sh all",
|
||||||
|
"validate:graylog:auto": "bash scripts/validate-graylog-flow.sh auto",
|
||||||
|
"validate:graylog:manual": "bash scripts/validate-graylog-flow.sh manual"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tauri-apps/api": "^2.10.1",
|
"@tauri-apps/api": "^2.10.1",
|
||||||
|
|
|
||||||
195
scripts/validate-graylog-flow.sh
Executable file
195
scripts/validate-graylog-flow.sh
Executable file
|
|
@ -0,0 +1,195 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
SCRIPT_NAME="$(basename "$0")"
|
||||||
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<USAGE
|
||||||
|
Usage: $SCRIPT_NAME [all|auto|manual] [--non-interactive]
|
||||||
|
|
||||||
|
Modes:
|
||||||
|
all Run automated checks, then run manual checklist (default)
|
||||||
|
auto Run only automated checks (qa + build)
|
||||||
|
manual Run only manual checklist
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--non-interactive Print manual checklist without prompts
|
||||||
|
-h, --help Show this help
|
||||||
|
USAGE
|
||||||
|
}
|
||||||
|
|
||||||
|
log() {
|
||||||
|
printf '\n[%s] %s\n' "$1" "$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
run_cmd() {
|
||||||
|
local description="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
log RUN "$description"
|
||||||
|
(cd "$ROOT_DIR" && "$@")
|
||||||
|
}
|
||||||
|
|
||||||
|
run_automated_checks() {
|
||||||
|
log INFO "Automated validation started"
|
||||||
|
run_cmd "Frontend + backend QA" npm run qa
|
||||||
|
run_cmd "Production build" npm run build
|
||||||
|
log OK "Automated validation passed"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_manual_checklist() {
|
||||||
|
cat <<'CHECKLIST'
|
||||||
|
|
||||||
|
Manual Graylog checklist (project UI):
|
||||||
|
1. Ouvre l'app: `npm run tauri dev`.
|
||||||
|
2. Va dans `Projet > Modules` et vérifie que `Polling Graylog + auto-resolve` est visible et activable.
|
||||||
|
3. Va dans `Projet > Graylog`.
|
||||||
|
- Sauvegarde une config valide (URL, token, agents analyst/developer, seuil).
|
||||||
|
- Clique `Tester la connexion` et vérifie le message de succès.
|
||||||
|
4. Lance `Poll manuel`.
|
||||||
|
- Vérifie qu'au moins une détection apparaît dans `Dernières détections`.
|
||||||
|
- Si score >= seuil, vérifie création d'un ticket dans `Tickets`.
|
||||||
|
5. Vérifie la dédup stricte:
|
||||||
|
- Relance `Poll manuel` sans clôturer le ticket actif du même sujet.
|
||||||
|
- Vérifie qu'un 2e ticket n'est pas créé pour ce sujet.
|
||||||
|
6. Ouvre le ticket créé:
|
||||||
|
- Vérifie `Source: graylog` et `Source ref` dans le détail.
|
||||||
|
- Vérifie le badge source dans la liste des tickets.
|
||||||
|
7. Retry/Cancel:
|
||||||
|
- Vérifie que `Retry` et `Cancel` restent opérationnels pour les tickets Graylog.
|
||||||
|
CHECKLIST
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt_step() {
|
||||||
|
local step="$1"
|
||||||
|
while true; do
|
||||||
|
printf '\n%s\n' "$step"
|
||||||
|
read -r -p "Résultat ? [y=ok / n=ko / s=skip / q=quit] " answer
|
||||||
|
|
||||||
|
case "$answer" in
|
||||||
|
y|Y)
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
n|N)
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
s|S)
|
||||||
|
return 2
|
||||||
|
;;
|
||||||
|
q|Q)
|
||||||
|
return 3
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Réponse invalide. Utilise y/n/s/q."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
run_manual_checklist() {
|
||||||
|
local non_interactive="$1"
|
||||||
|
|
||||||
|
print_manual_checklist
|
||||||
|
|
||||||
|
if [ "$non_interactive" = "true" ]; then
|
||||||
|
log INFO "Mode non interactif: checklist affichée uniquement"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local -a steps=(
|
||||||
|
"1) Module Graylog visible et activable dans Projet > Modules"
|
||||||
|
"2) Sauvegarde config Graylog + test connexion OK"
|
||||||
|
"3) Poll manuel: détections visibles"
|
||||||
|
"4) Ticket créé quand score >= seuil"
|
||||||
|
"5) Dédup stricte vérifiée (pas de doublon actif)"
|
||||||
|
"6) Détail ticket: source graylog + source_ref"
|
||||||
|
"7) Retry/Cancel fonctionnels sur ticket Graylog"
|
||||||
|
)
|
||||||
|
|
||||||
|
local passed=0
|
||||||
|
local failed=0
|
||||||
|
local skipped=0
|
||||||
|
|
||||||
|
for step in "${steps[@]}"; do
|
||||||
|
if prompt_step "$step"; then
|
||||||
|
passed=$((passed + 1))
|
||||||
|
else
|
||||||
|
code=$?
|
||||||
|
if [ "$code" -eq 1 ]; then
|
||||||
|
failed=$((failed + 1))
|
||||||
|
elif [ "$code" -eq 2 ]; then
|
||||||
|
skipped=$((skipped + 1))
|
||||||
|
elif [ "$code" -eq 3 ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
printf '\nSummary: passed=%d failed=%d skipped=%d\n' "$passed" "$failed" "$skipped"
|
||||||
|
|
||||||
|
if [ "$failed" -gt 0 ]; then
|
||||||
|
log ERROR "Checklist manuelle en échec"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log OK "Checklist manuelle validée"
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local mode="all"
|
||||||
|
local non_interactive="false"
|
||||||
|
|
||||||
|
if [ "$#" -gt 0 ]; then
|
||||||
|
case "$1" in
|
||||||
|
all|auto|manual)
|
||||||
|
mode="$1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
usage
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown mode: $1" >&2
|
||||||
|
usage >&2
|
||||||
|
return 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
while [ "$#" -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
--non-interactive)
|
||||||
|
non_interactive="true"
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
usage
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown option: $1" >&2
|
||||||
|
usage >&2
|
||||||
|
return 2
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
case "$mode" in
|
||||||
|
auto)
|
||||||
|
run_automated_checks
|
||||||
|
;;
|
||||||
|
manual)
|
||||||
|
run_manual_checklist "$non_interactive"
|
||||||
|
;;
|
||||||
|
all)
|
||||||
|
run_automated_checks
|
||||||
|
run_manual_checklist "$non_interactive"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
log OK "Validation Graylog terminée"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
||||||
Loading…
Reference in a new issue