#!/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
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
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 "$@"