~midokura/nova/midostack-oneiric

« back to all changes in this revision

Viewing changes to nova/compute/manager.py

  • Committer: Tarmac
  • Author(s): Monsyne Dragon
  • Date: 2011-06-28 20:53:45 UTC
  • mfrom: (1077.5.9 system-usages)
  • Revision ID: tarmac-20110628205345-u83nk10n7ybfjp26
This adds system usage notifications using the notifications framework.  
These are designed to feed an external billing or similar system that subscribes to the nova feed and does the analysis. 

Show diffs side-by-side

added added

removed removed

Lines of Context:
49
49
from nova import log as logging
50
50
from nova import manager
51
51
from nova import network
 
52
from nova import notifier
52
53
from nova import rpc
53
54
from nova import utils
54
55
from nova import volume
55
56
from nova.compute import power_state
 
57
from nova.notifier import api as notifier_api
56
58
from nova.compute.utils import terminate_volumes
57
59
from nova.virt import driver
58
60
 
343
345
 
344
346
            self._update_launched_at(context, instance_id)
345
347
            self._update_state(context, instance_id)
 
348
            usage_info = utils.usage_from_instance(instance_ref)
 
349
            notifier_api.notify('compute.%s' % self.host,
 
350
                                'compute.instance.create',
 
351
                                notifier_api.INFO,
 
352
                                usage_info)
346
353
        except exception.InstanceNotFound:
347
354
            # FIXME(wwolf): We are just ignoring InstanceNotFound
348
355
            # exceptions here in case the instance was immediately
421
428
    def terminate_instance(self, context, instance_id):
422
429
        """Terminate an instance on this host."""
423
430
        self._shutdown_instance(context, instance_id, 'Terminating')
 
431
        instance_ref = self.db.instance_get(context.elevated(), instance_id)
424
432
 
425
433
        # TODO(ja): should we keep it in a terminated state for a bit?
426
434
        self.db.instance_destroy(context, instance_id)
 
435
        usage_info = utils.usage_from_instance(instance_ref)
 
436
        notifier_api.notify('compute.%s' % self.host,
 
437
                            'compute.instance.delete',
 
438
                            notifier_api.INFO,
 
439
                            usage_info)
427
440
 
428
441
    @exception.wrap_exception
429
442
    @checks_instance_lock
460
473
        self._update_image_ref(context, instance_id, image_ref)
461
474
        self._update_launched_at(context, instance_id)
462
475
        self._update_state(context, instance_id)
 
476
        usage_info = utils.usage_from_instance(instance_ref,
 
477
                                               image_ref=image_ref)
 
478
        notifier_api.notify('compute.%s' % self.host,
 
479
                            'compute.instance.rebuild',
 
480
                            notifier_api.INFO,
 
481
                            usage_info)
463
482
 
464
483
    @exception.wrap_exception
465
484
    @checks_instance_lock
637
656
        context = context.elevated()
638
657
        instance_ref = self.db.instance_get(context, instance_id)
639
658
        self.driver.destroy(instance_ref)
 
659
        usage_info = utils.usage_from_instance(instance_ref)
 
660
        notifier_api.notify('compute.%s' % self.host,
 
661
                            'compute.instance.resize.confirm',
 
662
                            notifier_api.INFO,
 
663
                            usage_info)
640
664
 
641
665
    @exception.wrap_exception
642
666
    @checks_instance_lock
684
708
        self.driver.revert_resize(instance_ref)
685
709
        self.db.migration_update(context, migration_id,
686
710
                {'status': 'reverted'})
 
711
        usage_info = utils.usage_from_instance(instance_ref)
 
712
        notifier_api.notify('compute.%s' % self.host,
 
713
                            'compute.instance.resize.revert',
 
714
                            notifier_api.INFO,
 
715
                            usage_info)
687
716
 
688
717
    @exception.wrap_exception
689
718
    @checks_instance_lock
720
749
                       'migration_id': migration_ref['id'],
721
750
                       'instance_id': instance_id, },
722
751
                })
 
752
        usage_info = utils.usage_from_instance(instance_ref,
 
753
                              new_instance_type=instance_type['name'],
 
754
                              new_instance_type_id=instance_type['id'])
 
755
        notifier_api.notify('compute.%s' % self.host,
 
756
                            'compute.instance.resize.prep',
 
757
                            notifier_api.INFO,
 
758
                            usage_info)
723
759
 
724
760
    @exception.wrap_exception
725
761
    @checks_instance_lock