🎬 ARR Suite Template Bootstrap - Complete Media Automation Stack Features: - 16 production services (Prowlarr, Sonarr, Radarr, Plex, etc.) - One-command Ansible deployment - VPN-protected downloads via Gluetun - Tailscale secure access - Production-ready security (UFW, Fail2Ban) - Automated backups and monitoring - Comprehensive documentation Ready for customization and deployment to any VPS. Co-authored-by: openhands <openhands@all-hands.dev>
263 lines
7.1 KiB
Bash
Executable File
263 lines
7.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Synology Arrs Stack Log Viewer
|
|
# This script helps view and manage container logs
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Function to print colored output
|
|
print_status() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Load environment variables
|
|
load_env() {
|
|
if [ -f ".env" ]; then
|
|
set -a
|
|
source .env
|
|
set +a
|
|
fi
|
|
}
|
|
|
|
# Check if docker-compose is available
|
|
check_docker_compose() {
|
|
if command -v docker-compose >/dev/null 2>&1; then
|
|
COMPOSE_CMD="docker-compose"
|
|
elif command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then
|
|
COMPOSE_CMD="docker compose"
|
|
else
|
|
print_error "Neither docker-compose nor docker compose found!"
|
|
echo "This script requires Docker Compose to be installed."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Show all logs
|
|
show_all_logs() {
|
|
local follow=${1:-false}
|
|
local compose_file="compose/docker-compose.yml"
|
|
|
|
if [ "$follow" = "true" ]; then
|
|
print_status "Following logs for all containers (Ctrl+C to exit)..."
|
|
$COMPOSE_CMD -f "$compose_file" logs -f
|
|
else
|
|
print_status "Showing recent logs for all containers..."
|
|
$COMPOSE_CMD -f "$compose_file" logs --tail=100
|
|
fi
|
|
}
|
|
|
|
# Show logs for specific service
|
|
show_service_logs() {
|
|
local service="$1"
|
|
local follow=${2:-false}
|
|
local compose_file="compose/docker-compose.yml"
|
|
|
|
if [ -z "$service" ]; then
|
|
print_error "Please specify a service name"
|
|
echo "Available services: sonarr, radarr, lidarr, bazarr, prowlarr"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$follow" = "true" ]; then
|
|
print_status "Following logs for $service (Ctrl+C to exit)..."
|
|
$COMPOSE_CMD -f "$compose_file" logs -f "$service"
|
|
else
|
|
print_status "Showing recent logs for $service..."
|
|
$COMPOSE_CMD -f "$compose_file" logs --tail=100 "$service"
|
|
fi
|
|
}
|
|
|
|
# Show container status
|
|
show_status() {
|
|
local compose_file="compose/docker-compose.yml"
|
|
|
|
print_status "Container status:"
|
|
$COMPOSE_CMD -f "$compose_file" ps
|
|
|
|
echo ""
|
|
print_status "Container resource usage:"
|
|
if command -v docker >/dev/null 2>&1; then
|
|
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}" \
|
|
sonarr radarr lidarr bazarr prowlarr 2>/dev/null || print_warning "Could not get resource usage"
|
|
fi
|
|
}
|
|
|
|
# Export logs to file
|
|
export_logs() {
|
|
local service="$1"
|
|
local compose_file="compose/docker-compose.yml"
|
|
local timestamp=$(date +"%Y%m%d_%H%M%S")
|
|
|
|
mkdir -p logs
|
|
|
|
if [ -z "$service" ]; then
|
|
# Export all logs
|
|
local log_file="logs/arrs_all_logs_$timestamp.txt"
|
|
print_status "Exporting all logs to $log_file..."
|
|
$COMPOSE_CMD -f "$compose_file" logs --no-color > "$log_file"
|
|
else
|
|
# Export specific service logs
|
|
local log_file="logs/${service}_logs_$timestamp.txt"
|
|
print_status "Exporting $service logs to $log_file..."
|
|
$COMPOSE_CMD -f "$compose_file" logs --no-color "$service" > "$log_file"
|
|
fi
|
|
|
|
print_status "Logs exported successfully!"
|
|
local file_size=$(du -h "$log_file" | cut -f1)
|
|
print_status "File size: $file_size"
|
|
}
|
|
|
|
# Interactive service selection
|
|
interactive_selection() {
|
|
echo ""
|
|
echo "Select a service to view logs:"
|
|
echo "1) All services"
|
|
echo "2) Sonarr"
|
|
echo "3) Radarr"
|
|
echo "4) Lidarr"
|
|
echo "5) Bazarr"
|
|
echo "6) Prowlarr"
|
|
echo ""
|
|
read -p "Enter choice [1]: " choice
|
|
choice=${choice:-1}
|
|
|
|
echo ""
|
|
echo "Log viewing options:"
|
|
echo "1) Show recent logs"
|
|
echo "2) Follow logs (live)"
|
|
echo "3) Export logs to file"
|
|
echo ""
|
|
read -p "Enter option [1]: " option
|
|
option=${option:-1}
|
|
|
|
local follow=false
|
|
if [ "$option" = "2" ]; then
|
|
follow=true
|
|
fi
|
|
|
|
case $choice in
|
|
1)
|
|
if [ "$option" = "3" ]; then
|
|
export_logs
|
|
else
|
|
show_all_logs "$follow"
|
|
fi
|
|
;;
|
|
2)
|
|
if [ "$option" = "3" ]; then
|
|
export_logs "sonarr"
|
|
else
|
|
show_service_logs "sonarr" "$follow"
|
|
fi
|
|
;;
|
|
3)
|
|
if [ "$option" = "3" ]; then
|
|
export_logs "radarr"
|
|
else
|
|
show_service_logs "radarr" "$follow"
|
|
fi
|
|
;;
|
|
4)
|
|
if [ "$option" = "3" ]; then
|
|
export_logs "lidarr"
|
|
else
|
|
show_service_logs "lidarr" "$follow"
|
|
fi
|
|
;;
|
|
5)
|
|
if [ "$option" = "3" ]; then
|
|
export_logs "bazarr"
|
|
else
|
|
show_service_logs "bazarr" "$follow"
|
|
fi
|
|
;;
|
|
6)
|
|
if [ "$option" = "3" ]; then
|
|
export_logs "prowlarr"
|
|
else
|
|
show_service_logs "prowlarr" "$follow"
|
|
fi
|
|
;;
|
|
*)
|
|
print_error "Invalid choice"
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Main execution
|
|
main() {
|
|
echo -e "${BLUE}=== Synology Arrs Stack Log Viewer ===${NC}"
|
|
echo ""
|
|
|
|
load_env
|
|
check_docker_compose
|
|
|
|
case "${1:-}" in
|
|
"all")
|
|
show_all_logs "${2:-false}"
|
|
;;
|
|
"follow"|"-f")
|
|
if [ -n "$2" ]; then
|
|
show_service_logs "$2" true
|
|
else
|
|
show_all_logs true
|
|
fi
|
|
;;
|
|
"export")
|
|
export_logs "$2"
|
|
;;
|
|
"status")
|
|
show_status
|
|
;;
|
|
"sonarr"|"radarr"|"lidarr"|"bazarr"|"prowlarr")
|
|
show_service_logs "$1" "${2:-false}"
|
|
;;
|
|
"help"|"-h"|"--help")
|
|
echo "Usage: $0 [command] [options]"
|
|
echo ""
|
|
echo "Commands:"
|
|
echo " (no command) Interactive service selection"
|
|
echo " all [follow] Show logs for all services"
|
|
echo " follow, -f [svc] Follow logs (live) for service or all"
|
|
echo " export [service] Export logs to file"
|
|
echo " status Show container status and resource usage"
|
|
echo " <service> Show logs for specific service"
|
|
echo ""
|
|
echo "Services: sonarr, radarr, lidarr, bazarr, prowlarr"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 # Interactive selection"
|
|
echo " $0 sonarr # Show Sonarr logs"
|
|
echo " $0 follow radarr # Follow Radarr logs"
|
|
echo " $0 export # Export all logs"
|
|
echo " $0 status # Show container status"
|
|
;;
|
|
"")
|
|
interactive_selection
|
|
;;
|
|
*)
|
|
print_error "Unknown command: $1"
|
|
echo "Use '$0 help' for usage information"
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Run main function
|
|
main "$@" |