def testStorageVolumePayloadGenerator(self): metadata = \ event_metadata.get_EventMetaData( event_metadata.EVENT_TYPE_STORAGE_ADDED) obj = StorageVolume() obj.name = 'TestStorageVolume' obj.connectionState = 'ACTIVE' obj.size = 200 obj.volumeType = 'DIR' obj.volumeId = 'TestVolumeId' obj.createEpoch = long(time.time() * 1000) obj.lastModifiedEpoch = long(time.time() * 1000) mount_point = HostMountPoint() mount_point.set_path('/root/storage/1') mount_point.set_vmHostId('HOST1') obj.add_mountPoints(mount_point) mount_point = HostMountPoint() mount_point.set_path('/root/storage/2') mount_point.set_vmHostId('HOST2') obj.add_mountPoints(mount_point) payload = payload_generator.generate_payload(metadata, obj) self.assertEquals(payload['entity_type'], obj.__class__.__name__) self.assertEquals(payload['name'], obj.name) self.assertEquals(payload['state'], obj.connectionState) self.assertTrue(obj.mountPoints[0].path in payload['mount_points'])
def testPayloadGenerator(self): metadata = event_metadata.EventMetaData('TestEvent', 'TestCategory', 'Short Description %(name)s', 'Long Description %(name)s', notifier.api.INFO) obj = Entity() obj.name = 'TestName' payload = payload_generator.generate_payload(metadata, obj) self.assertEquals(payload['entity_type'], obj.__class__.__name__) self.assertEquals(payload['name'], obj.name)
def notify(event_type, obj, **kwargs): """Generate event for a event type id This API is used by the different healthnmon modules which need to generate event. Parameters: event_type - One of the event types declared in healthnmon.events.event_meta_data obj - Vm, VmHost or StorageVolume object for which this event is to be generated """ eventmetadata_obj = event_metadata.get_EventMetaData(event_type) payload = payload_generator.generate_payload(eventmetadata_obj, obj, **kwargs) # Set publisher_id as <nova-scheduler-service.host>.healthnmon publisher_id = None admin_ctxt = context.get_admin_context() scheduler_services = None try: scheduler_services = \ nova_db.service_get_all_by_topic(admin_ctxt, 'scheduler') except: LOG.error(_('Could not fetch scheduler service from nova db')) if scheduler_services is None or len(scheduler_services) < 1: LOG.debug(_('Scheduler service not found.')) else: if len(scheduler_services) > 1: LOG.debug(_('More than 1 entry for Scheduler service found.' )) scheduler_service = scheduler_services[0] scheduler_service_host = scheduler_service['host'] if scheduler_service_host is None \ or len(scheduler_service_host) < 1: LOG.debug(_('Invalid host name for Scheduler service entry : ' + str(scheduler_service_host))) else: publisher_id = scheduler_service_host + '.' + 'healthnmon' if publisher_id is None: publisher_id = 'healthnmon' LOG.warn(_('Could not determine host name of nova scheduler service. \ Using default publisher id %s' % publisher_id)) # Send message to notifier api LOG.debug(_('Sending notification with publisher_id: %s, name: %s,\ payload: %s') % (publisher_id, eventmetadata_obj.get_event_fully_qal_name(), payload)) notifier_api.notify(admin_ctxt, publisher_id, eventmetadata_obj.get_event_fully_qal_name(), eventmetadata_obj.priority, payload)
def testVmHostPayloadGenerator(self): metadata = \ event_metadata.get_EventMetaData( event_metadata.EVENT_TYPE_HOST_ADDED) obj = VmHost() obj.name = 'TestVmHost' ipProfile = IpProfile() ipProfile.ipAddress = '10.10.10.1' obj.add_ipAddresses(ipProfile) payload = payload_generator.generate_payload(metadata, obj) self.assertEquals(payload['entity_type'], obj.__class__.__name__) self.assertEquals(payload['name'], obj.name) self.assertEquals(payload['ipAddresses'], ipProfile.ipAddress)
def notify(event_type, obj, **kwargs): """Generate event for a event type id This API is used by the different healthnmon modules which need to generate event. Parameters: event_type - One of the event types declared in healthnmon.events.event_meta_data obj - Vm, VmHost or StorageVolume object for which this event is to be generated """ eventmetadata_obj = event_metadata.get_EventMetaData(event_type) payload = payload_generator.generate_payload(eventmetadata_obj, obj, **kwargs) # Set publisher_id as <nova-scheduler-service.host>.healthnmon publisher_id = None admin_ctxt = context.get_admin_context() scheduler_services = None try: scheduler_services = \ nova_db.service_get_all_by_topic(admin_ctxt, 'scheduler') except: LOG.warn(_('Could not fetch scheduler service from nova db')) if scheduler_services is None or len(scheduler_services) < 1: LOG.warn(_('Scheduler service not found.')) else: if len(scheduler_services) > 1: LOG.warn(_('More than 1 entry for Scheduler service found.')) scheduler_service = scheduler_services[0] scheduler_service_host = scheduler_service['host'] if scheduler_service_host is None \ or len(scheduler_service_host) < 1: LOG.warn( _('Invalid host name for Scheduler service entry : ' + str(scheduler_service_host))) else: publisher_id = scheduler_service_host + '.' + 'healthnmon' if publisher_id is None: publisher_id = 'healthnmon' LOG.warn( _('Could not determine host name of nova scheduler service. Using default publisher id %s' % publisher_id)) # Send message to notifier api notifier_api.notify(admin_ctxt, publisher_id, eventmetadata_obj.get_event_fully_qal_name(), eventmetadata_obj.priority, payload)
def testVmHostPayload_with_storage_size(self): self.flags(instances_path="/var/lib/nova/instances") metadata = \ event_metadata.get_EventMetaData( event_metadata.EVENT_TYPE_HOST_ADDED) obj = VmHost() obj.name = 'TestVmHost' ipProfile = IpProfile() ipProfile.ipAddress = '10.10.10.1' obj.add_ipAddresses(ipProfile) storage_obj = StorageVolume() storage_obj.id = "storage_id" storage_obj.name = 'TestStorageVolume' storage_obj.connectionState = 'ACTIVE' storage_obj.size = 200 storage_obj.free = 100 storage_obj.volumeType = 'DIR' storage_obj.volumeId = 'TestVolumeId' storage_obj.createEpoch = long(time.time() * 1000) storage_obj.lastModifiedEpoch = long(time.time() * 1000) mount_point = HostMountPoint() mount_point.set_path('/var/lib/nova/instances') mount_point.set_vmHostId('TestVmHost') storage_obj.add_mountPoints(mount_point) obj.add_storageVolumeIds("storage_id") self.mox.StubOutWithMock( InventoryCacheManager, 'get_object_from_cache') InventoryCacheManager.get_object_from_cache( storage_obj.id, Constants.StorageVolume).AndReturn(storage_obj) self.mox.ReplayAll() payload = payload_generator.generate_payload(metadata, obj) self.assertEquals(payload['entity_type'], obj.__class__.__name__) self.assertEquals(payload['name'], obj.name) self.assertEquals(payload['ipAddresses'], ipProfile.ipAddress) self.assertEquals(payload['totalStorageSize'], storage_obj.size) self.assertEquals(payload['storageUsed'], storage_obj.free)
def testVmHostPayload_with_storage_size(self): self.flags(instances_path="/var/lib/nova/instances") metadata = \ event_metadata.get_EventMetaData( event_metadata.EVENT_TYPE_HOST_ADDED) obj = VmHost() obj.name = 'TestVmHost' ipProfile = IpProfile() ipProfile.ipAddress = '10.10.10.1' obj.add_ipAddresses(ipProfile) storage_obj = StorageVolume() storage_obj.id = "storage_id" storage_obj.name = 'TestStorageVolume' storage_obj.connectionState = 'ACTIVE' storage_obj.size = 200 storage_obj.free = 100 storage_obj.volumeType = 'DIR' storage_obj.volumeId = 'TestVolumeId' storage_obj.createEpoch = long(time.time() * 1000) storage_obj.lastModifiedEpoch = long(time.time() * 1000) mount_point = HostMountPoint() mount_point.set_path('/var/lib/nova/instances') mount_point.set_vmHostId('TestVmHost') storage_obj.add_mountPoints(mount_point) obj.add_storageVolumeIds("storage_id") self.mox.StubOutWithMock(InventoryCacheManager, 'get_object_from_cache') InventoryCacheManager.get_object_from_cache( storage_obj.id, Constants.StorageVolume).AndReturn(storage_obj) self.mox.ReplayAll() payload = payload_generator.generate_payload(metadata, obj) self.assertEquals(payload['entity_type'], obj.__class__.__name__) self.assertEquals(payload['name'], obj.name) self.assertEquals(payload['ipAddresses'], ipProfile.ipAddress) self.assertEquals(payload['totalStorageSize'], storage_obj.size) self.assertEquals(payload['storageUsed'], storage_obj.free)