Skip to content

Conversation

@ajlennon
Copy link
Member

Summary

This PR adds a health check HTTP endpoint (/health) for Docker container monitoring and application status tracking.

Changes

  • HealthCheck.cs: Service to track application health status including:
    • MQTT connection status
    • Last update time
    • Beacon count
    • Total nodes processed
    • Uptime
    • Version information
  • HealthCheckServer.cs: HTTP server that exposes /health endpoint
    • Returns JSON health status
    • HTTP 200 for healthy, 503 for degraded
  • MQTTControl.cs: Added IsConnected() method for health check
  • Program.cs: Initialize and start health check server on configured port
  • UWBManager.cs: Update health check metrics on each network update

Health Check Endpoint

  • URL: http://localhost:{HealthCheckPort}/health
  • Method: GET
  • Response: JSON with health status
  • Status Codes:
    • 200: Healthy (MQTT connected and recent updates)
    • 503: Degraded (MQTT disconnected or no recent updates)

Configuration

Health check port is configurable via appsettings.json:

{
  "Application": {
    "HealthCheckPort": 8080
  }
}

Example Response

{
  "status": "healthy",
  "mqttConnected": true,
  "lastUpdateTime": "2025-11-24T20:30:00Z",
  "timeSinceLastUpdate": 5.2,
  "beaconCount": 5,
  "totalNodesProcessed": 100,
  "uptimeSeconds": 3600,
  "version": "1.0.0 (Build: 2025-11-24 20:00:00 UTC, Commit: abc123)"
}

Testing

  • ✅ Build succeeds
  • ✅ Health check server starts on configured port
  • ✅ Endpoint returns JSON health status
  • ✅ Status reflects MQTT connection state
  • ✅ Metrics update on network processing

Reviewer

@Jen42 - Please review this PR when you have a chance.

Alex J Lennon added 2 commits November 24, 2025 17:24
- Add Microsoft.Extensions.Configuration packages for JSON configuration support
- Create AppConfig.cs with configuration model and placeholder resolution
- Create HardwareId.cs for unique board identifier detection (machine-id, DMI UUID, MAC, hostname)
- Add appsettings.json with configurable MQTT settings and application settings
- Update MQTTControl.cs to use configuration instead of hardcoded values
- Update Program.cs to load configuration and resolve {} placeholders
- Support {} placeholder in topic strings for board-specific topics
- Default topics match original hardcoded values (DotnetMQTT/Test/in and /out)
- Add comments in appsettings.json explaining board ID placeholder usage
- Auto-generate MQTT client ID from hardware ID if not configured
- Add HealthCheck.cs to track application health status (MQTT connection, last update time, beacon count, etc.)
- Add HealthCheckServer.cs HTTP server to expose /health endpoint
- Add IsConnected() method to MQTTControl for health check status
- Update Program.cs to initialize and start health check server on configured port
- Update UWBManager.cs to update health check metrics on each network update
- Health check returns 200 (healthy) or 503 (degraded) based on MQTT connection and recent updates
- Health check port configurable via appsettings.json (default: 8080)
@ajlennon ajlennon requested a review from Jen42 November 24, 2025 23:26
@Jen42 Jen42 merged commit 7781140 into main Nov 24, 2025
1 check passed
@Jen42 Jen42 deleted the feature/add-health-check-endpoint branch November 24, 2025 23:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants