diff --git a/neutron_plugin_contrail/plugins/opencontrail/loadbalancer/loadbalancer_member.py b/neutron_plugin_contrail/plugins/opencontrail/loadbalancer/loadbalancer_member.py index 77f0cf4..83b5849 100644 --- a/neutron_plugin_contrail/plugins/opencontrail/loadbalancer/loadbalancer_member.py +++ b/neutron_plugin_contrail/plugins/opencontrail/loadbalancer/loadbalancer_member.py @@ -42,6 +42,29 @@ def _get_member_pool_id(self, member): pool_uuid = member.parent_uuid return pool_uuid + def _get_object_status(self, member): + endpoint = "http://%s:%s" % (cfg.CONF.COLLECTOR.analytics_api_ip, + cfg.CONF.COLLECTOR.analytics_api_port) + analytics = analytics_client.Client(endpoint) + path = "/analytics/uves/service-instance/" + fqdn_uuid = "%s?cfilt=UveLoadbalancer" % member.parent_uuid + try: + lb_stats = analytics.request(path, fqdn_uuid) + member_stats = lb_stats['UveLoadbalancer']['member_stats'] + except Exception: + member_stats = [] + + # In case of missing analytics, return ACTIVE + if not member_stats: + return constants.ACTIVE + + for member_stat in member_stats: + if member_stat['uuid'] == member.uuid and \ + member_stat['status'] == 'ACTIVE': + return member_stat['status'] + + return constants.DOWN + def make_dict(self, member, fields=None): res = {'id': member.uuid, 'pool_id': member.parent_uuid,