summaryrefslogtreecommitdiff
path: root/ceilometer/network/services/lbaas.py
diff options
context:
space:
mode:
Diffstat (limited to 'ceilometer/network/services/lbaas.py')
-rw-r--r--ceilometer/network/services/lbaas.py466
1 files changed, 0 insertions, 466 deletions
diff --git a/ceilometer/network/services/lbaas.py b/ceilometer/network/services/lbaas.py
deleted file mode 100644
index 85d63dce..00000000
--- a/ceilometer/network/services/lbaas.py
+++ /dev/null
@@ -1,466 +0,0 @@
-#
-# Copyright 2014 Cisco Systems,Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import abc
-import collections
-import warnings
-
-from oslo_log import log
-
-from ceilometer.i18n import _
-from ceilometer.network.services import base
-from ceilometer import neutron_client
-from ceilometer import sample
-
-LOG = log.getLogger(__name__)
-
-LBStatsData = collections.namedtuple(
- 'LBStats',
- ['active_connections', 'total_connections', 'bytes_in', 'bytes_out']
-)
-
-LOAD_BALANCER_STATUS_V2 = {
- 'offline': 0,
- 'online': 1,
- 'no_monitor': 3,
- 'error': 4,
- 'degraded': 5,
- 'disabled': 6
-}
-
-
-class BaseLBPollster(base.BaseServicesPollster):
- """Base Class for Load Balancer pollster"""
-
- def __init__(self, conf):
- super(BaseLBPollster, self).__init__(conf)
- self.lb_version = self.conf.service_types.neutron_lbaas_version
-
- warnings.warn('Support for Neutron LBaaS has been deprecated '
- 'and will be removed in a future release.',
- category=DeprecationWarning, stacklevel=3)
-
- def get_load_balancer_status_id(self, value):
- if self.lb_version == 'v1':
- resource_status = self.get_status_id(value)
- elif self.lb_version == 'v2':
- status = value.lower()
- resource_status = LOAD_BALANCER_STATUS_V2.get(status, -1)
- return resource_status
-
-
-class LBPoolPollster(BaseLBPollster):
- """Pollster to capture Load Balancer pool status samples."""
-
- FIELDS = ['admin_state_up',
- 'description',
- 'lb_method',
- 'name',
- 'protocol',
- 'provider',
- 'status',
- 'status_description',
- 'subnet_id',
- 'vip_id'
- ]
-
- @property
- def default_discovery(self):
- return 'lb_pools'
-
- def get_samples(self, manager, cache, resources):
- resources = resources or []
-
- for pool in resources:
- LOG.debug("Load Balancer Pool : %s" % pool)
- status = self.get_load_balancer_status_id(pool['status'])
- if status == -1:
- # unknown status, skip this sample
- LOG.warning(_("Unknown status %(stat)s received on pool "
- "%(id)s, skipping sample")
- % {'stat': pool['status'], 'id': pool['id']})
- continue
-
- yield sample.Sample(
- name='network.services.lb.pool',
- type=sample.TYPE_GAUGE,
- unit='pool',
- volume=status,
- user_id=None,
- project_id=pool['tenant_id'],
- resource_id=pool['id'],
- resource_metadata=self.extract_metadata(pool)
- )
-
-
-class LBVipPollster(base.BaseServicesPollster):
- """Pollster to capture Load Balancer Vip status samples."""
-
- FIELDS = ['admin_state_up',
- 'address',
- 'connection_limit',
- 'description',
- 'name',
- 'pool_id',
- 'port_id',
- 'protocol',
- 'protocol_port',
- 'status',
- 'status_description',
- 'subnet_id',
- 'session_persistence',
- ]
-
- @property
- def default_discovery(self):
- return 'lb_vips'
-
- def get_samples(self, manager, cache, resources):
- resources = resources or []
-
- for vip in resources:
- LOG.debug("Load Balancer Vip : %s" % vip)
- status = self.get_status_id(vip['status'])
- if status == -1:
- # unknown status, skip this sample
- LOG.warning(_("Unknown status %(stat)s received on vip "
- "%(id)s, skipping sample")
- % {'stat': vip['status'], 'id': vip['id']})
- continue
-
- yield sample.Sample(
- name='network.services.lb.vip',
- type=sample.TYPE_GAUGE,
- unit='vip',
- volume=status,
- user_id=None,
- project_id=vip['tenant_id'],
- resource_id=vip['id'],
- resource_metadata=self.extract_metadata(vip)
- )
-
-
-class LBMemberPollster(BaseLBPollster):
- """Pollster to capture Load Balancer Member status samples."""
-
- FIELDS = ['admin_state_up',
- 'address',
- 'pool_id',
- 'protocol_port',
- 'status',
- 'status_description',
- 'weight',
- ]
-
- @property
- def default_discovery(self):
- return 'lb_members'
-
- def get_samples(self, manager, cache, resources):
- resources = resources or []
-
- for member in resources:
- LOG.debug("Load Balancer Member : %s" % member)
- status = self.get_load_balancer_status_id(member['status'])
- if status == -1:
- LOG.warning(_("Unknown status %(stat)s received on member "
- "%(id)s, skipping sample")
- % {'stat': member['status'], 'id': member['id']})
- continue
- yield sample.Sample(
- name='network.services.lb.member',
- type=sample.TYPE_GAUGE,
- unit='member',
- volume=status,
- user_id=None,
- project_id=member['tenant_id'],
- resource_id=member['id'],
- resource_metadata=self.extract_metadata(member)
- )
-
-
-class LBHealthMonitorPollster(base.BaseServicesPollster):
- """Pollster to capture Load Balancer Health probes status samples."""
-
- FIELDS = ['admin_state_up',
- 'delay',
- 'max_retries',
- 'pools',
- 'timeout',
- 'type'
- ]
-
- @property
- def default_discovery(self):
- return 'lb_health_probes'
-
- def get_samples(self, manager, cache, resources):
- for probe in resources:
- LOG.debug("Load Balancer Health probe : %s" % probe)
- yield sample.Sample(
- name='network.services.lb.health_monitor',
- type=sample.TYPE_GAUGE,
- unit='health_monitor',
- volume=1,
- user_id=None,
- project_id=probe['tenant_id'],
- resource_id=probe['id'],
- resource_metadata=self.extract_metadata(probe)
- )
-
-
-class _LBStatsPollster(base.BaseServicesPollster, metaclass=abc.ABCMeta):
- """Base Statistics pollster.
-
- It is capturing the statistics info and yielding samples for connections
- and bandwidth.
- """
-
- def __init__(self, conf):
- super(_LBStatsPollster, self).__init__(conf)
- self.client = neutron_client.Client(self.conf)
- self.lb_version = self.conf.service_types.neutron_lbaas_version
-
- @staticmethod
- def make_sample_from_pool(pool, name, type, unit, volume,
- resource_metadata=None):
- if not resource_metadata:
- resource_metadata = {}
- return sample.Sample(
- name=name,
- type=type,
- unit=unit,
- volume=volume,
- user_id=None,
- project_id=pool['tenant_id'],
- resource_id=pool['id'],
- resource_metadata=resource_metadata,
- )
-
- def _populate_stats_cache(self, pool_id, cache):
- i_cache = cache.setdefault("lbstats", {})
- if pool_id not in i_cache:
- stats = self.client.pool_stats(pool_id)['stats']
- i_cache[pool_id] = LBStatsData(
- active_connections=stats['active_connections'],
- total_connections=stats['total_connections'],
- bytes_in=stats['bytes_in'],
- bytes_out=stats['bytes_out'],
- )
- return i_cache[pool_id]
-
- def _populate_stats_cache_v2(self, loadbalancer_id, cache):
- i_cache = cache.setdefault("lbstats", {})
- if loadbalancer_id not in i_cache:
- stats = self.client.get_loadbalancer_stats(loadbalancer_id)
- i_cache[loadbalancer_id] = LBStatsData(
- active_connections=stats['active_connections'],
- total_connections=stats['total_connections'],
- bytes_in=stats['bytes_in'],
- bytes_out=stats['bytes_out'],
- )
- return i_cache[loadbalancer_id]
-
- @property
- def default_discovery(self):
- discovery_resource = 'lb_pools'
- if self.lb_version == 'v2':
- discovery_resource = 'lb_loadbalancers'
- return discovery_resource
-
- @abc.abstractmethod
- def _get_sample(pool, c_data):
- """Return one Sample."""
-
- def get_samples(self, manager, cache, resources):
- if self.lb_version == 'v1':
- for pool in resources:
- try:
- c_data = self._populate_stats_cache(pool['id'], cache)
- yield self._get_sample(pool, c_data)
- except Exception:
- LOG.exception('Ignoring pool %(pool_id)s',
- {'pool_id': pool['id']})
- elif self.lb_version == 'v2':
- for loadbalancer in resources:
- try:
- c_data = self._populate_stats_cache_v2(loadbalancer['id'],
- cache)
- yield self._get_sample(loadbalancer, c_data)
- except Exception:
- LOG.exception(
- 'Ignoring loadbalancer %(loadbalancer_id)s',
- {'loadbalancer_id': loadbalancer['id']})
-
-
-class LBActiveConnectionsPollster(_LBStatsPollster):
- """Pollster to capture Active Load Balancer connections."""
-
- @staticmethod
- def _get_sample(pool, data):
- return make_sample_from_pool(
- pool,
- name='network.services.lb.active.connections',
- type=sample.TYPE_GAUGE,
- unit='connection',
- volume=data.active_connections,
- )
-
-
-class LBTotalConnectionsPollster(_LBStatsPollster):
- """Pollster to capture Total Load Balancer connections."""
-
- @staticmethod
- def _get_sample(pool, data):
- return make_sample_from_pool(
- pool,
- name='network.services.lb.total.connections',
- type=sample.TYPE_CUMULATIVE,
- unit='connection',
- volume=data.total_connections,
- )
-
-
-class LBBytesInPollster(_LBStatsPollster):
- """Pollster to capture incoming bytes."""
-
- @staticmethod
- def _get_sample(pool, data):
- return make_sample_from_pool(
- pool,
- name='network.services.lb.incoming.bytes',
- type=sample.TYPE_GAUGE,
- unit='B',
- volume=data.bytes_in,
- )
-
-
-class LBBytesOutPollster(_LBStatsPollster):
- """Pollster to capture outgoing bytes."""
-
- @staticmethod
- def _get_sample(pool, data):
- return make_sample_from_pool(
- pool,
- name='network.services.lb.outgoing.bytes',
- type=sample.TYPE_GAUGE,
- unit='B',
- volume=data.bytes_out,
- )
-
-
-def make_sample_from_pool(pool, name, type, unit, volume,
- resource_metadata=None):
- resource_metadata = resource_metadata or {}
-
- return sample.Sample(
- name=name,
- type=type,
- unit=unit,
- volume=volume,
- user_id=None,
- project_id=pool['tenant_id'],
- resource_id=pool['id'],
- resource_metadata=resource_metadata,
- )
-
-
-class LBListenerPollster(BaseLBPollster):
- """Pollster to capture Load Balancer Listener status samples."""
-
- FIELDS = ['admin_state_up',
- 'connection_limit',
- 'description',
- 'name',
- 'default_pool_id',
- 'protocol',
- 'protocol_port',
- 'operating_status',
- 'loadbalancers'
- ]
-
- @property
- def default_discovery(self):
- return 'lb_listeners'
-
- def get_samples(self, manager, cache, resources):
- resources = resources or []
-
- for listener in resources:
- LOG.debug("Load Balancer Listener : %s" % listener)
- status = self.get_load_balancer_status_id(
- listener['operating_status'])
- if status == -1:
- # unknown status, skip this sample
- LOG.warning(_("Unknown status %(stat)s received on listener "
- "%(id)s, skipping sample")
- % {'stat': listener['operating_status'],
- 'id': listener['id']})
- continue
-
- yield sample.Sample(
- name='network.services.lb.listener',
- type=sample.TYPE_GAUGE,
- unit='listener',
- volume=status,
- user_id=None,
- project_id=listener['tenant_id'],
- resource_id=listener['id'],
- resource_metadata=self.extract_metadata(listener)
- )
-
-
-class LBLoadBalancerPollster(BaseLBPollster):
- """Pollster to capture Load Balancer status samples."""
-
- FIELDS = ['admin_state_up',
- 'description',
- 'vip_address',
- 'listeners',
- 'name',
- 'vip_subnet_id',
- 'operating_status',
- ]
-
- @property
- def default_discovery(self):
- return 'lb_loadbalancers'
-
- def get_samples(self, manager, cache, resources):
- resources = resources or []
-
- for loadbalancer in resources:
- LOG.debug("Load Balancer: %s" % loadbalancer)
- status = self.get_load_balancer_status_id(
- loadbalancer['operating_status'])
- if status == -1:
- # unknown status, skip this sample
- LOG.warning(_("Unknown status %(stat)s received "
- "on Load Balancer "
- "%(id)s, skipping sample")
- % {'stat': loadbalancer['operating_status'],
- 'id': loadbalancer['id']})
- continue
-
- yield sample.Sample(
- name='network.services.lb.loadbalancer',
- type=sample.TYPE_GAUGE,
- unit='loadbalancer',
- volume=status,
- user_id=None,
- project_id=loadbalancer['tenant_id'],
- resource_id=loadbalancer['id'],
- resource_metadata=self.extract_metadata(loadbalancer)
- )