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:
@@ -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()
|
||||
|
||||
@@ -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])
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user