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.
5671 5672 5673 5674 5675 5676 |
# File 'lib/infrawrench/client.rb', line 5671 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.
5663 5664 5665 |
# File 'lib/infrawrench/client.rb', line 5663 def anomalies @anomalies end |
#anomaly_settings ⇒ CostsAnomalySettingsNamespace (readonly)
Returns client.costs.anomaly_settings.
5665 5666 5667 |
# File 'lib/infrawrench/client.rb', line 5665 def anomaly_settings @anomaly_settings end |
#efficiency_alert_settings ⇒ CostsEfficiencyAlertSettingsNamespace (readonly)
Returns client.costs.efficiency_alert_settings.
5667 5668 5669 |
# File 'lib/infrawrench/client.rb', line 5667 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
5699 5700 5701 5702 5703 5704 5705 5706 5707 |
# File 'lib/infrawrench/client.rb', line 5699 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
5732 5733 5734 5735 5736 5737 5738 5739 5740 |
# File 'lib/infrawrench/client.rb', line 5732 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
5771 5772 5773 5774 5775 5776 5777 5778 5779 |
# File 'lib/infrawrench/client.rb', line 5771 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
5809 5810 5811 5812 5813 5814 5815 5816 5817 |
# File 'lib/infrawrench/client.rb', line 5809 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
5856 5857 5858 5859 5860 5861 5862 5863 5864 |
# File 'lib/infrawrench/client.rb', line 5856 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
5880 5881 5882 5883 5884 5885 5886 5887 |
# File 'lib/infrawrench/client.rb', line 5880 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
5914 5915 5916 5917 5918 5919 5920 5921 5922 |
# File 'lib/infrawrench/client.rb', line 5914 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 |