fake-log-generator/fake-log-generator.sh
2025-05-31 13:05:15 +02:00

83 lines
1.8 KiB
Bash

#!/bin/bash
LINES=${1:-100}
FORMAT=${2:-apache}
MODE=$3
METHODS=("GET" "POST" "PUT" "DELETE" "PATCH")
PATHS=("/" "/login" "/dashboard" "/api/data" "/settings" "/products" "/checkout")
CODES_OK=(200 201 204 301 302)
CODES_ERR=(400 401 403 404 500 503)
AGENTS=(
"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
"curl/7.68.0"
"PostmanRuntime/7.29.0"
"Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X)"
)
mkdir -p logs
random_ip() {
echo "$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256)).$((RANDOM % 256))"
}
random_date() {
date "+%d/%b/%Y:%H:%M:%S %z"
}
iso_date() {
date --iso-8601=seconds
}
generate_log() {
IP=$(random_ip)
DATE=$(random_date)
ISO_DATE=$(iso_date)
METHOD=${METHODS[$RANDOM % ${#METHODS[@]}]}
PATH=${PATHS[$RANDOM % ${#PATHS[@]}]}
AGENT=${AGENTS[$RANDOM % ${#AGENTS[@]}]}
SIZE=$((RANDOM % 5000 + 200))
if (( RANDOM % 10 < 2 )); then
CODE=${CODES_ERR[$RANDOM % ${#CODES_ERR[@]}]}
FILE="logs/error.log"
else
CODE=${CODES_OK[$RANDOM % ${#CODES_OK[@]}]}
FILE="logs/access.log"
fi
case "$FORMAT" in
apache)
LOG="$IP - - [$DATE] \"$METHOD $PATH HTTP/1.1\" $CODE $SIZE \"$AGENT\""
;;
json)
LOG="{\"ip\":\"$IP\",\"timestamp\":\"$ISO_DATE\",\"method\":\"$METHOD\",\"path\":\"$PATH\",\"code\":$CODE,\"size\":$SIZE,\"agent\":\"$AGENT\"}"
;;
ltsv)
LOG="host:$IP time:$ISO_DATE method:$METHOD path:$PATH status:$CODE size:$SIZE agent:$AGENT"
;;
custom)
LOG="[$ISO_DATE] $IP | $METHOD $PATH => $CODE ($SIZE bytes)"
;;
*)
echo "Format inconnu : $FORMAT" >&2
exit 1
;;
esac
echo "$LOG" >> "$FILE"
echo "$LOG"
}
if [[ "$MODE" == "--loop" ]]; then
while true; do
generate_log
sleep 0.5
done
else
for ((i=0; i<LINES; i++)); do
generate_log
done
fi