33800 Docs

← Retour
#!/bin/bash # ═══════════════════════════════════════════════════════════════════════════ # REGISTRY.SH - Registre des services déployés # Maintient un fichier JSON avec l'état des déploiements # # Structure du registre: # { # "services": { # "mon-app": { # "target": "prod-portainer", # "strategy": "docker", # "last_deploy": "2026-01-20T23:45:00Z", # "commit": "abc1234", # "version": "1.0.0", # "domain": "mon-app.33800.nowhere84.com", # "port": 3000, # "status": "running" # } # } # } # ═══════════════════════════════════════════════════════════════════════════ # ─────────────────────────────────────────────────────────────────────────── # Configuration # ─────────────────────────────────────────────────────────────────────────── # Utiliser STOCK_BASE défini par smart-deploy.sh if [[ -z "${STOCK_BASE:-}" ]]; then if [[ -d "/stock_8to/33800-stack" ]]; then STOCK_BASE="/stock_8to/33800-stack" elif [[ -d "/mnt/stock_8to/33800-stack" ]]; then STOCK_BASE="/mnt/stock_8to/33800-stack" fi fi SERVICES_REGISTRY="${STOCK_BASE}/monitoring/services-registry.json" # ─────────────────────────────────────────────────────────────────────────── # Initialiser le registre si nécessaire # ─────────────────────────────────────────────────────────────────────────── init_registry() { if [[ ! -f "$SERVICES_REGISTRY" ]]; then echo '{"services": {}, "last_updated": null}' > "$SERVICES_REGISTRY" log_info "Registre des services initialisé: $SERVICES_REGISTRY" fi } # ─────────────────────────────────────────────────────────────────────────── # Mettre à jour un service dans le registre # ─────────────────────────────────────────────────────────────────────────── registry_update_service() { local service_name="$1" local target="$2" local strategy="$3" local commit="${4:-unknown}" local status="${5:-deployed}" init_registry local timestamp=$(date -u +"%Y-%m-%dT%H:%M:%SZ") local domain="${CFG_domain:-}" local port="${CFG_port:-}" local version="${CFG_version:-}" # Créer l'objet service local service_json=$(cat <<EOF { "target": "$target", "strategy": "$strategy", "last_deploy": "$timestamp", "commit": "$commit", "version": "$version", "domain": "$domain", "port": $([[ -n "$port" ]] && echo "$port" || echo "null"), "status": "$status", "branch": "${BRANCH:-main}", "env": "${DEPLOY_ENV:-prod}" } EOF ) # Mettre à jour le registre avec jq local tmp_file=$(mktemp) jq --arg name "$service_name" \ --argjson service "$service_json" \ --arg ts "$timestamp" \ '.services[$name] = $service | .last_updated = $ts' \ "$SERVICES_REGISTRY" > "$tmp_file" && mv "$tmp_file" "$SERVICES_REGISTRY" log_info "Registre mis à jour: $service_name ($status)" } # ─────────────────────────────────────────────────────────────────────────── # Marquer un service comme failed # ─────────────────────────────────────────────────────────────────────────── registry_mark_failed() { local service_name="$1" local error_message="${2:-Unknown error}" init_registry local timestamp=$(date -u +"%Y-%m-%dT%H:%M:%SZ") # Mettre à jour le status et ajouter l'erreur local tmp_file=$(mktemp) jq --arg name "$service_name" \ --arg ts "$timestamp" \ --arg error "$error_message" \ 'if .services[$name] then .services[$name].status = "failed" | .services[$name].last_error = $error | .services[$name].last_error_at = $ts else . end | .last_updated = $ts' \ "$SERVICES_REGISTRY" > "$tmp_file" && mv "$tmp_file" "$SERVICES_REGISTRY" log_info "Service marqué failed: $service_name" } # ─────────────────────────────────────────────────────────────────────────── # Obtenir les infos d'un service # ─────────────────────────────────────────────────────────────────────────── registry_get_service() { local service_name="$1" init_registry jq -r --arg name "$service_name" '.services[$name] // empty' "$SERVICES_REGISTRY" } # ─────────────────────────────────────────────────────────────────────────── # Lister tous les services # ─────────────────────────────────────────────────────────────────────────── registry_list_services() { init_registry echo "Services déployés:" jq -r '.services | to_entries[] | " \(.key): \(.value.status) (\(.value.target), \(.value.last_deploy))"' "$SERVICES_REGISTRY" } # ─────────────────────────────────────────────────────────────────────────── # Supprimer un service du registre # ─────────────────────────────────────────────────────────────────────────── registry_remove_service() { local service_name="$1" init_registry local tmp_file=$(mktemp) jq --arg name "$service_name" 'del(.services[$name])' \ "$SERVICES_REGISTRY" > "$tmp_file" && mv "$tmp_file" "$SERVICES_REGISTRY" log_info "Service supprimé du registre: $service_name" } # ─────────────────────────────────────────────────────────────────────────── # Exporter le registre pour le dashboard # ─────────────────────────────────────────────────────────────────────────── registry_export_for_dashboard() { init_registry # Retourne le JSON formaté pour le dashboard jq '{ services: [.services | to_entries[] | { name: .key, target: .value.target, strategy: .value.strategy, status: .value.status, domain: .value.domain, port: .value.port, last_deploy: .value.last_deploy, commit: .value.commit, env: .value.env }], last_updated: .last_updated }' "$SERVICES_REGISTRY" }