Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
7d7baf6
feat(common): add utilization signal fields to Recommendation (#338)
cristim May 12, 2026
bbbc36a
feat(providers/aws/recs): parse RI/SP utilization signals (#338)
cristim May 12, 2026
7d83ec9
feat(cli): add --target-utilization flag and Config field (#338)
cristim May 12, 2026
79cf1a5
feat(cli/helpers): implement ApplyTargetUtilization sizing (#338)
cristim May 12, 2026
9468b0a
feat(cli/pipeline): wire applySizing into both sizing call sites (#338)
cristim May 12, 2026
5f1e982
feat(cli/csv): emit utilization columns in multi-service CSV (#338)
cristim May 12, 2026
d40001f
docs(cli): document --target-utilization in README (#338)
cristim May 12, 2026
2bded0b
fix(cli/helpers): plug SP target-utilization edge cases (#338)
cristim May 12, 2026
361b63b
fix(reporter): annual-to-monthly label on summary line
cristim May 12, 2026
0ae1242
fix(cli/helpers): dry-run ID reflects target-utilization when set
cristim May 12, 2026
f924e38
fix(cli): retarget --target-utilization as --target-coverage (under-buy)
cristim May 12, 2026
c01ba35
feat(cli/csv): drop ProjectedUtilization and RecommendedUtilization c…
cristim May 12, 2026
3adf339
feat(cli/csv): emit AWS RecommendedCount alongside post-sizing Count
cristim May 12, 2026
8163886
feat(cli/csv): add UpfrontPayment column scaled to the sized count
cristim May 12, 2026
ecea095
fix(cli/helpers): scale cost fields at sizing time
cristim May 12, 2026
6e0469d
feat(cli/helpers): subtract existing pool coverage from --target-cove…
cristim May 12, 2026
aaecf0f
feat(providers/aws/recs): fetch existing-pool RI coverage from CE
cristim May 12, 2026
572a121
feat(cli): wire existing-RI coverage into --target-coverage pipeline
cristim May 12, 2026
0891808
feat(cli/csv): add Engine column
cristim May 12, 2026
78ed199
fix(cli/csv): pointer Details types + add Instances/CoveredInstances …
cristim May 12, 2026
5c53022
fix(cli): per-engine RDS coverage fetch and ceil-based sizing
cristim May 12, 2026
4b4bb7c
fix(cli/helpers): hybrid --target-coverage sizing with AWS-scaled floor
cristim May 12, 2026
447656b
Revert "fix(cli/helpers): hybrid --target-coverage sizing with AWS-sc…
cristim May 12, 2026
71c6777
feat(cli): --rebuy-window-days flag for expiring-RI replacements
cristim May 12, 2026
55fdcbd
fix(cli): strict-target sizing (floor) + --min-pool-size filter
cristim May 12, 2026
7ce1fac
fix(cli/helpers): anchor --target-coverage sizing to AWS rec.Count
cristim May 12, 2026
9e81f88
fix(cli): per-account existing-coverage fetch from CE
cristim May 12, 2026
30e0e9c
feat(cli/coverage): switch RI coverage to org-wide deployment-aware p…
cristim May 13, 2026
c84fd68
feat(cli/helpers): anchor target-coverage sizing on coverage avg (#338)
cristim May 13, 2026
54e1e82
feat(cli/recommendations): family-NU sizing for RDS RIs (#338)
cristim May 13, 2026
f690858
feat(cli/csv): add Deployment column for RDS rows (#338)
cristim May 13, 2026
1a4d23b
feat(cli/csv): add Family and NormalizedUnits columns for RDS rows (#…
cristim May 13, 2026
03ba3c1
feat(cli/csv): add RecurringMonthlyCost column and scale in sizing (#…
cristim May 13, 2026
c8d062b
fix(cli/recommendations): cumulative family-NU ProjectedCoverage (#338)
cristim May 13, 2026
2a0201d
feat(cli/csv): render n/a for ExistingCoverage when CE has no signal …
cristim May 13, 2026
e21cffd
feat(cli/csv): sort rows by upfront DESC and append a TOTAL row (#338)
cristim May 13, 2026
490b003
test(cli): assert ProjectedCoverage + exercise both-flags-set branch …
cristim May 13, 2026
c78b0b0
fix(cli/helpers): scale RI costs by discrete count ratio in ApplyCove…
cristim May 13, 2026
23b6b97
fix(cli/recommendations): deployment-aware RDS expiry adjustment (#338)
cristim May 13, 2026
f73f0e3
refactor(cli/coverage): collapse duplicate CE fetch paths into one pa…
cristim May 13, 2026
5a30572
refactor(common): extract ScaleRecommendationCosts helper for sizing …
cristim May 13, 2026
bbae9ba
test(cli/recommendations): rename misleading expiry subtest to match …
cristim May 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,22 @@ go install github.com/LeanerCloud/CUDly/cmd@latest
|------|-------------|---------|
| `-p, --payment` | Payment option: `all-upfront`, `partial-upfront`, `no-upfront` | no-upfront |
| `-t, --term` | Term in years: `1` or `3` | 3 |
| `-c, --coverage` | Coverage percentage (0-100) | 80 |
| `-c, --coverage` | Coverage percentage (0-100) — % of each recommendation's instance count to purchase | 80 |
| `-u, --target-coverage` | Target % (0-100) of historical demand to cover with commitments; the rest spills to on-demand. Sizes counts so projected coverage approximates target, projected utilization stays near 100%. Overrides `--coverage`. | 0 (disabled) |
| `--max-instances` | Maximum instances to purchase (0 = unlimited) | 0 |
| `--override-count` | Override recommended count with specific value | 0 |

> **`--coverage` vs `--target-coverage`**: two related but distinct
> sizing levers. `--coverage` scales each AWS recommendation's instance
> count by a fixed fraction (`rec.Count * coverage/100`).
> `--target-coverage` sizes against historical average hourly usage
> instead (`floor(avg * target/100)`), so the resulting count reflects
> real demand rather than AWS's recommended count. Both lean the same
> direction (higher value = more RIs, lower value = fewer), but
> `--target-coverage` is the right lever when the historical-usage
> signal is what you want to size by and you're explicitly leaving
> on-demand headroom for growth or bursts.

### Execution Control

| Flag | Description | Default |
Expand Down
325 changes: 318 additions & 7 deletions cmd/helpers.go

Large diffs are not rendered by default.

Loading
Loading