Última actividad 1 month ago

nuno revisó este gist 1 month ago. Ir a la revisión

1 file changed, 365 insertions

gistfile1.txt(archivo creado)

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