Pulse/scripts/toggle-mock.sh
2025-10-02 12:08:19 +00:00

161 lines
4.1 KiB
Bash
Executable file

#!/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