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.
5549 5550 5551 5552 5553 5554 |
# File 'lib/infrawrench/client.rb', line 5549 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.
5541 5542 5543 |
# File 'lib/infrawrench/client.rb', line 5541 def anomalies @anomalies end |
#anomaly_settings ⇒ CostsAnomalySettingsNamespace (readonly)
Returns client.costs.anomaly_settings.
5543 5544 5545 |
# File 'lib/infrawrench/client.rb', line 5543 def anomaly_settings @anomaly_settings end |
#efficiency_alert_settings ⇒ CostsEfficiencyAlertSettingsNamespace (readonly)
Returns client.costs.efficiency_alert_settings.
5545 5546 5547 |
# File 'lib/infrawrench/client.rb', line 5545 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
5577 5578 5579 5580 5581 5582 5583 5584 5585 |
# File 'lib/infrawrench/client.rb', line 5577 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
5610 5611 5612 5613 5614 5615 5616 5617 5618 |
# File 'lib/infrawrench/client.rb', line 5610 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
5649 5650 5651 5652 5653 5654 5655 5656 5657 |
# File 'lib/infrawrench/client.rb', line 5649 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
5687 5688 5689 5690 5691 5692 5693 5694 5695 |
# File 'lib/infrawrench/client.rb', line 5687 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
5734 5735 5736 5737 5738 5739 5740 5741 5742 |
# File 'lib/infrawrench/client.rb', line 5734 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
5758 5759 5760 5761 5762 5763 5764 5765 |
# File 'lib/infrawrench/client.rb', line 5758 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
5792 5793 5794 5795 5796 5797 5798 5799 5800 |
# File 'lib/infrawrench/client.rb', line 5792 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 |