Hello,
I am currently attempting to utilize the costs api as detailed here: https://reference.rightscale.com/bill_analysis/?url=swagger_adj.json#/ specifically the "select costs" endpoint. When I make an authenticated request ( via OAuth token ) to this endpoint I receive a:
301 Moved Permanently; Location: https://us-4.rightscale.com
followed by a:
302 Found; Location: https://us-4.rightscale.com/acct/<acct_id>/dashboard;overview
and then a loop of 302's bouncing between https://us-4.rightscale.com & https://us-4.rightscale.com/acct/<acct_id>/dashboard;overview
Here's an example curl request that I'm using:
curl --include -L \
-H "X-API-Version:1.0" \
-H "Authorization: Bearer <oauth access token>" \
-H "Content-Type: application/json" \
--request POST \
--data "$PAYLOAD" https://us-4.rightscale.com/orgs/<org_id>/costs/select
Here's the payload that I'm including:
{
"billing_center_ids": [
"<billing_center_id>"
],
"dimensions": [
"vendor",
"category",
"service",
"instance_type",
"billing_center_id",
"usage_unit"
],
"end_at": "2020-02",
"filter": {
"dimension": "vendor",
"type": "equal",
"value": "aws"
},
"granularity": "month",
"limit": 1000,
"metrics": [
"usage_amount"
],
"start_at": "2020-01"
}
Any help you might be able to provide would be greatly appreciated.
Thanks!
Ryan
‎Apr 03, 2020 10:22 AM
Hi.
Thats great. Authentication works and querying the API also does not return an error.
Could you try targeting a billing center you've created ? In the example below the target BC is unallocated (catch-all) . Also for the dimensions try including just vendor_account , to test a simpler query. Based on the response it was unable to find any data in that BC.
-X POST "https://optima.rightscale.com/bill-analysis/orgs/<org_id>/costs/select" -d '{"billing_center_ids":["unallocated"],"dimensions":["vendor_account","service","resource_id"],"metrics":["cost_amortized_blended_adj"],"end_at": "2020-03","limit": 1000,"start_at": "2020-02"}'
Hope that helps
‎Apr 06, 2020 02:17 PM
Hi Ryan
Use
‎Apr 03, 2020 02:48 PM
Hello,
Thanks! That certainly fixed the 302/301 redirect loop. Now I'm getting an error msg that says it doesn't accept "POST" requests. Do you happen to have updated docs for this endpoint?
Thanks,
Ryan
‎Apr 03, 2020 04:13 PM
API_ENDPOINT='us-4'
my_token_endpoint="https://$API_ENDPOINT.rightscale.com/api/oauth2"
my_refresh_token="get-this-from-the-platform"
#generate $access_token
curl --include \
-H "X-API-Version:1.5" \
--request POST "$my_token_endpoint" \
-d "grant_type=refresh_token" \
-d "refresh_token=$my_refresh_token"
curl --include \
-H "API-Version:1.0" \
-H "Authorization: Bearer $access_token" \
-H "Content-Type: application/json" \
-X POST "https://optima.rightscale.com/bill-analysis/orgs/<org_id>/costs/select" -d '{"billing_center_ids":["unallocated"],"dimensions":["vendor_account","service","resource_id"],"metrics":["cost_amortized_blended_adj"],"end_at": "2020-03","limit": 1000,"start_at": "2020-02"}'
The end point accept POST. Can you post the full error msg you are receiving and your code ? https://reference.rightscale.com/bill_analysis/?url=swagger_adj.json#/costs/costs_select
Thanks
‎Apr 03, 2020 04:33 PM
Hi,
Here's the error message: "{"id":"81FuN0rz","code":"method_not_allowed","status":405,"detail":"Method POST must be one of GET, HEAD, OPTIONS","meta":{"allowed":"GET, HEAD, OPTIONS","method":"POST"}}"
And the code is literally just the curl command I've posted previously, here's the full curl command I'm using minus the authentication token and billing center id:
curl --include -L -H "X-API-Version:1.0" -H "Authorization: Bearer <authentication_token>" -H "Content-Type: application/json" --request POST --data "{ "billing_center_ids": [ "<billing_center_id>" ], "dimensions": [ "vendor", "category", "service", "instance_type", "billing_center_id", "usage_unit" ], "end_at": "2020-02", "filter": { "dimension": "vendor", "type": "equal", "value": "aws" }, "granularity": "month", "limit": 1000, "metrics": [ "usage_amount" ], "start_at": "2020-01" }" "https://optima.rightscale.com/orgs/27378/costs/select"
‎Apr 03, 2020 06:28 PM
Hello,
Ok, so after going over the script again I've updated the URL to: https://optima.rightscale.com/bill-analysis/orgs/<org_id>/costs/select. Updated the Authorization Header to 'Api-Version: 1.0' and wrapped all of the headers / post data in single quotes as opposed to double quotes and I do not have any errors now.
Unfortunately I am not receiving any data back from the endpoint either, the endpoint returns the following: `{"rows":[]}`. I also tried increasing the date range to 2020-01 -> 2020-03 but that didn't help either.
Thanks again for all your help so far!
Ryan
‎Apr 06, 2020 01:40 PM
Hi.
Thats great. Authentication works and querying the API also does not return an error.
Could you try targeting a billing center you've created ? In the example below the target BC is unallocated (catch-all) . Also for the dimensions try including just vendor_account , to test a simpler query. Based on the response it was unable to find any data in that BC.
-X POST "https://optima.rightscale.com/bill-analysis/orgs/<org_id>/costs/select" -d '{"billing_center_ids":["unallocated"],"dimensions":["vendor_account","service","resource_id"],"metrics":["cost_amortized_blended_adj"],"end_at": "2020-03","limit": 1000,"start_at": "2020-02"}'
Hope that helps
‎Apr 06, 2020 02:17 PM
Hi,
So that seems to have done it. I am now retrieving information when I make an API call. Now I just need to figure out how to retrieve the data that I'm looking for. You wouldn't happen to know which dimensions I'll need to include to retrieve instance ( AWS EC2 Id's ) level information would you?
Thanks again!
Ryan
‎Apr 06, 2020 03:20 PM
Hi
https://reference.rightscale.com/bill_analysis/?url=swagger_adj.json#/costs/costs_dimensions
This will return all the available dimensions.
Best,
‎Apr 06, 2020 04:42 PM
Thanks again for all your help!
‎Apr 13, 2020 08:22 AM