# Ghaymah Cloud Container Deployment & Monitoring A lightweight, production-ready Go REST API deployed on **ghaymah.systems** containers platform, featuring an automated Bash health monitoring daemon and a modern web-based SRE monitoring dashboard. --- ## 📌 Project Overview This repository fulfills the SRE Container Deployment and Monitoring technical requirements: 1. **REST API Service (`app/main.go`)**: Built in Go, offering `/`, `/health`, and `/metrics` endpoints with CORS enabled. 2. **Containerization (`app/Dockerfile`)**: Optimized multi-stage Docker build utilizing Alpine Linux and running under a non-root security context. 3. **Cloud Deployment**: Deployed on `ghaymah.systems` container platform at: - **Live Health Endpoint**: `https://gheyma-app-2b88268529f9.hosted.ghaymah.systems/health` - **Live Metrics Endpoint**: `https://gheyma-app-2b88268529f9.hosted.ghaymah.systems/metrics` 4. **Automated Monitoring Daemon (`health-check.sh`)**: Bash script executing periodic health probes every 30 seconds, measuring response time, HTTP status, and logging results to `monitor.log`. 5. **SRE Live Dashboard (`dashboard/`)**: Single-page frontend dashboard built with HTML, CSS, and Vanilla JavaScript displaying live service health status, real-time latency graphs, total API request counts, and uptime timeline. --- ## 🏗️ Architecture & Directory Structure ``` . ├── app/ # Application backend files │ ├── main.go # Go API server source code │ ├── go.mod # Go module specification │ ├── Dockerfile # Multi-stage Dockerfile for Go API │ └── .dockerignore # Docker ignore rules ├── dashboard/ # Monitoring Web Dashboard │ ├── Dockerfile # Nginx Dockerfile for static frontend serving │ ├── index.html # Main dashboard UI structure │ ├── style.css # Custom styling (dark mode, glassmorphism, animations) │ └── script.js # Frontend engine (live polling, canvas rendering, state tracking) ├── health-check.sh # Bash health check monitoring script (every 30s) ├── monitor.log # Output log generated by monitoring script └── README.md # Project documentation ``` ### 1. Go API Server (`app/main.go`) - **Endpoints**: - `GET /`: Returns welcome payload `{"message": "Hello, World!"}` and increments request counter. - `GET /health`: Returns service health status `{"status": "healthy"}` and increments request counter. - `GET /metrics`: Exposes internal request metrics `{"requests": }` without incrementing counter. - **CORS Support**: Implements `Access-Control-Allow-Origin: *` to enable browser-based dashboard monitoring across domains. ### 2. Multi-Stage Dockerfile (`app/Dockerfile`) - **Build Stage**: Compiles the Go application binary using `golang:1.26-alpine`. - **Runtime Stage**: Executes inside lightweight `alpine:3.20`. - **Security Context**: Creates and executes under an unprivileged `appuser` (non-root). - **Port Exposure**: Exposes port `8080`. ### 3. Monitoring Script (`health-check.sh`) - **Probe Frequency**: Every 30 seconds (`INTERVAL=30`). - **Target URL**: `https://gheyma-app-2b88268529f9.hosted.ghaymah.systems/health`. - **Metrics Collected**: HTTP Status Code and total response execution time (seconds). - **Log Format**: `YYYY-MM-DD HH:MM:SS - STATUS_LEVEL - Details` appended to `monitor.log`. ### 4. Live SRE Dashboard (`dashboard/`) - **KPI Metrics**: - **Service Status**: Visual indicator (Healthy / Unhealthy). - **Response Time**: Real-time round-trip latency in milliseconds + history canvas chart. - **Total Requests**: Fetched live from `/metrics`. - **Features**: - Auto-refresh interval (15s) with manual refresh option. - Success ratio doughnut chart and interactive check timeline. - Primary cloud endpoint monitoring with local fallback capability. --- ## 🚀 Getting Started & Local Usage ### Running the API Server Locally ```bash # Navigate to app directory and run Go service cd app go run main.go ``` The server will start listening on `http://localhost:8080`. ### Building & Running with Docker ```bash # Build the Docker image from root directory docker build -t ghaymah-api-service ./app # Run the container docker run -d -p 8080:8080 --name ghaymah-api ghaymah-api-service ``` ### Running the Monitoring Script ```bash # Grant execution permissions (Linux/macOS/Git Bash) chmod +x health-check.sh # Run the monitoring daemon ./health-check.sh ``` ### Viewing the Monitoring Dashboard You can serve the `dashboard/` directory using Nginx, Docker, or any static file server: ```bash # Using Docker (Nginx) cd dashboard docker build -t ghaymah-dashboard . docker run -d -p 80:80 ghaymah-dashboard ``` Or open `dashboard/index.html` directly in your web browser. --- ## 🔍 Verification & Health Checks Verify the live cloud application using `curl`: ```bash # Health endpoint check curl -i https://gheyma-app-2b88268529f9.hosted.ghaymah.systems/health # Expected output: # HTTP/1.1 200 OK # Content-Type: application/json # {"status":"healthy"} # Metrics endpoint check curl -i https://gheyma-app-2b88268529f9.hosted.ghaymah.systems/metrics # Expected output: # HTTP/1.1 200 OK # Content-Type: application/json # {"requests":53} ```