mirror of
https://github.com/9technologygroup/patchmon.net.git
synced 2025-10-23 16:13:57 +00:00
112 lines
3.4 KiB
Bash
Executable File
112 lines
3.4 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Enable strict error handling
|
|
set -e
|
|
|
|
# Function to log messages with timestamp
|
|
log() {
|
|
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*" >&2
|
|
}
|
|
|
|
# Function to extract version from agent script
|
|
get_agent_version() {
|
|
local file="$1"
|
|
if [ -f "$file" ]; then
|
|
grep -m 1 '^AGENT_VERSION=' "$file" | cut -d'"' -f2 2>/dev/null || echo "0.0.0"
|
|
else
|
|
echo "0.0.0"
|
|
fi
|
|
}
|
|
|
|
# Function to compare versions (returns 0 if $1 > $2)
|
|
version_greater() {
|
|
# Use sort -V for version comparison
|
|
test "$(printf '%s\n' "$1" "$2" | sort -V | tail -n1)" = "$1" && test "$1" != "$2"
|
|
}
|
|
|
|
# Check and update agent files if necessary
|
|
update_agents() {
|
|
local backup_agent="/app/agents_backup/patchmon-agent.sh"
|
|
local current_agent="/app/agents/patchmon-agent.sh"
|
|
|
|
# Check if agents directory exists
|
|
if [ ! -d "/app/agents" ]; then
|
|
log "ERROR: /app/agents directory not found"
|
|
return 1
|
|
fi
|
|
|
|
# Check if backup exists
|
|
if [ ! -d "/app/agents_backup" ]; then
|
|
log "WARNING: agents_backup directory not found, skipping agent update"
|
|
return 0
|
|
fi
|
|
|
|
# Get versions
|
|
local backup_version=$(get_agent_version "$backup_agent")
|
|
local current_version=$(get_agent_version "$current_agent")
|
|
|
|
log "Agent version check:"
|
|
log " Image version: ${backup_version}"
|
|
log " Volume version: ${current_version}"
|
|
|
|
# Determine if update is needed
|
|
local needs_update=0
|
|
|
|
# Case 1: No agents in volume (first time setup)
|
|
if [ -z "$(find /app/agents -maxdepth 1 -type f -name '*.sh' 2>/dev/null | head -n 1)" ]; then
|
|
log "Agents directory is empty - performing initial copy"
|
|
needs_update=1
|
|
# Case 2: Backup version is newer
|
|
elif version_greater "$backup_version" "$current_version"; then
|
|
log "Newer agent version available (${backup_version} > ${current_version})"
|
|
needs_update=1
|
|
else
|
|
log "Agents are up to date"
|
|
needs_update=0
|
|
fi
|
|
|
|
# Perform update if needed
|
|
if [ $needs_update -eq 1 ]; then
|
|
log "Updating agents to version ${backup_version}..."
|
|
|
|
# Create backup of existing agents if they exist
|
|
if [ -f "$current_agent" ]; then
|
|
local backup_timestamp=$(date +%Y%m%d_%H%M%S)
|
|
local backup_name="/app/agents/patchmon-agent.sh.backup.${backup_timestamp}"
|
|
cp "$current_agent" "$backup_name" 2>/dev/null || true
|
|
log "Previous agent backed up to: $(basename $backup_name)"
|
|
fi
|
|
|
|
# Copy new agents
|
|
cp -r /app/agents_backup/* /app/agents/
|
|
|
|
# Make agent binaries executable
|
|
chmod +x /app/agents/patchmon-agent-linux-* 2>/dev/null || true
|
|
|
|
# Verify update
|
|
local new_version=$(get_agent_version "$current_agent")
|
|
if [ "$new_version" = "$backup_version" ]; then
|
|
log "✅ Agents successfully updated to version ${new_version}"
|
|
else
|
|
log "⚠️ Warning: Agent update may have failed (expected: ${backup_version}, got: ${new_version})"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Main execution
|
|
log "PatchMon Backend Container Starting..."
|
|
log "Environment: ${NODE_ENV:-production}"
|
|
|
|
# Update agents (version-aware)
|
|
update_agents
|
|
|
|
log "Running database migrations..."
|
|
npx prisma migrate deploy
|
|
|
|
log "Starting application..."
|
|
if [ "${NODE_ENV}" = "development" ]; then
|
|
exec npm run dev
|
|
else
|
|
exec npm start
|
|
fi
|