Merge "Clean the deprecated non-metric related code"
This commit is contained in:
@@ -1,41 +0,0 @@
|
||||
#
|
||||
# Copyright 2013 Intel
|
||||
#
|
||||
# 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.
|
||||
|
||||
from oslo_config import cfg
|
||||
import oslo_messaging
|
||||
|
||||
from ceilometer.agent import plugin_base
|
||||
|
||||
|
||||
OPTS = [
|
||||
cfg.StrOpt('nova_control_exchange',
|
||||
default='nova',
|
||||
help="Exchange name for Nova notifications."),
|
||||
]
|
||||
|
||||
|
||||
cfg.CONF.register_opts(OPTS)
|
||||
|
||||
|
||||
class ComputeNotificationBase(plugin_base.NotificationBase):
|
||||
def get_targets(self, conf):
|
||||
"""Return a sequence of oslo_messaging.Target
|
||||
|
||||
This sequence is defining the exchange and topics to be connected for
|
||||
this plugin.
|
||||
"""
|
||||
return [oslo_messaging.Target(topic=topic,
|
||||
exchange=conf.nova_control_exchange)
|
||||
for topic in self.get_notification_topics(conf)]
|
@@ -1,89 +0,0 @@
|
||||
#
|
||||
# Copyright 2012 New Dream Network, LLC (DreamHost)
|
||||
# Copyright 2013 eNovance
|
||||
#
|
||||
# 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.
|
||||
"""Converters for producing compute sample messages from notification events.
|
||||
"""
|
||||
|
||||
import abc
|
||||
|
||||
import six
|
||||
|
||||
from ceilometer.agent import plugin_base
|
||||
from ceilometer.compute import notifications
|
||||
from ceilometer.compute import util
|
||||
from ceilometer import sample
|
||||
|
||||
|
||||
@six.add_metaclass(abc.ABCMeta)
|
||||
class UserMetadataAwareInstanceNotificationBase(
|
||||
notifications.ComputeNotificationBase):
|
||||
"""Consumes notifications containing instance user metadata."""
|
||||
|
||||
def process_notification(self, message):
|
||||
instance_properties = self.get_instance_properties(message)
|
||||
if isinstance(instance_properties.get('metadata'), dict):
|
||||
src_metadata = instance_properties['metadata']
|
||||
del instance_properties['metadata']
|
||||
util.add_reserved_user_metadata(src_metadata, instance_properties)
|
||||
return self.get_sample(message)
|
||||
|
||||
def get_instance_properties(self, message):
|
||||
"""Retrieve instance properties from notification payload."""
|
||||
return message['payload']
|
||||
|
||||
@abc.abstractmethod
|
||||
def get_sample(self, message):
|
||||
"""Derive sample from notification payload."""
|
||||
|
||||
|
||||
class InstanceScheduled(UserMetadataAwareInstanceNotificationBase,
|
||||
plugin_base.NonMetricNotificationBase):
|
||||
event_types = ['scheduler.run_instance.scheduled']
|
||||
|
||||
def get_instance_properties(self, message):
|
||||
"""Retrieve instance properties from notification payload."""
|
||||
return message['payload']['request_spec']['instance_properties']
|
||||
|
||||
def get_sample(self, message):
|
||||
yield sample.Sample.from_notification(
|
||||
name='instance.scheduled',
|
||||
type=sample.TYPE_DELTA,
|
||||
volume=1,
|
||||
unit='instance',
|
||||
user_id=None,
|
||||
project_id=message['payload']['request_spec']
|
||||
['instance_properties']['project_id'],
|
||||
resource_id=message['payload']['instance_id'],
|
||||
message=message)
|
||||
|
||||
|
||||
class ComputeInstanceNotificationBase(
|
||||
UserMetadataAwareInstanceNotificationBase):
|
||||
"""Convert compute.instance.* notifications into Samples."""
|
||||
event_types = ['compute.instance.*']
|
||||
|
||||
|
||||
class Instance(ComputeInstanceNotificationBase,
|
||||
plugin_base.NonMetricNotificationBase):
|
||||
def get_sample(self, message):
|
||||
yield sample.Sample.from_notification(
|
||||
name='instance',
|
||||
type=sample.TYPE_GAUGE,
|
||||
unit='instance',
|
||||
volume=1,
|
||||
user_id=message['payload']['user_id'],
|
||||
project_id=message['payload']['tenant_id'],
|
||||
resource_id=message['payload']['instance_id'],
|
||||
message=message)
|
@@ -14,6 +14,12 @@
|
||||
from oslo_config import cfg
|
||||
|
||||
EXCHANGE_OPTS = [
|
||||
cfg.StrOpt('nova_control_exchange',
|
||||
default='nova',
|
||||
help="Exchange name for Nova notifications."),
|
||||
cfg.StrOpt('neutron_control_exchange',
|
||||
default='neutron',
|
||||
help="Exchange name for Neutron notifications."),
|
||||
cfg.StrOpt('heat_control_exchange',
|
||||
default='heat',
|
||||
help="Exchange name for Heat notifications"),
|
||||
|
@@ -287,529 +287,3 @@ metric:
|
||||
service_id: $.payload.service_id
|
||||
instance_type: $.payload.instance_type
|
||||
instance_type_id: $.payload.instance_type_id
|
||||
|
||||
|
||||
# NOTE: non-metric meters are generally events/existence meters
|
||||
# These are DEPRECATED in current release and expected to be
|
||||
# REMOVED in the next upcoming release.
|
||||
#
|
||||
# Image
|
||||
- name: "image"
|
||||
event_type:
|
||||
- "image.upload"
|
||||
- "image.update"
|
||||
- "image.delete"
|
||||
type: "gauge"
|
||||
unit: 'image'
|
||||
volume: 1
|
||||
resource_id: $.payload.id
|
||||
project_id: $.payload.owner
|
||||
|
||||
- name: "image.upload"
|
||||
event_type:
|
||||
- "image.upload"
|
||||
type: "gauge"
|
||||
unit: 'image'
|
||||
volume: 1
|
||||
resource_id: $.payload.id
|
||||
project_id: $.payload.owner
|
||||
|
||||
- name: "image.delete"
|
||||
event_type:
|
||||
- "image.delete"
|
||||
type: "gauge"
|
||||
unit: 'image'
|
||||
volume: 1
|
||||
resource_id: $.payload.id
|
||||
project_id: $.payload.owner
|
||||
|
||||
- name: "image.update"
|
||||
event_type:
|
||||
- "image.update"
|
||||
type: "gauge"
|
||||
unit: 'image'
|
||||
volume: 1
|
||||
resource_id: $.payload.id
|
||||
project_id: $.payload.owner
|
||||
|
||||
# Orchestration
|
||||
- name: 'stack.create'
|
||||
event_type:
|
||||
- 'orchestration.stack.create.end'
|
||||
type: 'delta'
|
||||
unit: 'stack'
|
||||
volume: 1
|
||||
user_id: _context_trustor_user_id
|
||||
project_id: $.payload.tenant_id
|
||||
resource_id: $.payload.stack_identity
|
||||
|
||||
- name: 'stack.update'
|
||||
event_type:
|
||||
- 'orchestration.stack.update.end'
|
||||
type: 'delta'
|
||||
unit: 'stack'
|
||||
volume: 1
|
||||
user_id: _context_trustor_user_id
|
||||
project_id: $.payload.tenant_id
|
||||
resource_id: $.payload.stack_identity
|
||||
|
||||
- name: 'stack.delete'
|
||||
event_type:
|
||||
- 'orchestration.stack.delete.end'
|
||||
type: 'delta'
|
||||
unit: 'stack'
|
||||
volume: 1
|
||||
user_id: _context_trustor_user_id
|
||||
project_id: $.payload.tenant_id
|
||||
resource_id: $.payload.stack_identity
|
||||
|
||||
- name: 'stack.resume'
|
||||
event_type:
|
||||
- 'orchestration.stack.resume.end'
|
||||
type: 'delta'
|
||||
unit: 'stack'
|
||||
volume: 1
|
||||
user_id: _context_trustor_user_id
|
||||
project_id: $.payload.tenant_id
|
||||
resource_id: $.payload.stack_identity
|
||||
|
||||
- name: 'stack.suspend'
|
||||
event_type:
|
||||
- 'orchestration.stack.suspend.end'
|
||||
type: 'delta'
|
||||
unit: 'stack'
|
||||
volume: 1
|
||||
user_id: _context_trustor_user_id
|
||||
project_id: $.payload.tenant_id
|
||||
resource_id: $.payload.stack_identity
|
||||
|
||||
# Volume
|
||||
- name: 'volume'
|
||||
type: 'gauge'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.exists'
|
||||
- 'volume.create.*'
|
||||
- 'volume.delete.*'
|
||||
- 'volume.resize.*'
|
||||
- 'volume.attach.*'
|
||||
- 'volume.detach.*'
|
||||
- 'volume.update.*'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'volume.exists'
|
||||
type: 'delta'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.exists'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'volume.create.start'
|
||||
type: 'delta'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.create.start'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'volume.create.end'
|
||||
type: 'delta'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.create.end'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'volume.delete.start'
|
||||
type: 'delta'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.delete.start'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'volume.delete.end'
|
||||
type: 'delta'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.delete.end'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'volume.update.end'
|
||||
type: 'delta'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.update.end'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'volume.update.start'
|
||||
type: 'delta'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.update.start'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'volume.resize.end'
|
||||
type: 'delta'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.resize.end'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'volume.resize.start'
|
||||
type: 'delta'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.resize.start'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
|
||||
- name: 'volume.attach.end'
|
||||
type: 'delta'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.attach.end'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'volume.attach.start'
|
||||
type: 'delta'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.attach.start'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'volume.detach.end'
|
||||
type: 'delta'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.detach.end'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'volume.detach.start'
|
||||
type: 'delta'
|
||||
unit: 'volume'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'volume.detach.start'
|
||||
resource_id: $.payload.volume_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
# Volume Snapshot
|
||||
- name: 'snapshot'
|
||||
type: 'gauge'
|
||||
unit: 'snapshot'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'snapshot.exists'
|
||||
- 'snapshot.create.*'
|
||||
- 'snapshot.delete.*'
|
||||
|
||||
resource_id: $.payload.snapshot_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'snapshot.exists'
|
||||
type: 'delta'
|
||||
unit: 'snapshot'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'snapshot.exists'
|
||||
resource_id: $.payload.snapshot_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'snapshot.create.start'
|
||||
type: 'delta'
|
||||
unit: 'snapshot'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'snapshot.create.start'
|
||||
resource_id: $.payload.snapshot_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'snapshot.create.end'
|
||||
type: 'delta'
|
||||
unit: 'snapshot'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'snapshot.create.end'
|
||||
resource_id: $.payload.snapshot_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'snapshot.delete.start'
|
||||
type: 'delta'
|
||||
unit: 'snapshot'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'snapshot.delete.start'
|
||||
resource_id: $.payload.snapshot_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
- name: 'snapshot.delete.end'
|
||||
type: 'delta'
|
||||
unit: 'snapshot'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'snapshot.delete.end'
|
||||
resource_id: $.payload.snapshot_id
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.tenant_id
|
||||
|
||||
# Sahara
|
||||
- name: 'cluster.create'
|
||||
type: 'delta'
|
||||
unit: 'cluster'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'sahara.cluster.create'
|
||||
resource_id: $.payload.cluster_id
|
||||
project_id: $.payload.project_id
|
||||
|
||||
- name: 'cluster.update'
|
||||
type: 'delta'
|
||||
unit: 'cluster'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'sahara.cluster.update'
|
||||
resource_id: $.payload.cluster_id
|
||||
project_id: $.payload.project_id
|
||||
|
||||
- name: 'cluster.delete'
|
||||
type: 'delta'
|
||||
unit: 'cluster'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'sahara.cluster.delete'
|
||||
resource_id: $.payload.cluster_id
|
||||
project_id: $.payload.project_id
|
||||
|
||||
# Identity
|
||||
- name: 'identity.user.created'
|
||||
type: 'delta'
|
||||
unit: 'user'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.user.created'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.user.updated'
|
||||
type: 'delta'
|
||||
unit: 'user'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.user.updated'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.user.deleted'
|
||||
type: 'delta'
|
||||
unit: 'user'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.user.deleted'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.group.created'
|
||||
type: 'delta'
|
||||
unit: 'group'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.group.created'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.group.updated'
|
||||
type: 'delta'
|
||||
unit: 'group'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.group.updated'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.group.deleted'
|
||||
type: 'delta'
|
||||
unit: 'group'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.group.deleted'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.project.created'
|
||||
type: 'delta'
|
||||
unit: 'project'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.project.created'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.project.updated'
|
||||
type: 'delta'
|
||||
unit: 'project'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.project.updated'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.project.deleted'
|
||||
type: 'delta'
|
||||
unit: 'project'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.project.deleted'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.role.created'
|
||||
type: 'delta'
|
||||
unit: 'role'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.role.created'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.role.updated'
|
||||
type: 'delta'
|
||||
unit: 'role'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.role.updated'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.role.deleted'
|
||||
type: 'delta'
|
||||
unit: 'role'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.role.deleted'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.role_assignment.created'
|
||||
type: 'delta'
|
||||
unit: 'role_assignment'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.role_assignment.created'
|
||||
resource_id: $.payload.role
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.role_assignment.deleted'
|
||||
type: 'delta'
|
||||
unit: 'role_assignment'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.role_assignment.deleted'
|
||||
resource_id: $.payload.role
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.authenticate.success'
|
||||
type: 'delta'
|
||||
unit: 'user'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.authenticate'
|
||||
resource_id: $.payload.initiator.id
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.authenticate.pending'
|
||||
type: 'delta'
|
||||
unit: 'user'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.authenticate'
|
||||
resource_id: $.payload.initiator.id
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.authenticate.failure'
|
||||
type: 'delta'
|
||||
unit: 'user'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.authenticate'
|
||||
resource_id: $.payload.initiator.id
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.trust.created'
|
||||
type: 'delta'
|
||||
unit: 'trust'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.OS-TRUST:trust.created'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'identity.trust.deleted'
|
||||
type: 'delta'
|
||||
unit: 'trust'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'identity.OS-TRUST:trust.deleted'
|
||||
resource_id: $.payload.resource_info
|
||||
user_id: $.payload.initiator.id
|
||||
|
||||
- name: 'storage.api.request'
|
||||
type: 'delta'
|
||||
unit: 'request'
|
||||
volume: 1
|
||||
event_type:
|
||||
- 'objectstore.http.request'
|
||||
resource_id: $.payload.target.id
|
||||
user_id: $.payload.initiator.id
|
||||
project_id: $.payload.initiator.project_id
|
||||
|
||||
- name: '$.payload.name'
|
||||
event_type: 'profiler.*'
|
||||
type: 'gauge'
|
||||
unit: 'trace'
|
||||
volume: 1
|
||||
user_id: $.payload.user_id
|
||||
project_id: $.payload.project_id
|
||||
resource_id: '"profiler-" + $.payload.base_id'
|
||||
|
@@ -19,15 +19,6 @@ import oslo_messaging
|
||||
from ceilometer.agent import plugin_base
|
||||
from ceilometer import sample
|
||||
|
||||
cfg.CONF.import_opt('nova_control_exchange',
|
||||
'ceilometer.compute.notifications')
|
||||
cfg.CONF.import_opt('glance_control_exchange',
|
||||
'ceilometer.notification')
|
||||
cfg.CONF.import_opt('neutron_control_exchange',
|
||||
'ceilometer.network.notifications')
|
||||
cfg.CONF.import_opt('cinder_control_exchange',
|
||||
'ceilometer.notification')
|
||||
|
||||
OPTS = [
|
||||
cfg.MultiStrOpt('http_control_exchanges',
|
||||
default=[cfg.CONF.nova_control_exchange,
|
||||
|
@@ -1,258 +0,0 @@
|
||||
#
|
||||
# Copyright 2012 New Dream Network, LLC (DreamHost)
|
||||
#
|
||||
# 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.
|
||||
"""Handler for producing network counter messages from Neutron notification
|
||||
events.
|
||||
|
||||
"""
|
||||
|
||||
from oslo_config import cfg
|
||||
import oslo_messaging
|
||||
|
||||
from ceilometer.agent import plugin_base
|
||||
from ceilometer import sample
|
||||
|
||||
OPTS = [
|
||||
cfg.StrOpt('neutron_control_exchange',
|
||||
default='neutron',
|
||||
help="Exchange name for Neutron notifications."),
|
||||
]
|
||||
|
||||
cfg.CONF.register_opts(OPTS)
|
||||
|
||||
|
||||
class NetworkNotificationBase(plugin_base.NotificationBase):
|
||||
|
||||
resource_name = None
|
||||
|
||||
@property
|
||||
def event_types(self):
|
||||
return [
|
||||
# NOTE(flwang): When the *.create.start notification sending,
|
||||
# there is no resource id assigned by Neutron yet. So we ignore
|
||||
# the *.create.start notification for now and only listen the
|
||||
# *.create.end to make sure the resource id is existed.
|
||||
'%s.create.end' % self.resource_name,
|
||||
'%s.update.*' % self.resource_name,
|
||||
'%s.exists' % self.resource_name,
|
||||
# FIXME(dhellmann): Neutron delete notifications do
|
||||
# not include the same metadata as the other messages,
|
||||
# so we ignore them for now. This isn't ideal, since
|
||||
# it may mean we miss charging for some amount of time,
|
||||
# but it is better than throwing away the existing
|
||||
# metadata for a resource when it is deleted.
|
||||
# '%s.delete.start' % (self.resource_name),
|
||||
]
|
||||
|
||||
def get_targets(self, conf):
|
||||
"""Return a sequence of oslo_messaging.Target
|
||||
|
||||
This sequence is defining the exchange and topics to be connected for
|
||||
this plugin.
|
||||
"""
|
||||
return [oslo_messaging.Target(topic=topic,
|
||||
exchange=conf.neutron_control_exchange)
|
||||
for topic in self.get_notification_topics(conf)]
|
||||
|
||||
def process_notification(self, message):
|
||||
counter_name = getattr(self, 'counter_name', self.resource_name)
|
||||
unit_value = getattr(self, 'unit', self.resource_name)
|
||||
|
||||
resource = message['payload'].get(self.resource_name)
|
||||
if resource:
|
||||
# NOTE(liusheng): In %s.update.start notifications, the id is in
|
||||
# message['payload'] instead of resource itself.
|
||||
if message['event_type'].endswith('update.start'):
|
||||
resource['id'] = message['payload']['id']
|
||||
resources = [resource]
|
||||
else:
|
||||
resources = message['payload'].get(self.resource_name + 's', [])
|
||||
|
||||
resource_message = message.copy()
|
||||
for resource in resources:
|
||||
resource_message['payload'] = resource
|
||||
yield sample.Sample.from_notification(
|
||||
name=counter_name,
|
||||
type=sample.TYPE_GAUGE,
|
||||
unit=unit_value,
|
||||
volume=1,
|
||||
user_id=resource_message['_context_user_id'],
|
||||
project_id=resource_message['_context_tenant_id'],
|
||||
resource_id=resource['id'],
|
||||
message=resource_message)
|
||||
event_type_split = resource_message['event_type'].split('.')
|
||||
if len(event_type_split) > 2:
|
||||
yield sample.Sample.from_notification(
|
||||
name=counter_name
|
||||
+ "." + event_type_split[1],
|
||||
type=sample.TYPE_DELTA,
|
||||
unit=unit_value,
|
||||
volume=1,
|
||||
user_id=resource_message['_context_user_id'],
|
||||
project_id=resource_message['_context_tenant_id'],
|
||||
resource_id=resource['id'],
|
||||
message=resource_message)
|
||||
|
||||
|
||||
class Network(NetworkNotificationBase, plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron network notifications.
|
||||
|
||||
Handle network.{create.end|update.*|exists} notifications from neutron.
|
||||
"""
|
||||
resource_name = 'network'
|
||||
|
||||
|
||||
class Subnet(NetworkNotificationBase, plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle subnet.{create.end|update.*|exists} notifications from neutron.
|
||||
"""
|
||||
resource_name = 'subnet'
|
||||
|
||||
|
||||
class Port(NetworkNotificationBase, plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle port.{create.end|update.*|exists} notifications from neutron.
|
||||
"""
|
||||
resource_name = 'port'
|
||||
|
||||
|
||||
class Router(NetworkNotificationBase, plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle router.{create.end|update.*|exists} notifications from neutron.
|
||||
"""
|
||||
resource_name = 'router'
|
||||
|
||||
|
||||
class FloatingIP(NetworkNotificationBase,
|
||||
plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle floatingip.{create.end|update.*|exists} notifications from neutron.
|
||||
"""
|
||||
resource_name = 'floatingip'
|
||||
counter_name = 'ip.floating'
|
||||
unit = 'ip'
|
||||
|
||||
|
||||
class Pool(NetworkNotificationBase, plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle pool.{create.end|update.*|exists} notifications from neutron.
|
||||
"""
|
||||
resource_name = 'pool'
|
||||
counter_name = 'network.services.lb.pool'
|
||||
|
||||
|
||||
class Vip(NetworkNotificationBase, plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle vip.{create.end|update.*|exists} notifications from neutron.
|
||||
"""
|
||||
resource_name = 'vip'
|
||||
counter_name = 'network.services.lb.vip'
|
||||
|
||||
|
||||
class Member(NetworkNotificationBase, plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle member.{create.end|update.*|exists} notifications from neutron.
|
||||
"""
|
||||
resource_name = 'member'
|
||||
counter_name = 'network.services.lb.member'
|
||||
|
||||
|
||||
class HealthMonitor(NetworkNotificationBase,
|
||||
plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle health_monitor.{create.end|update.*|exists} notifications
|
||||
from neutron.
|
||||
"""
|
||||
resource_name = 'health_monitor'
|
||||
counter_name = 'network.services.lb.health_monitor'
|
||||
|
||||
|
||||
class Firewall(NetworkNotificationBase, plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle firewall.{create.end|update.*|exists} notifications from neutron.
|
||||
"""
|
||||
resource_name = 'firewall'
|
||||
counter_name = 'network.services.firewall'
|
||||
|
||||
|
||||
class FirewallPolicy(NetworkNotificationBase,
|
||||
plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle firewall_policy.{create.end|update.*|exists} notifications
|
||||
from neutron.
|
||||
"""
|
||||
resource_name = 'firewall_policy'
|
||||
counter_name = 'network.services.firewall.policy'
|
||||
|
||||
|
||||
class FirewallRule(NetworkNotificationBase,
|
||||
plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle firewall_rule.{create.end|update.*|exists} notifications
|
||||
from neutron.
|
||||
"""
|
||||
resource_name = 'firewall_rule'
|
||||
counter_name = 'network.services.firewall.rule'
|
||||
|
||||
|
||||
class VPNService(NetworkNotificationBase,
|
||||
plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle vpnservice.{create.end|update.*|exists} notifications from neutron.
|
||||
"""
|
||||
resource_name = 'vpnservice'
|
||||
counter_name = 'network.services.vpn'
|
||||
|
||||
|
||||
class IPSecPolicy(NetworkNotificationBase,
|
||||
plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle pool.{create.end|update.*|exists} notifications from neutron.
|
||||
"""
|
||||
resource_name = 'ipsecpolicy'
|
||||
counter_name = 'network.services.vpn.ipsecpolicy'
|
||||
|
||||
|
||||
class IKEPolicy(NetworkNotificationBase,
|
||||
plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle ikepolicy.{create.end|update.*|exists} notifications from neutron.
|
||||
"""
|
||||
resource_name = 'ikepolicy'
|
||||
counter_name = 'network.services.vpn.ikepolicy'
|
||||
|
||||
|
||||
class IPSecSiteConnection(NetworkNotificationBase,
|
||||
plugin_base.NonMetricNotificationBase):
|
||||
"""Listen for Neutron notifications.
|
||||
|
||||
Handle ipsec_site_connection.{create.end|update.*|exists}
|
||||
notifications from neutron.
|
||||
"""
|
||||
resource_name = 'ipsec_site_connection'
|
||||
counter_name = 'network.services.vpn.connections'
|
@@ -20,7 +20,6 @@ import ceilometer.api.app
|
||||
import ceilometer.cmd.polling
|
||||
import ceilometer.collector
|
||||
import ceilometer.compute.discovery
|
||||
import ceilometer.compute.notifications
|
||||
import ceilometer.compute.util
|
||||
import ceilometer.compute.virt.inspector
|
||||
import ceilometer.compute.virt.libvirt.inspector
|
||||
@@ -40,7 +39,6 @@ import ceilometer.ipmi.pollsters
|
||||
import ceilometer.keystone_client
|
||||
import ceilometer.meter.notifications
|
||||
import ceilometer.middleware
|
||||
import ceilometer.network.notifications
|
||||
import ceilometer.neutron_client
|
||||
import ceilometer.notification
|
||||
import ceilometer.nova_client
|
||||
@@ -61,14 +59,12 @@ def list_opts():
|
||||
itertools.chain(ceilometer.agent.manager.OPTS,
|
||||
ceilometer.api.app.OPTS,
|
||||
ceilometer.cmd.polling.CLI_OPTS,
|
||||
ceilometer.compute.notifications.OPTS,
|
||||
ceilometer.compute.util.OPTS,
|
||||
ceilometer.compute.virt.inspector.OPTS,
|
||||
ceilometer.compute.virt.libvirt.inspector.OPTS,
|
||||
ceilometer.dispatcher.OPTS,
|
||||
ceilometer.ipmi.notifications.ironic.OPTS,
|
||||
ceilometer.middleware.OPTS,
|
||||
ceilometer.network.notifications.OPTS,
|
||||
ceilometer.nova_client.OPTS,
|
||||
ceilometer.objectstore.swift.OPTS,
|
||||
ceilometer.pipeline.OPTS,
|
||||
|
@@ -25,7 +25,7 @@ import six
|
||||
from stevedore import extension
|
||||
import yaml
|
||||
|
||||
from ceilometer.compute.notifications import instance
|
||||
from ceilometer.agent import plugin_base
|
||||
from ceilometer import messaging
|
||||
from ceilometer import notification
|
||||
from ceilometer.publisher import test as test_publisher
|
||||
@@ -83,6 +83,18 @@ TEST_NOTICE_PAYLOAD = {
|
||||
}
|
||||
|
||||
|
||||
class _FakeNotificationPlugin(plugin_base.NotificationBase):
|
||||
event_types = ['fake.event']
|
||||
|
||||
def get_targets(self, conf):
|
||||
return [oslo_messaging.Target(
|
||||
topic=topic, exchange=conf.nova_control_exchange)
|
||||
for topic in self.get_notification_topics(conf)]
|
||||
|
||||
def process_notification(self, message):
|
||||
return []
|
||||
|
||||
|
||||
class TestNotification(tests_base.BaseTestCase):
|
||||
|
||||
def setUp(self):
|
||||
@@ -96,7 +108,7 @@ class TestNotification(tests_base.BaseTestCase):
|
||||
self.srv = notification.NotificationService(0)
|
||||
|
||||
def fake_get_notifications_manager(self, pm):
|
||||
self.plugin = instance.Instance(pm)
|
||||
self.plugin = _FakeNotificationPlugin(pm)
|
||||
return extension.ExtensionManager.make_test_instance(
|
||||
[
|
||||
extension.Extension('test',
|
||||
@@ -148,7 +160,7 @@ class TestNotification(tests_base.BaseTestCase):
|
||||
def test_unique_consumers(self, mock_listener):
|
||||
|
||||
def fake_get_notifications_manager_dup_targets(pm):
|
||||
plugin = instance.Instance(pm)
|
||||
plugin = _FakeNotificationPlugin(pm)
|
||||
return extension.ExtensionManager.make_test_instance(
|
||||
[extension.Extension('test', None, None, plugin),
|
||||
extension.Extension('test', None, None, plugin)])
|
||||
@@ -213,14 +225,12 @@ class BaseRealNotification(tests_base.BaseTestCase):
|
||||
self.CONF([], project='ceilometer', validate_default_values=True)
|
||||
self.setup_messaging(self.CONF, 'nova')
|
||||
|
||||
pipeline_cfg_file = self.setup_pipeline(['instance', 'memory'])
|
||||
pipeline_cfg_file = self.setup_pipeline(['vcpus', 'memory'])
|
||||
self.CONF.set_override("pipeline_cfg_file", pipeline_cfg_file)
|
||||
|
||||
self.expected_samples = 2
|
||||
|
||||
self.CONF.set_override("backend_url", None, group="coordination")
|
||||
self.CONF.set_override("disable_non_metric_meters", False,
|
||||
group="notification")
|
||||
|
||||
ev_pipeline_cfg_file = self.setup_event_pipeline(
|
||||
['compute.instance.*'])
|
||||
@@ -343,16 +353,6 @@ class TestRealNotification(BaseRealNotification):
|
||||
break
|
||||
self.assertEqual(self.expected_events, len(self.publisher.events))
|
||||
|
||||
@mock.patch('ceilometer.publisher.test.TestPublisher')
|
||||
def test_notification_disable_non_metrics(self, fake_publisher_cls):
|
||||
self.CONF.set_override("disable_non_metric_meters", True,
|
||||
group="notification")
|
||||
# instance is a not a metric. we should only get back memory
|
||||
self.expected_samples = 1
|
||||
fake_publisher_cls.return_value = self.publisher
|
||||
self._check_notification_service()
|
||||
self.assertEqual('memory', self.publisher.samples[0].name)
|
||||
|
||||
|
||||
class TestRealNotificationHA(BaseRealNotification):
|
||||
|
||||
@@ -488,7 +488,7 @@ class TestRealNotificationMultipleAgents(tests_base.BaseTestCase):
|
||||
'sources': [{
|
||||
'name': 'test_pipeline',
|
||||
'interval': 5,
|
||||
'meters': ['instance', 'memory'],
|
||||
'meters': ['vcpus', 'memory'],
|
||||
'sinks': ['test_sink']
|
||||
}],
|
||||
'sinks': [{
|
||||
|
@@ -1,608 +0,0 @@
|
||||
#
|
||||
# Copyright 2012 New Dream Network, LLC (DreamHost)
|
||||
# Copyright 2013 eNovance
|
||||
#
|
||||
# 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.
|
||||
"""Tests for converters for producing compute counter messages from
|
||||
notification events.
|
||||
"""
|
||||
from oslotest import base
|
||||
|
||||
from ceilometer.compute.notifications import instance
|
||||
from ceilometer import sample
|
||||
|
||||
|
||||
INSTANCE_CREATE_END = {
|
||||
u'_context_auth_token': u'3d8b13de1b7d499587dfc69b77dc09c2',
|
||||
u'_context_is_admin': True,
|
||||
u'_context_project_id': u'7c150a59fe714e6f9263774af9688f0e',
|
||||
u'_context_quota_class': None,
|
||||
u'_context_read_deleted': u'no',
|
||||
u'_context_remote_address': u'10.0.2.15',
|
||||
u'_context_request_id': u'req-d68b36e0-9233-467f-9afb-d81435d64d66',
|
||||
u'_context_roles': [u'admin'],
|
||||
u'_context_timestamp': u'2012-05-08T20:23:41.425105',
|
||||
u'_context_user_id': u'1e3ce043029547f1a61c1996d1a531a2',
|
||||
u'event_type': u'compute.instance.create.end',
|
||||
u'message_id': u'dae6f69c-00e0-41c0-b371-41ec3b7f4451',
|
||||
u'payload': {u'created_at': u'2012-05-08 20:23:41',
|
||||
u'deleted_at': u'',
|
||||
u'disk_gb': 0,
|
||||
u'display_name': u'testme',
|
||||
u'fixed_ips': [{u'address': u'10.0.0.2',
|
||||
u'floating_ips': [],
|
||||
u'meta': {},
|
||||
u'type': u'fixed',
|
||||
u'version': 4}],
|
||||
u'image_ref_url': u'http://10.0.2.15:9292/images/UUID',
|
||||
u'instance_id': u'9f9d01b9-4a58-4271-9e27-398b21ab20d1',
|
||||
u'instance_type': u'm1.tiny',
|
||||
u'instance_type_id': 2,
|
||||
u'launched_at': u'2012-05-08 20:23:47.985999',
|
||||
u'memory_mb': 512,
|
||||
u'state': u'active',
|
||||
u'state_description': u'',
|
||||
u'tenant_id': u'7c150a59fe714e6f9263774af9688f0e',
|
||||
u'user_id': u'1e3ce043029547f1a61c1996d1a531a2',
|
||||
u'reservation_id': u'1e3ce043029547f1a61c1996d1a531a3',
|
||||
u'vcpus': 1,
|
||||
u'root_gb': 0,
|
||||
u'ephemeral_gb': 0,
|
||||
u'host': u'compute-host-name',
|
||||
u'availability_zone': u'1e3ce043029547f1a61c1996d1a531a4',
|
||||
u'os_type': u'linux?',
|
||||
u'architecture': u'x86',
|
||||
u'image_ref': u'UUID',
|
||||
u'kernel_id': u'1e3ce043029547f1a61c1996d1a531a5',
|
||||
u'ramdisk_id': u'1e3ce043029547f1a61c1996d1a531a6',
|
||||
},
|
||||
u'priority': u'INFO',
|
||||
u'publisher_id': u'compute.vagrant-precise',
|
||||
u'timestamp': u'2012-05-08 20:23:48.028195',
|
||||
}
|
||||
|
||||
INSTANCE_DELETE_START = {
|
||||
u'_context_auth_token': u'3d8b13de1b7d499587dfc69b77dc09c2',
|
||||
u'_context_is_admin': True,
|
||||
u'_context_project_id': u'7c150a59fe714e6f9263774af9688f0e',
|
||||
u'_context_quota_class': None,
|
||||
u'_context_read_deleted': u'no',
|
||||
u'_context_remote_address': u'10.0.2.15',
|
||||
u'_context_request_id': u'req-fb3c4546-a2e5-49b7-9fd2-a63bd658bc39',
|
||||
u'_context_roles': [u'admin'],
|
||||
u'_context_timestamp': u'2012-05-08T20:24:14.547374',
|
||||
u'_context_user_id': u'1e3ce043029547f1a61c1996d1a531a2',
|
||||
u'event_type': u'compute.instance.delete.start',
|
||||
u'message_id': u'a15b94ee-cb8e-4c71-9abe-14aa80055fb4',
|
||||
u'payload': {u'created_at': u'2012-05-08 20:23:41',
|
||||
u'deleted_at': u'',
|
||||
u'disk_gb': 0,
|
||||
u'display_name': u'testme',
|
||||
u'image_ref_url': u'http://10.0.2.15:9292/images/UUID',
|
||||
u'instance_id': u'9f9d01b9-4a58-4271-9e27-398b21ab20d1',
|
||||
u'instance_type': u'm1.tiny',
|
||||
u'instance_type_id': 2,
|
||||
u'launched_at': u'2012-05-08 20:23:47',
|
||||
u'memory_mb': 512,
|
||||
u'state': u'active',
|
||||
u'state_description': u'deleting',
|
||||
u'tenant_id': u'7c150a59fe714e6f9263774af9688f0e',
|
||||
u'user_id': u'1e3ce043029547f1a61c1996d1a531a2',
|
||||
u'reservation_id': u'1e3ce043029547f1a61c1996d1a531a3',
|
||||
u'vcpus': 1,
|
||||
u'root_gb': 0,
|
||||
u'ephemeral_gb': 0,
|
||||
u'host': u'compute-host-name',
|
||||
u'availability_zone': u'1e3ce043029547f1a61c1996d1a531a4',
|
||||
u'os_type': u'linux?',
|
||||
u'architecture': u'x86',
|
||||
u'image_ref': u'UUID',
|
||||
u'kernel_id': u'1e3ce043029547f1a61c1996d1a531a5',
|
||||
u'ramdisk_id': u'1e3ce043029547f1a61c1996d1a531a6',
|
||||
},
|
||||
u'priority': u'INFO',
|
||||
u'publisher_id': u'compute.vagrant-precise',
|
||||
u'timestamp': u'2012-05-08 20:24:14.824743',
|
||||
}
|
||||
|
||||
INSTANCE_EXISTS = {
|
||||
u'_context_auth_token': None,
|
||||
u'_context_is_admin': True,
|
||||
u'_context_project_id': None,
|
||||
u'_context_quota_class': None,
|
||||
u'_context_read_deleted': u'no',
|
||||
u'_context_remote_address': None,
|
||||
u'_context_request_id': u'req-659a8eb2-4372-4c01-9028-ad6e40b0ed22',
|
||||
u'_context_roles': [u'admin'],
|
||||
u'_context_timestamp': u'2012-05-08T16:03:43.760204',
|
||||
u'_context_user_id': None,
|
||||
u'event_type': u'compute.instance.exists',
|
||||
u'message_id': u'4b884c03-756d-4c06-8b42-80b6def9d302',
|
||||
u'payload': {u'audit_period_beginning': u'2012-05-08 15:00:00',
|
||||
u'audit_period_ending': u'2012-05-08 16:00:00',
|
||||
u'bandwidth': {},
|
||||
u'created_at': u'2012-05-07 22:16:18',
|
||||
u'deleted_at': u'',
|
||||
u'disk_gb': 0,
|
||||
u'display_name': u'testme',
|
||||
u'image_ref_url': u'http://10.0.2.15:9292/images/UUID',
|
||||
u'instance_id': u'3a513875-95c9-4012-a3e7-f90c678854e5',
|
||||
u'instance_type': u'm1.tiny',
|
||||
u'instance_type_id': 2,
|
||||
u'launched_at': u'2012-05-07 23:01:27',
|
||||
u'memory_mb': 512,
|
||||
u'state': u'active',
|
||||
u'state_description': u'',
|
||||
u'tenant_id': u'7c150a59fe714e6f9263774af9688f0e',
|
||||
u'user_id': u'1e3ce043029547f1a61c1996d1a531a2',
|
||||
u'reservation_id': u'1e3ce043029547f1a61c1996d1a531a3',
|
||||
u'vcpus': 1,
|
||||
u'root_gb': 0,
|
||||
u'ephemeral_gb': 0,
|
||||
u'host': u'compute-host-name',
|
||||
u'availability_zone': u'1e3ce043029547f1a61c1996d1a531a4',
|
||||
u'os_type': u'linux?',
|
||||
u'architecture': u'x86',
|
||||
u'image_ref': u'UUID',
|
||||
u'kernel_id': u'1e3ce043029547f1a61c1996d1a531a5',
|
||||
u'ramdisk_id': u'1e3ce043029547f1a61c1996d1a531a6',
|
||||
},
|
||||
u'priority': u'INFO',
|
||||
u'publisher_id': u'compute.vagrant-precise',
|
||||
u'timestamp': u'2012-05-08 16:03:44.122481',
|
||||
}
|
||||
|
||||
INSTANCE_EXISTS_METADATA_LIST = {
|
||||
u'_context_auth_token': None,
|
||||
u'_context_is_admin': True,
|
||||
u'_context_project_id': None,
|
||||
u'_context_quota_class': None,
|
||||
u'_context_read_deleted': u'no',
|
||||
u'_context_remote_address': None,
|
||||
u'_context_request_id': u'req-659a8eb2-4372-4c01-9028-ad6e40b0ed22',
|
||||
u'_context_roles': [u'admin'],
|
||||
u'_context_timestamp': u'2012-05-08T16:03:43.760204',
|
||||
u'_context_user_id': None,
|
||||
u'event_type': u'compute.instance.exists',
|
||||
u'message_id': u'4b884c03-756d-4c06-8b42-80b6def9d302',
|
||||
u'payload': {u'audit_period_beginning': u'2012-05-08 15:00:00',
|
||||
u'audit_period_ending': u'2012-05-08 16:00:00',
|
||||
u'bandwidth': {},
|
||||
u'created_at': u'2012-05-07 22:16:18',
|
||||
u'deleted_at': u'',
|
||||
u'disk_gb': 0,
|
||||
u'display_name': u'testme',
|
||||
u'image_ref_url': u'http://10.0.2.15:9292/images/UUID',
|
||||
u'instance_id': u'3a513875-95c9-4012-a3e7-f90c678854e5',
|
||||
u'instance_type': u'm1.tiny',
|
||||
u'instance_type_id': 2,
|
||||
u'launched_at': u'2012-05-07 23:01:27',
|
||||
u'memory_mb': 512,
|
||||
u'state': u'active',
|
||||
u'state_description': u'',
|
||||
u'tenant_id': u'7c150a59fe714e6f9263774af9688f0e',
|
||||
u'user_id': u'1e3ce043029547f1a61c1996d1a531a2',
|
||||
u'reservation_id': u'1e3ce043029547f1a61c1996d1a531a3',
|
||||
u'vcpus': 1,
|
||||
u'root_gb': 0,
|
||||
u'metadata': [],
|
||||
u'ephemeral_gb': 0,
|
||||
u'host': u'compute-host-name',
|
||||
u'availability_zone': u'1e3ce043029547f1a61c1996d1a531a4',
|
||||
u'os_type': u'linux?',
|
||||
u'architecture': u'x86',
|
||||
u'image_ref': u'UUID',
|
||||
u'kernel_id': u'1e3ce043029547f1a61c1996d1a531a5',
|
||||
u'ramdisk_id': u'1e3ce043029547f1a61c1996d1a531a6',
|
||||
},
|
||||
u'priority': u'INFO',
|
||||
u'publisher_id': u'compute.vagrant-precise',
|
||||
u'timestamp': u'2012-05-08 16:03:44.122481',
|
||||
}
|
||||
|
||||
|
||||
INSTANCE_FINISH_RESIZE_END = {
|
||||
u'_context_roles': [u'admin'],
|
||||
u'_context_request_id': u'req-e3f71bb9-e9b9-418b-a9db-a5950c851b25',
|
||||
u'_context_quota_class': None,
|
||||
u'event_type': u'compute.instance.finish_resize.end',
|
||||
u'_context_user_name': u'admin',
|
||||
u'_context_project_name': u'admin',
|
||||
u'timestamp': u'2013-01-04 15:10:17.436974',
|
||||
u'_context_is_admin': True,
|
||||
u'message_id': u'a2f7770d-b85d-4797-ab10-41407a44368e',
|
||||
u'_context_auth_token': None,
|
||||
u'_context_instance_lock_checked': False,
|
||||
u'_context_project_id': u'cea4b25edb484e5392727181b7721d29',
|
||||
u'_context_timestamp': u'2013-01-04T15:08:39.162612',
|
||||
u'_context_read_deleted': u'no',
|
||||
u'_context_user_id': u'01b83a5e23f24a6fb6cd073c0aee6eed',
|
||||
u'_context_remote_address': u'10.147.132.184',
|
||||
u'publisher_id': u'compute.ip-10-147-132-184.ec2.internal',
|
||||
u'payload': {u'state_description': u'',
|
||||
u'availability_zone': None,
|
||||
u'ephemeral_gb': 0,
|
||||
u'instance_type_id': 5,
|
||||
u'deleted_at': u'',
|
||||
u'fixed_ips': [{u'floating_ips': [],
|
||||
u'label': u'private',
|
||||
u'version': 4,
|
||||
u'meta': {},
|
||||
u'address': u'10.0.0.3',
|
||||
u'type': u'fixed'}],
|
||||
u'memory_mb': 2048,
|
||||
u'user_id': u'01b83a5e23f24a6fb6cd073c0aee6eed',
|
||||
u'reservation_id': u'r-u3fvim06',
|
||||
u'hostname': u's1',
|
||||
u'state': u'resized',
|
||||
u'launched_at': u'2013-01-04T15:10:14.923939',
|
||||
u'metadata': {u'metering.server_group': u'Group_A',
|
||||
u'AutoScalingGroupName': u'tyky-Group_Awste7',
|
||||
u'metering.foo.bar': u'true'},
|
||||
u'ramdisk_id': u'5f23128e-5525-46d8-bc66-9c30cd87141a',
|
||||
u'access_ip_v6': None,
|
||||
u'disk_gb': 20,
|
||||
u'access_ip_v4': None,
|
||||
u'kernel_id': u'571478e0-d5e7-4c2e-95a5-2bc79443c28a',
|
||||
u'host': u'ip-10-147-132-184.ec2.internal',
|
||||
u'display_name': u's1',
|
||||
u'image_ref_url': u'http://10.147.132.184:9292/images/'
|
||||
'a130b9d9-e00e-436e-9782-836ccef06e8a',
|
||||
u'root_gb': 20,
|
||||
u'tenant_id': u'cea4b25edb484e5392727181b7721d29',
|
||||
u'created_at': u'2013-01-04T11:21:48.000000',
|
||||
u'instance_id': u'648e8963-6886-4c3c-98f9-4511c292f86b',
|
||||
u'instance_type': u'm1.small',
|
||||
u'vcpus': 1,
|
||||
u'image_meta': {u'kernel_id':
|
||||
u'571478e0-d5e7-4c2e-95a5-2bc79443c28a',
|
||||
u'ramdisk_id':
|
||||
u'5f23128e-5525-46d8-bc66-9c30cd87141a',
|
||||
u'base_image_ref':
|
||||
u'a130b9d9-e00e-436e-9782-836ccef06e8a'},
|
||||
u'architecture': None,
|
||||
u'os_type': None
|
||||
},
|
||||
u'priority': u'INFO'
|
||||
}
|
||||
|
||||
INSTANCE_RESIZE_REVERT_END = {
|
||||
u'_context_roles': [u'admin'],
|
||||
u'_context_request_id': u'req-9da1d714-dabe-42fd-8baa-583e57cd4f1a',
|
||||
u'_context_quota_class': None,
|
||||
u'event_type': u'compute.instance.resize.revert.end',
|
||||
u'_context_user_name': u'admin',
|
||||
u'_context_project_name': u'admin',
|
||||
u'timestamp': u'2013-01-04 15:20:32.009532',
|
||||
u'_context_is_admin': True,
|
||||
u'message_id': u'c48deeba-d0c3-4154-b3db-47480b52267a',
|
||||
u'_context_auth_token': None,
|
||||
u'_context_instance_lock_checked': False,
|
||||
u'_context_project_id': u'cea4b25edb484e5392727181b7721d29',
|
||||
u'_context_timestamp': u'2013-01-04T15:19:51.018218',
|
||||
u'_context_read_deleted': u'no',
|
||||
u'_context_user_id': u'01b83a5e23f24a6fb6cd073c0aee6eed',
|
||||
u'_context_remote_address': u'10.147.132.184',
|
||||
u'publisher_id': u'compute.ip-10-147-132-184.ec2.internal',
|
||||
u'payload': {u'state_description': u'resize_reverting',
|
||||
u'availability_zone': None,
|
||||
u'ephemeral_gb': 0,
|
||||
u'instance_type_id': 2,
|
||||
u'deleted_at': u'',
|
||||
u'reservation_id': u'r-u3fvim06',
|
||||
u'memory_mb': 512,
|
||||
u'user_id': u'01b83a5e23f24a6fb6cd073c0aee6eed',
|
||||
u'hostname': u's1',
|
||||
u'state': u'resized',
|
||||
u'launched_at': u'2013-01-04T15:10:14.000000',
|
||||
u'metadata': {u'metering.server_group': u'Group_A',
|
||||
u'AutoScalingGroupName': u'tyky-Group_A-wste7',
|
||||
u'metering.foo.bar': u'true'},
|
||||
u'ramdisk_id': u'5f23128e-5525-46d8-bc66-9c30cd87141a',
|
||||
u'access_ip_v6': None,
|
||||
u'disk_gb': 0,
|
||||
u'access_ip_v4': None,
|
||||
u'kernel_id': u'571478e0-d5e7-4c2e-95a5-2bc79443c28a',
|
||||
u'host': u'ip-10-147-132-184.ec2.internal',
|
||||
u'display_name': u's1',
|
||||
u'image_ref_url': u'http://10.147.132.184:9292/images/'
|
||||
'a130b9d9-e00e-436e-9782-836ccef06e8a',
|
||||
u'root_gb': 0,
|
||||
u'tenant_id': u'cea4b25edb484e5392727181b7721d29',
|
||||
u'created_at': u'2013-01-04T11:21:48.000000',
|
||||
u'instance_id': u'648e8963-6886-4c3c-98f9-4511c292f86b',
|
||||
u'instance_type': u'm1.tiny',
|
||||
u'vcpus': 1,
|
||||
u'image_meta': {u'kernel_id':
|
||||
u'571478e0-d5e7-4c2e-95a5-2bc79443c28a',
|
||||
u'ramdisk_id':
|
||||
u'5f23128e-5525-46d8-bc66-9c30cd87141a',
|
||||
u'base_image_ref':
|
||||
u'a130b9d9-e00e-436e-9782-836ccef06e8a'},
|
||||
u'architecture': None,
|
||||
u'os_type': None
|
||||
},
|
||||
u'priority': u'INFO'
|
||||
}
|
||||
|
||||
INSTANCE_SCHEDULED = {
|
||||
u'_context_request_id': u'req-f28a836a-32bf-4cc3-940a-3515878c181f',
|
||||
u'_context_quota_class': None,
|
||||
u'event_type': u'scheduler.run_instance.scheduled',
|
||||
u'_context_service_catalog': [{
|
||||
u'endpoints': [{
|
||||
u'adminURL':
|
||||
u'http://172.16.12.21:8776/v1/2bd766a095b44486bf07cf7f666997eb',
|
||||
u'region': u'RegionOne',
|
||||
u'internalURL':
|
||||
u'http://172.16.12.21:8776/v1/2bd766a095b44486bf07cf7f666997eb',
|
||||
u'id': u'30cb904fdc294eea9b225e06b2d0d4eb',
|
||||
u'publicURL':
|
||||
u'http://172.16.12.21:8776/v1/2bd766a095b44486bf07cf7f666997eb'}],
|
||||
u'endpoints_links': [],
|
||||
u'type': u'volume',
|
||||
u'name': u'cinder'}],
|
||||
u'_context_auth_token': u'TOK',
|
||||
u'_context_user_id': u'0a757cd896b64b65ba3784afef564116',
|
||||
u'payload': {
|
||||
'instance_id': 'fake-uuid1-1',
|
||||
u'weighted_host': {u'host': u'eglynn-f19-devstack3', u'weight': 1.0},
|
||||
u'request_spec': {
|
||||
u'num_instances': 1,
|
||||
u'block_device_mapping': [{
|
||||
u'instance_uuid': u'9206baae-c3b6-41bc-96f2-2c0726ff51c8',
|
||||
u'guest_format': None,
|
||||
u'boot_index': 0,
|
||||
u'no_device': None,
|
||||
u'connection_info': None,
|
||||
u'volume_id': None,
|
||||
u'volume_size': None,
|
||||
u'device_name': None,
|
||||
u'disk_bus': None,
|
||||
u'image_id': u'0560ac3f-3bcd-434d-b012-8dd7a212b73b',
|
||||
u'source_type': u'image',
|
||||
u'device_type': u'disk',
|
||||
u'snapshot_id': None,
|
||||
u'destination_type': u'local',
|
||||
u'delete_on_termination': True}],
|
||||
u'image': {
|
||||
u'status': u'active',
|
||||
u'name': u'cirros-0.3.1-x86_64-uec',
|
||||
u'deleted': False,
|
||||
u'container_format': u'ami',
|
||||
u'created_at': u'2014-02-18T13:16:26.000000',
|
||||
u'disk_format': u'ami',
|
||||
u'updated_at': u'2014-02-18T13:16:27.000000',
|
||||
u'properties': {
|
||||
u'kernel_id': u'c8794c1a-4158-42cc-9f97-d0d250c9c6a4',
|
||||
u'ramdisk_id': u'4999726c-545c-4a9e-bfc0-917459784275'},
|
||||
u'min_disk': 0,
|
||||
u'min_ram': 0,
|
||||
u'checksum': u'f8a2eeee2dc65b3d9b6e63678955bd83',
|
||||
u'owner': u'2bd766a095b44486bf07cf7f666997eb',
|
||||
u'is_public': True,
|
||||
u'deleted_at': None,
|
||||
u'id': u'0560ac3f-3bcd-434d-b012-8dd7a212b73b',
|
||||
u'size': 25165824},
|
||||
u'instance_type': {
|
||||
u'root_gb': 1,
|
||||
u'name': u'm1.tiny',
|
||||
u'ephemeral_gb': 0,
|
||||
u'memory_mb': 512,
|
||||
u'vcpus': 1,
|
||||
u'extra_specs': {},
|
||||
u'swap': 0,
|
||||
u'rxtx_factor': 1.0,
|
||||
u'flavorid': u'1',
|
||||
u'vcpu_weight': None,
|
||||
u'id': 2},
|
||||
u'instance_properties': {
|
||||
u'vm_state': u'building',
|
||||
u'availability_zone': None,
|
||||
u'terminated_at': None,
|
||||
u'ephemeral_gb': 0,
|
||||
u'instance_type_id': 2,
|
||||
u'user_data': None,
|
||||
u'cleaned': False,
|
||||
u'vm_mode': None,
|
||||
u'deleted_at': None,
|
||||
u'reservation_id': u'r-ven5q6om',
|
||||
u'id': 15,
|
||||
u'security_groups': [{
|
||||
u'deleted_at': None,
|
||||
u'user_id': u'0a757cd896b64b65ba3784afef564116',
|
||||
u'description': u'default',
|
||||
u'deleted': False,
|
||||
u'created_at': u'2014-02-19T11:02:31.000000',
|
||||
u'updated_at': None,
|
||||
u'project_id': u'2bd766a095b44486bf07cf7f666997eb',
|
||||
u'id': 1,
|
||||
u'name': u'default'}],
|
||||
u'disable_terminate': False,
|
||||
u'root_device_name': None,
|
||||
u'display_name': u'new',
|
||||
u'uuid': u'9206baae-c3b6-41bc-96f2-2c0726ff51c8',
|
||||
u'default_swap_device': None,
|
||||
u'info_cache': {
|
||||
u'instance_uuid': u'9206baae-c3b6-41bc-96f2-2c0726ff51c8',
|
||||
u'deleted': False,
|
||||
u'created_at': u'2014-03-05T12:44:00.000000',
|
||||
u'updated_at': None,
|
||||
u'network_info': [],
|
||||
u'deleted_at': None},
|
||||
u'hostname': u'new',
|
||||
u'launched_on': None,
|
||||
u'display_description': u'new',
|
||||
u'key_data': None,
|
||||
u'deleted': False,
|
||||
u'config_drive': u'',
|
||||
u'power_state': 0,
|
||||
u'default_ephemeral_device': None,
|
||||
u'progress': 0,
|
||||
u'project_id': u'2bd766a095b44486bf07cf7f666997eb',
|
||||
u'launched_at': None,
|
||||
u'scheduled_at': None,
|
||||
u'node': None,
|
||||
u'ramdisk_id': u'4999726c-545c-4a9e-bfc0-917459784275',
|
||||
u'access_ip_v6': None,
|
||||
u'access_ip_v4': None,
|
||||
u'kernel_id': u'c8794c1a-4158-42cc-9f97-d0d250c9c6a4',
|
||||
u'key_name': None,
|
||||
u'updated_at': None,
|
||||
u'host': None,
|
||||
u'root_gb': 1,
|
||||
u'user_id': u'0a757cd896b64b65ba3784afef564116',
|
||||
u'system_metadata': {
|
||||
u'image_kernel_id':
|
||||
u'c8794c1a-4158-42cc-9f97-d0d250c9c6a4',
|
||||
u'image_min_disk': u'1',
|
||||
u'instance_type_memory_mb': u'512',
|
||||
u'instance_type_swap': u'0',
|
||||
u'instance_type_vcpu_weight': None,
|
||||
u'instance_type_root_gb': u'1',
|
||||
u'instance_type_name': u'm1.tiny',
|
||||
u'image_ramdisk_id':
|
||||
u'4999726c-545c-4a9e-bfc0-917459784275',
|
||||
u'instance_type_id': u'2',
|
||||
u'instance_type_ephemeral_gb': u'0',
|
||||
u'instance_type_rxtx_factor': u'1.0',
|
||||
u'instance_type_flavorid': u'1',
|
||||
u'instance_type_vcpus': u'1',
|
||||
u'image_container_format': u'ami',
|
||||
u'image_min_ram': u'0',
|
||||
u'image_disk_format': u'ami',
|
||||
u'image_base_image_ref':
|
||||
u'0560ac3f-3bcd-434d-b012-8dd7a212b73b'},
|
||||
u'task_state': u'scheduling',
|
||||
u'shutdown_terminate': False,
|
||||
u'cell_name': None,
|
||||
u'ephemeral_key_uuid': None,
|
||||
u'locked': False,
|
||||
u'name': u'instance-0000000f',
|
||||
u'created_at': u'2014-03-05T12:44:00.000000',
|
||||
u'locked_by': None,
|
||||
u'launch_index': 0,
|
||||
u'memory_mb': 512,
|
||||
u'vcpus': 1,
|
||||
u'image_ref': u'0560ac3f-3bcd-434d-b012-8dd7a212b73b',
|
||||
u'architecture': None,
|
||||
u'auto_disk_config': False,
|
||||
u'os_type': None,
|
||||
u'metadata': {u'metering.server_group': u'Group_A',
|
||||
u'AutoScalingGroupName': u'tyky-Group_Awste7',
|
||||
u'metering.foo.bar': u'true'}},
|
||||
u'security_group': [u'default'],
|
||||
u'instance_uuids': [u'9206baae-c3b6-41bc-96f2-2c0726ff51c8']}},
|
||||
u'priority': u'INFO',
|
||||
u'_context_is_admin': True,
|
||||
u'_context_timestamp': u'2014-03-05T12:44:00.135674',
|
||||
u'publisher_id': u'scheduler.eglynn-f19-devstack3',
|
||||
u'message_id': u'd6c1ae63-a26b-47c7-8397-8794216e09dd',
|
||||
u'_context_remote_address': u'172.16.12.21',
|
||||
u'_context_roles': [u'_member_', u'admin'],
|
||||
u'timestamp': u'2014-03-05 12:44:00.733758',
|
||||
u'_context_user': u'0a757cd896b64b65ba3784afef564116',
|
||||
u'_unique_id': u'2af47cbdde604ff794bb046f3f9db1e2',
|
||||
u'_context_project_name': u'admin',
|
||||
u'_context_read_deleted': u'no',
|
||||
u'_context_tenant': u'2bd766a095b44486bf07cf7f666997eb',
|
||||
u'_context_instance_lock_checked': False,
|
||||
u'_context_project_id': u'2bd766a095b44486bf07cf7f666997eb',
|
||||
u'_context_user_name': u'admin'
|
||||
}
|
||||
|
||||
|
||||
class TestNotifications(base.BaseTestCase):
|
||||
|
||||
def test_process_notification(self):
|
||||
info = list(instance.Instance(None).process_notification(
|
||||
INSTANCE_CREATE_END
|
||||
))[0]
|
||||
for name, actual, expected in [
|
||||
('counter_name', info.name, 'instance'),
|
||||
('counter_type', info.type, sample.TYPE_GAUGE),
|
||||
('counter_volume', info.volume, 1),
|
||||
('timestamp', info.timestamp,
|
||||
INSTANCE_CREATE_END['timestamp']),
|
||||
('resource_id', info.resource_id,
|
||||
INSTANCE_CREATE_END['payload']['instance_id']),
|
||||
('instance_type_id',
|
||||
info.resource_metadata['instance_type_id'],
|
||||
INSTANCE_CREATE_END['payload']['instance_type_id']),
|
||||
('host', info.resource_metadata['host'],
|
||||
INSTANCE_CREATE_END['publisher_id']),
|
||||
]:
|
||||
self.assertEqual(expected, actual, name)
|
||||
|
||||
@staticmethod
|
||||
def _find_counter(counters, name):
|
||||
return filter(lambda counter: counter.name == name, counters)[0]
|
||||
|
||||
def _verify_user_metadata(self, metadata):
|
||||
self.assertIn('user_metadata', metadata)
|
||||
user_meta = metadata['user_metadata']
|
||||
self.assertEqual('Group_A', user_meta.get('server_group'))
|
||||
self.assertNotIn('AutoScalingGroupName', user_meta)
|
||||
self.assertIn('foo_bar', user_meta)
|
||||
self.assertNotIn('foo.bar', user_meta)
|
||||
|
||||
def test_instance_create_instance(self):
|
||||
ic = instance.Instance(None)
|
||||
counters = list(ic.process_notification(INSTANCE_CREATE_END))
|
||||
self.assertEqual(1, len(counters))
|
||||
c = counters[0]
|
||||
self.assertEqual(1, c.volume)
|
||||
|
||||
def test_instance_exists_instance(self):
|
||||
ic = instance.Instance(None)
|
||||
counters = list(ic.process_notification(INSTANCE_EXISTS))
|
||||
self.assertEqual(1, len(counters))
|
||||
|
||||
def test_instance_exists_metadata_list(self):
|
||||
ic = instance.Instance(None)
|
||||
counters = list(ic.process_notification(INSTANCE_EXISTS_METADATA_LIST))
|
||||
self.assertEqual(1, len(counters))
|
||||
|
||||
def test_instance_delete_instance(self):
|
||||
ic = instance.Instance(None)
|
||||
counters = list(ic.process_notification(INSTANCE_DELETE_START))
|
||||
self.assertEqual(1, len(counters))
|
||||
|
||||
def test_instance_finish_resize_instance(self):
|
||||
ic = instance.Instance(None)
|
||||
counters = list(ic.process_notification(INSTANCE_FINISH_RESIZE_END))
|
||||
self.assertEqual(1, len(counters))
|
||||
c = counters[0]
|
||||
self.assertEqual(1, c.volume)
|
||||
self._verify_user_metadata(c.resource_metadata)
|
||||
|
||||
def test_instance_resize_finish_instance(self):
|
||||
ic = instance.Instance(None)
|
||||
counters = list(ic.process_notification(INSTANCE_FINISH_RESIZE_END))
|
||||
self.assertEqual(1, len(counters))
|
||||
c = counters[0]
|
||||
self.assertEqual(1, c.volume)
|
||||
self._verify_user_metadata(c.resource_metadata)
|
||||
|
||||
def test_instance_scheduled(self):
|
||||
ic = instance.InstanceScheduled(None)
|
||||
|
||||
self.assertIn(INSTANCE_SCHEDULED['event_type'],
|
||||
ic.event_types)
|
||||
|
||||
counters = list(ic.process_notification(INSTANCE_SCHEDULED))
|
||||
self.assertEqual(1, len(counters))
|
||||
names = [c.name for c in counters]
|
||||
self.assertEqual(['instance.scheduled'], names)
|
||||
rid = [c.resource_id for c in counters]
|
||||
self.assertEqual(['fake-uuid1-1'], rid)
|
File diff suppressed because it is too large
Load Diff
18
setup.cfg
18
setup.cfg
@@ -43,30 +43,12 @@ mysql =
|
||||
|
||||
[entry_points]
|
||||
ceilometer.notification =
|
||||
instance = ceilometer.compute.notifications.instance:Instance
|
||||
instance_scheduled = ceilometer.compute.notifications.instance:InstanceScheduled
|
||||
network = ceilometer.network.notifications:Network
|
||||
subnet = ceilometer.network.notifications:Subnet
|
||||
port = ceilometer.network.notifications:Port
|
||||
router = ceilometer.network.notifications:Router
|
||||
floatingip = ceilometer.network.notifications:FloatingIP
|
||||
http.request = ceilometer.middleware:HTTPRequest
|
||||
http.response = ceilometer.middleware:HTTPResponse
|
||||
hardware.ipmi.temperature = ceilometer.ipmi.notifications.ironic:TemperatureSensorNotification
|
||||
hardware.ipmi.voltage = ceilometer.ipmi.notifications.ironic:VoltageSensorNotification
|
||||
hardware.ipmi.current = ceilometer.ipmi.notifications.ironic:CurrentSensorNotification
|
||||
hardware.ipmi.fan = ceilometer.ipmi.notifications.ironic:FanSensorNotification
|
||||
network.services.lb.pool = ceilometer.network.notifications:Pool
|
||||
network.services.lb.vip = ceilometer.network.notifications:Vip
|
||||
network.services.lb.member = ceilometer.network.notifications:Member
|
||||
network.services.lb.health_monitor = ceilometer.network.notifications:HealthMonitor
|
||||
network.services.firewall = ceilometer.network.notifications:Firewall
|
||||
network.services.firewall.policy = ceilometer.network.notifications:FirewallPolicy
|
||||
network.services.firewall.rule = ceilometer.network.notifications:FirewallRule
|
||||
network.services.vpn = ceilometer.network.notifications:VPNService
|
||||
network.services.vpn.ipsecpolicy = ceilometer.network.notifications:IPSecPolicy
|
||||
network.services.vpn.ikepolicy = ceilometer.network.notifications:IKEPolicy
|
||||
network.services.vpn.connections = ceilometer.network.notifications:IPSecSiteConnection
|
||||
_sample = ceilometer.telemetry.notifications:TelemetryIpc
|
||||
meter = ceilometer.meter.notifications:ProcessMeterNotifications
|
||||
|
||||
|
Reference in New Issue
Block a user