Difference between revisions of "Trove/trove-notifications-v2"
< Trove
(Created page with "== Trove Notifications == Trove will emit events for resources as they are manipulated. These events can be used to meter the service and possibly used to calculate bills....") |
m (Denis M. moved page Trove/flexible-trove-notifications to Trove/trove-notifications-v2) |
||
(17 intermediate revisions by the same user not shown) | |||
Line 14: | Line 14: | ||
This adds the ability to send usage events to an Instance object. | This adds the ability to send usage events to an Instance object. | ||
""" | """ | ||
− | def | + | def send_stack_usage_even(self, event_type, **kwargs): |
− | + | az = kwargs.pop('az') | |
− | + | name = kwargs.pop('name') | |
− | + | event_type = 'trove.instance.%s' % event_type | |
− | + | publisher_id = CONF.host | |
− | + | created_time = timeutils.isotime(self.db_info.created) | |
− | + | compute_instance_id = kwargs.pop('compute_instance_id') | |
− | + | payload = {'availability_zone': az, | |
− | + | 'created_at': created_time, | |
− | + | 'name': name, | |
− | + | 'instance_id': self.id, | |
− | + | 'instance_name': name, | |
− | + | 'flavor_name': self.new_flavor['name'], | |
− | + | 'flavor_id': self.new_flavor['id'], | |
− | + | 'launched_at': created_time, | |
− | + | 'compute_instance_id': compute_instance_id, | |
− | + | 'region': CONF.region, | |
− | + | 'state_description': self.status.description, | |
− | + | 'state': self.status, | |
− | + | 'tenant_id': self.tenant_id, | |
− | + | 'user_id': self.context.user, | |
− | + | 'service_id': self._get_service_id( | |
− | + | self.datastore_version.manager, | |
− | + | CONF.notification_service_id)} | |
− | + | ||
− | + | if CONF.trove_volume_support: | |
− | + | payload.update({ | |
− | + | 'volume_size': self.db_info.volume_size, | |
+ | 'volume_id': self.db_info.volume_id | ||
+ | }) | ||
+ | # Update payload with all other kwargs | ||
+ | payload.update(kwargs) | ||
+ | LOG.debug(_('Sending event: %(event_type)s, %(payload)s') % | ||
+ | {'event_type': event_type, 'payload': payload}) | ||
+ | notifier.notify(self.context, publisher_id, event_type, 'INFO', payload) | ||
</pre> | </pre> | ||
Line 50: | Line 57: | ||
Create Events are emitted when a resource is created: | Create Events are emitted when a resource is created: | ||
− | <pre>self.send_usage_event('create', | + | <pre>self.send_usage_event('create', az, flavor, compute_instance_id, name, volume_size)</pre> |
Sample Message: | Sample Message: | ||
Line 57: | Line 64: | ||
{ | { | ||
'event_type': 'trove.instance.create', | 'event_type': 'trove.instance.create', | ||
− | ' | + | 'flavor_name': m1.small, |
+ | 'flavor_id': <UUID> or <Integer>, | ||
'tenant_id': <UUID>, | 'tenant_id': <UUID>, | ||
'instance_id': <UUID>, | 'instance_id': <UUID>, | ||
Line 63: | Line 71: | ||
'created_at': UTCDATE, | 'created_at': UTCDATE, | ||
'launched_at': UTCDATE, | 'launched_at': UTCDATE, | ||
− | ' | + | 'compute_instance_id': <UUID>, |
'volume_size': 1, | 'volume_size': 1, | ||
− | ' | + | 'volume_id': <UUID>, |
+ | 'state_description': <String>, | ||
+ | 'state': <String>, | ||
+ | 'user_id': <String>, | ||
+ | 'service_id': <UUID> | ||
} | } | ||
</pre> | </pre> | ||
Line 77: | Line 89: | ||
<pre> | <pre> | ||
{ | { | ||
− | 'event_type': 'trove.instance. | + | 'event_type': 'trove.instance.create', |
− | ' | + | 'flavor_name': m1.small, |
+ | 'flavor_id': <UUID> or <Integer>, | ||
'tenant_id': <UUID>, | 'tenant_id': <UUID>, | ||
'instance_id': <UUID>, | 'instance_id': <UUID>, | ||
Line 84: | Line 97: | ||
'created_at': UTCDATE, | 'created_at': UTCDATE, | ||
'launched_at': UTCDATE, | 'launched_at': UTCDATE, | ||
− | ' | + | 'compute_instance_id': <UUID>, |
− | ' | + | 'volume_size': NEW_SIZE, |
− | ' | + | 'volume_id': <UUID>, |
− | ' | + | 'state_description': <String>, |
+ | 'state': <String>, | ||
+ | 'user_id': <String>, | ||
+ | 'service_id': <UUID> | ||
} | } | ||
</pre> | </pre> | ||
Line 93: | Line 109: | ||
=== Modify Size (Resize) === | === Modify Size (Resize) === | ||
− | <pre>self.instance.send_usage_event('modify_flavor', | + | <pre>self.instance.send_usage_event('modify_flavor', flavor, launched_at=NOW, modify_at=NOW)</pre> |
Sample:: | Sample:: | ||
Line 99: | Line 115: | ||
<pre> | <pre> | ||
{ | { | ||
− | 'event_type': 'trove.instance. | + | 'event_type': 'trove.instance.create', |
− | ' | + | 'flavor_name': m1.small, |
+ | 'flavor_id': <UUID> or <Integer>, | ||
'tenant_id': <UUID>, | 'tenant_id': <UUID>, | ||
'instance_id': <UUID>, | 'instance_id': <UUID>, | ||
Line 106: | Line 123: | ||
'created_at': UTCDATE, | 'created_at': UTCDATE, | ||
'launched_at': UTCDATE, | 'launched_at': UTCDATE, | ||
− | |||
'compute_instance_id': <UUID>, | 'compute_instance_id': <UUID>, | ||
− | 'volume_size': | + | 'volume_size': NEW_SIZE, |
− | 'volume_id': <UUID> | + | 'volume_id': <UUID>, |
+ | 'state_description': <String>, | ||
+ | 'state': <String>, | ||
+ | 'user_id': <String>, | ||
+ | 'service_id': <UUID> | ||
} | } | ||
</pre> | </pre> | ||
− | |||
− | |||
− | |||
=== Delete Event === | === Delete Event === | ||
Line 120: | Line 137: | ||
Delete Events are emitted when a resource is deleted: | Delete Events are emitted when a resource is deleted: | ||
− | <pre>self.send_usage_event('delete', deleted_at= | + | <pre>self.send_usage_event('delete', deleted_at=DELETE_AD)</pre> |
Sample: | Sample: | ||
Line 126: | Line 143: | ||
<pre> | <pre> | ||
{ | { | ||
− | 'event_type': 'trove.instance. | + | 'event_type': 'trove.instance.create', |
− | ' | + | 'flavor_name': m1.small, |
+ | 'flavor_id': <UUID> or <Integer>, | ||
'tenant_id': <UUID>, | 'tenant_id': <UUID>, | ||
'instance_id': <UUID>, | 'instance_id': <UUID>, | ||
Line 133: | Line 151: | ||
'created_at': UTCDATE, | 'created_at': UTCDATE, | ||
'launched_at': UTCDATE, | 'launched_at': UTCDATE, | ||
− | |||
'compute_instance_id': <UUID>, | 'compute_instance_id': <UUID>, | ||
− | 'volume_size': | + | 'volume_size': NEW_SIZE, |
− | 'volume_id': <UUID> | + | 'volume_id': <UUID>, |
+ | 'state_description': <String>, | ||
+ | 'state': <String>, | ||
+ | 'user_id': <String>, | ||
+ | 'service_id': <UUID> | ||
+ | 'delete_at': UTCDATE | ||
} | } | ||
</pre> | </pre> | ||
Line 147: | Line 169: | ||
<pre> | <pre> | ||
− | { | + | { |
− | 'event_type': 'trove.instance. | + | 'event_type': 'trove.instance.create', |
− | ' | + | 'flavor_name': m1.small, |
+ | 'flavor_id': <UUID> or <Integer>, | ||
'tenant_id': <UUID>, | 'tenant_id': <UUID>, | ||
'instance_id': <UUID>, | 'instance_id': <UUID>, | ||
− | 'instance_name': 'MyDB | + | 'instance_name': 'MyDB, |
'created_at': UTCDATE, | 'created_at': UTCDATE, | ||
'launched_at': UTCDATE, | 'launched_at': UTCDATE, | ||
'compute_instance_id': <UUID>, | 'compute_instance_id': <UUID>, | ||
− | 'volume_size': | + | 'volume_size': NEW_SIZE, |
− | 'volume_id': <UUID> | + | 'volume_id': <UUID>, |
+ | 'state_description': <String>, | ||
+ | 'state': <String>, | ||
+ | 'user_id': <String>, | ||
+ | 'service_id': <UUID> | ||
} | } | ||
</pre> | </pre> |
Latest revision as of 10:31, 23 May 2014
Contents
Trove Notifications
Trove will emit events for resources as they are manipulated. These events can be used to meter the service and possibly used to calculate bills.
Task Manager Events
Trove taskmanager is responsible for dispatching tasks and sending notification events. Here is a typical example:
from trove.openstack.common.notifier import api as notifier from trove.openstack.common import timeutils class NotifyMixin(object): """Notification Mixin This adds the ability to send usage events to an Instance object. """ def send_stack_usage_even(self, event_type, **kwargs): az = kwargs.pop('az') name = kwargs.pop('name') event_type = 'trove.instance.%s' % event_type publisher_id = CONF.host created_time = timeutils.isotime(self.db_info.created) compute_instance_id = kwargs.pop('compute_instance_id') payload = {'availability_zone': az, 'created_at': created_time, 'name': name, 'instance_id': self.id, 'instance_name': name, 'flavor_name': self.new_flavor['name'], 'flavor_id': self.new_flavor['id'], 'launched_at': created_time, 'compute_instance_id': compute_instance_id, 'region': CONF.region, 'state_description': self.status.description, 'state': self.status, 'tenant_id': self.tenant_id, 'user_id': self.context.user, 'service_id': self._get_service_id( self.datastore_version.manager, CONF.notification_service_id)} if CONF.trove_volume_support: payload.update({ 'volume_size': self.db_info.volume_size, 'volume_id': self.db_info.volume_id }) # Update payload with all other kwargs payload.update(kwargs) LOG.debug(_('Sending event: %(event_type)s, %(payload)s') % {'event_type': event_type, 'payload': payload}) notifier.notify(self.context, publisher_id, event_type, 'INFO', payload)
Create Event
Create Events are emitted when a resource is created:
self.send_usage_event('create', az, flavor, compute_instance_id, name, volume_size)
Sample Message:
{ 'event_type': 'trove.instance.create', 'flavor_name': m1.small, 'flavor_id': <UUID> or <Integer>, 'tenant_id': <UUID>, 'instance_id': <UUID>, 'instance_name': 'MyDB, 'created_at': UTCDATE, 'launched_at': UTCDATE, 'compute_instance_id': <UUID>, 'volume_size': 1, 'volume_id': <UUID>, 'state_description': <String>, 'state': <String>, 'user_id': <String>, 'service_id': <UUID> }
Modify Volume Size
self.send_usage_event('modify_volume', launched_at=timeutils.isotime(), modify_at=timeutils.isotime(), volume_size=new_size)
Sample::
{ 'event_type': 'trove.instance.create', 'flavor_name': m1.small, 'flavor_id': <UUID> or <Integer>, 'tenant_id': <UUID>, 'instance_id': <UUID>, 'instance_name': 'MyDB, 'created_at': UTCDATE, 'launched_at': UTCDATE, 'compute_instance_id': <UUID>, 'volume_size': NEW_SIZE, 'volume_id': <UUID>, 'state_description': <String>, 'state': <String>, 'user_id': <String>, 'service_id': <UUID> }
Modify Size (Resize)
self.instance.send_usage_event('modify_flavor', flavor, launched_at=NOW, modify_at=NOW)
Sample::
{ 'event_type': 'trove.instance.create', 'flavor_name': m1.small, 'flavor_id': <UUID> or <Integer>, 'tenant_id': <UUID>, 'instance_id': <UUID>, 'instance_name': 'MyDB, 'created_at': UTCDATE, 'launched_at': UTCDATE, 'compute_instance_id': <UUID>, 'volume_size': NEW_SIZE, 'volume_id': <UUID>, 'state_description': <String>, 'state': <String>, 'user_id': <String>, 'service_id': <UUID> }
Delete Event
Delete Events are emitted when a resource is deleted:
self.send_usage_event('delete', deleted_at=DELETE_AD)
Sample:
{ 'event_type': 'trove.instance.create', 'flavor_name': m1.small, 'flavor_id': <UUID> or <Integer>, 'tenant_id': <UUID>, 'instance_id': <UUID>, 'instance_name': 'MyDB, 'created_at': UTCDATE, 'launched_at': UTCDATE, 'compute_instance_id': <UUID>, 'volume_size': NEW_SIZE, 'volume_id': <UUID>, 'state_description': <String>, 'state': <String>, 'user_id': <String>, 'service_id': <UUID> 'delete_at': UTCDATE }
Exists Event
Exists Events are emitted periodically signifying that the resource exists.
Sample:
{ 'event_type': 'trove.instance.create', 'flavor_name': m1.small, 'flavor_id': <UUID> or <Integer>, 'tenant_id': <UUID>, 'instance_id': <UUID>, 'instance_name': 'MyDB, 'created_at': UTCDATE, 'launched_at': UTCDATE, 'compute_instance_id': <UUID>, 'volume_size': NEW_SIZE, 'volume_id': <UUID>, 'state_description': <String>, 'state': <String>, 'user_id': <String>, 'service_id': <UUID> }