| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 | 
							- #!/bin/bash
 
- # MongoDB Log Rotation Script for Wekan Snap
 
- # This script handles log rotation for MongoDB logs in the Wekan snap environment
 
- set -e
 
- # Source settings if available, otherwise use defaults
 
- if [ -f "$SNAP/bin/wekan-read-settings" ]; then
 
-     source $SNAP/bin/wekan-read-settings
 
- else
 
-     # Default values when wekan-read-settings is not available
 
-     SNAP_COMMON="/var/snap/wekan/common"
 
-     SNAP_NAME="wekan"
 
- fi
 
- # Configuration
 
- MONGODB_LOG="${SNAP_COMMON}/mongodb.log"
 
- MAX_SIZE_MB=100
 
- KEEP_COPIES=10
 
- COMPRESS_LOGS=true
 
- # Logging functions
 
- log_message() {
 
-     local message="$1"
 
-     local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
 
-     echo "[$timestamp] $message"
 
- }
 
- log_error() {
 
-     local message="$1"
 
-     log_message "ERROR: $message"
 
- }
 
- log_success() {
 
-     local message="$1"
 
-     log_message "SUCCESS: $message"
 
- }
 
- log_warning() {
 
-     local message="$1"
 
-     log_message "WARNING: $message"
 
- }
 
- # Check if log file exists and is large enough to rotate
 
- check_rotation_needed() {
 
-     if [ ! -f "$MONGODB_LOG" ]; then
 
-         log_message "MongoDB log file not found: $MONGODB_LOG"
 
-         return 1
 
-     fi
 
-     
 
-     # Get log file size in MB
 
-     local log_size_mb=$(du -m "$MONGODB_LOG" | cut -f1)
 
-     
 
-     if [ "$log_size_mb" -lt "$MAX_SIZE_MB" ]; then
 
-         log_message "MongoDB log size (${log_size_mb}MB) is below rotation threshold (${MAX_SIZE_MB}MB)"
 
-         return 1
 
-     fi
 
-     
 
-     log_message "MongoDB log size (${log_size_mb}MB) exceeds rotation threshold (${MAX_SIZE_MB}MB)"
 
-     return 0
 
- }
 
- # Rotate MongoDB log file
 
- rotate_log() {
 
-     local mongodb_log="$1"
 
-     local max_size_mb="$2"
 
-     local keep_copies="$3"
 
-     local compress="$4"
 
-     
 
-     log_message "Starting MongoDB log rotation"
 
-     
 
-     # Create rotated log file with timestamp
 
-     local timestamp=$(date +%Y%m%d-%H%M%S)
 
-     local rotated_log="${mongodb_log}.${timestamp}"
 
-     
 
-     # Copy current log to rotated file
 
-     if cp "$mongodb_log" "$rotated_log"; then
 
-         log_message "Created rotated log file: $rotated_log"
 
-         
 
-         # Truncate original log file
 
-         if > "$mongodb_log"; then
 
-             log_message "Truncated original log file"
 
-         else
 
-             log_error "Failed to truncate original log file"
 
-             return 1
 
-         fi
 
-         
 
-         # Compress rotated log file if requested
 
-         if [ "$compress" = "true" ]; then
 
-             if gzip "$rotated_log"; then
 
-                 log_message "Compressed rotated log file: ${rotated_log}.gz"
 
-             else
 
-                 log_warning "Failed to compress rotated log file"
 
-             fi
 
-         fi
 
-         
 
-         # Clean up old rotated logs (keep only specified number)
 
-         local old_logs=$(ls -t "${mongodb_log}".* 2>/dev/null | tail -n +$((keep_copies + 1)))
 
-         if [ -n "$old_logs" ]; then
 
-             echo "$old_logs" | xargs rm -f
 
-             log_message "Cleaned up old rotated log files"
 
-         fi
 
-         
 
-         log_success "MongoDB log rotation completed successfully"
 
-         return 0
 
-     else
 
-         log_error "Failed to create rotated log file"
 
-         return 1
 
-     fi
 
- }
 
- # Show log file statistics
 
- show_log_stats() {
 
-     if [ ! -f "$MONGODB_LOG" ]; then
 
-         log_message "MongoDB log file not found: $MONGODB_LOG"
 
-         return 1
 
-     fi
 
-     
 
-     local log_size_mb=$(du -m "$MONGODB_LOG" | cut -f1)
 
-     local log_lines=$(wc -l < "$MONGODB_LOG" 2>/dev/null || echo "0")
 
-     local rotated_count=$(ls -1 "${MONGODB_LOG}".* 2>/dev/null | wc -l)
 
-     
 
-     log_message "MongoDB Log Statistics:"
 
-     log_message "  Current log size: ${log_size_mb}MB"
 
-     log_message "  Current log lines: ${log_lines}"
 
-     log_message "  Rotated log files: ${rotated_count}"
 
-     log_message "  Rotation threshold: ${MAX_SIZE_MB}MB"
 
-     log_message "  Keep copies: ${KEEP_COPIES}"
 
- }
 
- # Force rotation regardless of size
 
- force_rotation() {
 
-     log_message "Force rotating MongoDB log file"
 
-     
 
-     if [ ! -f "$MONGODB_LOG" ]; then
 
-         log_error "MongoDB log file not found: $MONGODB_LOG"
 
-         return 1
 
-     fi
 
-     
 
-     rotate_log "$MONGODB_LOG" "$MAX_SIZE_MB" "$KEEP_COPIES" "$COMPRESS_LOGS"
 
- }
 
- # Main function
 
- main() {
 
-     local action="${1:-check}"
 
-     
 
-     case "$action" in
 
-         "check")
 
-             log_message "Checking if MongoDB log rotation is needed"
 
-             if check_rotation_needed; then
 
-                 log_message "Log rotation is needed"
 
-                 rotate_log "$MONGODB_LOG" "$MAX_SIZE_MB" "$KEEP_COPIES" "$COMPRESS_LOGS"
 
-             else
 
-                 log_message "Log rotation is not needed"
 
-             fi
 
-             ;;
 
-         "force")
 
-             force_rotation
 
-             ;;
 
-         "stats")
 
-             show_log_stats
 
-             ;;
 
-         "help"|"-h"|"--help")
 
-             echo "Usage: $0 [check|force|stats|help]"
 
-             echo ""
 
-             echo "Commands:"
 
-             echo "  check  - Check if rotation is needed and rotate if so (default)"
 
-             echo "  force  - Force rotation regardless of log size"
 
-             echo "  stats  - Show log file statistics"
 
-             echo "  help   - Show this help message"
 
-             echo ""
 
-             echo "Configuration:"
 
-             echo "  Log file: $MONGODB_LOG"
 
-             echo "  Max size: ${MAX_SIZE_MB}MB"
 
-             echo "  Keep copies: $KEEP_COPIES"
 
-             echo "  Compress: $COMPRESS_LOGS"
 
-             ;;
 
-         *)
 
-             log_error "Unknown action: $action"
 
-             echo "Use '$0 help' for usage information"
 
-             exit 1
 
-             ;;
 
-     esac
 
- }
 
- # Run main function
 
- main "$@"
 
 
  |