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:test": "cd src-tauri && cargo test",
|
||||
"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": {
|
||||
"@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