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