Skip to content

Improve package tracking scripts with error handling and logging #120

@Githubguy132010

Description

@Githubguy132010

Description

The current package tracking script in scripts/package_tracking/track_package_updates.sh could benefit from improved error handling, logging capabilities, and configurable update channels to make it more robust and flexible.

Proposed Improvements

1. Add Error Handling

Enhance the script with proper error handling to gracefully handle network issues, repository access problems, and other potential failures:

# Example error handling improvements
set -e  # Exit on error

check_command() {
  if ! command -v $1 &> /dev/null; then
    echo "Error: $1 is required but not installed." >&2
    exit 1
  fi
}

check_connection() {
  if ! ping -c 1 archlinux.org &> /dev/null; then
    echo "Error: Cannot connect to Arch Linux servers. Check your internet connection." >&2
    return 1
  fi
  return 0
}

# Add required commands check
check_command curl
check_command jq

# Add connection check before package operations
if ! check_connection; then
  echo "Network error: Package tracking aborted." >&2
  exit 1
fi

2. Implement Logging

Add proper logging capabilities to make tracking and debugging easier:

# Logging functionality
LOG_FILE="/var/log/package_tracking.log"
LOG_LEVEL="INFO"  # Options: DEBUG, INFO, WARNING, ERROR

log() {
  local level=$1
  local message=$2
  local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
  
  # Only log if level is appropriate
  case $LOG_LEVEL in
    DEBUG)
      ;;
    INFO)
      if [ "$level" = "DEBUG" ]; then return; fi
      ;;
    WARNING)
      if [ "$level" = "DEBUG" ] || [ "$level" = "INFO" ]; then return; fi
      ;;
    ERROR)
      if [ "$level" != "ERROR" ]; then return; fi
      ;;
  esac
  
  echo "[$timestamp] $level: $message" | tee -a $LOG_FILE
}

# Example usage
log "INFO" "Package tracking started"
log "DEBUG" "Checking repository: core"
# ...
log "WARNING" "Package xyz has an update but conflicts were detected"
log "ERROR" "Failed to retrieve package information"

3. Configurable Update Channels

Allow users to configure which repositories and update channels they want to track:

# Configuration file
CONFIG_FILE="/etc/package_tracking/config.conf"

# Default values
REPOS="core extra community multilib"
CHECK_INTERVAL=86400  # 24 hours in seconds
NOTIFY="true"

# Load configuration if exists
if [ -f "$CONFIG_FILE" ]; then
  source "$CONFIG_FILE"
  log "INFO" "Configuration loaded from $CONFIG_FILE"
else
  log "WARNING" "Configuration file not found, using defaults"
fi

# Example usage
for repo in $REPOS; do
  log "INFO" "Checking repository: $repo"
  # Check packages in this repository
  # ...
done

Expected Behavior

  • The script should handle errors gracefully without crashing
  • Logging should provide clear information about operations and issues
  • Users should be able to configure which repositories to track

Priority

Medium

Labels

  • enhancement
  • scripts
  • reliability

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions