summaryrefslogtreecommitdiff
path: root/scripts/testing/lib/logging.sh
blob: eda9eb123b983a4aa58b53ea7c1c09bf17add39b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/bin/bash
# Logging utilities for archsetup testing
# Author: Craig Jennings <craigmartinjennings@gmail.com>
# License: GNU GPLv3

# Global log file (set by calling script)
LOGFILE="${LOGFILE:-/tmp/archsetup-test.log}"

# Initialize logging
init_logging() {
    local logfile="$1"
    LOGFILE="$logfile"

    # Create log directory if it doesn't exist
    mkdir -p "$(dirname "$LOGFILE")"

    # Initialize log file
    echo "=== Test Log Started: $(date +'%Y-%m-%d %H:%M:%S') ===" > "$LOGFILE"
    echo "" >> "$LOGFILE"
}

# Log message (to file and optionally stdout)
log() {
    local message="$1"
    local timestamp
    timestamp=$(date +'%Y-%m-%d %H:%M:%S')
    echo "[$timestamp] $message" >> "$LOGFILE"
}

# Info message
info() {
    local message="$1"
    echo "[i] $message"
    log "INFO: $message"
}

# Success message
success() {
    local message="$1"
    echo "[✓] $message"
    log "SUCCESS: $message"
}

# Warning message
warn() {
    local message="$1"
    echo "[!] $message"
    log "WARNING: $message"
}

# Error message
error() {
    local message="$1"
    echo "[✗] $message" >&2
    log "ERROR: $message"
}

# Fatal error (exits script)
fatal() {
    local message="$1"
    local exit_code="${2:-1}"
    echo "[✗] FATAL: $message" >&2
    log "FATAL: $message (exit code: $exit_code)"
    exit "$exit_code"
}

# Section header
section() {
    local title="$1"
    echo ""
    echo "=== $title ==="
    log "=== $title ==="
}

# Step message
step() {
    local message="$1"
    echo "  -> $message"
    log "  STEP: $message"
}

# Progress indicator (for long-running operations)
progress() {
    local message="$1"
    echo "  ... $message"
    log "  PROGRESS: $message"
}

# Clear progress line and show completion
complete() {
    local message="$1"
    echo "  [✓] $message"
    log "  COMPLETE: $message"
}

# Show command being executed (useful for debugging)
show_cmd() {
    local cmd="$1"
    echo "$ $cmd"
    log "CMD: $cmd"
}

# Separator line
separator() {
    echo "----------------------------------------"
}

# Summary statistics
summary() {
    local passed="$1"
    local failed="$2"
    local total=$((passed + failed))

    echo ""
    separator
    section "Test Summary"
    echo "  Total:  $total"
    echo "  Passed: $passed"
    echo "  Failed: $failed"
    separator
    echo ""

    log "=== Test Summary ==="
    log "Total: $total, Passed: $passed, Failed: $failed"
}

# Timer utilities
declare -A TIMERS

start_timer() {
    local name="${1:-default}"
    TIMERS[$name]=$(date +%s)
    log "TIMER START: $name"
}

stop_timer() {
    local name="${1:-default}"
    local start=${TIMERS[$name]}
    local end=$(date +%s)
    local duration=$((end - start))
    local mins=$((duration / 60))
    local secs=$((duration % 60))

    if [ $mins -gt 0 ]; then
        echo "  Time: ${mins}m ${secs}s"
        log "TIMER STOP: $name (${mins}m ${secs}s)"
    else
        echo "  Time: ${secs}s"
        log "TIMER STOP: $name (${secs}s)"
    fi
}