Son aktivite 3 weeks ago

Revizyon 80c9f662f4f44eba36c403022251bde4329d8d34

gistfile1.txt Ham
1#!/usr/bin/env bash
2
3# ============================================
4# Core
5# ============================================
6
7LOG_LEVEL=${LOG_LEVEL:-INFO}
8
9# ============================================
10# Internal
11# ============================================
12
13function internal::get_log_priority() {
14 case "$1" in
15 DEBUG) echo 0 ;;
16 INFO) echo 1 ;;
17 SUCCESS) echo 1 ;;
18 OK) echo 1 ;;
19 WARN) echo 2 ;;
20 ERROR) echo 3 ;;
21 *) echo 1 ;;
22 esac
23}
24
25function internal::log() {
26 local level="$1"
27 shift
28
29 # Quiet mode — suppress INFO and SUCCESS
30 if core::is_quiet; then
31 case "$level" in
32 INFO|SUCCESS) return 0 ;;
33 esac
34 fi
35
36 local current_priority
37 local message_priority
38 current_priority=$(internal::get_log_priority "$LOG_LEVEL")
39 message_priority=$(internal::get_log_priority "$level")
40
41 if (( message_priority < current_priority )); then
42 return 0
43 fi
44
45 local color
46 case "$level" in
47 DEBUG) color="\033[0;36m" ;;
48 INFO) color="\033[1;34m" ;;
49 WARN) color="\033[1;33m" ;;
50 ERROR) color="\033[1;31m" ;;
51 SUCCESS) color="\033[1;32m" ;;
52 OK) color="\033[1;32m" ;;
53 esac
54
55 echo -e "${color}=> ${level}:\033[0m $*"
56}
57
58function internal::icon() {
59 local context="$1"
60 local action="$2"
61
62 case "$context:$action" in
63 docker:log) echo "🐳 " ;;
64 docker:start) echo "🟢 🐳 " ;;
65 docker:stop) echo "🔴 🐳 " ;;
66 docker:success) echo "✅ 🐳 " ;;
67 docker:warning) echo "⚠️ 🐳 " ;;
68 docker:error) echo "❌ 🐳 " ;;
69 docker:logs) echo "📜 🐳 " ;;
70 docker:list) echo "🔍 🐳 " ;;
71 docker:build) echo "📦 🐳 " ;;
72
73 build:log) echo "🏗️ " ;;
74 build:start) echo "🟢 🏗️ " ;;
75 build:stop) echo "🔴 🏗️ " ;;
76 build:success) echo "✅ 🏗️ " ;;
77 build:warning) echo "⚠️ 🏗️ " ;;
78 build:error) echo "❌ 🏗️ " ;;
79
80 network:log) echo "🌐 " ;;
81 network:setup) echo "⚙️ 🌐 " ;;
82 network:stop) echo "🔴 🌐 " ;;
83 network:success) echo "✅ 🌐 " ;;
84 network:warning) echo "⚠️ 🌐 " ;;
85 network:error) echo "❌ 🌐 " ;;
86
87 auth:log) echo "🔑 " ;;
88 auth:setup) echo "⚙️ 🔑 " ;;
89 auth:login) echo "🔐 🔑 " ;;
90 auth:success) echo "✅ 🔑 " ;;
91 auth:warning) echo "⚠️ 🔑 " ;;
92 auth:error) echo "❌ 🔑 " ;;
93
94 env:log) echo "⚙️ " ;;
95 env:load) echo "📥 ⚙️ " ;;
96 env:success) echo "✅ ⚙️ " ;;
97 env:warning) echo "⚠️ ⚙️ " ;;
98 env:error) echo "❌ ⚙️ " ;;
99
100 fs:log) echo "📁 " ;;
101 fs:read) echo "📥 📁 " ;;
102 fs:write) echo "📤 📁 " ;;
103 fs:success) echo "✅ 📁 " ;;
104 fs:warning) echo "⚠️ 📁 " ;;
105 fs:error) echo "❌ 📁 " ;;
106
107 db:log) echo "🗄️ " ;;
108 db:start) echo "🟢 🗄️ " ;;
109 db:migrate) echo "📜 🗄️ " ;;
110 db:success) echo "✅ 🗄️ " ;;
111 db:warning) echo "⚠️ 🗄️ " ;;
112 db:error) echo "❌ 🗄️ " ;;
113
114 wg:log) echo "🔒 " ;;
115 wg:start) echo "🟢 🔒 " ;;
116 wg:stop) echo "🔴 🔒 " ;;
117 wg:add) echo "➕ 🔒 " ;;
118 wg:remove) echo "➖ 🔒 " ;;
119 wg:block) echo "🚫 🔒 " ;;
120 wg:unblock) echo "🔓 🔒 " ;;
121 wg:key) echo "🔑 🔒 " ;;
122 wg:success) echo "✅ 🔒 " ;;
123 wg:warning) echo "⚠️ 🔒 " ;;
124 wg:error) echo "❌ 🔒 " ;;
125 wg:list) echo "🔍 🔒 " ;;
126 wg:qr) echo "📱 🔒 " ;;
127 wg:preset) echo "📋 🔒 " ;;
128
129 log:info) echo "🔹 " ;;
130 log:warn) echo "⚠️ " ;;
131 log:error) echo "❌ " ;;
132 log:success) echo "✅ " ;;
133 log:debug) echo "🔍 " ;;
134
135 *) echo "🔹" ;;
136 esac
137}
138
139function internal::get_context_icon() {
140 case "$1" in
141 docker) echo "🐳" ;;
142 build) echo "🏗️" ;;
143 network) echo "🌐" ;;
144 auth) echo "🔑" ;;
145 env) echo "⚙️" ;;
146 fs) echo "📁" ;;
147 db) echo "🗄️" ;;
148 wg) echo "🔒" ;;
149 log) echo "🔹" ;;
150 *) echo "🔹" ;;
151 esac
152}
153
154# ============================================
155# Profiler
156# ============================================
157
158declare -gi _PROFILE_T0=0
159
160function log::profile_start() {
161 _PROFILE_T0=$(date +%s%3N)
162}
163
164function log::profile() {
165 [[ "${LOG_LEVEL:-2}" -gt 0 ]] && return 0
166 local label="${1:-checkpoint}"
167 local now
168 now=$(date +%s%3N)
169 printf " \033[2m[profile] %s: %dms\033[0m\n" \
170 "$label" "$(( now - _PROFILE_T0 ))" >&2
171 _PROFILE_T0=$now # reset for next checkpoint
172}
173
174# ============================================
175# Loggers
176# ============================================
177
178function internal::log::info() { internal::log INFO "$*"; }
179function internal::log::warn() { internal::log WARN "$*"; }
180function internal::log::error() { internal::log ERROR "$*"; }
181function internal::log::success() { internal::log OK "$*"; }
182function internal::log::debug() { internal::log DEBUG "$*"; }
183
184# ============================================
185# Context Loggers
186# ============================================
187
188function log::context() {
189 local context="$1" action="$2"
190 shift 2
191 internal::log::info "$(internal::icon "$context" "$action") $*"
192}
193
194function log::warn_context() {
195 local context="$1" action="$2"
196 shift 2
197 internal::log::warn "$(internal::icon "$context" "$action") $*"
198}
199
200function log::error_context() {
201 local context="$1" action="$2"
202 shift 2
203 internal::log::error "$(internal::icon "$context" "$action") $*"
204}
205
206function log::success_context() {
207 local context="$1" action="$2"
208 shift 2
209 internal::log::success "$(internal::icon "$context" "$action") $*"
210}
211
212function log::debug_context() {
213 local context="$1" action="$2"
214 shift 2
215 internal::log::debug "$(internal::icon "$context" "$action") $*"
216}
217
218# ============================================
219# Logger Helpers
220# ============================================
221
222function log::info() { log::context log info "$@"; }
223function log::warn() { log::warn_context log warn "$@"; }
224function log::error() { log::error_context log error "$@"; }
225function log::ok() { internal::log OK "$@"; }
226function log::success() { log::ok "$@"; }
227function log::debug() { log::debug_context log debug "$@"; }
228
229function log::section() {
230 core::is_quiet && return 0
231 local label="$1"
232 local width=48
233 local line
234 line=$(printf '─%.0s' $(seq 1 $width))
235 echo -e "\n\033[1;34m${line}\033[0m"
236 echo -e "\033[1;34m $label\033[0m"
237 echo -e "\033[1;34m${line}\033[0m"
238}
239
240# ============================================
241# Docker
242# ============================================
243
244function log::docker() { log::context docker log "$@"; }
245function log::docker_start() { log::context docker start "$@"; }
246function log::docker_stop() { log::context docker stop "$@"; }
247function log::docker_success() { log::success_context docker success "$@"; }
248function log::docker_logs() { log::context docker logs "$@"; }
249function log::docker_list() { log::context docker list "$@"; }
250function log::docker_build() { log::context docker build "$@"; }
251function log::docker_warning() { log::warn_context docker warning "$@"; }
252function log::docker_error() { log::error_context docker error "$@"; }
253
254# ============================================
255# Build
256# ============================================
257
258function log::build() { log::context build log "$@"; }
259function log::build_start() { log::context build start "$@"; }
260function log::build_stop() { log::context build stop "$@"; }
261function log::build_success() { log::success_context build success "$@"; }
262function log::build_warning() { log::warn_context build warning "$@"; }
263function log::build_error() { log::error_context build error "$@"; }
264
265# ============================================
266# Network
267# ============================================
268
269function log::network() { log::context network log "$@"; }
270function log::network_setup() { log::context network setup "$@"; }
271function log::network_stop() { log::context network stop "$@"; }
272function log::network_success() { log::success_context network success "$@"; }
273function log::network_warning() { log::warn_context network warning "$@"; }
274function log::network_error() { log::error_context network error "$@"; }
275
276# ============================================
277# Auth
278# ============================================
279
280function log::auth() { log::context auth log "$@"; }
281function log::auth_setup() { log::context auth setup "$@"; }
282function log::auth_login() { log::context auth login "$@"; }
283function log::auth_success() { log::success_context auth success "$@"; }
284function log::auth_warning() { log::warn_context auth warning "$@"; }
285function log::auth_error() { log::error_context auth error "$@"; }
286
287# ============================================
288# Env
289# ============================================
290
291function log::env() { log::context env log "$@"; }
292function log::env_load() { log::context env load "$@"; }
293function log::env_success() { log::success_context env success "$@"; }
294function log::env_warning() { log::warn_context env warning "$@"; }
295function log::env_error() { log::error_context env error "$@"; }
296
297# ============================================
298# Filesystem
299# ============================================
300
301function log::fs() { log::context fs log "$@"; }
302function log::fs_read() { log::context fs read "$@"; }
303function log::fs_write() { log::context fs write "$@"; }
304function log::fs_success() { log::success_context fs success "$@"; }
305function log::fs_warning() { log::warn_context fs warning "$@"; }
306function log::fs_error() { log::error_context fs error "$@"; }
307
308# ============================================
309# Database
310# ============================================
311
312function log::db() { log::context db log "$@"; }
313function log::db_start() { log::context db start "$@"; }
314function log::db_migrate() { log::context db migrate "$@"; }
315function log::db_success() { log::success_context db success "$@"; }
316function log::db_warning() { log::warn_context db warning "$@"; }
317function log::db_error() { log::error_context db error "$@"; }
318
319# ============================================
320# WireGuard
321# ============================================
322
323function log::wg() { log::context wg log "$@"; }
324function log::wg_start() { log::context wg start "$@"; }
325function log::wg_stop() { log::context wg stop "$@"; }
326function log::wg_add() { log::context wg add "$@"; }
327function log::wg_remove() { log::context wg remove "$@"; }
328function log::wg_key() { log::context wg key "$@"; }
329function log::wg_list() { log::context wg list "$@"; }
330function log::wg_qr() { log::context wg qr "$@"; }
331function log::wg_preset() { log::context wg preset "$@"; }
332function log::wg_success() { log::success_context wg success "$@"; }
333function log::wg_warning() { log::warn_context wg warning "$@"; }
334function log::wg_error() { log::error_context wg error "$@"; }
335
336function log::wg_block() {
337 log::context wg block "$@"
338}
339
340function log::wg_unblock() {
341 log::context wg unblock "$@"
342}
343
344# ============================================
345# Run Step
346# ============================================
347
348function log::run_step() {
349 local context="$1"
350 local mode="strict"
351 local description
352
353 shift
354
355 if [[ "$1" == "soft" || "$1" == "strict" || "$1" == "info" ]]; then
356 mode="$1"
357 shift
358 fi
359
360 description="$1"
361 shift
362
363 local icon
364 icon=$(internal::get_context_icon "$context")
365
366 if [[ "$mode" == "info" ]]; then
367 internal::log::info "$icon $description"
368 else
369 internal::log::info "🔄 $icon $description"
370 fi
371
372 "$@"
373 local status=$?
374
375 if [[ $status -eq 0 ]]; then
376 [[ "$mode" == "info" ]] && return 0
377 internal::log::success "✅ $icon $description"
378 return 0
379 fi
380
381 if [[ "$mode" == "soft" || "$mode" == "info" ]]; then
382 internal::log::warn "⚠️ $icon $description → skipped"
383 return 0
384 fi
385
386 internal::log::error "❌ $icon $description → failed"
387 return $status
388}