Dataframes endpoint

POST
/v2/dataframes

Add dataframes into the storage backend

Add dataframes into the storage backend.

Name In Type Description
dataframes body list List of dataframes to add.

Request Example

In the body:

{
    "dataframes": [
        {
            "period": {
                "begin": "20190723T122810Z",
                "end": "20190723T132810Z"
            },
            "usage": {
                "metric_one": [
                    {
                        "vol": {
                            "unit": "GiB",
                            "qty": 1.2
                        },
                        "rating": {
                            "price": 0.04
                        },
                        "groupby": {
                            "group_one": "one",
                            "group_two": "two"
                        },
                        "metadata": {
                            "attr_one": "one",
                            "attr_two": "two"
                        }
                    }
                ],
                "metric_two": [
                    {
                        "vol": {
                            "unit": "MB",
                            "qty": 200.4
                        },
                        "rating": {
                            "price": 0.06
                        },
                        "groupby": {
                            "group_one": "one",
                            "group_two": "two"
                        },
                        "metadata": {
                            "attr_one": "one",
                            "attr_two": "two"
                        }
                    }
                ]
            }
        },
        {
            "period": {
                "begin": "20190823T122810Z",
                "end": "20190823T132810Z"
            },
            "usage": {
                "metric_one": [
                    {
                        "vol": {
                            "unit": "GiB",
                            "qty": 2.4
                        },
                        "rating": {
                            "price": 0.08
                        },
                        "groupby": {
                            "group_one": "one",
                            "group_two": "two"
                        },
                        "metadata": {
                            "attr_one": "one",
                            "attr_two": "two"
                        }
                    }
                ],
                "metric_two": [
                    {
                        "vol": {
                            "unit": "MB",
                            "qty": 400.8
                        },
                        "rating": {
                            "price": 0.12
                        },
                        "groupby": {
                            "group_one": "one",
                            "group_two": "two"
                        },
                        "metadata": {
                            "attr_one": "one",
                            "attr_two": "two"
                        }
                    }
                ]
            }
        }
    ]
}

Status codes

Success

Code Reason
204 - No Content Request was successful even though no content is to be returned.

Error

Code Reason
400 - Bad Request Invalid request.
401 - Unauthorized Unauthenticated user.
403 - Forbidden Forbidden operation for the authentified user.
405 - Method Not Allowed The method is not allowed for the requested URL.

Response

No content is to be returned.

GET
/v2/dataframes

Get dataframes from the storage backend

Get dataframes from the storage backend.

Name In Type Description
limit (Optional) query int For pagination. The maximum number of results to return.
offset (Optional) query int For pagination. The index of the first element that should be returned.
begin (Optional) query iso8601 timestamp Begin of the period for which the dataframes are required.
end (Optional) query iso8601 timestamp End of the period for which the dataframes are required.
filters (Optional) query dict Optional filters.

Status codes

Success

Code Reason
200 - OK Request was successful.

Error

Code Reason
400 - Bad Request Invalid request.
401 - Unauthorized Unauthenticated user.
403 - Forbidden Forbidden operation for the authentified user.
405 - Method Not Allowed The method is not allowed for the requested URL.

Response

Name In Type Description
total body int Total of datapoints matching the query parameters.
dataframes body list List of dataframes matching the query parameters.

Response Example

{
    "total": 3,
    "dataframes": [
        {
            "usage": {
                "metric_one": [
                    {
                        "vol": {
                            "unit": "GiB",
                            "qty": 1.2
                        },
                        "rating": {
                            "price": 0.04
                        },
                        "groupby": {
                            "group_one": "one",
                            "group_two": "two"
                        },
                        "metadata": {
                            "attr_one": "one",
                            "attr_two": "two"
                        }
                    }
                ],
                "metric_two": [
                    {
                        "vol": {
                            "unit": "GiB",
                            "qty": 1.2
                        },
                        "rating": {
                            "price": 0.04
                        },
                        "groupby": {
                            "group_one": "one",
                            "group_two": "two"
                        },
                        "metadata": {
                            "attr_one": "one",
                            "attr_two": "two"
                        }
                    }
                ]
            },
            "period": {
                "begin": "2019-07-23T12:28:10+00:00",
                "end": "2019-07-23T13:28:10+00:00"
            }
        },
        {
            "usage": {
                "volume.size": [
                    {
                        "vol": {
                            "unit": "GiB",
                            "qty": 1.9
                        },
                        "rating": {
                            "price": 3.8
                        },
                        "groupby": {
                            "project_id": "8ace6f139a1742548e09f1e446bc9737",
                            "user_id": "b28fd3f448c34c17bf70e32886900eed",
                            "id": "be966c6d-78a0-42cf-bab9-e833ed996dee"
                        },
                        "metadata": {
                            "volume_type": ""
                        }
                    }
                ]
            },
            "period": {
                "begin": "2019-08-01T01:00:00+00:00",
                "end": "2019-08-01T02:00:00+00:00"
            }
        }
    ]
}

Scope state endpoint

GET
/v2/scope

Get the status of several scopes

Returns the status of several scopes.

Name In Type Description
collector (Optional) query string Filter on collector.
fetcher (Optional) query string Filter on fetcher.
limit (Optional) query int For pagination. The maximum number of results to return.
offset (Optional) query int For pagination. The index of the first element that should be returned.
scope_id (Optional) query string Filter on scope.
scope_key (Optional) query string Filter on scope_key.

Status codes

Success

Code Reason
200 - OK Request was successful.

Error

Code Reason
400 - Bad Request Invalid request.
403 - Forbidden Forbidden operation for the authentified user.
404 - Not Found Not found
405 - Method Not Allowed The method is not allowed for the requested URL.

Response

Name In Type Description
collector body string Collector for the given scope
fetcher body string Fetcher for the given scope
state body iso8601 timestamp State of the scope.
scope_id body string Scope
scope_key body string Scope key for the given scope

Response Example

{
    "results": [
        {
            "collector": "gnocchi",
            "fetcher": "keystone",
            "scope_id": "7a7e5183264644a7a79530eb56e59941",
            "scope_key": "project_id",
            "state": "2019-05-09 10:00:00"
        },
        {
            "collector": "gnocchi",
            "fetcher": "keystone",
            "scope_id": "9084fadcbd46481788e0ad7405dcbf12",
            "scope_key": "project_id",
            "state": "2019-05-08 03:00:00"
        },
        {
            "collector": "gnocchi",
            "fetcher": "keystone",
            "scope_id": "1f41d183fca5490ebda5c63fbaca026a",
            "scope_key": "project_id",
            "state": "2019-05-06 22:00:00"
        }
    ]
}
PUT
/v2/scope

Reset the status of several scopes

Reset the status of several scopes.

Name In Type Description
state body iso8601 timestamp State of the scope.
collector (Optional) body string Filter on collector.
fetcher (Optional) body string Filter on fetcher.
scope_id (Optional) body string Filter on scope.
scope_key (Optional) body string Filter on scope_key.
all_scopes (Optional) body bool Confirmation whether all scopes must be reset

Status codes

Success

Code Reason
202 - Accepted Request has been accepted for asynchronous processing.

Error

Code Reason
400 - Bad Request Invalid request.
403 - Forbidden Forbidden operation for the authentified user.
404 - Not Found Not found
405 - Method Not Allowed The method is not allowed for the requested URL.

Summary endpoint

GET
/v2/summary

Get a rating summary

Get a rating summary for one or several tenants.

Name In Type Description
limit (Optional) query int For pagination. The maximum number of results to return.
offset (Optional) query int For pagination. The index of the first element that should be returned.
begin (Optional) query iso8601 timestamp Begin of the period for which the summary is required.
end (Optional) query iso8601 timestamp End of the period for which the summary is required.
groupby (Optional) query list of strings Optional attributes to group the summary by.
filters (Optional) query dict Optional filters.

Status codes

Success

Code Reason
200 - OK Request was successful.

Error

Code Reason
400 - Bad Request Invalid request.
403 - Forbidden Forbidden operation for the authentified user.
405 - Method Not Allowed The method is not allowed for the requested URL.

Response

The response has the following format:

{
    "columns": [
        "begin",
        "end",
        "qty",
        "rate",
        "group1",
        "group2",
    ],
    "results": [
        [
            "2019-06-01T00:00:00Z",
            "2019-07-01T00:00:00Z",
            2590.421676635742,
            1295.210838317871,
            "group1",
            "group2",
        ]
    ],
    "total": 4
}

total is the total amount of found elements. columns contains the name of the columns for each element of results. The columns are the four mandatory ones (begin, end, qty, rate) along with each attribute the result is grouped by.

Name In Type Description
begin body iso8601 timestamp Begin of the period for the item.
end body iso8601 timestamp End of the period for the item.
qty body float Qty for the item in the specified period.
rate body float Rate for the item in the specified period.

Response Example

curl "http://cloudkitty-api:8889/v2/summary?filters=project_id%3Afe9c35372db6420089883805b37a34af&groupby=type&groupby=project_id"
{
    "columns": [
        "begin",
        "end",
        "qty",
        "rate",
        "project_id",
        "type"
    ],
    "results": [
        [
            "2019-06-01T00:00:00Z",
            "2019-07-01T00:00:00Z",
            2590.421676635742,
            1295.210838317871,
            "fe9c35372db6420089883805b37a34af",
            "image.size"
        ],
        [
            "2019-06-01T00:00:00Z",
            "2019-07-01T00:00:00Z",
            1354,
            3625,
            "fe9c35372db6420089883805b37a34af",
            "instance"
        ],
        [
            "2019-06-01T00:00:00Z",
            "2019-07-01T00:00:00Z",
            502,
            502,
            "fe9c35372db6420089883805b37a34af",
            "ip.floating"
        ],
        [
            "2019-06-01T00:00:00Z",
            "2019-07-01T00:00:00Z",
            175.9,
            351.8,
            "fe9c35372db6420089883805b37a34af",
            "volume.size"
        ]
    ],
    "total": 4
}