diff --git a/panelctl.sh b/panelctl.sh index 9b5c0bd..df40cb7 100644 --- a/panelctl.sh +++ b/panelctl.sh @@ -58,6 +58,12 @@ fail() { exit 1 } +log() { + local level="${1:-info}" + local msg="${2:-}" + echo "${msg}" | systemd-cat -t panelctl -p "${level}" 2>/dev/null || true +} + ensure_base_dirs() { mkdir -p "${STACKS_DIR}" "${VOLUMES_DIR}" "${ROUTES_DIR}" "${APPS_DIR}" "${BACKUPS_DIR}" } @@ -275,7 +281,7 @@ cmd_init() { write_manifest "${name}" "${domains}" "${port}" "${auth}" cmd_render_route "${name}" - echo "initialized app '${name}'" + log info "initialized app '${name}'" } cmd_render_route() { @@ -326,13 +332,13 @@ cmd_render_route() { } >>"${tmp}" install -m 0664 -o reudy -g panelroutes "${tmp}" "${route_file}" - echo "rendered route ${route_file}" + log info "rendered route ${route_file}" } maybe_reload_caddy() { # Try Caddy admin API first (no root required) if curl -sf -X POST http://localhost:2019/config/ >/dev/null 2>&1; then - echo "reloaded caddy via admin API" + log info "reloaded caddy via admin API" return fi @@ -345,52 +351,32 @@ maybe_reload_caddy() { # Fall back to systemctl (sudo if needed) if [[ "${EUID}" -eq 0 ]]; then - systemctl reload caddy && echo "reloaded caddy" + systemctl reload caddy && log info "reloaded caddy" elif sudo -n /run/current-system/sw/bin/systemctl reload caddy 2>/dev/null; then - echo "reloaded caddy via sudo" + log info "reloaded caddy via sudo" else - echo "caddy reload requires root; run: sudo systemctl reload caddy" + log warning "caddy reload requires root; run: sudo systemctl reload caddy" fi } -# maybe_reload_caddy() { -# if [[ -x /run/current-system/sw/bin/caddy && -f /etc/caddy/Caddyfile ]]; then -# /run/current-system/sw/bin/caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile || echo "warning: caddy validation failed" >&2 -# fi - -# if [[ "${EUID}" -eq 0 ]]; then -# systemctl reload caddy -# echo "reloaded caddy" -# return -# fi - -# if command -v sudo >/dev/null 2>&1 && sudo -n true >/dev/null 2>&1; then -# sudo -n /run/current-system/sw/bin/systemctl reload caddy -# echo "reloaded caddy via sudo" -# return -# fi - -# echo "caddy reload requires root; run: sudo systemctl reload caddy" -# } - cmd_deploy() { local name="$1" validate_name "${name}" load_app "${name}" - echo "Starting deployment for app '${name}'" | systemd-cat -t panelctl -p info 2>/dev/null || true + log info "Starting deployment for app '${name}'" cmd_render_route "${name}" if ! run_compose -f "${APP_COMPOSE_FILE}" up -d 2>&1 | systemd-cat -t panelctl -p info 2>/dev/null; then - echo "Deployment failed for app '${name}'" | systemd-cat -t panelctl -p err 2>/dev/null || true + log err "Deployment failed for app '${name}'" fail "compose up failed" fi maybe_reload_caddy - echo "Successfully deployed app '${name}'" | systemd-cat -t panelctl -p info 2>/dev/null || true - echo "deployed app '${name}'" + log info "Successfully deployed app '${name}'" + log info "deployed app '${name}'" } cmd_restart() { @@ -398,7 +384,7 @@ cmd_restart() { validate_name "${name}" load_app "${name}" - echo "Restarting app '${name}'" | systemd-cat -t panelctl -p info 2>/dev/null || true + log info "Restarting app '${name}'" run_compose -f "${APP_COMPOSE_FILE}" down || fail "compose down failed" @@ -406,7 +392,7 @@ cmd_restart() { fail "compose up failed during restart" fi - echo "restarted app '${name}'" + log info "restarted app '${name}'" } cmd_stop() { @@ -415,7 +401,7 @@ cmd_stop() { load_app "${name}" run_compose -f "${APP_COMPOSE_FILE}" down || fail "compose down failed" - echo "stopped app '${name}'" + log info "stopped app '${name}'" } cmd_status() { @@ -425,7 +411,7 @@ cmd_status() { run_compose -f "${APP_COMPOSE_FILE}" ps --format json 2>/dev/null || \ run_compose -f "${APP_COMPOSE_FILE}" ps 2>/dev/null || \ - echo "no containers running" + log info "no containers running" } cmd_logs() { @@ -447,7 +433,7 @@ cmd_logs() { esac done - run_compose -f "${APP_COMPOSE_FILE}" logs --tail "${tail_lines}" 2>&1 || echo "no logs available" + run_compose -f "${APP_COMPOSE_FILE}" logs --tail "${tail_lines}" 2>&1 || log info "no logs available" } cmd_validate_compose() { @@ -456,7 +442,7 @@ cmd_validate_compose() { load_app "${name}" if run_compose -f "${APP_COMPOSE_FILE}" config >/dev/null 2>&1; then - echo "compose file is valid" + log info "compose file is valid" else local output output="$(run_compose -f "${APP_COMPOSE_FILE}" config 2>&1 || true)" @@ -490,7 +476,7 @@ cmd_remove() { fi maybe_reload_caddy - echo "removed app '${name}'" + log info "removed app '${name}'" } cmd_backup() { @@ -512,7 +498,7 @@ cmd_backup() { local was_running=false if run_compose -f "${APP_COMPOSE_FILE}" ps --format json 2>/dev/null | grep -q '"running"' 2>/dev/null; then was_running=true - echo "stopping containers for consistent backup..." + log info "stopping containers for consistent backup..." run_compose -f "${APP_COMPOSE_FILE}" down 2>/dev/null || true fi @@ -527,13 +513,13 @@ cmd_backup() { # Restart if it was running if [[ "${was_running}" == "true" ]]; then - echo "restarting containers after backup..." + log info "restarting containers after backup..." run_compose -f "${APP_COMPOSE_FILE}" up -d 2>/dev/null || true fi local size size="$(du -h "${backup_file}" | cut -f1)" - echo "backup created: ${backup_file} (${size})" + log info "backup created: ${backup_file} (${size})" } cmd_list_backups() { @@ -554,7 +540,7 @@ cmd_list_backups() { done if [[ "${found}" -eq 0 ]]; then - echo "no backups found for '${name}'" + log info "no backups found for '${name}'" fi } @@ -582,7 +568,7 @@ cmd_restore() { volume_dir="$(app_volume_dir "${name}")" # Stop containers before restore - echo "stopping containers for restore..." + log info "stopping containers for restore..." run_compose -f "${APP_COMPOSE_FILE}" down 2>/dev/null || true # Clear existing volume data and extract backup @@ -590,8 +576,8 @@ cmd_restore() { mkdir -p "${volume_dir}" (cd "${volume_dir}" && unzip -o "${norm_path}") || fail "unzip failed" - echo "restored '${name}' from $(basename "${norm_path}")" - echo "run 'panelctl deploy ${name}' to start the app" + log info "restored '${name}' from $(basename "${norm_path}")" + log info "run 'panelctl deploy ${name}' to start the app'" } cmd_list() { @@ -607,7 +593,7 @@ cmd_list() { done if [[ "${found}" -eq 0 ]]; then - echo "no apps found" + log info "no apps found" fi }