feat(status-pages): add third-party outage signals from updog.ai - #83
Merged
Conversation
Add `pup status-pages third-party` subcommand that fetches and displays third-party service outage signals from updog.ai, giving users visibility into external service health that may affect their Datadog integrations. - Fetch outage data from https://updog.ai/data/third-party-outages.json - Support --provider flag for case-insensitive provider filtering - Support --active flag to show only providers with unresolved outages - No Datadog authentication required (public third-party data) - Full test coverage with httptest server mocking Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…arch Enhance the third-party outages command with a custom table format showing provider name, display name, service, ASCII signal (▲ UP / ▼ DOWN), and status. Rename --provider to --search for clarity since it matches against both provider_name and display_name fields. - Custom table rendering with providerStatus() for signal derivation - ▲ UP for operational, ▼ DOWN for any unresolved outage - --search flag matches provider name and display name (case-insensitive) - JSON/YAML output unchanged (full provider data) - 21 tests covering table rendering, signals, search, and edge cases Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace simple UP/DOWN text signal with a 30-day sparkline chart using colored Unicode block characters. Each character represents one day: green █ = operational, red █ = outage, dim · = before monitoring started. - buildSparkline() generates per-provider 30-day uptime chart - ANSI green/red/dim coloring for at-a-glance visual scanning - Injectable timeNow for deterministic test assertions - 23 tests including sparkline rendering, color output, edge cases Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
platinummonkey
added a commit
that referenced
this pull request
Feb 24, 2026
Ports the uptime sparkline and filtered table output from PR #83 into the Rust implementation. The previous Rust code dumped raw JSON and silently ignored --search/--active flags. - Add typed structs for updog.ai response deserialization - Implement filter_providers() — case-insensitive search on provider_name or display_name, optional active-outage-only filter - Implement build_sparkline() — 30-day colored chart (green=operational, red=outage, dim·=pre-monitoring), time-injectable for testability - Replace comfy-table with a hand-rolled ASCII table: comfy-table counts ANSI escape bytes as visible width, inflating the UPTIME column; the manual renderer computes column widths from plain strings and inserts the sparkline verbatim so ANSI codes never distort alignment - Wire --search and --active flags through to third_party_list() in both main.rs and test_commands.rs - Add 14 unit tests covering filtering, sparkline edge cases, and table layout (headers, data, block chars) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
pup status-pages third-partysubcommand that fetches third-party service outage signals from updog.ai, giving users visibility into external service health (AWS, GCP, Stripe, etc.) that may affect their Datadog integrations.Changes
cmd/status_pages_third_party.go— command, types, filtering, sparkline chart, custom table renderingcmd/status_pages_third_party_test.go— 23 tests covering sparkline, table, search, errorscmd/status_pages_test.go— subcommand registration test includesthird-partyUsage
Table output
Each character in the UPTIME column = 1 day over the last 30 days:
Design Notes
--searchmatches bothprovider_nameanddisplay_name(case-insensitive)buildSparkline()uses ANSI green/red/dim for terminal color outputtimeNowvar is injectable for deterministic test assertionsTest plan
-racedetectiongo build ./...succeeds🤖 Generated with Claude Code