- Add admin dashboard with sync controls and data browser - Implement RMM, Auvik, and Addigy organization mappings - Add chunked ticket sync with progress tracking - Implement entity sync service with rate limiting - Add analytics engine and performance optimizer - Create data browser for all PSA entities - Add navigation components and UI improvements - Implement background processing and sync services - Add comprehensive documentation and migration scripts - Update configuration items with multi-system support - Enhance contact management and purchase history - Add issue type assignment and LLM analyzer - Improve error handling and logging utilities
102 lines
3.2 KiB
Bash
Executable file
102 lines
3.2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Script to apply database migrations for Pulse application
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${GREEN}=== Pulse Database Migration Tool ===${NC}"
|
|
echo ""
|
|
|
|
# Check if we're using Docker
|
|
if docker ps | grep -q pulse-postgres; then
|
|
echo -e "${YELLOW}Using Docker PostgreSQL container${NC}"
|
|
DOCKER_MODE=true
|
|
DB_USER="${POSTGRES_USER:-pulse_user}"
|
|
DB_NAME="${POSTGRES_DB:-pulse_autotask}"
|
|
else
|
|
echo -e "${YELLOW}Running in local environment${NC}"
|
|
DOCKER_MODE=false
|
|
# Check if psql is available
|
|
if ! command -v psql &> /dev/null; then
|
|
echo -e "${RED}Error: psql command not found${NC}"
|
|
echo -e "${YELLOW}Hint: If using Docker, make sure pulse-postgres container is running${NC}"
|
|
exit 1
|
|
fi
|
|
DB_CONNECTION="psql -h ${POSTGRES_HOST:-localhost} -p ${POSTGRES_PORT:-5432} -U ${POSTGRES_USER:-postgres} -d ${POSTGRES_DB:-pulse}"
|
|
fi
|
|
|
|
# Get the migrations directory
|
|
MIGRATIONS_DIR="/opt/stacks/pulse/migrations"
|
|
|
|
# Check if migrations directory exists
|
|
if [ ! -d "$MIGRATIONS_DIR" ]; then
|
|
echo -e "${RED}Error: Migrations directory not found at $MIGRATIONS_DIR${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# List available migrations
|
|
echo -e "${GREEN}Available migrations:${NC}"
|
|
ls -la $MIGRATIONS_DIR/*.sql | awk '{print $9}' | xargs -I {} basename {}
|
|
|
|
echo ""
|
|
|
|
# Check if a specific migration was requested
|
|
if [ ! -z "$1" ]; then
|
|
MIGRATION_FILE="$MIGRATIONS_DIR/$1"
|
|
if [ ! -f "$MIGRATION_FILE" ]; then
|
|
echo -e "${RED}Error: Migration file $1 not found${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${YELLOW}Applying single migration: $1${NC}"
|
|
|
|
if [ "$DOCKER_MODE" = true ]; then
|
|
docker exec -i pulse-postgres psql -U "$DB_USER" -d "$DB_NAME" < "$MIGRATION_FILE"
|
|
else
|
|
$DB_CONNECTION -f "$MIGRATION_FILE"
|
|
fi
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✓ Migration $1 applied successfully${NC}"
|
|
else
|
|
echo -e "${RED}✗ Failed to apply migration $1${NC}"
|
|
exit 1
|
|
fi
|
|
else
|
|
# Apply all migrations in order
|
|
echo -e "${YELLOW}Apply all migrations? (y/n)${NC}"
|
|
read -r response
|
|
|
|
if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
for migration in $MIGRATIONS_DIR/*.sql; do
|
|
filename=$(basename "$migration")
|
|
echo -e "${YELLOW}Applying: $filename${NC}"
|
|
|
|
if [ "$DOCKER_MODE" = true ]; then
|
|
docker exec -i pulse-postgres psql -U "$DB_USER" -d "$DB_NAME" < "$migration"
|
|
else
|
|
$DB_CONNECTION -f "$migration"
|
|
fi
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo -e "${GREEN}✓ $filename applied${NC}"
|
|
else
|
|
echo -e "${RED}✗ Failed to apply $filename${NC}"
|
|
echo -e "${YELLOW}Continue with remaining migrations? (y/n)${NC}"
|
|
read -r continue_response
|
|
if [[ ! "$continue_response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
|
|
exit 1
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo -e "${GREEN}=== Migration process complete ===${NC}"
|
|
else
|
|
echo "Migration cancelled"
|
|
fi
|
|
fi
|