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
-
#anomaly_settings ⇒ CostsAnomalySettingsNamespace
readonly
client.costs.anomaly_settings.
Instance Method Summary collapse
-
#anomalies(org_id: nil, days: nil, request_options: nil) ⇒ Hash
List recently detected cost anomalies.
-
#dimensions(dimension:, org_id: nil, tag_key: nil, request_options: nil) ⇒ Hash
List distinct values for a cost dimension.
-
#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, 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, 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.
2001 2002 2003 2004 |
# File 'lib/infrawrench/client.rb', line 2001 def initialize(transport) @transport = transport @anomaly_settings = CostsAnomalySettingsNamespace.new(@transport) end |
Instance Attribute Details
#anomaly_settings ⇒ CostsAnomalySettingsNamespace (readonly)
Returns client.costs.anomaly_settings.
1997 1998 1999 |
# File 'lib/infrawrench/client.rb', line 1997 def anomaly_settings @anomaly_settings end |
Instance Method Details
#anomalies(org_id: nil, days: nil, request_options: nil) ⇒ Hash
List recently detected cost anomalies
Spend anomalies detected by the daily background pass. Two kinds share the
list: a spike, where a provider's or service's spend exceeded its
trailing 28-day baseline by a statistical threshold (mean + N·stddev, with
an absolute floor to ignore penny-scale noise), and a new_source, where
a provider or service with no spend at all across that window suddenly
billed a material amount. Thresholds are per organization — see GET
/costs/anomaly-settings. Newest day first, capped at 200 rows.
Requires permission: costs:read.
GET /api/org/orgId/costs/anomalies
Raises on 400: Bad request
2028 2029 2030 2031 2032 2033 2034 2035 2036 |
# File 'lib/infrawrench/client.rb', line 2028 def anomalies(org_id: nil, days: nil, request_options: nil) @transport.request( http_method: "GET", path: "/api/org/{orgId}/costs/anomalies", path_params: { "orgId" => org_id }, query: { "days" => days }, request_options: ) end |
#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.
Requires permission: costs:read.
GET /api/org/orgId/costs/dimensions
Raises on 400: Bad request
2057 2058 2059 2060 2061 2062 2063 2064 2065 |
# File 'lib/infrawrench/client.rb', line 2057 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 |
#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.
Requires permission: costs:read.
POST /api/org/orgId/costs/query
Raises on 400: Bad request
2086 2087 2088 2089 2090 2091 2092 2093 2094 |
# File 'lib/infrawrench/client.rb', line 2086 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
2124 2125 2126 2127 2128 2129 2130 2131 2132 |
# File 'lib/infrawrench/client.rb', line 2124 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, 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.
Requires permission: costs:read.
GET /api/org/orgId/costs/showback
Raises on 400: Bad request
2153 2154 2155 2156 2157 2158 2159 2160 2161 |
# File 'lib/infrawrench/client.rb', line 2153 def showback(org_id: nil, from: nil, to: 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 }, 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
2177 2178 2179 2180 2181 2182 2183 2184 |
# File 'lib/infrawrench/client.rb', line 2177 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, 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
2207 2208 2209 2210 2211 2212 2213 2214 2215 |
# File 'lib/infrawrench/client.rb', line 2207 def untagged(org_id: nil, from: nil, to: 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 }, request_options: ) end |