Change the API storage path

This change breaks the current API.

Move /v1/storage to /v1/storage/dataframes to provide a cleaner
interface.

Change-Id: I43852f276083b0f2569a071b06becb38b01a2c0c
This commit is contained in:
Gauvain Pocentek
2015-04-21 14:24:26 +02:00
parent 262b231ce7
commit 8d62c5eec0
3 changed files with 50 additions and 10 deletions

View File

@@ -28,10 +28,10 @@ from cloudkitty import storage as ck_storage
from cloudkitty import utils as ck_utils from cloudkitty import utils as ck_utils
class StorageController(rest.RestController): class DataFramesController(rest.RestController):
"""REST Controller to access stored data frames.""" """REST Controller to access stored data frames."""
@wsme_pecan.wsexpose([storage_models.DataFrame], @wsme_pecan.wsexpose(storage_models.DataFrameCollection,
datetime.datetime, datetime.datetime,
datetime.datetime, datetime.datetime,
wtypes.text, wtypes.text,
@@ -43,7 +43,7 @@ class StorageController(rest.RestController):
:param end: End of the period :param end: End of the period
:param tenant_id: UUID of the tenant to filter on. :param tenant_id: UUID of the tenant to filter on.
:param resource_type: Type of the resource to filter on. :param resource_type: Type of the resource to filter on.
:return: List of DataFrame objects. :return: Collection of DataFrame objects.
""" """
begin_ts = ck_utils.dt2ts(begin) begin_ts = ck_utils.dt2ts(begin)
@@ -56,7 +56,7 @@ class StorageController(rest.RestController):
except ck_storage.NoTimeFrame: except ck_storage.NoTimeFrame:
return [] return []
ret = [] dataframes = []
for frame in frames: for frame in frames:
for service, data_list in frame['usage'].items(): for service, data_list in frame['usage'].items():
resources = [] resources = []
@@ -69,10 +69,16 @@ class StorageController(rest.RestController):
volume=data['vol']['qty'], volume=data['vol']['qty'],
rating=price) rating=price)
resources.append(resource) resources.append(resource)
data_frame = storage_models.DataFrame( dataframe = storage_models.DataFrame(
begin=ck_utils.iso2dt(frame['period']['begin']), begin=ck_utils.iso2dt(frame['period']['begin']),
end=ck_utils.iso2dt(frame['period']['end']), end=ck_utils.iso2dt(frame['period']['end']),
tenant_id=tenant_id, # FIXME tenant_id=tenant_id, # FIXME
resources=resources) resources=resources)
ret.append(data_frame) dataframes.append(dataframe)
return ret return storage_models.DataFrameCollection(dataframes=dataframes)
class StorageController(rest.RestController):
"""REST Controller to access stored data."""
dataframes = DataFramesController()

View File

@@ -33,9 +33,17 @@ class RatedResource(rating_resources.CloudkittyResource):
res_dict['rating'] = self.rating res_dict['rating'] = self.rating
return res_dict return res_dict
@classmethod
def sample(cls):
sample = cls(volume=decimal.Decimal('1.0'),
service='compute',
rating=decimal.Decimal('1.0'),
desc={'flavor': 'm1.tiny', 'vcpus': '1'})
return sample
class DataFrame(wtypes.Base): class DataFrame(wtypes.Base):
"""Type describing a stored dataframe.""" """Type describing a stored data frame."""
begin = datetime.datetime begin = datetime.datetime
"""Begin date for the sample.""" """Begin date for the sample."""
@@ -54,3 +62,23 @@ class DataFrame(wtypes.Base):
'end': self.end, 'end': self.end,
'tenant_id': self.tenant_id, 'tenant_id': self.tenant_id,
'resources': self.resources} 'resources': self.resources}
@classmethod
def sample(cls):
res_sample = RatedResource.sample()
sample = cls(tenant_id='69d12143688f413cbf5c3cfe03ed0a12',
begin=datetime.datetime(2015, 4, 22, 7),
end=datetime.datetime(2015, 4, 22, 8),
resources=[res_sample])
return sample
class DataFrameCollection(wtypes.Base):
"""A list of stored data frames."""
dataframes = [DataFrame]
@classmethod
def sample(cls):
sample = DataFrame.sample()
return cls(dataframes=[sample])

View File

@@ -47,8 +47,14 @@ Storage
.. rest-controller:: cloudkitty.api.v1.controllers.storage:StorageController .. rest-controller:: cloudkitty.api.v1.controllers.storage:StorageController
:webprefix: /v1/storage :webprefix: /v1/storage
.. autotype:: cloudkitty.api.v1.datamodels.storage.DataFrame .. rest-controller:: cloudkitty.api.v1.controllers.storage:DataFramesController
:members: :webprefix: /v1/storage/dataframes
.. autotype:: cloudkitty.api.v1.datamodels.storage.RatedResource .. autotype:: cloudkitty.api.v1.datamodels.storage.RatedResource
:members: :members:
.. autotype:: cloudkitty.api.v1.datamodels.storage.DataFrame
:members:
.. autotype:: cloudkitty.api.v1.datamodels.storage.DataFrameCollection
:members: