#!/bin/bash # Toggle script for mock mode # Automatically restarts backend to apply changes RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color MOCK_ENV_FILE="/opt/pulse/mock.env" ROOT_DIR="/opt/pulse" BACKEND_PORT=7656 # Create default mock.env if it doesn't exist if [ ! -f "$MOCK_ENV_FILE" ]; then cat > "$MOCK_ENV_FILE" << 'EOF' # Mock Mode Configuration PULSE_MOCK_MODE=false PULSE_MOCK_NODES=7 PULSE_MOCK_VMS_PER_NODE=5 PULSE_MOCK_LXCS_PER_NODE=8 PULSE_MOCK_RANDOM_METRICS=true PULSE_MOCK_STOPPED_PERCENT=20 EOF fi restart_backend() { echo -e "${YELLOW}Restarting backend...${NC}" # Kill existing pulse backend pkill -x pulse 2>/dev/null || true sleep 1 pkill -9 -x pulse 2>/dev/null || true # Build if needed (rebuild when any Go file is newer than the binary) build_needed=false if [ ! -f "$ROOT_DIR/pulse" ]; then build_needed=true else changed=$(find "$ROOT_DIR" \ \( -path "$ROOT_DIR/node_modules" -o -path "$ROOT_DIR/frontend-modern/node_modules" \) -prune \ -o -name '*.go' -newer "$ROOT_DIR/pulse" -print -quit) if [ -n "$changed" ]; then build_needed=true fi fi if [ "$build_needed" = true ]; then echo "Building backend..." cd "$ROOT_DIR" go build -o pulse ./cmd/pulse || { echo -e "${RED}Failed to build backend${NC}" return 1 } fi # Start backend with proper environment cd "$ROOT_DIR" # Load and export all mock env vars set -a source "$MOCK_ENV_FILE" set +a export PULSE_DATA_DIR=/etc/pulse export PORT=$BACKEND_PORT nohup ./pulse > /tmp/pulse-backend.log 2>&1 & sleep 2 # Check if it started if pgrep -x pulse > /dev/null; then echo -e "${GREEN}✓ Backend restarted successfully${NC}" return 0 else echo -e "${RED}✗ Backend failed to start. Check /tmp/pulse-backend.log${NC}" return 1 fi } show_status() { source "$MOCK_ENV_FILE" if [ "$PULSE_MOCK_MODE" = "true" ]; then echo -e "${GREEN}Mock Mode: ENABLED${NC}" echo " Nodes: $PULSE_MOCK_NODES" echo " VMs per node: $PULSE_MOCK_VMS_PER_NODE" echo " LXCs per node: $PULSE_MOCK_LXCS_PER_NODE" else echo -e "${BLUE}Mock Mode: DISABLED${NC} (using real Proxmox nodes)" fi } enable_mock() { echo -e "${YELLOW}Enabling mock mode...${NC}" sed -i 's/PULSE_MOCK_MODE=.*/PULSE_MOCK_MODE=true/' "$MOCK_ENV_FILE" touch "$MOCK_ENV_FILE" echo -e "${GREEN}✓ Mock mode enabled!${NC}" echo "" restart_backend } disable_mock() { echo -e "${YELLOW}Disabling mock mode...${NC}" # Sync production config before switching back if [ -f "$ROOT_DIR/scripts/sync-production-config.sh" ]; then echo "Syncing production configuration..." "$ROOT_DIR/scripts/sync-production-config.sh" echo "" fi sed -i 's/PULSE_MOCK_MODE=.*/PULSE_MOCK_MODE=false/' "$MOCK_ENV_FILE" touch "$MOCK_ENV_FILE" echo -e "${GREEN}✓ Mock mode disabled!${NC}" echo "Using real Proxmox nodes" echo "" restart_backend } edit_config() { echo -e "${YELLOW}Opening mock configuration for editing...${NC}" ${EDITOR:-nano} "$MOCK_ENV_FILE" touch "$MOCK_ENV_FILE" echo "" echo -e "${GREEN}Configuration updated!${NC}" echo "Run '$0 on' or '$0 off' to apply changes" } case "$1" in on) enable_mock ;; off) disable_mock ;; status) show_status ;; edit) edit_config ;; *) echo "Mock Data Mode Control for Pulse" echo "" echo "Usage: $0 {on|off|status|edit}" echo "" echo " on - Enable mock data mode" echo " off - Disable mock mode, use real nodes" echo " status - Show current mock mode status" echo " edit - Edit mock configuration" echo "" echo "After changing modes, restart hot-dev:" echo " Ctrl+C in hot-dev terminal" echo " ./scripts/hot-dev.sh" echo "" show_status ;; esac