From c54afa1628f65f86b9a48bfbe9e285ca2dd28b53 Mon Sep 17 00:00:00 2001 From: Emma Foley Date: Wed, 14 Mar 2018 14:26:29 +0000 Subject: [PATCH] Add DEFAULT_ARCHIVE_POLICY config option for gnocchi Added a DEFAULT_ARCHIVE_POLICY option to Gnocchi plugin, The user can now configure the archive policy that the metrics should use. Change-Id: I445c4bc98b6431a39cf805a00b6237d8090a0b98 --- collectd_openstack/common/settings.py | 2 ++ collectd_openstack/gnocchi/sender.py | 13 +++++++++---- collectd_openstack/gnocchi/writer.py | 2 +- collectd_openstack/tests/aodh/test_plugin.py | 3 ++- collectd_openstack/tests/common/test_config.py | 1 + collectd_openstack/tests/gnocchi/test_plugin.py | 2 +- collectd_openstack/tests/gnocchi/test_sender.py | 6 +++++- 7 files changed, 21 insertions(+), 8 deletions(-) diff --git a/collectd_openstack/common/settings.py b/collectd_openstack/common/settings.py index e78caa4..30ba98e 100644 --- a/collectd_openstack/common/settings.py +++ b/collectd_openstack/common/settings.py @@ -59,6 +59,8 @@ class Config(object): CfgParam('OS_TENANT_NAME', None, six.text_type), CfgParam('VERBOSE', False, bool), CfgParam('LIBVIRT_METER_ENABLED', False, bool), + # Gnocchi only + CfgParam('DEFAULT_ARCHIVE_POLICY', None, six.text_type), CfgParam('LIBVIRT_CONN_URI', 'qemu:///system', six.text_type), ] diff --git a/collectd_openstack/gnocchi/sender.py b/collectd_openstack/gnocchi/sender.py index 1e0d3bc..82a38f8 100644 --- a/collectd_openstack/gnocchi/sender.py +++ b/collectd_openstack/gnocchi/sender.py @@ -30,13 +30,14 @@ ROOT_LOGGER = logging.getLogger(collectd_openstack.__name__) class Sender(common_sender.Sender): """Sends the JSON serialized data to Gnocchi""" - def __init__(self): + def __init__(self, config): """Create the Sender instance The cofinguration must be initialized before the object is created. """ super(Sender, self).__init__() self._meter_ids = {} + self._config = config def _on_authenticated(self): # get the uri of service endpoint @@ -100,9 +101,13 @@ class Sender(common_sender.Sender): def _create_metric(self, metername, endpoint, unit): url = "{}/v1/metric/".format(endpoint) - payload = json.dumps({"name": metername, - "unit": unit, - }) + data = {"name": metername, + "unit": unit, + } + if self._config.DEFAULT_ARCHIVE_POLICY: + data["archive_policy_name"] = self._config.DEFAULT_ARCHIVE_POLICY + + payload = json.dumps(data) result = self._perform_request(url, payload, self._auth_token) metric_id = json.loads(result.text)['id'] LOGGER.debug("metric_id=%s", metric_id) diff --git a/collectd_openstack/gnocchi/writer.py b/collectd_openstack/gnocchi/writer.py index a837749..848318d 100644 --- a/collectd_openstack/gnocchi/writer.py +++ b/collectd_openstack/gnocchi/writer.py @@ -44,7 +44,7 @@ class Writer(object): def __init__(self, meters, config): self._meters = meters self._samples = SampleContainer() - self._sender = gnocchi_sender.Sender() + self._sender = gnocchi_sender.Sender(config) self._config = config def write(self, vl, data): diff --git a/collectd_openstack/tests/aodh/test_plugin.py b/collectd_openstack/tests/aodh/test_plugin.py index ddce3af..bfbdcf6 100644 --- a/collectd_openstack/tests/aodh/test_plugin.py +++ b/collectd_openstack/tests/aodh/test_plugin.py @@ -165,7 +165,8 @@ class TestPlugin(unittest.TestCase): CEILOMETER_TIMEOUT=1000, OS_USERNAME='tester', OS_PASSWORD='testpasswd', - OS_TENANT_NAME='service') + OS_TENANT_NAME='service', + DEFAULT_ARCHIVE_POLICY='') @mock.patch.object(plugin, 'Plugin', autospec=True) @mock.patch.object(plugin, 'Config', autospec=True) diff --git a/collectd_openstack/tests/common/test_config.py b/collectd_openstack/tests/common/test_config.py index abf714c..a7d6728 100644 --- a/collectd_openstack/tests/common/test_config.py +++ b/collectd_openstack/tests/common/test_config.py @@ -87,6 +87,7 @@ class TestConfig(TestCase): OS_USERNAME='tester', OS_PASSWORD='testpasswd', OS_TENANT_NAME='service', + DEFAULT_ARCHIVE_POLICY='', LIBVIRT_METER_ENABLED=False) @mock.patch.object(settings, 'LOGGER', autospec=True) diff --git a/collectd_openstack/tests/gnocchi/test_plugin.py b/collectd_openstack/tests/gnocchi/test_plugin.py index e7d2558..2bc20c5 100644 --- a/collectd_openstack/tests/gnocchi/test_plugin.py +++ b/collectd_openstack/tests/gnocchi/test_plugin.py @@ -253,7 +253,7 @@ class TestPlugin(unittest.TestCase): @mock.patch.object(common_sender.Sender, '_perform_request', spec=callable) @mock.patch.object(common_sender, 'ClientV3', autospec=True) @mock_collectd() - @mock_config() + @mock_config(DEFAULT_ARCHIVE_POLICY='') @mock_value() def test_request_error( self, data, config, collectd, ClientV3, perf_req): diff --git a/collectd_openstack/tests/gnocchi/test_sender.py b/collectd_openstack/tests/gnocchi/test_sender.py index ee5538d..8d8fd95 100644 --- a/collectd_openstack/tests/gnocchi/test_sender.py +++ b/collectd_openstack/tests/gnocchi/test_sender.py @@ -24,11 +24,15 @@ import unittest from collectd_openstack.gnocchi import sender as gnocchi_sender +class MockedConfig(object): + DEFAULT_ARCHIVE_POLICY = '' + + class TestGnocchiSender(unittest.TestCase): """Test the sender class.""" def setUp(self): - self.sender = gnocchi_sender.Sender() + self.sender = gnocchi_sender.Sender(config=MockedConfig) self.sender._url_base = \ "http://my-endpoint/v1/metric/%s/measures"