mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-02-18 23:41:48 +01:00
- Improve hot-dev script - Add sync-production-config script - Update toggle-mock script - Update mock environment
235 lines
6.7 KiB
Bash
Executable File
235 lines
6.7 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
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
MOCK_ENV_FILE="${ROOT_DIR}/mock.env"
|
|
BACKEND_PORT=7656
|
|
DEV_DATA_DIR="${ROOT_DIR}/tmp/dev-config"
|
|
DEV_KEY_FILE="${DEV_DATA_DIR}/.encryption.key"
|
|
|
|
# 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_DOCKER_HOSTS=3
|
|
PULSE_MOCK_DOCKER_CONTAINERS=12
|
|
PULSE_MOCK_RANDOM_METRICS=true
|
|
PULSE_MOCK_STOPPED_PERCENT=20
|
|
EOF
|
|
fi
|
|
|
|
restart_backend() {
|
|
echo -e "${YELLOW}Restarting backend...${NC}"
|
|
|
|
# Check if running under systemd
|
|
if systemctl is-active --quiet pulse-hot-dev; then
|
|
echo "Detected systemd hot-dev service, restarting it..."
|
|
sudo systemctl restart pulse-hot-dev
|
|
sleep 3
|
|
if systemctl is-active --quiet pulse-hot-dev; then
|
|
echo -e "${GREEN}✓ Hot-dev service restarted successfully${NC}"
|
|
return 0
|
|
else
|
|
echo -e "${RED}✗ Hot-dev service failed to start. Check: sudo journalctl -u pulse-hot-dev -n 50${NC}"
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
# Fallback: manual restart (for standalone hot-dev.sh)
|
|
# 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
|
|
|
|
# Set data directory based on mock mode
|
|
if [ "$PULSE_MOCK_MODE" = "true" ]; then
|
|
export PULSE_DATA_DIR=/opt/pulse/tmp/mock-data
|
|
else
|
|
mkdir -p "$DEV_DATA_DIR"
|
|
export PULSE_DATA_DIR="$DEV_DATA_DIR"
|
|
if [ ! -f "$DEV_KEY_FILE" ]; then
|
|
openssl rand -hex 32 > "$DEV_KEY_FILE"
|
|
chmod 600 "$DEV_KEY_FILE"
|
|
fi
|
|
if [ -z "${PULSE_ENCRYPTION_KEY:-}" ]; then
|
|
export PULSE_ENCRYPTION_KEY="$(<"$DEV_KEY_FILE")"
|
|
fi
|
|
fi
|
|
|
|
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:-0}"
|
|
echo " VMs per node: ${PULSE_MOCK_VMS_PER_NODE:-0}"
|
|
echo " LXCs per node: ${PULSE_MOCK_LXCS_PER_NODE:-0}"
|
|
echo " Host agents: ${PULSE_MOCK_GENERIC_HOSTS:-0}"
|
|
echo " Docker hosts: ${PULSE_MOCK_DOCKER_HOSTS:-0}"
|
|
echo " Docker containers/host: ${PULSE_MOCK_DOCKER_CONTAINERS:-0}"
|
|
echo " Data dir: ${PULSE_DATA_DIR:-/opt/pulse/tmp/mock-data}"
|
|
else
|
|
echo -e "${BLUE}Mock Mode: DISABLED${NC}"
|
|
echo " Data dir: ${DEV_DATA_DIR}"
|
|
fi
|
|
}
|
|
|
|
enable_mock() {
|
|
echo -e "${YELLOW}Enabling mock mode...${NC}"
|
|
|
|
# Ensure mock data directory exists
|
|
source "$MOCK_ENV_FILE"
|
|
MOCK_DATA_DIR=$(grep PULSE_DATA_DIR "$MOCK_ENV_FILE" | cut -d= -f2)
|
|
if [ -n "$MOCK_DATA_DIR" ] && [ "$MOCK_DATA_DIR" != "/etc/pulse" ]; then
|
|
mkdir -p "$MOCK_DATA_DIR"
|
|
echo "Created mock data directory: $MOCK_DATA_DIR"
|
|
fi
|
|
|
|
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 local dev configuration"
|
|
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"
|
|
}
|
|
|
|
sync_config() {
|
|
echo -e "${YELLOW}Syncing production configuration to dev...${NC}"
|
|
|
|
if [ -f "$ROOT_DIR/scripts/sync-production-config.sh" ]; then
|
|
"$ROOT_DIR/scripts/sync-production-config.sh"
|
|
echo ""
|
|
echo -e "${GREEN}✓ Configuration synced!${NC}"
|
|
|
|
# Only restart if backend is currently running
|
|
if pgrep -x pulse > /dev/null; then
|
|
echo ""
|
|
restart_backend
|
|
else
|
|
echo "Backend not running. Start hot-dev to use the updated config."
|
|
fi
|
|
else
|
|
echo -e "${RED}✗ Sync script not found${NC}"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
case "$1" in
|
|
on)
|
|
enable_mock
|
|
;;
|
|
off)
|
|
disable_mock
|
|
;;
|
|
status)
|
|
show_status
|
|
;;
|
|
edit)
|
|
edit_config
|
|
;;
|
|
sync)
|
|
sync_config
|
|
;;
|
|
*)
|
|
echo "Mock Data Mode Control for Pulse"
|
|
echo ""
|
|
echo "Usage: $0 {on|off|status|edit|sync}"
|
|
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 " sync - Sync production config to dev (use after adding nodes)"
|
|
echo ""
|
|
echo "After changing modes, restart hot-dev:"
|
|
echo " Ctrl+C in hot-dev terminal"
|
|
echo " ./scripts/hot-dev.sh"
|
|
echo ""
|
|
show_status
|
|
;;
|
|
esac
|