Rebase telemetry resources to resource2/proxy2
Change-Id: If82e9753098ee104aacebe7ad7ce37bf6813ac88
This commit is contained in:
parent
b535bc833f
commit
d435684465
|
@ -10,7 +10,7 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from openstack import proxy
|
from openstack import proxy2
|
||||||
from openstack.telemetry.v2 import capability
|
from openstack.telemetry.v2 import capability
|
||||||
from openstack.telemetry.v2 import meter as _meter
|
from openstack.telemetry.v2 import meter as _meter
|
||||||
from openstack.telemetry.v2 import resource as _resource
|
from openstack.telemetry.v2 import resource as _resource
|
||||||
|
@ -18,7 +18,7 @@ from openstack.telemetry.v2 import sample
|
||||||
from openstack.telemetry.v2 import statistics
|
from openstack.telemetry.v2 import statistics
|
||||||
|
|
||||||
|
|
||||||
class Proxy(proxy.BaseProxy):
|
class Proxy(proxy2.BaseProxy):
|
||||||
""".. caution:: This API is a work in progress and is subject to change."""
|
""".. caution:: This API is a work in progress and is subject to change."""
|
||||||
|
|
||||||
def find_capability(self, name_or_id, ignore_missing=True):
|
def find_capability(self, name_or_id, ignore_missing=True):
|
||||||
|
@ -147,9 +147,8 @@ class Proxy(proxy.BaseProxy):
|
||||||
:returns: A generator of sample objects
|
:returns: A generator of sample objects
|
||||||
:rtype: :class:`~openstack.telemetry.v2.sample.Sample`
|
:rtype: :class:`~openstack.telemetry.v2.sample.Sample`
|
||||||
"""
|
"""
|
||||||
meter_name = _meter.Meter.from_name(meter).name
|
|
||||||
return self._list(sample.Sample, paginated=False,
|
return self._list(sample.Sample, paginated=False,
|
||||||
path_args={'counter_name': meter_name}, **query)
|
counter_name=meter, **query)
|
||||||
|
|
||||||
def find_statistics(self, name_or_id, ignore_missing=True):
|
def find_statistics(self, name_or_id, ignore_missing=True):
|
||||||
"""Find a single statistics
|
"""Find a single statistics
|
||||||
|
@ -176,6 +175,5 @@ class Proxy(proxy.BaseProxy):
|
||||||
:returns: A generator of statistics objects
|
:returns: A generator of statistics objects
|
||||||
:rtype: :class:`~openstack.telemetry.v2.statistics.Statistics`
|
:rtype: :class:`~openstack.telemetry.v2.statistics.Statistics`
|
||||||
"""
|
"""
|
||||||
meter_name = _meter.Meter.from_name(meter).name
|
|
||||||
return self._list(statistics.Statistics, paginated=False,
|
return self._list(statistics.Statistics, paginated=False,
|
||||||
path_args={'meter_name': meter_name}, **query)
|
meter_name=meter, **query)
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
import six
|
import six
|
||||||
|
|
||||||
from openstack import resource
|
from openstack import resource2 as resource
|
||||||
from openstack.telemetry import telemetry_service
|
from openstack.telemetry import telemetry_service
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,11 +27,10 @@ class Capability(resource.Resource):
|
||||||
allow_list = True
|
allow_list = True
|
||||||
|
|
||||||
# Properties
|
# Properties
|
||||||
is_enabled = resource.prop('enabled', type=bool)
|
is_enabled = resource.Body('enabled', type=bool)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def list(cls, session, limit=None, marker=None, path_args=None,
|
def list(cls, session, paginated=False, **params):
|
||||||
paginated=False, **params):
|
|
||||||
resp = session.get(cls.base_path, endpoint_filter=cls.service,
|
resp = session.get(cls.base_path, endpoint_filter=cls.service,
|
||||||
params=params)
|
params=params)
|
||||||
resp = resp.json()
|
resp = resp.json()
|
||||||
|
|
|
@ -10,13 +10,12 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from openstack import resource
|
from openstack import resource2 as resource
|
||||||
from openstack.telemetry import telemetry_service
|
from openstack.telemetry import telemetry_service
|
||||||
|
|
||||||
|
|
||||||
class Meter(resource.Resource):
|
class Meter(resource.Resource):
|
||||||
""".. caution:: This API is a work in progress and is subject to change."""
|
""".. caution:: This API is a work in progress and is subject to change."""
|
||||||
id_attribute = 'meter_id'
|
|
||||||
resource_key = 'meter'
|
resource_key = 'meter'
|
||||||
base_path = '/meters'
|
base_path = '/meters'
|
||||||
service = telemetry_service.TelemetryService()
|
service = telemetry_service.TelemetryService()
|
||||||
|
@ -26,18 +25,18 @@ class Meter(resource.Resource):
|
||||||
|
|
||||||
# Properties
|
# Properties
|
||||||
#: The ID of the meter
|
#: The ID of the meter
|
||||||
meter_id = resource.prop('meter_id')
|
meter_id = resource.Body('meter_id', alternate_id=True)
|
||||||
#: The unique name for the meter
|
#: The unique name for the meter
|
||||||
name = resource.prop('name')
|
name = resource.Body('name')
|
||||||
#: The ID of the project that owns the resource
|
#: The ID of the project that owns the resource
|
||||||
project_id = resource.prop('project_id')
|
project_id = resource.Body('project_id')
|
||||||
#: The ID of the resource for which the measurements are taken
|
#: The ID of the resource for which the measurements are taken
|
||||||
resource_id = resource.prop('resource_id')
|
resource_id = resource.Body('resource_id')
|
||||||
#: The name of the source where the meter comes from
|
#: The name of the source where the meter comes from
|
||||||
source = resource.prop('source')
|
source = resource.Body('source')
|
||||||
#: The meter type
|
#: The meter type
|
||||||
type = resource.prop('type')
|
type = resource.Body('type')
|
||||||
#: The unit of measure
|
#: The unit of measure
|
||||||
unit = resource.prop('unit')
|
unit = resource.Body('unit')
|
||||||
#: The ID of the user who last triggered an update to the resource
|
#: The ID of the user who last triggered an update to the resource
|
||||||
user_id = resource.prop('user_id')
|
user_id = resource.Body('user_id')
|
||||||
|
|
|
@ -10,36 +10,35 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from openstack import resource
|
from openstack import resource2 as resource
|
||||||
from openstack.telemetry import telemetry_service
|
from openstack.telemetry import telemetry_service
|
||||||
|
|
||||||
|
|
||||||
class Resource(resource.Resource):
|
class Resource(resource.Resource):
|
||||||
""".. caution:: This API is a work in progress and is subject to change."""
|
""".. caution:: This API is a work in progress and is subject to change."""
|
||||||
id_attribute = 'resource_id'
|
|
||||||
base_path = '/resources'
|
base_path = '/resources'
|
||||||
service = telemetry_service.TelemetryService()
|
service = telemetry_service.TelemetryService()
|
||||||
|
|
||||||
# Supported Operations
|
# Supported Operations
|
||||||
allow_retrieve = True
|
allow_get = True
|
||||||
allow_list = True
|
allow_list = True
|
||||||
|
|
||||||
# Properties
|
# Properties
|
||||||
#: UTC date & time not later than the first sample known
|
#: UTC date & time not later than the first sample known
|
||||||
#: for this resource.
|
#: for this resource.
|
||||||
first_sample_at = resource.prop('first_sample_timestamp')
|
first_sample_at = resource.Body('first_sample_timestamp')
|
||||||
#: UTC date & time not earlier than the last sample known
|
#: UTC date & time not earlier than the last sample known
|
||||||
#: for this resource.
|
#: for this resource.
|
||||||
last_sample_at = resource.prop('last_sample_timestamp')
|
last_sample_at = resource.Body('last_sample_timestamp')
|
||||||
#: A list containing a self link and associated meter links
|
#: A list containing a self link and associated meter links
|
||||||
links = resource.prop('links')
|
links = resource.Body('links')
|
||||||
#: Arbitrary metadata associated with the resource
|
#: Arbitrary metadata associated with the resource
|
||||||
metadata = resource.prop('metadata')
|
metadata = resource.Body('metadata')
|
||||||
#: The ID of the owning project
|
#: The ID of the owning project
|
||||||
project_id = resource.prop('project_id')
|
project_id = resource.Body('project_id')
|
||||||
#: The ID for the resource
|
#: The ID for the resource
|
||||||
resource_id = resource.prop('resource_id')
|
resource_id = resource.Body('resource_id', alternate_id=True)
|
||||||
#: The name of the source where the resource comes from
|
#: The name of the source where the resource comes from
|
||||||
source = resource.prop('source')
|
source = resource.Body('source')
|
||||||
#: The ID of the user who created the resource or updated it last
|
#: The ID of the user who created the resource or updated it last
|
||||||
user_id = resource.prop('user_id')
|
user_id = resource.Body('user_id')
|
||||||
|
|
|
@ -10,60 +10,43 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from openstack import resource
|
from openstack import resource2 as resource
|
||||||
from openstack.telemetry import telemetry_service
|
from openstack.telemetry import telemetry_service
|
||||||
|
|
||||||
|
|
||||||
class Sample(resource.Resource):
|
class Sample(resource.Resource):
|
||||||
""".. caution:: This API is a work in progress and is subject to change."""
|
""".. caution:: This API is a work in progress and is subject to change."""
|
||||||
id_attribute = 'sample_id'
|
|
||||||
base_path = '/meters/%(counter_name)s'
|
base_path = '/meters/%(counter_name)s'
|
||||||
service = telemetry_service.TelemetryService()
|
service = telemetry_service.TelemetryService()
|
||||||
|
|
||||||
# Supported Operations
|
# Supported Operations
|
||||||
allow_create = True
|
allow_get = True
|
||||||
allow_list = True
|
allow_list = True
|
||||||
|
|
||||||
# Properties
|
# Properties
|
||||||
#: The meter name this sample is for
|
|
||||||
counter_name = resource.prop('meter', alias='counter_name')
|
|
||||||
#: When the sample has been generated.
|
#: When the sample has been generated.
|
||||||
generated_at = resource.prop('timestamp')
|
generated_at = resource.Body('timestamp')
|
||||||
|
#: The message ID
|
||||||
|
message_id = resource.Body('message_id', alternate_id=True)
|
||||||
#: Arbitrary metadata associated with the sample
|
#: Arbitrary metadata associated with the sample
|
||||||
metadata = resource.prop('metadata', alias='resource_metadata')
|
metadata = resource.Body('metadata')
|
||||||
|
#: The meter name this sample is for
|
||||||
|
counter_name = resource.Body('counter_name')
|
||||||
|
#: The meter name this sample is for
|
||||||
|
counter_type = resource.Body('counter_type')
|
||||||
#: The ID of the project this sample was taken for
|
#: The ID of the project this sample was taken for
|
||||||
project_id = resource.prop('project_id')
|
project_id = resource.Body('project_id')
|
||||||
#: When the sample has been recorded.
|
#: When the sample has been recorded.
|
||||||
recorded_at = resource.prop('recorded_at')
|
recorded_at = resource.Body('recorded_at')
|
||||||
#: The ID of the resource this sample was taken for
|
#: The ID of the resource this sample was taken for
|
||||||
resource_id = resource.prop('resource_id')
|
resource_id = resource.Body('resource_id')
|
||||||
#: The name of the source that identifies where the sample comes from
|
#: The name of the source that identifies where the sample comes from
|
||||||
source = resource.prop('source')
|
source = resource.Body('source')
|
||||||
#: The meter type
|
#: The meter type
|
||||||
type = resource.prop('type', alias='counter_type')
|
type = resource.Body('type')
|
||||||
#: The unit of measure
|
#: The unit of measure
|
||||||
unit = resource.prop('unit', alias='counter_unit')
|
unit = resource.Body('unit')
|
||||||
#: The ID of the user this sample was taken for
|
#: The ID of the user this sample was taken for
|
||||||
user_id = resource.prop('user_id')
|
user_id = resource.Body('user_id')
|
||||||
#: The metered value
|
#: The metered value
|
||||||
volume = resource.prop('volume', alias='counter_volume')
|
volume = resource.Body('volume')
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def list(cls, session, limit=None, marker=None, path_args=None,
|
|
||||||
paginated=False, **params):
|
|
||||||
url = cls._get_url(path_args)
|
|
||||||
resp = session.get(url, endpoint_filter=cls.service, params=params)
|
|
||||||
for item in resp.json():
|
|
||||||
yield cls.existing(**item)
|
|
||||||
|
|
||||||
def create(self, session):
|
|
||||||
url = self._get_url(self)
|
|
||||||
# telemetry expects a list of samples
|
|
||||||
attrs = self._attrs.copy()
|
|
||||||
attrs.pop('meter', None)
|
|
||||||
resp = session.post(url, endpoint_filter=self.service,
|
|
||||||
json=[attrs])
|
|
||||||
resp = resp.json()
|
|
||||||
self.update_attrs(**resp.pop())
|
|
||||||
self._reset_dirty()
|
|
||||||
return self
|
|
||||||
|
|
|
@ -10,13 +10,12 @@
|
||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from openstack import resource
|
from openstack import resource2 as resource
|
||||||
from openstack.telemetry import telemetry_service
|
from openstack.telemetry import telemetry_service
|
||||||
|
|
||||||
|
|
||||||
class Statistics(resource.Resource):
|
class Statistics(resource.Resource):
|
||||||
""".. caution:: This API is a work in progress and is subject to change."""
|
""".. caution:: This API is a work in progress and is subject to change."""
|
||||||
id_attribute = 'meter_name'
|
|
||||||
resource_key = 'statistics'
|
resource_key = 'statistics'
|
||||||
base_path = '/meters/%(meter_name)s/statistics'
|
base_path = '/meters/%(meter_name)s/statistics'
|
||||||
service = telemetry_service.TelemetryService()
|
service = telemetry_service.TelemetryService()
|
||||||
|
@ -24,43 +23,40 @@ class Statistics(resource.Resource):
|
||||||
# Supported Operations
|
# Supported Operations
|
||||||
allow_list = True
|
allow_list = True
|
||||||
|
|
||||||
# Path Parameter
|
|
||||||
meter_name = resource.prop('meter_name')
|
|
||||||
|
|
||||||
# Properties
|
# Properties
|
||||||
#: The selectable aggregate value(s)
|
#: The selectable aggregate value(s)
|
||||||
aggregate = resource.prop('aggregate')
|
aggregate = resource.Body('aggregate')
|
||||||
#: The average of all of the volume values seen in the data
|
#: The average of all of the volume values seen in the data
|
||||||
avg = resource.prop('avg')
|
avg = resource.Body('avg')
|
||||||
#: The number of samples seen
|
#: The number of samples seen
|
||||||
count = resource.prop('count')
|
count = resource.Body('count')
|
||||||
#: The difference, in seconds, between the oldest and newest timestamp
|
#: The difference, in seconds, between the oldest and newest timestamp
|
||||||
duration = resource.prop('duration')
|
duration = resource.Body('duration')
|
||||||
#: UTC date and time of the oldest timestamp, or the query end time.
|
#: UTC date and time of the oldest timestamp, or the query end time.
|
||||||
duration_end_at = resource.prop('duration_end')
|
duration_end_at = resource.Body('duration_end')
|
||||||
#: UTC date and time of the earliest timestamp, or the query start time.
|
#: UTC date and time of the earliest timestamp, or the query start time.
|
||||||
duration_start_at = resource.prop('duration_start')
|
duration_start_at = resource.Body('duration_start')
|
||||||
#: Dictionary of field names for group, if groupby statistics are requested
|
#: Dictionary of field names for group, if groupby statistics are requested
|
||||||
group_by = resource.prop('groupby')
|
group_by = resource.Body('groupby')
|
||||||
#: The maximum volume seen in the data
|
#: The maximum volume seen in the data
|
||||||
max = resource.prop('max')
|
max = resource.Body('max')
|
||||||
#: The minimum volume seen in the data
|
#: The minimum volume seen in the data
|
||||||
min = resource.prop('min')
|
min = resource.Body('min')
|
||||||
#: The difference, in seconds, between the period start and end
|
#: The difference, in seconds, between the period start and end
|
||||||
period = resource.prop('period')
|
period = resource.Body('period')
|
||||||
#: UTC date and time of the period end.
|
#: UTC date and time of the period end.
|
||||||
period_end_at = resource.prop('period_end')
|
period_end_at = resource.Body('period_end')
|
||||||
#: UTC date and time of the period start.
|
#: UTC date and time of the period start.
|
||||||
period_start_at = resource.prop('period_start')
|
period_start_at = resource.Body('period_start')
|
||||||
#: The total of all of the volume values seen in the data
|
#: The total of all of the volume values seen in the data
|
||||||
sum = resource.prop('sum')
|
sum = resource.Body('sum')
|
||||||
#: The unit type of the data set
|
#: The unit type of the data set
|
||||||
unit = resource.prop('unit')
|
#: TODO(Qiming): This is still incorrect
|
||||||
|
unit = resource.Body('unit', alternate_id=True)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def list(cls, session, limit=None, marker=None, path_args=None,
|
def list(cls, session, paginated=False, **params):
|
||||||
paginated=False, **params):
|
url = cls.base_path % {'meter_name': params.pop('meter_name')}
|
||||||
url = cls._get_url(path_args)
|
|
||||||
resp = session.get(url, endpoint_filter=cls.service, params=params)
|
resp = session.get(url, endpoint_filter=cls.service, params=params)
|
||||||
for stat in resp.json():
|
for stat in resp.json():
|
||||||
yield cls.existing(**stat)
|
yield cls.existing(**stat)
|
||||||
|
|
|
@ -38,13 +38,13 @@ class TestCapability(testtools.TestCase):
|
||||||
self.assertEqual('/capabilities', sot.base_path)
|
self.assertEqual('/capabilities', sot.base_path)
|
||||||
self.assertEqual('metering', sot.service.service_type)
|
self.assertEqual('metering', sot.service.service_type)
|
||||||
self.assertFalse(sot.allow_create)
|
self.assertFalse(sot.allow_create)
|
||||||
self.assertFalse(sot.allow_retrieve)
|
self.assertFalse(sot.allow_get)
|
||||||
self.assertFalse(sot.allow_update)
|
self.assertFalse(sot.allow_update)
|
||||||
self.assertFalse(sot.allow_delete)
|
self.assertFalse(sot.allow_delete)
|
||||||
self.assertTrue(sot.allow_list)
|
self.assertTrue(sot.allow_list)
|
||||||
|
|
||||||
def test_make_it(self):
|
def test_make_it(self):
|
||||||
sot = capability.Capability(EXAMPLE)
|
sot = capability.Capability(**EXAMPLE)
|
||||||
self.assertEqual(EXAMPLE['id'], sot.id)
|
self.assertEqual(EXAMPLE['id'], sot.id)
|
||||||
self.assertEqual(EXAMPLE['enabled'], sot.is_enabled)
|
self.assertEqual(EXAMPLE['enabled'], sot.is_enabled)
|
||||||
|
|
||||||
|
|
|
@ -36,13 +36,13 @@ class TestMeter(testtools.TestCase):
|
||||||
self.assertEqual('/meters', sot.base_path)
|
self.assertEqual('/meters', sot.base_path)
|
||||||
self.assertEqual('metering', sot.service.service_type)
|
self.assertEqual('metering', sot.service.service_type)
|
||||||
self.assertFalse(sot.allow_create)
|
self.assertFalse(sot.allow_create)
|
||||||
self.assertFalse(sot.allow_retrieve)
|
self.assertFalse(sot.allow_get)
|
||||||
self.assertFalse(sot.allow_update)
|
self.assertFalse(sot.allow_update)
|
||||||
self.assertFalse(sot.allow_delete)
|
self.assertFalse(sot.allow_delete)
|
||||||
self.assertTrue(sot.allow_list)
|
self.assertTrue(sot.allow_list)
|
||||||
|
|
||||||
def test_make_it(self):
|
def test_make_it(self):
|
||||||
sot = meter.Meter(EXAMPLE)
|
sot = meter.Meter(**EXAMPLE)
|
||||||
self.assertEqual(EXAMPLE['meter_id'], sot.id)
|
self.assertEqual(EXAMPLE['meter_id'], sot.id)
|
||||||
self.assertEqual(EXAMPLE['meter_id'], sot.meter_id)
|
self.assertEqual(EXAMPLE['meter_id'], sot.meter_id)
|
||||||
self.assertEqual(EXAMPLE['name'], sot.name)
|
self.assertEqual(EXAMPLE['name'], sot.name)
|
||||||
|
|
|
@ -16,10 +16,10 @@ from openstack.telemetry.v2 import meter
|
||||||
from openstack.telemetry.v2 import resource
|
from openstack.telemetry.v2 import resource
|
||||||
from openstack.telemetry.v2 import sample
|
from openstack.telemetry.v2 import sample
|
||||||
from openstack.telemetry.v2 import statistics
|
from openstack.telemetry.v2 import statistics
|
||||||
from openstack.tests.unit import test_proxy_base
|
from openstack.tests.unit import test_proxy_base2
|
||||||
|
|
||||||
|
|
||||||
class TestTelemetryProxy(test_proxy_base.TestProxyBase):
|
class TestTelemetryProxy(test_proxy_base2.TestProxyBase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestTelemetryProxy, self).setUp()
|
super(TestTelemetryProxy, self).setUp()
|
||||||
self.proxy = _proxy.Proxy(self.session)
|
self.proxy = _proxy.Proxy(self.session)
|
||||||
|
@ -54,18 +54,16 @@ class TestTelemetryProxy(test_proxy_base.TestProxyBase):
|
||||||
self.verify_find(self.proxy.find_sample, sample.Sample)
|
self.verify_find(self.proxy.find_sample, sample.Sample)
|
||||||
|
|
||||||
def test_samples(self):
|
def test_samples(self):
|
||||||
met = meter.Meter.existing(name='meterone')
|
expected_kwargs = {'counter_name': 'meterone'}
|
||||||
expected_kwargs = {'path_args': {'counter_name': 'meterone'}}
|
|
||||||
self.verify_list(self.proxy.samples, sample.Sample,
|
self.verify_list(self.proxy.samples, sample.Sample,
|
||||||
method_args=[met],
|
method_args=['meterone'],
|
||||||
paginated=False, expected_kwargs=expected_kwargs)
|
paginated=False, expected_kwargs=expected_kwargs)
|
||||||
|
|
||||||
def test_statistics_find(self):
|
def test_statistics_find(self):
|
||||||
self.verify_find(self.proxy.find_statistics, statistics.Statistics)
|
self.verify_find(self.proxy.find_statistics, statistics.Statistics)
|
||||||
|
|
||||||
def test_statistics(self):
|
def test_statistics(self):
|
||||||
met = meter.Meter.existing(name='meterone')
|
expected_kwargs = {'meter_name': 'meterone'}
|
||||||
expected_kwargs = {'path_args': {'meter_name': 'meterone'}}
|
|
||||||
self.verify_list(self.proxy.statistics, statistics.Statistics,
|
self.verify_list(self.proxy.statistics, statistics.Statistics,
|
||||||
method_args=[met],
|
method_args=['meterone'],
|
||||||
paginated=False, expected_kwargs=expected_kwargs)
|
paginated=False, expected_kwargs=expected_kwargs)
|
||||||
|
|
|
@ -32,20 +32,21 @@ EXAMPLE = {
|
||||||
class TestResource(testtools.TestCase):
|
class TestResource(testtools.TestCase):
|
||||||
|
|
||||||
def test_basic(self):
|
def test_basic(self):
|
||||||
sot = resource.Resource(EXAMPLE)
|
sot = resource.Resource()
|
||||||
self.assertIsNone(sot.resource_key)
|
self.assertIsNone(sot.resource_key)
|
||||||
self.assertIsNone(sot.resources_key)
|
self.assertIsNone(sot.resources_key)
|
||||||
self.assertEqual('/resources', sot.base_path)
|
self.assertEqual('/resources', sot.base_path)
|
||||||
self.assertEqual('metering', sot.service.service_type)
|
self.assertEqual('metering', sot.service.service_type)
|
||||||
self.assertFalse(sot.allow_create)
|
self.assertFalse(sot.allow_create)
|
||||||
self.assertTrue(sot.allow_retrieve)
|
self.assertTrue(sot.allow_get)
|
||||||
self.assertFalse(sot.allow_update)
|
self.assertFalse(sot.allow_update)
|
||||||
self.assertFalse(sot.allow_delete)
|
self.assertFalse(sot.allow_delete)
|
||||||
self.assertTrue(sot.allow_list)
|
self.assertTrue(sot.allow_list)
|
||||||
|
|
||||||
def test_make_it(self):
|
def test_make_it(self):
|
||||||
sot = resource.Resource(EXAMPLE)
|
sot = resource.Resource(**EXAMPLE)
|
||||||
self.assertEqual(EXAMPLE['resource_id'], sot.id)
|
self.assertEqual(EXAMPLE['resource_id'], sot.id)
|
||||||
|
self.assertEqual(EXAMPLE['resource_id'], sot.resource_id)
|
||||||
self.assertEqual(EXAMPLE['first_sample_timestamp'],
|
self.assertEqual(EXAMPLE['first_sample_timestamp'],
|
||||||
sot.first_sample_at)
|
sot.first_sample_at)
|
||||||
self.assertEqual(EXAMPLE['last_sample_timestamp'],
|
self.assertEqual(EXAMPLE['last_sample_timestamp'],
|
||||||
|
|
|
@ -19,6 +19,7 @@ SAMPLE = {
|
||||||
'sample_id': '0',
|
'sample_id': '0',
|
||||||
'metadata': {'1': 'one'},
|
'metadata': {'1': 'one'},
|
||||||
'counter_name': '2',
|
'counter_name': '2',
|
||||||
|
'message_id': '4',
|
||||||
'project_id': '3',
|
'project_id': '3',
|
||||||
'recorded_at': '2015-03-09T12:15:57.233772',
|
'recorded_at': '2015-03-09T12:15:57.233772',
|
||||||
'resource_id': '5',
|
'resource_id': '5',
|
||||||
|
@ -30,39 +31,24 @@ SAMPLE = {
|
||||||
'volume': '11.1',
|
'volume': '11.1',
|
||||||
}
|
}
|
||||||
|
|
||||||
OLD_SAMPLE = {
|
|
||||||
'counter_name': '1',
|
|
||||||
'counter_type': '2',
|
|
||||||
'counter_unit': '3',
|
|
||||||
'counter_volume': '4',
|
|
||||||
'message_id': '0',
|
|
||||||
'project_id': '5',
|
|
||||||
'recorded_at': '2015-03-09T12:15:57.233772',
|
|
||||||
'resource_id': '7',
|
|
||||||
'resource_metadata': '8',
|
|
||||||
'source': '9',
|
|
||||||
'timestamp': '2015-03-09T12:15:57.233772',
|
|
||||||
'user_id': '11',
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class TestSample(testtools.TestCase):
|
class TestSample(testtools.TestCase):
|
||||||
|
|
||||||
def test_basic(self):
|
def test_basic(self):
|
||||||
sot = sample.Sample(SAMPLE)
|
sot = sample.Sample()
|
||||||
self.assertIsNone(sot.resource_key)
|
self.assertIsNone(sot.resource_key)
|
||||||
self.assertIsNone(sot.resources_key)
|
self.assertIsNone(sot.resources_key)
|
||||||
self.assertEqual('/meters/%(counter_name)s', sot.base_path)
|
self.assertEqual('/meters/%(counter_name)s', sot.base_path)
|
||||||
self.assertEqual('metering', sot.service.service_type)
|
self.assertEqual('metering', sot.service.service_type)
|
||||||
self.assertTrue(sot.allow_create)
|
self.assertFalse(sot.allow_create)
|
||||||
self.assertFalse(sot.allow_retrieve)
|
self.assertTrue(sot.allow_get)
|
||||||
self.assertFalse(sot.allow_update)
|
self.assertFalse(sot.allow_update)
|
||||||
self.assertFalse(sot.allow_delete)
|
self.assertFalse(sot.allow_delete)
|
||||||
self.assertTrue(sot.allow_list)
|
self.assertTrue(sot.allow_list)
|
||||||
|
|
||||||
def test_make_new(self):
|
def test_make_new(self):
|
||||||
sot = sample.Sample(SAMPLE)
|
sot = sample.Sample(**SAMPLE)
|
||||||
self.assertEqual(SAMPLE['sample_id'], sot.id)
|
self.assertEqual(SAMPLE['message_id'], sot.id)
|
||||||
self.assertEqual(SAMPLE['metadata'], sot.metadata)
|
self.assertEqual(SAMPLE['metadata'], sot.metadata)
|
||||||
self.assertEqual(SAMPLE['counter_name'], sot.counter_name)
|
self.assertEqual(SAMPLE['counter_name'], sot.counter_name)
|
||||||
self.assertEqual(SAMPLE['project_id'], sot.project_id)
|
self.assertEqual(SAMPLE['project_id'], sot.project_id)
|
||||||
|
@ -75,31 +61,15 @@ class TestSample(testtools.TestCase):
|
||||||
self.assertEqual(SAMPLE['user_id'], sot.user_id)
|
self.assertEqual(SAMPLE['user_id'], sot.user_id)
|
||||||
self.assertEqual(SAMPLE['volume'], sot.volume)
|
self.assertEqual(SAMPLE['volume'], sot.volume)
|
||||||
|
|
||||||
def test_make_old(self):
|
|
||||||
sot = sample.Sample(OLD_SAMPLE)
|
|
||||||
self.assertIsNone(sot.id)
|
|
||||||
self.assertEqual(OLD_SAMPLE['counter_name'], sot.counter_name)
|
|
||||||
self.assertEqual(OLD_SAMPLE['counter_type'], sot.type)
|
|
||||||
self.assertEqual(OLD_SAMPLE['counter_unit'], sot.unit)
|
|
||||||
self.assertEqual(OLD_SAMPLE['counter_volume'], sot.volume)
|
|
||||||
self.assertEqual(OLD_SAMPLE['project_id'], sot.project_id)
|
|
||||||
self.assertEqual(OLD_SAMPLE['recorded_at'], sot.recorded_at)
|
|
||||||
self.assertEqual(OLD_SAMPLE['resource_id'], sot.resource_id)
|
|
||||||
self.assertEqual(OLD_SAMPLE['resource_metadata'], sot.metadata)
|
|
||||||
self.assertEqual(OLD_SAMPLE['source'], sot.source)
|
|
||||||
self.assertEqual(OLD_SAMPLE['timestamp'], sot.generated_at)
|
|
||||||
self.assertEqual(OLD_SAMPLE['user_id'], sot.user_id)
|
|
||||||
|
|
||||||
def test_list(self):
|
def test_list(self):
|
||||||
sess = mock.Mock()
|
sess = mock.Mock()
|
||||||
resp = mock.Mock()
|
resp = mock.Mock()
|
||||||
resp.json = mock.Mock(return_value=[SAMPLE, OLD_SAMPLE])
|
resp.json = mock.Mock(return_value=[SAMPLE])
|
||||||
sess.get = mock.Mock(return_value=resp)
|
sess.get = mock.Mock(return_value=resp)
|
||||||
path_args = {'counter_name': 'name_of_meter'}
|
|
||||||
|
|
||||||
found = sample.Sample.list(sess, path_args=path_args)
|
found = sample.Sample.list(sess, counter_name='name_of_meter')
|
||||||
first = next(found)
|
first = next(found)
|
||||||
self.assertEqual(SAMPLE['sample_id'], first.id)
|
self.assertEqual(SAMPLE['message_id'], first.id)
|
||||||
self.assertEqual(SAMPLE['metadata'], first.metadata)
|
self.assertEqual(SAMPLE['metadata'], first.metadata)
|
||||||
self.assertEqual(SAMPLE['counter_name'], first.counter_name)
|
self.assertEqual(SAMPLE['counter_name'], first.counter_name)
|
||||||
self.assertEqual(SAMPLE['project_id'], first.project_id)
|
self.assertEqual(SAMPLE['project_id'], first.project_id)
|
||||||
|
@ -111,26 +81,3 @@ class TestSample(testtools.TestCase):
|
||||||
self.assertEqual(SAMPLE['unit'], first.unit)
|
self.assertEqual(SAMPLE['unit'], first.unit)
|
||||||
self.assertEqual(SAMPLE['user_id'], first.user_id)
|
self.assertEqual(SAMPLE['user_id'], first.user_id)
|
||||||
self.assertEqual(SAMPLE['volume'], first.volume)
|
self.assertEqual(SAMPLE['volume'], first.volume)
|
||||||
second = next(found)
|
|
||||||
self.assertEqual(OLD_SAMPLE['counter_name'], second.counter_name)
|
|
||||||
|
|
||||||
def test_create(self):
|
|
||||||
sess = mock.Mock()
|
|
||||||
resp = mock.Mock()
|
|
||||||
resp.json = mock.Mock(return_value=[SAMPLE])
|
|
||||||
sess.post = mock.Mock(return_value=resp)
|
|
||||||
|
|
||||||
data = {'sample_id': None,
|
|
||||||
'counter_name': 'temperature',
|
|
||||||
'project_id': 'project',
|
|
||||||
'resource_id': 'resource',
|
|
||||||
'type': 'gauge',
|
|
||||||
'unit': 'instance',
|
|
||||||
'volume': '98.6'}
|
|
||||||
new_sample = sample.Sample.new(**data)
|
|
||||||
|
|
||||||
new_sample.create(sess)
|
|
||||||
url = '/meters/temperature'
|
|
||||||
sess.post.assert_called_with(url, endpoint_filter=new_sample.service,
|
|
||||||
json=[data])
|
|
||||||
self.assertIsNone(new_sample.id)
|
|
||||||
|
|
|
@ -42,14 +42,14 @@ class TestStatistics(testtools.TestCase):
|
||||||
self.assertEqual('/meters/%(meter_name)s/statistics', sot.base_path)
|
self.assertEqual('/meters/%(meter_name)s/statistics', sot.base_path)
|
||||||
self.assertEqual('metering', sot.service.service_type)
|
self.assertEqual('metering', sot.service.service_type)
|
||||||
self.assertFalse(sot.allow_create)
|
self.assertFalse(sot.allow_create)
|
||||||
self.assertFalse(sot.allow_retrieve)
|
self.assertFalse(sot.allow_get)
|
||||||
self.assertFalse(sot.allow_update)
|
self.assertFalse(sot.allow_update)
|
||||||
self.assertFalse(sot.allow_delete)
|
self.assertFalse(sot.allow_delete)
|
||||||
self.assertTrue(sot.allow_list)
|
self.assertTrue(sot.allow_list)
|
||||||
|
|
||||||
def test_make_it(self):
|
def test_make_it(self):
|
||||||
sot = statistics.Statistics(EXAMPLE)
|
sot = statistics.Statistics(**EXAMPLE)
|
||||||
self.assertIsNone(sot.id)
|
self.assertEqual(EXAMPLE['unit'], sot.id)
|
||||||
self.assertEqual(EXAMPLE['aggregate'], sot.aggregate)
|
self.assertEqual(EXAMPLE['aggregate'], sot.aggregate)
|
||||||
self.assertEqual(EXAMPLE['avg'], sot.avg)
|
self.assertEqual(EXAMPLE['avg'], sot.avg)
|
||||||
self.assertEqual(EXAMPLE['count'], sot.count)
|
self.assertEqual(EXAMPLE['count'], sot.count)
|
||||||
|
@ -70,13 +70,24 @@ class TestStatistics(testtools.TestCase):
|
||||||
resp = mock.Mock()
|
resp = mock.Mock()
|
||||||
resp.json = mock.Mock(return_value=[EXAMPLE])
|
resp.json = mock.Mock(return_value=[EXAMPLE])
|
||||||
sess.get = mock.Mock(return_value=resp)
|
sess.get = mock.Mock(return_value=resp)
|
||||||
|
reply = statistics.Statistics.list(sess, meter_name='example')
|
||||||
args = {'meter_name': 'example'}
|
|
||||||
reply = statistics.Statistics.list(sess, path_args=args)
|
|
||||||
|
|
||||||
url = '/meters/example/statistics'
|
url = '/meters/example/statistics'
|
||||||
stat = next(reply)
|
stat = next(reply)
|
||||||
sess.get.assert_called_with(url, endpoint_filter=stat.service,
|
sess.get.assert_called_with(url, endpoint_filter=stat.service,
|
||||||
params={})
|
params={})
|
||||||
self.assertEqual(EXAMPLE, stat)
|
self.assertEqual(EXAMPLE['aggregate'], stat.aggregate)
|
||||||
|
self.assertEqual(EXAMPLE['avg'], stat.avg)
|
||||||
|
self.assertEqual(EXAMPLE['count'], stat.count)
|
||||||
|
self.assertEqual(EXAMPLE['duration'], stat.duration)
|
||||||
|
self.assertEqual(EXAMPLE['duration_end'], stat.duration_end_at)
|
||||||
|
self.assertEqual(EXAMPLE['duration_start'], stat.duration_start_at)
|
||||||
|
self.assertEqual(EXAMPLE['groupby'], stat.group_by)
|
||||||
|
self.assertEqual(EXAMPLE['max'], stat.max)
|
||||||
|
self.assertEqual(EXAMPLE['min'], stat.min)
|
||||||
|
self.assertEqual(EXAMPLE['period'], stat.period)
|
||||||
|
self.assertEqual(EXAMPLE['period_end'], stat.period_end_at)
|
||||||
|
self.assertEqual(EXAMPLE['period_start'], stat.period_start_at)
|
||||||
|
self.assertEqual(EXAMPLE['sum'], stat.sum)
|
||||||
|
self.assertEqual(EXAMPLE['unit'], stat.unit)
|
||||||
self.assertRaises(StopIteration, next, reply)
|
self.assertRaises(StopIteration, next, reply)
|
||||||
|
|
Loading…
Reference in New Issue