Skip to content

ROX-35081: Add instance report admin command - #2764

Open
kovayur wants to merge 2 commits into
mainfrom
yury/ROX-35081-instance-report
Open

ROX-35081: Add instance report admin command#2764
kovayur wants to merge 2 commits into
mainfrom
yury/ROX-35081-instance-report

Conversation

@kovayur

@kovayur kovayur commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add fleet-manager admin central report command that fetches all centrals via the fleet-manager admin API and generates a summary report (instance counts by cloud provider, region, plan, and status)
  • Move the admin subcommand from acsfleetctl to fleet-manager so the report can be run from the fleet-manager container image
  • Refactor the fleet-manager main() to use a proper rootCommand() function and clean exit codes instead of glog.Fatalf
  • Refactor fleetmanagerclient to use functional options and support RHSSO auth
  • Add expired_at field to the admin Central model and OpenAPI spec

PR split

This is part 1 of 2 for ROX-35081. This PR contains the binary/Go changes (the report command, client refactoring, and OpenAPI updates). Next part #2752 adds the Tekton pipeline that runs this command on a schedule and posts results to Slack.

Test plan

  • Unit tests added for the report command (report_test.go)
  • make lint passes
  • make test passes
  • Manual: fleet-manager admin central report --help shows usage

🤖 Generated with Claude Code

Add `fleet-manager admin central report` command that fetches all
centrals from the fleet-manager API and generates a summary report.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@openshift-ci

openshift-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: kovayur

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci Bot added the approved label Aug 7, 2026
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@kovayur, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 58 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: c191beaa-280b-4ef8-8936-6c29de03a2bd

📥 Commits

Reviewing files that changed from the base of the PR and between fcad766 and 537c333.

📒 Files selected for processing (1)
  • internal/central/pkg/cmd/admin/centrals/report.go
📝 Walkthrough

Walkthrough

The change adds the admin command to fleet-manager, removes it from acsfleetctl, centralizes Fleet Manager client authentication, adds central reporting, and exposes organisation name data in admin API models and schemas.

Changes

Admin central reporting

Layer / File(s) Summary
Central data contract
internal/central/pkg/api/admin/private/..., internal/central/pkg/presenters/admin_central.go, openapi/fleet-manager-private-admin.yaml
Admin Central responses now include organisation name, organisation ID, and quota type fields.
Admin client authentication
internal/central/pkg/cmd/admin/cmd.go, internal/central/pkg/cmd/fleetmanagerclient/client.go
The admin command creates an authenticated Fleet Manager client from configurable flags and environment variables, then stores it in command context.
Central report command
internal/central/pkg/cmd/admin/centrals/*
The new report command fetches, filters, groups, and formats central instances into Slack-compatible sections. Tests cover formatting, filtering, fallbacks, and alignment.
CLI command wiring
cmd/fleet-manager/main.go, cmd/acsfleetctl/main.go
fleet-manager registers the admin command. acsfleetctl no longer registers it. Initialization and execution errors now print to stderr and exit explicitly.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant AdminCLI
  participant AdminCommand
  participant FleetManagerClient
  participant FleetManagerAPI
  participant ReportWriter
  AdminCLI->>AdminCommand: Execute central report
  AdminCommand->>FleetManagerClient: Create and retrieve authenticated client
  AdminCommand->>FleetManagerAPI: Fetch paginated central instances
  FleetManagerAPI-->>AdminCommand: Return central records
  AdminCommand->>ReportWriter: Filter, group, and format records
  ReportWriter-->>AdminCLI: Write Slack-compatible report
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title clearly and concisely identifies the new instance report admin command.
Description check ✅ Passed The description clearly covers the changes, PR split, linked issue, and test plan.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch yury/ROX-35081-instance-report

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@internal/central/pkg/api/admin/private/model_central.go`:
- Around line 28-47: Keep the organisation_name field defined in the canonical
OpenAPI specification rather than editing model_central.go directly, then run
make generate and commit the regenerated output. Ensure the generated Central
model retains the organisation_name JSON property.

In `@internal/central/pkg/cmd/admin/centrals/report.go`:
- Around line 94-150: Extend the report generation around the existing
allCentrals classification loop and writeSection calls to aggregate and print
counts by cloud provider, region, plan, and status for all relevant centrals,
rather than only the current recent-region, eval, expiration, and failed tables.
Reuse the central fields and established report formatting helpers, ensure probe
instances follow the existing exclusion behavior, and add tests covering each
aggregate’s counts before release.
- Around line 52-70: Update the pagination loop around api.GetCentrals to return
an error when list.Items is empty while the fetched count is still below
list.Total, preventing further page requests. Compare the counts using a
non-narrowing type instead of converting len(all) to int32, while preserving the
existing completion condition and error context.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 0ae94c87-d189-44ae-9fb3-a4e6b55eda72

📥 Commits

Reviewing files that changed from the base of the PR and between 877dd26 and fcad766.

📒 Files selected for processing (12)
  • cmd/acsfleetctl/main.go
  • cmd/fleet-manager/main.go
  • internal/central/pkg/api/admin/private/api/openapi.yaml
  • internal/central/pkg/api/admin/private/model_central.go
  • internal/central/pkg/cmd/admin/centrals/cmd.go
  • internal/central/pkg/cmd/admin/centrals/list.go
  • internal/central/pkg/cmd/admin/centrals/report.go
  • internal/central/pkg/cmd/admin/centrals/report_test.go
  • internal/central/pkg/cmd/admin/cmd.go
  • internal/central/pkg/cmd/fleetmanagerclient/client.go
  • internal/central/pkg/presenters/admin_central.go
  • openapi/fleet-manager-private-admin.yaml
💤 Files with no reviewable changes (1)
  • cmd/acsfleetctl/main.go

Comment thread internal/central/pkg/api/admin/private/model_central.go
Comment thread internal/central/pkg/cmd/admin/centrals/report.go
Comment thread internal/central/pkg/cmd/admin/centrals/report.go
The pagination loop in fetchAllCentrals only terminated when the
accumulated count reached list.Total, which could spin forever if the
API returned an empty Items slice. Break early on empty pages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@kovayur

kovayur commented Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant