diff --git a/neutron_lbaas/drivers/driver_base.py b/neutron_lbaas/drivers/driver_base.py index ad10ffd22..d4d963032 100644 --- a/neutron_lbaas/drivers/driver_base.py +++ b/neutron_lbaas/drivers/driver_base.py @@ -61,9 +61,12 @@ class LoadBalancerBaseDriver(object): self.plugin = plugin def handle_streamed_event(self, container): - # TODO(crc32): update_stats will be implemented here in the future if container.info_type not in LoadBalancerBaseDriver.model_map: - if container.info_type == constants.LISTENER_STATS_EVENT: + if container.info_type == constants.LOADBALANCER_STATS_EVENT: + context = ncontext.get_admin_context() + self.plugin.db.update_loadbalancer_stats( + context, container.info_id, container.info_payload) + elif container.info_type == constants.LISTENER_STATS_EVENT: return else: exc = exceptions.ModelMapException( diff --git a/neutron_lbaas/services/loadbalancer/constants.py b/neutron_lbaas/services/loadbalancer/constants.py index a2267e58f..71f4be79c 100644 --- a/neutron_lbaas/services/loadbalancer/constants.py +++ b/neutron_lbaas/services/loadbalancer/constants.py @@ -167,6 +167,7 @@ MIN_CONNECT_VALUE = -1 LISTENER_EVENT = 'listener' LISTENER_STATS_EVENT = 'listener_stats' LOADBALANCER_EVENT = 'loadbalancer' +LOADBALANCER_STATS_EVENT = 'loadbalancer_stats' MEMBER_EVENT = 'member' OPERATING_STATUS = 'operating_status' POOL_EVENT = 'pool' diff --git a/neutron_lbaas/tests/unit/drivers/octavia/test_octavia_messaging_consumer.py b/neutron_lbaas/tests/unit/drivers/octavia/test_octavia_messaging_consumer.py index b97c18c2c..fa6030b2d 100644 --- a/neutron_lbaas/tests/unit/drivers/octavia/test_octavia_messaging_consumer.py +++ b/neutron_lbaas/tests/unit/drivers/octavia/test_octavia_messaging_consumer.py @@ -138,6 +138,21 @@ class TestOctaviaMessagingConsumer(test_octavia_driver.BaseOctaviaDriverTest): self.assertRaises(exceptions.ModelMapException, self.consumer.endpoints[0].update_info, {}, cnt) + def test_update_loadbalancer_stats(self): + self.set_db_mocks() + stats = { + 'bytes_in': 1, + 'bytes_out': 2, + 'active_connections': 3, + 'total_connections': 4, + 'request_errors': 5, + } + cnt = InfoContainer(constants.LOADBALANCER_STATS_EVENT, 'lb_id', + stats).to_dict() + self.consumer.endpoints[0].update_info({}, cnt) + self.driver.plugin.db.update_loadbalancer_stats.assert_called_with( + mock.ANY, 'lb_id', stats) + def test_updatedb_ignores_listener_stats(self): self.set_db_mocks() cnt = InfoContainer('listener_stats', 'id', self.payload).to_dict()