def testPerfFileSystemTransformPerfFS(self): """ Test to make sure that the standard transform on the /Perf/Filesystem event class works properly for stock performance templates. """ # Test an example event from a standard SNMP device. device = self.dmd.Devices.createInstance('snmpdevice') device.os.addFileSystem('/', False) fs = device.os.filesystems()[0] fs.mount = '/' fs.blockSize = 4096 fs.totalBlocks = 29221228 event = Event() event.actor.element_identifier = device.id event.actor.element_type_id = DEVICE event.actor.element_sub_identifier = fs.name() event.actor.element_sub_type_id = COMPONENT event.severity = SEVERITY_WARNING event.event_key = 'usedBlocks_usedBlocks|high disk usage' event.event_class = '/Perf/Filesystem' event.summary = 'threshold of high disk usage exceeded: current value 23476882.00' processed = self._processEvent(event) self.assertEquals(processed.event.summary, 'disk space threshold: 80.3% used (21.9GB free)')
def testActorReidentificationFromEventClassKeyTransform(self): """ Verify that changing the device in a transform properly reidentifies the device when matching an event by eventClassKey. """ device_a = self.dmd.Devices.createInstance("transform_device_a") # Related: ZEN-1419 # If you change a device from within a transform like so: # # evt.device = 'my_new_device' # # The processing pipeline will recognize this and re-run the # identification pipes. Before it re-runs these pipes though, it will # clear several properties related to the device, one of which is the # device/element UUID. During the Identification pipe, if the UUID # is missing, it will try one last time to lookup the element # using the identifier and the ip address. If we do not set an # ip address here, this test will not be completely testing the # reidentification logic. device_a.setManageIp("192.168.100.100") device_b = self.dmd.Devices.createInstance("transform_device_b") _transform_key = 'transform_test_key' _transform = """ evt.device = '%s' """ self.dmd.Events.createOrganizer('/transform_test') self.dmd.Events.transform_test.transform = _transform % device_b.id # the organizer above contains the transform, no create an instance # that actually contains the event class key. self.dmd.Events.transform_test.createInstance(_transform_key) event = Event() event.actor.element_identifier = device_a.id event.actor.element_type_id = DEVICE event.severity = SEVERITY_WARNING event.summary = 'Testing transforms.' detail = event.details.add() detail.name = EventProxy.DEVICE_IP_ADDRESS_DETAIL_KEY detail.value.append(device_a.getManageIp()) # Match the transform by event_class_key event.event_class_key = _transform_key processed = self._processEvent(event) self.assertEquals(device_b.id, processed.event.actor.element_identifier) self.assertEquals( IGlobalIdentifier(device_b).getGUID(), processed.event.actor.element_uuid)
def testActorReidentificationFromEventClassKeyTransform(self): """ Verify that changing the device in a transform properly reidentifies the device when matching an event by eventClassKey. """ device_a = self.dmd.Devices.createInstance("transform_device_a") # Related: ZEN-1419 # If you change a device from within a transform like so: # # evt.device = 'my_new_device' # # The processing pipeline will recognize this and re-run the # identification pipes. Before it re-runs these pipes though, it will # clear several properties related to the device, one of which is the # device/element UUID. During the Identification pipe, if the UUID # is missing, it will try one last time to lookup the element # using the identifier and the ip address. If we do not set an # ip address here, this test will not be completely testing the # reidentification logic. device_a.setManageIp("192.168.100.100") device_b = self.dmd.Devices.createInstance("transform_device_b") _transform_key = 'transform_test_key' _transform = """ evt.device = '%s' """ self.dmd.Events.createOrganizer('/transform_test') self.dmd.Events.transform_test.transform = _transform % device_b.id # the organizer above contains the transform, no create an instance # that actually contains the event class key. self.dmd.Events.transform_test.createInstance(_transform_key) event = Event() event.actor.element_identifier = device_a.id event.actor.element_type_id = DEVICE event.severity = SEVERITY_WARNING event.summary = 'Testing transforms.' detail = event.details.add() detail.name = EventProxy.DEVICE_IP_ADDRESS_DETAIL_KEY detail.value.append(device_a.getManageIp()) # Match the transform by event_class_key event.event_class_key = _transform_key processed = self._processEvent(event) self.assertEquals(device_b.id, processed.event.actor.element_identifier) self.assertEquals(IGlobalIdentifier(device_b).getGUID(), processed.event.actor.element_uuid)
def testActionDropped(self): transform = 'evt._action="drop"' self.dmd.Events.createOrganizer('/Perf/Filesystem') self.dmd.Events.Perf.Filesystem.transform = transform event = Event() event.actor.element_identifier = 'localhost' event.actor.element_type_id = DEVICE event.severity = SEVERITY_ERROR event.event_class = '/Perf/Filesystem' event.summary = 'should be dropped' self.assertRaises(DropEvent, self._processEvent, event)
def testActionHistory(self): transform = 'evt._action="history"' self.dmd.Events.createOrganizer('/Perf/Filesystem') self.dmd.Events.Perf.Filesystem.transform = transform event = Event() event.actor.element_identifier = 'localhost' event.actor.element_type_id = DEVICE event.severity = SEVERITY_ERROR event.event_class = '/Perf/Filesystem' event.summary = 'should be closed' processed = self._processEvent(event) self.assertEqual(STATUS_CLOSED, processed.status)
def testActionHistory(self): transform = 'evt._action="history"' self.dmd.Events.createOrganizer('/Perf/Filesystem') self.dmd.Events.Perf.Filesystem.transform = transform event = Event() event.actor.element_identifier = 'localhost' event.actor.element_type_id = DEVICE event.severity = SEVERITY_ERROR event.event_class = '/Perf/Filesystem' event.summary = 'should be closed' processed = self._processEvent(event) self.assertEqual(STATUS_CLOSED, processed.event.status)
def sendToRawEventQueue(self): if not self.options.eventFile: self.parser.error('Missing file argument!') return 0 filename = self.options.eventFile try: with open(filename) as f: evt = pickle.load(f) event = Event() event.updateFromDict(evt) zem = zodb.dmd.ZenEventManager zem.sendEvent(event) except IOError as ex: log.error("Unable to process file %s: %s", filename, ex) return 0
def testProxySystems(self): event = Event() event.details.add(name=EventProxy.DEVICE_SYSTEMS_DETAIL_KEY, value=['System1', 'System2', 'System3']) proxy = EventProxy(event) self.assertEqual('|System1|System2|System3', proxy.Systems)
def testProxyDeviceGroups(self): event = Event() event.details.add(name=EventProxy.DEVICE_GROUPS_DETAIL_KEY, value=['Group1', 'Group2', 'Group3']) proxy = EventProxy(event) self.assertEqual('|Group1|Group2|Group3', proxy.DeviceGroups)
def testProxyLocation(self): event = Event() event.details.add(name=EventProxy.DEVICE_LOCATION_DETAIL_KEY, value=['MyLocation']) proxy = EventProxy(event) self.assertEqual('MyLocation', proxy.Location)
def testIntSeverityTransform(self): """ Transform the event severity to a string and see if it evaluates. """ transform = 'evt.severity="0"; evt.summary="transformed"' self.dmd.Events.createOrganizer('/Perf/Filesystem') self.dmd.Events.Perf.Filesystem.transform = transform event = Event() event.actor.element_identifier = 'localhost' event.actor.element_type_id = DEVICE event.severity = SEVERITY_ERROR event.event_class = '/Perf/Filesystem' event.summary = 'bad thingy' processed = self._processEvent(event) self.assertEqual(SEVERITY_CLEAR, processed.severity) self.assertEqual('transformed', processed.summary) self.assert_(isinstance(processed.severity, int))
def testFacilityConversion(self): event = self._createDummyEvent() proto = Event() serializer = Serializer(event) event.facility = "1" # fill the protobuf proto = serializer.fill(proto) # should have converted to an int self.assertEqual(proto.syslog_facility, 1) self.assertEqual(proto.event_class_key, event.eventClassKey)
def testIntSeverityTransform(self): """ Transform the event severity to a string and see if it evaluates. """ transform = 'evt.severity="0"; evt.summary="transformed"' self.dmd.Events.createOrganizer('/Perf/Filesystem') self.dmd.Events.Perf.Filesystem.transform = transform event = Event() event.actor.element_identifier = 'localhost' event.actor.element_type_id = DEVICE event.severity = SEVERITY_ERROR event.event_class = '/Perf/Filesystem' event.summary = 'bad thingy' processed = self._processEvent(event) self.assertEqual(SEVERITY_CLEAR, processed.event.severity) self.assertEqual('transformed', processed.event.summary) self.assert_(isinstance(processed.event.severity, int))
def testActionStatusDoesntChangeSuppressed(self): """ If an event comes in as suppressed and the _action says to keep it in _status (the default), make sure that we don't accidentally change the status of the event back to STATUS_NEW. """ transform = 'evt._action="status"' self.dmd.Events.createOrganizer('/Perf/Filesystem') self.dmd.Events.Perf.Filesystem.transform = transform event = Event() event.actor.element_identifier = 'localhost' event.actor.element_type_id = DEVICE event.severity = SEVERITY_ERROR event.status = STATUS_SUPPRESSED event.event_class = '/Perf/Filesystem' event.summary = 'should be suppressed' processed = self._processEvent(event) self.assertEqual(STATUS_SUPPRESSED, processed.event.status)
def testPerfFileSystemTransformSSH(self): # Test an example event from a standard SSH device. device = self.dmd.Devices.createInstance('sshdevice') device.os.addFileSystem('/', False) fs = device.os.filesystems()[0] fs.mount = '/' fs.blockSize = 1024 fs.totalBlocks = 149496116 event = Event() event.actor.element_identifier = device.id event.actor.element_type_id = DEVICE event.actor.element_sub_identifier = fs.id event.actor.element_sub_type_id = COMPONENT event.severity = SEVERITY_WARNING event.event_key = 'disk|disk_usedBlocks|Free Space 90 Percent' event.event_class = '/Perf/Filesystem' event.summary = 'threshold of Free Space 90 Percent exceeded: current value 73400348.00' processed = self._processEvent(event) self.assertEquals(processed.event.summary, 'disk space threshold: 49.1% used (72.6GB free)')
def testPerfFileSystemTransformPerfmon(self): # Test an example event from a standard Perfmon device. device = self.dmd.Devices.createInstance('perfmondevice') device.os.addFileSystem('C', False) fs = device.os.filesystems()[0] fs.mount = ' Label:C: Serial Number: 1471843B' fs.blockSize = 8192 fs.totalBlocks = 1047233 event = Event() event.actor.element_identifier = device.id event.actor.element_type_id = DEVICE event.actor.element_sub_identifier = fs.name() event.actor.element_sub_type_id = COMPONENT event.severity = SEVERITY_WARNING event.event_key = 'FreeMegabytes_FreeMegabytes' event.event_class = '/Perf/Filesystem' event.summary = 'threshold of low disk space not met: current value 4156.00' processed = self._processEvent(event) self.assertEquals(processed.event.summary, 'disk space threshold: 49.2% used (4.1GB free)')
def testActorReidentificationFromEventClassKeyTransformWithComponent(self): """ Verify that changing the device in a transform properly reidentifies the device when matching an event by eventClassKey. """ devA = self.dmd.Devices.createInstance("transform_device_a") devA.os.addFileSystem("component", False) devA.setManageIp("192.168.100.100") devB = self.dmd.Devices.createInstance("transform_device_b") devB.os.addFileSystem("component", False) devB.setManageIp("192.168.100.101") _transform_key = 'transform_test_key' self.dmd.Events.createOrganizer('/transform_test') self.dmd.Events.transform_test.transform = "evt.device = '%s'" % devB.id self.dmd.Events.transform_test.createInstance(_transform_key) event = Event() event.actor.element_identifier = devA.id event.actor.element_type_id = DEVICE event.severity = SEVERITY_WARNING event.summary = 'Testing transforms on component.' event.actor.element_sub_type_id = COMPONENT event.actor.element_sub_identifier = devA.getDeviceComponents()[0].id detail = event.details.add() detail.name = EventProxy.DEVICE_IP_ADDRESS_DETAIL_KEY detail.value.append(devA.getManageIp()) # Match the transform by event_class_key event.event_class_key = _transform_key processed = self._processEvent(event) self.assertEquals( IGlobalIdentifier(devB.getDeviceComponents()[0]).getGUID(), processed.actor.element_sub_uuid)
def testActorReidentificationFromEventClassKeyTransformWithComponent(self): """ Verify that changing the device in a transform properly reidentifies the device when matching an event by eventClassKey. """ devA = self.dmd.Devices.createInstance("transform_device_a") devA.os.addFileSystem("component", False) devA.setManageIp("192.168.100.100") devB = self.dmd.Devices.createInstance("transform_device_b") devB.os.addFileSystem("component", False) devB.setManageIp("192.168.100.101") _transform_key = 'transform_test_key' self.dmd.Events.createOrganizer('/transform_test') self.dmd.Events.transform_test.transform = "evt.device = '%s'" % devB.id self.dmd.Events.transform_test.createInstance(_transform_key) event = Event() event.actor.element_identifier = devA.id event.actor.element_type_id = DEVICE event.severity = SEVERITY_WARNING event.summary = 'Testing transforms on component.' event.actor.element_sub_type_id = COMPONENT event.actor.element_sub_identifier = devA.getDeviceComponents()[0].id detail = event.details.add() detail.name = EventProxy.DEVICE_IP_ADDRESS_DETAIL_KEY detail.value.append(devA.getManageIp()) # Match the transform by event_class_key event.event_class_key = _transform_key processed = self._processEvent(event) self.assertEquals(IGlobalIdentifier(devB.getDeviceComponents()[0]).getGUID(), processed.event.actor.element_sub_uuid)
def testAdaptingEventtoProtobuf(self): # setup event and device device = self.device event = self._createDummyEvent() event.foo = "bar" proto = Event() serializer = Serializer(event) # fill the protobuf proto = serializer.fill(proto) # check the results self.assertEqual(proto.agent, event.agent) self.assertEqual(proto.event_key, event.eventKey) # make sure the actor was set self.assertEqual(proto.actor.element_identifier, device.id) # make sure we have at least one detail self.assertTrue(len(proto.details) >= 1) # the new severity value self.assertEqual(proto.severity, 4)
def testActionStatusDoesntChangeSuppressed(self): """ If an event comes in as suppressed and the _action says to keep it in _status (the default), make sure that we don't accidentally change the status of the event back to STATUS_NEW. """ transform = 'evt._action="status"' self.dmd.Events.createOrganizer('/Perf/Filesystem') self.dmd.Events.Perf.Filesystem.transform = transform event = Event() event.actor.element_identifier = 'localhost' event.actor.element_type_id = DEVICE event.severity = SEVERITY_ERROR event.status = STATUS_SUPPRESSED event.event_class = '/Perf/Filesystem' event.summary = 'should be suppressed' processed = self._processEvent(event) self.assertEqual(STATUS_SUPPRESSED, processed.status)
def testPerfFileSystemTransform(self): """ Test to make sure that the standard transform on the /Perf/Filesystem event class works properly for stock performance templates. """ self.dmd.Events.createOrganizer('/Perf/Filesystem') self.dmd.Events.Perf.Filesystem.transform = perfFilesystemTransform # Test an example event from a standard SNMP device. device = self.dmd.Devices.createInstance('snmpdevice') device.os.addFileSystem('/', False) fs = device.os.filesystems()[0] fs.mount = '/' fs.blockSize = 4096 fs.totalBlocks = 29221228 event = Event() event.actor.element_identifier = device.id event.actor.element_type_id = DEVICE event.actor.element_sub_identifier = fs.name() event.actor.element_sub_type_id = COMPONENT event.severity = SEVERITY_WARNING event.event_key = 'usedBlocks_usedBlocks|high disk usage' event.event_class = '/Perf/Filesystem' event.summary = 'threshold of high disk usage exceeded: current value 23476882.00' processed = self._processEvent(event) self.assertEquals(processed.event.summary, 'disk space threshold: 80.3% used (21.9GB free)') # Test an example event from a standard Perfmon device. device = self.dmd.Devices.createInstance('perfmondevice') device.os.addFileSystem('C', False) fs = device.os.filesystems()[0] fs.mount = ' Label:C: Serial Number: 1471843B' fs.blockSize = 8192 fs.totalBlocks = 1047233 event = Event() event.actor.element_identifier = device.id event.actor.element_type_id = DEVICE event.actor.element_sub_identifier = fs.name() event.actor.element_sub_type_id = COMPONENT event.severity = SEVERITY_WARNING event.event_key = 'FreeMegabytes_FreeMegabytes' event.event_class = '/Perf/Filesystem' event.summary = 'threshold of low disk space not met: current value 4156.00' processed = self._processEvent(event) self.assertEquals(processed.event.summary, 'disk space threshold: 49.2% used (4.1GB free)') # Test an example event from a standard SSH device. device = self.dmd.Devices.createInstance('sshdevice') device.os.addFileSystem('/', False) fs = device.os.filesystems()[0] fs.mount = '/' fs.blockSize = 1024 fs.totalBlocks = 149496116 event = Event() event.actor.element_identifier = device.id event.actor.element_type_id = DEVICE event.actor.element_sub_identifier = fs.id event.actor.element_sub_type_id = COMPONENT event.severity = SEVERITY_WARNING event.event_key = 'disk|disk_usedBlocks|Free Space 90 Percent' event.event_class = '/Perf/Filesystem' event.summary = 'threshold of Free Space 90 Percent exceeded: current value 73400348.00' processed = self._processEvent(event) self.assertEquals(processed.event.summary, 'disk space threshold: 49.1% used (72.6GB free)')
def testPerfFileSystemTransform(self): """ Test to make sure that the standard transform on the /Perf/Filesystem event class works properly for stock performance templates. """ self.dmd.Events.createOrganizer('/Perf/Filesystem') self.dmd.Events.Perf.Filesystem.transform = perfFilesystemTransform # Test an example event from a standard SNMP device. device = self.dmd.Devices.createInstance('snmpdevice') device.os.addFileSystem('/', False) fs = device.os.filesystems()[0] fs.mount = '/' fs.blockSize = 4096 fs.totalBlocks = 29221228 event = Event() event.actor.element_identifier = device.id event.actor.element_type_id = DEVICE event.actor.element_sub_identifier = fs.name() event.actor.element_sub_type_id = COMPONENT event.severity = SEVERITY_WARNING event.event_key = 'usedBlocks_usedBlocks|high disk usage' event.event_class = '/Perf/Filesystem' event.summary = 'threshold of high disk usage exceeded: current value 23476882.00' processed = self._processEvent(event) self.assertEquals(processed.summary, 'disk space threshold: 80.3% used (21.9GB free)') # Test an example event from a standard Perfmon device. device = self.dmd.Devices.createInstance('perfmondevice') device.os.addFileSystem('C', False) fs = device.os.filesystems()[0] fs.mount = ' Label:C: Serial Number: 1471843B' fs.blockSize = 8192 fs.totalBlocks = 1047233 event = Event() event.actor.element_identifier = device.id event.actor.element_type_id = DEVICE event.actor.element_sub_identifier = fs.name() event.actor.element_sub_type_id = COMPONENT event.severity = SEVERITY_WARNING event.event_key = 'FreeMegabytes_FreeMegabytes' event.event_class = '/Perf/Filesystem' event.summary = 'threshold of low disk space not met: current value 4156.00' processed = self._processEvent(event) self.assertEquals(processed.summary, 'disk space threshold: 49.2% used (4.1GB free)') # Test an example event from a standard SSH device. device = self.dmd.Devices.createInstance('sshdevice') device.os.addFileSystem('/', False) fs = device.os.filesystems()[0] fs.mount = '/' fs.blockSize = 1024 fs.totalBlocks = 149496116 event = Event() event.actor.element_identifier = device.id event.actor.element_type_id = DEVICE event.actor.element_sub_identifier = fs.id event.actor.element_sub_type_id = COMPONENT event.severity = SEVERITY_WARNING event.event_key = 'disk|disk_usedBlocks|Free Space 90 Percent' event.event_class = '/Perf/Filesystem' event.summary = 'threshold of Free Space 90 Percent exceeded: current value 73400348.00' processed = self._processEvent(event) self.assertEquals(processed.summary, 'disk space threshold: 49.1% used (72.6GB free)')