Exemplo n.º 1
0
    def __init__(self, dmd):
        self.dmd = dmd
        self._manager = Manager(self.dmd)
        self._pipes = (
            EventPluginPipe(self._manager, IPreEventPlugin, 'PreEventPluginPipe'),
            CheckInputPipe(self._manager),
            IdentifierPipe(self._manager),
            AddDeviceContextAndTagsPipe(self._manager),
            TransformAndReidentPipe(self._manager,
                TransformPipe(self._manager),
                [
                UpdateDeviceContextAndTagsPipe(self._manager),
                IdentifierPipe(self._manager),
                AddDeviceContextAndTagsPipe(self._manager),
                ]),
            AssignDefaultEventClassAndTagPipe(self._manager),
            FingerprintPipe(self._manager),
            SerializeContextPipe(self._manager),
            EventPluginPipe(self._manager, IPostEventPlugin, 'PostEventPluginPipe'),
            ClearClassRefreshPipe(self._manager),
            CheckHeartBeatPipe(self._manager)
        )

        if not self.SYNC_EVERY_EVENT:
            # don't call sync() more often than 1 every 0.5 sec - helps throughput
            # when receiving events in bursts
            self.nextSync = datetime.now()
            self.syncInterval = timedelta(0,0,500000)
Exemplo n.º 2
0
    def __init__(self, dmd):
        self.dmd = dmd
        self._manager = Manager(self.dmd)
        self._pipes = (EventPluginPipe(self._manager, IPreEventPlugin,
                                       'PreEventPluginPipe'),
                       CheckInputPipe(self._manager),
                       IdentifierPipe(self._manager),
                       AddDeviceContextAndTagsPipe(self._manager),
                       TransformAndReidentPipe(
                           self._manager, TransformPipe(self._manager), [
                               UpdateDeviceContextAndTagsPipe(self._manager),
                               IdentifierPipe(self._manager),
                               AddDeviceContextAndTagsPipe(self._manager),
                           ]),
                       AssignDefaultEventClassAndTagPipe(self._manager),
                       FingerprintPipe(self._manager),
                       SerializeContextPipe(self._manager),
                       EventPluginPipe(self._manager, IPostEventPlugin,
                                       'PostEventPluginPipe'),
                       ClearClassRefreshPipe(self._manager),
                       CheckHeartBeatPipe(self._manager))
        self._pipe_timers = {}
        for pipe in self._pipes:
            timer_name = pipe.name
            self._pipe_timers[timer_name] = Metrology.timer(timer_name)

        self.reporter = MetricReporter(prefix='zenoss.zeneventd.')
        self.reporter.start()

        if not self.SYNC_EVERY_EVENT:
            # don't call sync() more often than 1 every 0.5 sec
            # helps throughput when receiving events in bursts
            self.nextSync = time()
            self.syncInterval = 0.5
Exemplo n.º 3
0
 def __init__(self, dmd, twokeydict):
     a, b = twokeydict.items()
     aid, self.abrains = a
     bid, self.bbrains = b
     self.a = dmd.unrestrictedTraverse(aid)
     self.b = dmd.unrestrictedTraverse(bid)
     self.zep = getFacade('zep', dmd)
     self.idmgr = Manager(dmd)
Exemplo n.º 4
0
    def _migrate_events(self, conn, publisher, status):
        converter = EventConverter(self.dmd, status)
        manager = Manager(self.dmd)
        pipes = (IdentifierPipe(manager), AddDeviceContextAndTagsPipe(manager),
                 AssignDefaultEventClassAndTagPipe(manager))
        routing_key = 'zenoss.events.summary' if status else 'zenoss.events.archive'

        taggers = {
            EventProxy.DEVICE_CLASS_DETAIL_KEY: (self.dmd.Devices, DeviceClass),
            EventProxy.DEVICE_GROUPS_DETAIL_KEY: (self.dmd.Groups, DeviceGroup),
            EventProxy.DEVICE_LOCATION_DETAIL_KEY: (self.dmd.Locations, Location),
            EventProxy.DEVICE_SYSTEMS_DETAIL_KEY: (self.dmd.Systems, System),
        }

        try:
            for event_rows in self._page_rows(conn, status):
                with AmqpTransaction(publisher.channel):
                    for mapping_event_context in imap(converter.convert, event_rows):
                        if self._shutdown:
                            raise ShutdownException()
                        occurrence = mapping_event_context.occurrence
                        zep_raw_event = self._event_to_zep_raw_event(occurrence)
                        event_ctx = EventContext(log, zep_raw_event)
                        for pipe in pipes:
                            pipe(event_ctx)

                        # Clear tags for device class, location, systems, groups from current device
                        event_ctx.eventProxy.tags.clearType(AddDeviceContextAndTagsPipe.DEVICE_TAGGERS.keys())

                        # Resolve tags from original fields in the event
                        for detail in occurrence.details:
                            if detail.name in taggers:
                                organizer_root, organizer_cls = taggers[detail.name]
                                tags = set()
                                for val in detail.value:
                                    try:
                                        obj = organizer_root.unrestrictedTraverse(str(val[1:]))
                                        if isinstance(obj, organizer_cls):
                                            tags.update(manager.getUuidsOfPath(obj))
                                    except Exception:
                                        if log.isEnabledFor(logging.DEBUG):
                                            log.debug("Unable to resolve UUID for %s", val)
                                if tags:
                                    event_tag = occurrence.tags.add()
                                    event_tag.type = detail.name
                                    event_tag.uuid.extend(tags)

                        self._merge_tags(zep_raw_event, occurrence)
                        if log.isEnabledFor(logging.DEBUG):
                            log.debug("Migrated event: %s", mapping_event_context.summary)

                        publisher.publish("$MigratedEvents", routing_key, mapping_event_context.summary,
                                          createQueues=("$ZepMigratedEventSummary","$ZepMigratedEventArchive"))
        except ShutdownException:
            pass
Exemplo n.º 5
0
    def test0(self):
        #Set up a device with a single interface with two IP addresses
        device = self.dmd.Devices.createInstance('mydevice')
        device.setManageIp('10.10.10.1')
        device.os.addIpInterface('eth0', False)
        iface = device.os.interfaces()[0]
        iface.addIpAddress('10.10.10.2')
        iface.addIpAddress('10.10.10.3')

        device_uuid = IGlobalIdentifier(device).getGUID()
        manager = Manager(self.dmd)
        def test(id, ip, msg, expected = device_uuid):
            self.assertEquals(manager.findDeviceUuid(id, ip), expected, msg)

        test('mydevice', '', "failed to find by device name")
        test('10.10.10.1', '', "failed to find by device name == IP")
        test('dev', '10.10.10.1', "failed to find by device's manageIP")
        test('dev', '10.10.10.2', "failed to find by interface's primary IP")
        test('dev', '10.10.10.3', "failed to find by interface's secondary IP")
        test('dev', '10.10.10.4', "failed missing IP test", None)