Skip to content

feat(monitor): add rich status fields (uptime stats, SSL expiry, incidents) #65

@joelp172

Description

@joelp172

Summary

The Monitor CRD status only contains `ready`, `id`, and `heartbeatURL`. The UptimeRobot API returns many useful read-only fields that could be exposed in status for observability.

Current Behaviour

Monitor status fields:

  • `ready` (bool)
  • `id` (string)
  • `heartbeatURL` (string, heartbeat only)
  • `type` (string)
  • `status` (uint8)

Proposed Additional Status Fields

type MonitorStatus struct {
    // Existing fields...
    
    // SSL certificate brand (e.g. "Let's Encrypt")
    SSLBrand string `json:"sslBrand,omitempty"`
    
    // SSL certificate expiry date
    SSLExpiryDate *metav1.Time `json:"sslExpiryDate,omitempty"`
    
    // Domain expiry date
    DomainExpiryDate *metav1.Time `json:"domainExpiryDate,omitempty"`
    
    // Average response time (ms) over last 24h
    AverageResponseTime *int `json:"averageResponseTime,omitempty"`
    
    // Uptime percentage (last 24h)
    Uptime24h string `json:"uptime24h,omitempty"`
    
    // Uptime percentage (last 7 days)
    Uptime7d string `json:"uptime7d,omitempty"`
    
    // Uptime percentage (last 30 days)
    Uptime30d string `json:"uptime30d,omitempty"`
    
    // Time in current state
    CurrentStateDuration *metav1.Duration `json:"currentStateDuration,omitempty"`
    
    // Creation timestamp in UptimeRobot
    CreatedAt *metav1.Time `json:"createdAt,omitempty"`
}

Benefits

  • SSL/domain expiry visible via `kubectl get monitors` (printer columns)
  • Uptime stats available for GitOps dashboards
  • No need to query UptimeRobot UI for basic health info
  • Can be used for alerting via Kubernetes watch

Acceptance Criteria

  • Rich status fields populated during periodic sync
  • Printer columns show key fields in `kubectl get` output
  • Fields are read-only (not settable via spec)
  • Performance impact acceptable (no extra API calls needed — data comes from existing GetMonitor response)
  • Unit tests for status field mapping

Phase

P4 — Feature Gaps (Phase 3: Expand)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestfeatureNew CRD features and API coveragepriority: lowP4/P5/P6 - Nice to have

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions