最終更新 1 month ago

修正履歴 18b9400a1955d073027b8f6820dc007d6096a370

gistfile1.txt Raw
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 WARN) echo 2 ;;
19 ERROR) echo 3 ;;
20 *) echo 1 ;;
21 esac
22}
23
24function 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
56function 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
137function 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
156function internal::log::info() { internal::log INFO "$*"; }
157function internal::log::warn() { internal::log WARN "$*"; }
158function internal::log::error() { internal::log ERROR "$*"; }
159function internal::log::success() { internal::log SUCCESS "$*"; }
160function internal::log::debug() { internal::log DEBUG "$*"; }
161
162# ============================================
163# Context Loggers
164# ============================================
165
166function log::context() {
167 local context="$1" action="$2"
168 shift 2
169 internal::log::info "$(internal::icon "$context" "$action") $*"
170}
171
172function log::warn_context() {
173 local context="$1" action="$2"
174 shift 2
175 internal::log::warn "$(internal::icon "$context" "$action") $*"
176}
177
178function log::error_context() {
179 local context="$1" action="$2"
180 shift 2
181 internal::log::error "$(internal::icon "$context" "$action") $*"
182}
183
184function log::success_context() {
185 local context="$1" action="$2"
186 shift 2
187 internal::log::success "$(internal::icon "$context" "$action") $*"
188}
189
190function 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
200function log::info() { log::context log info "$@"; }
201function log::warn() { log::warn_context log warn "$@"; }
202function log::error() { log::error_context log error "$@"; }
203function log::success() { log::success_context log success "$@"; }
204function log::debug() { log::debug_context log debug "$@"; }
205
206function 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
221function log::docker() { log::context docker log "$@"; }
222function log::docker_start() { log::context docker start "$@"; }
223function log::docker_stop() { log::context docker stop "$@"; }
224function log::docker_success() { log::success_context docker success "$@"; }
225function log::docker_logs() { log::context docker logs "$@"; }
226function log::docker_list() { log::context docker list "$@"; }
227function log::docker_build() { log::context docker build "$@"; }
228function log::docker_warning() { log::warn_context docker warning "$@"; }
229function log::docker_error() { log::error_context docker error "$@"; }
230
231# ============================================
232# Build
233# ============================================
234
235function log::build() { log::context build log "$@"; }
236function log::build_start() { log::context build start "$@"; }
237function log::build_stop() { log::context build stop "$@"; }
238function log::build_success() { log::success_context build success "$@"; }
239function log::build_warning() { log::warn_context build warning "$@"; }
240function log::build_error() { log::error_context build error "$@"; }
241
242# ============================================
243# Network
244# ============================================
245
246function log::network() { log::context network log "$@"; }
247function log::network_setup() { log::context network setup "$@"; }
248function log::network_stop() { log::context network stop "$@"; }
249function log::network_success() { log::success_context network success "$@"; }
250function log::network_warning() { log::warn_context network warning "$@"; }
251function log::network_error() { log::error_context network error "$@"; }
252
253# ============================================
254# Auth
255# ============================================
256
257function log::auth() { log::context auth log "$@"; }
258function log::auth_setup() { log::context auth setup "$@"; }
259function log::auth_login() { log::context auth login "$@"; }
260function log::auth_success() { log::success_context auth success "$@"; }
261function log::auth_warning() { log::warn_context auth warning "$@"; }
262function log::auth_error() { log::error_context auth error "$@"; }
263
264# ============================================
265# Env
266# ============================================
267
268function log::env() { log::context env log "$@"; }
269function log::env_load() { log::context env load "$@"; }
270function log::env_success() { log::success_context env success "$@"; }
271function log::env_warning() { log::warn_context env warning "$@"; }
272function log::env_error() { log::error_context env error "$@"; }
273
274# ============================================
275# Filesystem
276# ============================================
277
278function log::fs() { log::context fs log "$@"; }
279function log::fs_read() { log::context fs read "$@"; }
280function log::fs_write() { log::context fs write "$@"; }
281function log::fs_success() { log::success_context fs success "$@"; }
282function log::fs_warning() { log::warn_context fs warning "$@"; }
283function log::fs_error() { log::error_context fs error "$@"; }
284
285# ============================================
286# Database
287# ============================================
288
289function log::db() { log::context db log "$@"; }
290function log::db_start() { log::context db start "$@"; }
291function log::db_migrate() { log::context db migrate "$@"; }
292function log::db_success() { log::success_context db success "$@"; }
293function log::db_warning() { log::warn_context db warning "$@"; }
294function log::db_error() { log::error_context db error "$@"; }
295
296# ============================================
297# WireGuard
298# ============================================
299
300function log::wg() { log::context wg log "$@"; }
301function log::wg_start() { log::context wg start "$@"; }
302function log::wg_stop() { log::context wg stop "$@"; }
303function log::wg_add() { log::context wg add "$@"; }
304function log::wg_remove() { log::context wg remove "$@"; }
305function log::wg_key() { log::context wg key "$@"; }
306function log::wg_list() { log::context wg list "$@"; }
307function log::wg_qr() { log::context wg qr "$@"; }
308function log::wg_preset() { log::context wg preset "$@"; }
309function log::wg_success() { log::success_context wg success "$@"; }
310function log::wg_warning() { log::warn_context wg warning "$@"; }
311function log::wg_error() { log::error_context wg error "$@"; }
312
313function log::wg_block() {
314 log::context wg block "$@"
315}
316
317function log::wg_unblock() {
318 log::context wg unblock "$@"
319}
320
321# ============================================
322# Run Step
323# ============================================
324
325function 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}