Class: Infrawrench::CostsNamespace
- Inherits:
-
Object
- Object
- Infrawrench::CostsNamespace
- Defined in:
- lib/infrawrench/client.rb,
sig/infrawrench/sdk.rbs
Overview
client.costs
Instance Attribute Summary collapse
-
#anomalies ⇒ CostsAnomaliesNamespace
readonly
client.costs.anomalies. -
#anomaly_settings ⇒ CostsAnomalySettingsNamespace
readonly
client.costs.anomaly_settings. -
#efficiency_alert_settings ⇒ CostsEfficiencyAlertSettingsNamespace
readonly
client.costs.efficiency_alert_settings.
Instance Method Summary collapse
-
#dimensions(dimension:, org_id: nil, tag_key: nil, request_options: nil) ⇒ Hash
List distinct values for a cost dimension.
-
#efficiency_alerts(org_id: nil, kind: nil, limit: nil, request_options: nil) ⇒ Hash
Recently fired efficiency alerts.
-
#initialize(transport) ⇒ CostsNamespace
constructor
private
A new instance of CostsNamespace.
-
#query(body:, org_id: nil, request_options: nil) ⇒ Hash
Query aggregated cost series.
-
#rows(body:, org_id: nil, request_options: nil) ⇒ Hash
Push cost rows from your own systems.
-
#showback(org_id: nil, from: nil, to: nil, basis: nil, adjusted: nil, request_options: nil) ⇒ Hash
Spend grouped by cost centre (showback).
-
#status(org_id: nil, request_options: nil) ⇒ Hash
Per-account cost collection status.
-
#untagged(org_id: nil, from: nil, to: nil, basis: nil, request_options: nil) ⇒ Hash
Untagged spend over the required tag keys.
Constructor Details
#initialize(transport) ⇒ CostsNamespace
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of CostsNamespace.
5332 5333 5334 5335 5336 5337 |
# File 'lib/infrawrench/client.rb', line 5332 def initialize(transport) @transport = transport @anomalies = CostsAnomaliesNamespace.new(@transport) @anomaly_settings = CostsAnomalySettingsNamespace.new(@transport) @efficiency_alert_settings = CostsEfficiencyAlertSettingsNamespace.new(@transport) end |
Instance Attribute Details
#anomalies ⇒ CostsAnomaliesNamespace (readonly)
Returns client.costs.anomalies.
5324 5325 5326 |
# File 'lib/infrawrench/client.rb', line 5324 def anomalies @anomalies end |
#anomaly_settings ⇒ CostsAnomalySettingsNamespace (readonly)
Returns client.costs.anomaly_settings.
5326 5327 5328 |
# File 'lib/infrawrench/client.rb', line 5326 def anomaly_settings @anomaly_settings end |
#efficiency_alert_settings ⇒ CostsEfficiencyAlertSettingsNamespace (readonly)
Returns client.costs.efficiency_alert_settings.
5328 5329 5330 |
# File 'lib/infrawrench/client.rb', line 5328 def efficiency_alert_settings @efficiency_alert_settings end |
Instance Method Details
#dimensions(dimension:, org_id: nil, tag_key: nil, request_options: nil) ⇒ Hash
List distinct values for a cost dimension
Feeds the filter and group-by pickers. Pass dimension=tag-keys for tag
keys; dimension=tag requires tagKey. charge_type answers from the fixed
set of charge types rather than from the stored data, so the picker is
populated before any provider has reported one.
Requires permission: costs:read.
GET /api/org/orgId/costs/dimensions
Raises on 400: Bad request
5360 5361 5362 5363 5364 5365 5366 5367 5368 |
# File 'lib/infrawrench/client.rb', line 5360 def dimensions(dimension:, org_id: nil, tag_key: nil, request_options: nil) @transport.request( http_method: "GET", path: "/api/org/{orgId}/costs/dimensions", path_params: { "orgId" => org_id }, query: { "dimension" => dimension, "tagKey" => tag_key }, request_options: ) end |
#efficiency_alerts(org_id: nil, kind: nil, limit: nil, request_options: nil) ⇒ Hash
Recently fired efficiency alerts
The three slow-lane cost alerts in one feed, newest first: commitments about to lapse, commitments that are not being used, and business metrics whose cost per unit rose. Unlike budgets, anomalies and change alerts — all of which compare a spend total against another spend total — these read the commitment calendar and the volume the spend bought, so they see the two surprises the other three structurally cannot.
Requires permission: costs:read.
GET /api/org/orgId/costs/efficiency-alerts
Raises on 400: Bad request
5393 5394 5395 5396 5397 5398 5399 5400 5401 |
# File 'lib/infrawrench/client.rb', line 5393 def efficiency_alerts(org_id: nil, kind: nil, limit: nil, request_options: nil) @transport.request( http_method: "GET", path: "/api/org/{orgId}/costs/efficiency-alerts", path_params: { "orgId" => org_id }, query: { "kind" => kind, "limit" => limit }, request_options: ) end |
#query(body:, org_id: nil, request_options: nil) ⇒ Hash
Query aggregated cost series
Aggregates collected provider spend into per-bucket, per-group series for cost graphs. Currencies are never merged; mixed-currency orgs get one series per currency. Optionally returns a previous-period comparison and a trend forecast.
costBasis chooses between cash and amortized money, and chargeTypes
narrows which kinds of charge count. Both the comparison period and the
forecast are computed on the same basis and charge types as the series
itself.
The filter can be sent structurally as filters or as text in the cost
query language via query (provider = 'aws' AND tag['env'] != 'dev').
They are two spellings of one filter: sending both is a 400, and a query
that does not parse is a 400 carrying the offset of the mistake.
Requires permission: costs:read.
POST /api/org/orgId/costs/query
Raises on 400: Bad request
5432 5433 5434 5435 5436 5437 5438 5439 5440 |
# File 'lib/infrawrench/client.rb', line 5432 def query(body:, org_id: nil, request_options: nil) @transport.request( http_method: "POST", path: "/api/org/{orgId}/costs/query", path_params: { "orgId" => org_id }, body: body, request_options: ) end |
#rows(body:, org_id: nil, request_options: nil) ⇒ Hash
Push cost rows from your own systems
Reports spend Infrawrench has no provider plugin for — a parsed SaaS invoice, an internal chargeback, a colo bill — into the same store the provider collectors write to, so it appears in cost graphs, dimension filters, and budgets alongside everything else.
Rows are grouped under a caller-chosen source. Writes are idempotent per
(source, day, service, region, resourceId, tags, currency): pushing the
same day again restates that day rather than adding to it, so a nightly
job can safely re-push a trailing window. Rows pushed under a source can
never overwrite rows a provider collector wrote.
The whole batch is validated before anything is stored, so a 400 means nothing was written.
Requires permission: costs:write.
POST /api/org/orgId/costs/rows
Raises on 400: Bad request
5470 5471 5472 5473 5474 5475 5476 5477 5478 |
# File 'lib/infrawrench/client.rb', line 5470 def rows(body:, org_id: nil, request_options: nil) @transport.request( http_method: "POST", path: "/api/org/{orgId}/costs/rows", path_params: { "orgId" => org_id }, body: body, request_options: ) end |
#showback(org_id: nil, from: nil, to: nil, basis: nil, adjusted: nil, request_options: nil) ⇒ Hash
Spend grouped by cost centre (showback)
Runs the org's allocation rules over collected spend and sums per cost centre and currency. Spend no rule claims comes back as the "Unallocated" bucket; every defined centre appears even with zero spend.
Cost centres nest, so the list is a depth-first tree. Each entry carries
totals (spend allocated directly to it) and subtreeTotals (its own
plus every descendant's) — "Engineering, of which Platform" needs both.
Rules still evaluate first-match-wins by ascending priority against a flat
list, so a row is allocated exactly once even when a rule targets a parent
and another targets its child; at equal priority the more deeply nested
centre wins.
Requires permission: costs:read.
GET /api/org/orgId/costs/showback
Raises on 400: Bad request
5517 5518 5519 5520 5521 5522 5523 5524 5525 |
# File 'lib/infrawrench/client.rb', line 5517 def showback(org_id: nil, from: nil, to: nil, basis: nil, adjusted: nil, request_options: nil) @transport.request( http_method: "GET", path: "/api/org/{orgId}/costs/showback", path_params: { "orgId" => org_id }, query: { "from" => from, "to" => to, "basis" => basis, "adjusted" => adjusted }, request_options: ) end |
#status(org_id: nil, request_options: nil) ⇒ Hash
Per-account cost collection status
Which accounts support cost collection, whether their history backfill has completed, and the ingested date coverage.
Requires permission: costs:read.
GET /api/org/orgId/costs/status
5541 5542 5543 5544 5545 5546 5547 5548 |
# File 'lib/infrawrench/client.rb', line 5541 def status(org_id: nil, request_options: nil) @transport.request( http_method: "GET", path: "/api/org/{orgId}/costs/status", path_params: { "orgId" => org_id }, request_options: ) end |
#untagged(org_id: nil, from: nil, to: nil, basis: nil, request_options: nil) ⇒ Hash
Untagged spend over the required tag keys
Spend on cost rows missing at least one of the org's required tag keys, overall and per key, plus the largest untagged (account, service) buckets. Empty when no tag policy is configured — untagged is only meaningful against a policy.
Requires permission: costs:read.
GET /api/org/orgId/costs/untagged
Raises on 400: Bad request
5575 5576 5577 5578 5579 5580 5581 5582 5583 |
# File 'lib/infrawrench/client.rb', line 5575 def untagged(org_id: nil, from: nil, to: nil, basis: nil, request_options: nil) @transport.request( http_method: "GET", path: "/api/org/{orgId}/costs/untagged", path_params: { "orgId" => org_id }, query: { "from" => from, "to" => to, "basis" => basis }, request_options: ) end |