~ubuntu-branches/ubuntu/vivid/ceilometer/vivid-proposed

« back to all changes in this revision

Viewing changes to ceilometer/notification.py

  • Committer: Package Import Robot
  • Author(s): James Page, James Page, Corey Bryant
  • Date: 2015-03-30 11:06:18 UTC
  • mfrom: (1.2.4)
  • Revision ID: package-import@ubuntu.com-20150330110618-e2tv3bmga3lmun41
Tags: 2015.1~b3-0ubuntu1
[ James Page ]
* d/pydist-overrides: Add overrides for oslo packages.
* d/p/disable-kafka.patch: Disable requirement for Apache Kafka for Ubuntu
  Vivid release.
* d/control: Fixup minor typos in package descriptions (LP: #1256279).

[ Corey Bryant ]
* New upstream milestone release for OpenStack kilo:
  - d/control: Align with upstream dependencies.
  - d/p/skip-test.patch: Rebased.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
from oslo_context import context
19
19
from stevedore import extension
20
20
 
 
21
from ceilometer.agent import plugin_base as base
21
22
from ceilometer import coordination
22
23
from ceilometer.event import endpoint as event_endpoint
23
 
from ceilometer.i18n import _
 
24
from ceilometer.i18n import _, _LW
24
25
from ceilometer import messaging
25
26
from ceilometer.openstack.common import log
26
27
from ceilometer.openstack.common import service as os_service
40
41
                deprecated_group='collector',
41
42
                default=False,
42
43
                help='Save event details.'),
 
44
    cfg.BoolOpt('disable_non_metric_meters',
 
45
                default=False,
 
46
                help='WARNING: Ceilometer historically offered the ability to '
 
47
                     'store events as meters. This usage is NOT advised as it '
 
48
                     'can flood the metering database and cause performance '
 
49
                     'degradation. This option disables the collection of '
 
50
                     'non-metric meters and will be the default behavior in '
 
51
                     'Liberty.'),
43
52
    cfg.BoolOpt('workload_partitioning',
44
53
                default=False,
45
54
                help='Enable workload partitioning, allowing multiple '
70
79
    NOTIFICATION_NAMESPACE = 'ceilometer.notification'
71
80
    NOTIFICATION_IPC = 'ceilometer-pipe'
72
81
 
 
82
    def __init__(self, *args, **kwargs):
 
83
        super(NotificationService, self).__init__(*args, **kwargs)
 
84
        self.partition_coordinator = None
 
85
        self.listeners, self.pipeline_listeners = [], []
 
86
        self.group_id = None
 
87
 
73
88
    @classmethod
74
89
    def _get_notifications_manager(cls, transporter):
75
90
        return extension.ExtensionManager(
121
136
                event_transporter = self.event_pipeline_manager
122
137
            self.group_id = None
123
138
 
124
 
        self.listeners = self.pipeline_listeners = []
 
139
        self.listeners, self.pipeline_listeners = [], []
125
140
        self._configure_main_queue_listeners(transporter, event_transporter)
126
141
 
127
142
        if cfg.CONF.notification.workload_partitioning:
135
150
            self.tg.add_timer(cfg.CONF.coordination.check_watchers,
136
151
                              self.partition_coordinator.run_watchers)
137
152
 
 
153
        if not cfg.CONF.notification.disable_non_metric_meters:
 
154
            LOG.warning(_LW('Non-metric meters may be collected. It is highly '
 
155
                            'advisable to disable these meters using '
 
156
                            'ceilometer.conf or the pipeline.yaml'))
138
157
        # Add a dummy thread to have wait() working
139
158
        self.tg.add_timer(604800, lambda: None)
140
159
 
154
173
        targets = []
155
174
        for ext in notification_manager:
156
175
            handler = ext.obj
 
176
            if (cfg.CONF.notification.disable_non_metric_meters and
 
177
                    isinstance(handler, base.NonMetricNotificationBase)):
 
178
                continue
157
179
            LOG.debug(_('Event types from %(name)s: %(type)s'
158
180
                        ' (ack_on_error=%(error)s)') %
159
181
                      {'name': ext.name,
201
223
            self.pipeline_listeners.append(listener)
202
224
 
203
225
    def stop(self):
204
 
        self.partition_coordinator.leave_group(self.group_id)
 
226
        if self.partition_coordinator:
 
227
            self.partition_coordinator.stop()
205
228
        utils.kill_listeners(self.listeners + self.pipeline_listeners)
206
229
        super(NotificationService, self).stop()