Files
asimonson1125.github.io/STATUS_MONITOR_README.md
2026-02-11 14:54:45 -06:00

3.9 KiB
Raw Blame History

Service Status Monitor

Overview

Server-side monitoring system that checks the availability of asimonson.com services every 2 hours and provides uptime statistics.

Architecture

Backend Components

1. monitor.py - Service Monitoring Module

  • Purpose: Performs automated health checks on all services
  • Check Interval: Every 2 hours (7200 seconds)
  • Services Monitored:
    • asimonson.com
    • files.asimonson.com
    • git.asimonson.com
    • pass.asimonson.com
    • ssh.asimonson.com

Features:

  • Tracks response times and HTTP status codes
  • Stores check history (up to 720 checks = 60 days of data)
  • Calculates uptime percentages for multiple time periods (24h, 7d, 30d, all-time)
  • Persists data to static/json/status_history.json
  • Runs in a background thread

2. app.py - Flask Integration

  • New API Endpoint: /api/status
    • Returns current status for all services
    • Includes uptime statistics
    • Provides last check and next check times
  • Auto-start: Monitoring begins when the Flask app starts

Frontend Components

1. templates/status.html - Status Page Template

  • Displays real-time service status
  • Shows uptime percentages (24h, 7d, 30d, all-time)
  • Displays response times and status codes
  • Shows total number of checks performed
  • Manual refresh button
  • Auto-refreshes every 5 minutes

2. static/js/status.js - Frontend Logic

  • Fetches status data from /api/status API
  • Updates UI with service status and uptime
  • Handles error states gracefully
  • Auto-refresh every 5 minutes

3. static/css/App.css - Styling

  • Color-coded status indicators:
    • Green: Operational
    • Yellow: Degraded/Timeout
    • Red: Offline
  • Responsive grid layout
  • Dark theme matching existing site design

Data Storage

Status history is stored in src/static/json/status_history.json:

{
  "last_check": "2026-02-11T14:30:00",
  "services": {
    "main": {
      "name": "asimonson.com",
      "url": "https://asimonson.com",
      "status": "online",
      "response_time": 156,
      "status_code": 200,
      "last_online": "2026-02-11T14:30:00",
      "checks": [
        {
          "timestamp": "2026-02-11T14:30:00",
          "status": "online",
          "response_time": 156,
          "status_code": 200
        }
      ]
    }
  }
}

Status Types

  • online: HTTP status 2xx-4xx, service responding
  • degraded: HTTP status 5xx or slow response
  • timeout: Request exceeded timeout limit (10 seconds)
  • offline: Unable to reach service
  • unknown: No checks performed yet

Uptime Calculation

Uptime percentage = (number of online checks / total checks) × 100

Calculated for:

  • Last 24 hours
  • Last 7 days
  • Last 30 days
  • All-time (since monitoring began)

Usage

Starting the Server

cd src
python3 app.py

The monitoring will start automatically and perform an initial check immediately, then every 2 hours thereafter.

Accessing the Status Page

Navigate to: https://asimonson.com/status

API Access

Direct API access: https://asimonson.com/api/status

Returns JSON with current status and uptime statistics for all services.

Configuration

To modify monitoring behavior, edit src/monitor.py:

# Change check interval (in seconds)
CHECK_INTERVAL = 7200  # 2 hours

# Modify service list
SERVICES = [
    {
        'id': 'main',
        'name': 'asimonson.com',
        'url': 'https://asimonson.com',
        'timeout': 10  # seconds
    },
    # Add more services here
]

Notes

  • First deployment will show limited uptime data until enough checks accumulate
  • Historical data is preserved across server restarts
  • Maximum 720 checks stored per service (60 days at 2-hour intervals)
  • Page auto-refreshes every 5 minutes to show latest server data
  • Manual refresh button available for immediate updates
  • All checks performed server-side (no client-side CORS issues)