Jump to: navigation, search

Difference between revisions of "Trove/trove-notifications"

Line 7: Line 7:
 
Reddwarf taskmanager is responsible for dispatching tasks and sending notification events. Here is a typical example:
 
Reddwarf taskmanager is responsible for dispatching tasks and sending notification events. Here is a typical example:
  
<code>
+
<pre>
 
     from reddwarf.openstack.common.notifier import api as notifier
 
     from reddwarf.openstack.common.notifier import api as notifier
 
     from reddwarf.openstack.common import timeutils
 
     from reddwarf.openstack.common import timeutils
Line 41: Line 41:
 
             payload.update(kwargs)
 
             payload.update(kwargs)
 
             notifier.notify(self.context, publisher_id, event_type, 'INFO',
 
             notifier.notify(self.context, publisher_id, event_type, 'INFO',
                                 payload)</code>
+
                                 payload)
 +
</pre>
  
  
Line 49: Line 50:
 
Create Events are emitted when a resource is created:
 
Create Events are emitted when a resource is created:
  
<code>self.send_usage_event('create', instance_size=flavor_ram)</code>
+
<pre>self.send_usage_event('create', instance_size=flavor_ram)</pre>
  
 
Sample Message:
 
Sample Message:
  
<code>
+
<pre>
 
{
 
{
 
       'event_type': 'reddwarf.instance.create',
 
       'event_type': 'reddwarf.instance.create',
Line 66: Line 67:
 
       'nova_volume_id': <UUID>
 
       'nova_volume_id': <UUID>
 
}
 
}
</code>
+
</pre>
  
 
=== Modify Volume Size ===
 
=== Modify Volume Size ===
  
<code>self.send_usage_event('modify_volume', launched_at=timeutils.isotime(), modify_at=timeutils.isotime(), volume_size=new_size)</code>
+
<pre>self.send_usage_event('modify_volume', launched_at=timeutils.isotime(), modify_at=timeutils.isotime(), volume_size=new_size)</pre>
  
 
Sample::
 
Sample::
  
<code>
+
<pre>
 
{
 
{
 
       'event_type': 'reddwarf.instance.modify_volume',
 
       'event_type': 'reddwarf.instance.modify_volume',
Line 88: Line 89:
 
       'nova_volume_id': <UUID>
 
       'nova_volume_id': <UUID>
 
}
 
}
</code>
+
</pre>
  
 
=== Modify Size (Resize) ===
 
=== Modify Size (Resize) ===
  
<code>self.instance.send_usage_event('modify_flavor', instance_size=self.new_memory_size, launched_at=timeutils.isotime(), modify_at=timeutils.isotime())</code>
+
<pre>self.instance.send_usage_event('modify_flavor', instance_size=self.new_memory_size, launched_at=timeutils.isotime(), modify_at=timeutils.isotime())</pre>
  
 
Sample::
 
Sample::
  
<code>
+
<pre>
 
{
 
{
 
       'event_type': 'reddwarf.instance.modify_flavor',
 
       'event_type': 'reddwarf.instance.modify_flavor',
Line 110: Line 111:
 
       'nova_volume_id': <UUID>
 
       'nova_volume_id': <UUID>
 
}
 
}
</code>
+
</pre>
  
 
=== Delete Event ===
 
=== Delete Event ===
Line 116: Line 117:
 
Delete Events are emitted when a resource is deleted:
 
Delete Events are emitted when a resource is deleted:
  
<code>self.send_usage_event('delete', deleted_at=timeutils.isotime())</code>
+
<pre>self.send_usage_event('delete', deleted_at=timeutils.isotime())</pre>
  
 
Sample:
 
Sample:
  
<code>
+
<pre>
 
{
 
{
 
       'event_type': 'reddwarf.instance.delete',
 
       'event_type': 'reddwarf.instance.delete',
Line 134: Line 135:
 
       'nova_volume_id': <UUID>
 
       'nova_volume_id': <UUID>
 
}
 
}
</code>
+
</pre>
  
 
=== Exists Event ===
 
=== Exists Event ===
Line 142: Line 143:
 
Sample:
 
Sample:
  
<code>
+
<pre>
 
{    'event_type': 'reddwarf.instance.exists',
 
{    'event_type': 'reddwarf.instance.exists',
 
       'instance_size': 512,
 
       'instance_size': 512,
Line 153: Line 154:
 
       'volume_size': 1,
 
       'volume_size': 1,
 
       'nova_volume_id': <UUID>}
 
       'nova_volume_id': <UUID>}
</code>
+
</pre>

Revision as of 18:02, 1 April 2013

Reddwarf Notifications

Reddwarf 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

Reddwarf taskmanager is responsible for dispatching tasks and sending notification events. Here is a typical example:

    from reddwarf.openstack.common.notifier import api as notifier
    from reddwarf.openstack.common import timeutils
    class NotifyMixin(object):
        """Notification Mixin
        This adds the ability to send usage events to an Instance object.
         """
        def send_usage_event(self, event_type, **kwargs):
            event_type = 'reddwarf.instance.%s' % event_type
            publisher_id = CONF.host
            # Grab the instance size from the kwargs or from the nova client
            instance_size = kwargs.pop('instance_size', None)
            if instance_size is None:
                flavor = self.nova_client.flavors.get(self.flavor_id)
                instance_size = flavor.ram
            # Default payload
            created_time = timeutils.isotime(self.db_info.created)
            payload = {
                'instance_size': instance_size,
                'tenant_id': self.tenant_id,
                'instance_id': self.id,
                'instance_name': self.name,
                'created_at': created_time,
                'launched_at': created_time,
                'nova_instance_id': self.server_id,
            }
            if CONF.reddwarf_volume_support:
                payload.update({
                    'volume_size': self.volume_size,
                    'nova_volume_id': self.volume_id
                })
            # Update payload with all other kwargs
            payload.update(kwargs)
            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', instance_size=flavor_ram)

Sample Message:

{
      'event_type': 'reddwarf.instance.create',
      'instance_size': 512,
      'tenant_id': <UUID>,
      'instance_id': <UUID>,
      'instance_name': 'MyDB,
      'created_at': UTCDATE,
      'launched_at': UTCDATE,
      'nova_instance_id': <UUID>,
      'volume_size': 1,
      'nova_volume_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': 'reddwarf.instance.modify_volume',
      'instance_size': 512,
      'tenant_id': <UUID>,
      'instance_id': <UUID>,
      'instance_name': 'MyDB,
      'created_at': UTCDATE,
      'launched_at': UTCDATE,
      'modify_at': UTCDATE,
      'nova_instance_id': <UUID>,
      'volume_size': 2,
      'nova_volume_id': <UUID>
}

Modify Size (Resize)

self.instance.send_usage_event('modify_flavor', instance_size=self.new_memory_size, launched_at=timeutils.isotime(), modify_at=timeutils.isotime())

Sample::

{
      'event_type': 'reddwarf.instance.modify_flavor',
      'instance_size': 1024,
      'tenant_id': <UUID>,
      'instance_id': <UUID>,
      'instance_name': 'MyDB,
      'created_at': UTCDATE,
      'launched_at': UTCDATE,
      'modify_at': UTCDATE,
      'nova_instance_id': <UUID>,
      'volume_size': 2,
      'nova_volume_id': <UUID>
}

Delete Event

Delete Events are emitted when a resource is deleted:

self.send_usage_event('delete', deleted_at=timeutils.isotime())

Sample:

{
      'event_type': 'reddwarf.instance.delete',
      'instance_size': 1024,
      'tenant_id': <UUID>,
      'instance_id': <UUID>,
      'instance_name': 'MyDB,
      'created_at': UTCDATE,
      'launched_at': UTCDATE,
      'deleted_at': UTCDATE,
      'nova_instance_id': <UUID>,
      'volume_size': 2,
      'nova_volume_id': <UUID>
}

Exists Event

Exists Events are emitted periodically signifying that the resource exists.

Sample:

{     'event_type': 'reddwarf.instance.exists',
      'instance_size': 512,
      'tenant_id': <UUID>,
      'instance_id': <UUID>,
      'instance_name': 'MyDB',
      'created_at': UTCDATE,
      'launched_at': UTCDATE,
      'nova_instance_id': <UUID>,
      'volume_size': 1,
      'nova_volume_id': <UUID>}