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
class StorageController(rest.RestController):
class DataFramesController(rest.RestController):
"""REST Controller to access stored data frames."""
@wsme_pecan.wsexpose([storage_models.DataFrame],
@wsme_pecan.wsexpose(storage_models.DataFrameCollection,
datetime.datetime,
datetime.datetime,
wtypes.text,
@@ -43,7 +43,7 @@ class StorageController(rest.RestController):
:param end: End of the period
:param tenant_id: UUID of the tenant 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)
@@ -56,7 +56,7 @@ class StorageController(rest.RestController):
except ck_storage.NoTimeFrame:
return []
ret = []
dataframes = []
for frame in frames:
for service, data_list in frame['usage'].items():
resources = []
@@ -69,10 +69,16 @@ class StorageController(rest.RestController):
volume=data['vol']['qty'],
rating=price)
resources.append(resource)
data_frame = storage_models.DataFrame(
dataframe = storage_models.DataFrame(
begin=ck_utils.iso2dt(frame['period']['begin']),
end=ck_utils.iso2dt(frame['period']['end']),
tenant_id=tenant_id, # FIXME
resources=resources)
ret.append(data_frame)
return ret
dataframes.append(dataframe)
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
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):
"""Type describing a stored dataframe."""
"""Type describing a stored data frame."""
begin = datetime.datetime
"""Begin date for the sample."""
@@ -54,3 +62,23 @@ class DataFrame(wtypes.Base):
'end': self.end,
'tenant_id': self.tenant_id,
'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
:webprefix: /v1/storage
.. autotype:: cloudkitty.api.v1.datamodels.storage.DataFrame
:members:
.. rest-controller:: cloudkitty.api.v1.controllers.storage:DataFramesController
:webprefix: /v1/storage/dataframes
.. autotype:: cloudkitty.api.v1.datamodels.storage.RatedResource
:members:
.. autotype:: cloudkitty.api.v1.datamodels.storage.DataFrame
:members:
.. autotype:: cloudkitty.api.v1.datamodels.storage.DataFrameCollection
:members: