deb-ceilometer/ceilometer/plugin.py
Doug Hellmann 05d6992ad7 Provide a way to disable some plugins
Provide configuration options for the three plugin sets
users may want to manage (compute pollsters, central
pollsters, and notification listeners).

Extend the plugin API so the extension manager can ask
each plugin if it should be enabled. This allows, for
example, the libvirt pollster to be loaded but then
recognize that it should not be used and disable itself.

Addresses bug #1021350

Change-Id: I82da823845ec49c1a93272411c43073bd4954377
Signed-off-by: Doug Hellmann <doug.hellmann@dreamhost.com>
2012-10-30 15:19:02 -04:00

84 lines
2.5 KiB
Python

# -*- encoding: utf-8 -*-
#
# Copyright © 2012 New Dream Network, LLC (DreamHost)
#
# Author: Doug Hellmann <doug.hellmann@dreamhost.com>
#
# 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.
"""Base class for plugins.
"""
import abc
from collections import namedtuple
from ceilometer.openstack.common import cfg
# Import rabbit_notifier to register notification_topics flag so that
# plugins can use it
import ceilometer.openstack.common.notifier.rabbit_notifier
ExchangeTopics = namedtuple('ExchangeTopics', ['exchange', 'topics'])
class PluginBase(object):
"""Base class for all plugins.
"""
def is_enabled(self):
"""Return boolean indicating whether this plugin should
be enabled and used by the caller.
"""
return True
class NotificationBase(PluginBase):
"""Base class for plugins that support the notification API."""
__metaclass__ = abc.ABCMeta
def is_enabled(self):
return True
@abc.abstractmethod
def get_event_types(self):
"""Return a sequence of strings defining the event types to be
given to this plugin."""
@abc.abstractmethod
def get_exchange_topics(self, conf):
"""Return a sequence of ExchangeTopics defining the exchange and
topics to be connected for this plugin."""
@abc.abstractmethod
def process_notification(self, message):
"""Return a sequence of Counter instances for the given message."""
def notification_to_metadata(self, event):
"""Transform a payload dict to a metadata dict."""
metadata = dict([(k, event['payload'].get(k))
for k in self.metadata_keys])
metadata['event_type'] = event['event_type']
metadata['host'] = event['publisher_id']
return metadata
class PollsterBase(PluginBase):
"""Base class for plugins that support the polling API."""
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def get_counters(self, manager, instance):
"""Return a sequence of Counter instances from polling the
resources."""