#!/bin/bash # Cloudron Packaging Status Dashboard set -e # Configuration WORKSPACE_DIR="/home/localuser/TSYSDevStack/Cloudron/CloudronPackages-Workspace" ARTIFACTS_DIR="/home/localuser/TSYSDevStack/Cloudron/CloudronPackages-Artifacts" STATUS_FILE="$ARTIFACTS_DIR/dashboard.html" # Colors for terminal output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' # Get application status get_app_status() { local app_dir="$1" local app_name=$(basename "$app_dir") if [ -d "$app_dir/app" ] && [ -f "$app_dir/app/manifest.json" ]; then echo "completed" else echo "pending" fi } # Detect application type detect_app_type() { local app_dir="$1" if [ -f "$app_dir/package.json" ]; then echo "nodejs" elif [ -f "$app_dir/go.mod" ]; then echo "golang" elif [ -f "$app_dir/requirements.txt" ] || [ -f "$app_dir/setup.py" ] || [ -f "$app_dir/pyproject.toml" ]; then echo "python" elif [ -f "$app_dir/Cargo.toml" ]; then echo "rust" elif [ -f "$app_dir/pom.xml" ] || [ -f "$app_dir/build.gradle" ]; then echo "java" elif [ -f "$app_dir/Gemfile" ] || [ -f "$app_dir/Gemfile.lock" ]; then echo "ruby" elif [ -f "$app_dir/composer.json" ]; then echo "php" else echo "unknown" fi } # Generate HTML dashboard generate_dashboard() { local total=0 local completed=0 local pending=0 # Start HTML cat > "$STATUS_FILE" << 'EOF' Cloudron Packaging Dashboard

🚀 Cloudron Packaging Dashboard

Real-time status of application packaging for Cloudron deployment

EOF # Collect statistics local apps=() for dir in "$WORKSPACE_DIR"/*; do if [ -d "$dir" ]; then apps+=("$dir") ((total++)) local status=$(get_app_status "$dir") if [ "$status" = "completed" ]; then ((completed++)) else ((pending++)) fi fi done local progress=$((completed * 100 / total)) # Add statistics cat >> "$STATUS_FILE" << EOF
$total
Total Applications
$completed
Completed
$pending
Pending
${progress}%
Progress
EOF # Add application grid cat >> "$STATUS_FILE" << EOF

Applications Status

EOF # Add each application for app_dir in "${apps[@]}"; do local app_name=$(basename "$app_dir") local status=$(get_app_status "$app_dir") local app_type=$(detect_app_type "$app_dir") local status_class="status-$status" local status_text=$(echo "$status" | sed 's/.*/\u&/') cat >> "$STATUS_FILE" << EOF
$app_name
Type: $app_type
$status_text
EOF done # Close HTML cat >> "$STATUS_FILE" << 'EOF'
EOF echo "Dashboard generated: $STATUS_FILE" } # Terminal summary show_terminal_summary() { local total=0 local completed=0 local pending=0 echo "" echo -e "${BLUE}=== Cloudron Packaging Status ===${NC}" echo "" for dir in "$WORKSPACE_DIR"/*; do if [ -d "$dir" ]; then ((total++)) local status=$(get_app_status "$dir") if [ "$status" = "completed" ]; then ((completed++)) else ((pending++)) fi fi done echo -e "${CYAN}Total Applications:${NC} $total" echo -e "${GREEN}Completed:${NC} $completed" echo -e "${YELLOW}Pending:${NC} $pending" local progress=$((completed * 100 / total)) echo -e "${BLUE}Progress:${NC} ${progress}%" echo "" # Show recent completed apps echo -e "${GREEN}Recently Completed:${NC}" for dir in "$WORKSPACE_DIR"/*; do if [ -d "$dir" ] && [ -d "$dir/app" ]; then local app_name=$(basename "$dir") local app_type=$(detect_app_type "$dir") echo -e " ✓ ${GREEN}$app_name${NC} ($app_type)" fi done | head -10 if [ $(find "$WORKSPACE_DIR" -name "app" -type d | wc -l) -gt 10 ]; then echo " ... and $(($(find "$WORKSPACE_DIR" -name "app" -type d | wc -l) - 10)) more" fi } # Main function main() { mkdir -p "$ARTIFACTS_DIR" generate_dashboard show_terminal_summary echo "" echo -e "${BLUE}Dashboard:${NC} file://$STATUS_FILE" echo -e "${BLUE}Auto-refresh:${NC} Every 30 seconds" } # Run main main "$@"