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.
5023 5024 5025 5026 5027 5028 |
# File 'lib/infrawrench/client.rb', line 5023 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.
5015 5016 5017 |
# File 'lib/infrawrench/client.rb', line 5015 def anomalies @anomalies end |
#anomaly_settings ⇒ CostsAnomalySettingsNamespace (readonly)
Returns client.costs.anomaly_settings.
5017 5018 5019 |
# File 'lib/infrawrench/client.rb', line 5017 def anomaly_settings @anomaly_settings end |
#efficiency_alert_settings ⇒ CostsEfficiencyAlertSettingsNamespace (readonly)
Returns client.costs.efficiency_alert_settings.
5019 5020 5021 |
# File 'lib/infrawrench/client.rb', line 5019 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
5051 5052 5053 5054 5055 5056 5057 5058 5059 |
# File 'lib/infrawrench/client.rb', line 5051 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
5084 5085 5086 5087 5088 5089 5090 5091 5092 |
# File 'lib/infrawrench/client.rb', line 5084 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
5123 5124 5125 5126 5127 5128 5129 5130 5131 |
# File 'lib/infrawrench/client.rb', line 5123 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
5161 5162 5163 5164 5165 5166 5167 5168 5169 |
# File 'lib/infrawrench/client.rb', line 5161 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
5208 5209 5210 5211 5212 5213 5214 5215 5216 |
# File 'lib/infrawrench/client.rb', line 5208 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
5232 5233 5234 5235 5236 5237 5238 5239 |
# File 'lib/infrawrench/client.rb', line 5232 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
5266 5267 5268 5269 5270 5271 5272 5273 5274 |
# File 'lib/infrawrench/client.rb', line 5266 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 |