コード例 #1
0
 def updateEventSummaries(self, update, eventFilter=None, exclusionFilter=None, limit=None, timeout=None):
     update_pb = from_dict(EventSummaryUpdate, update)
     event_filter_pb = None if (eventFilter is None) else from_dict(EventFilter, eventFilter)
     exclusion_filter_pb = None if (exclusionFilter is None) else from_dict(EventFilter, exclusionFilter)
     status, response = self.client.updateEventSummaries(update_pb, event_filter_pb, exclusion_filter_pb,
                                                         limit=limit, timeout=timeout)
     return status, to_dict(response)
コード例 #2
0
 def getEventSummariesGenerator(self, filter=None, exclude=None, sort=None, archive=False, timeout=None):
     if isinstance(exclude, dict):
         exclude = from_dict(EventFilter, exclude)
     if isinstance(filter, dict):
         filter = from_dict(EventFilter, filter)
     if sort is not None:
         sort = tuple(self._getEventSort(s) for s in safeTuple(sort))
     searchid = self.client.createSavedSearch(event_filter=filter, exclusion_filter=exclude, sort=sort,
                                              archive=archive, timeout=timeout)
     log.debug("created saved search %s", searchid)
     eventSearchFn = partial(self.client.savedSearch, searchid, archive=archive)
     offset = 0
     limit = 1000
     try:
         while offset is not None:
             result = self._getEventSummaries(eventSearchFn, offset, limit)
             for evt in result['events']:
                 yield evt
             offset = result['next_offset']
     finally:
         try:
             log.debug("closing saved search %s", searchid)
             self.client.deleteSavedSearch(searchid, archive=archive)
         except Exception as e:
             log.debug("error closing saved search %s (%s) - %s", searchid, type(e), e)
コード例 #3
0
ファイル: zepfacade.py プロジェクト: zenoss-ce/zenoss-prodbin
    def getEventSummaries(self,
                          offset,
                          limit=1000,
                          sort=None,
                          filter=None,
                          exclusion_filter=None,
                          client_fn=None,
                          use_permissions=False):
        if client_fn is None:
            client_fn = self.client.getEventSummaries
        if filter is not None and isinstance(filter, dict):
            filter = from_dict(EventFilter, filter)
        if exclusion_filter is not None and isinstance(exclusion_filter, dict):
            exclusion_filter = from_dict(EventFilter, exclusion_filter)
        if sort is not None:
            sort = tuple(self._getEventSort(s) for s in safeTuple(sort))

        result = None

        if use_permissions:
            user = getSecurityManager().getUser()
            userSettings = self._dmd.ZenUsers._getOb(user.getId())
            hasGlobalRoles = not userSettings.hasNoGlobalRoles()
            if not hasGlobalRoles:
                adminRoles = userSettings.getAllAdminRoles()
                if adminRoles:
                    # get ids for the objects they have permission to access
                    # and add to filter
                    ids = [
                        IGlobalIdentifier(x.managedObject()).getGUID()
                        for x in adminRoles
                    ]
                    if filter is None:
                        filter = EventFilter()
                    tf = filter.tag_filter.add()
                    tf.tag_uuids.extend(ids)
                else:
                    # no permission to see events, return 0
                    result = {
                        'total': 0,
                        'events': [],
                    }

        if not result:
            result = self._getEventSummaries(source=partial(
                client_fn,
                filter=filter,
                exclusion_filter=exclusion_filter,
                sort=sort),
                                             offset=offset,
                                             limit=limit)
        return result
コード例 #4
0
    def reopenEventSummaries(self, eventFilter=None, exclusionFilter=None, limit=None, userName=None, timeout=None):
        if eventFilter:
            eventFilter = from_dict(EventFilter, eventFilter)
        if exclusionFilter:
            exclusionFilter = from_dict(EventFilter, exclusionFilter)

        if not userName:
            userUuid, userName = self._findUserInfo()
        else:
            userUuid = self._getUserUuid(userName)
        status, response = self.client.reopenEventSummaries(
            userUuid, userName, eventFilter, exclusionFilter, limit, timeout=timeout)
        return status, to_dict(response)
コード例 #5
0
def get_alert(alrt_evid, alrt_type, alrt_urls):
	message = None

	try:
		filter_zep = zep.createEventFilter(uuid=alrt_evid)
		for summary in zep.getEventSummariesGenerator(filter=filter_zep):

			sync()

	        		evt = EventSummaryProxy(from_dict(EventSummary, summary))

			if evt.severity == 5:
				severity_string='Critical'
			elif evt.severity == 4:
				severity_string='Error'
			elif evt.severity == 3:
				severity_string='Warning'
			elif evt.severity == 2:
				severity_string='Info'
			elif evt.severity == 1:
				severity_string='Debug'

		  	if alrt_type == 'incident':
				message = """[casc-zenoss] SYSTEMS - {1} {2} <br /> Device: {1} <br /> Component: {3} <br /> Severity: {0} <br /> Time: {4} <br /> Message: <br /> {5} <br /> <a href="{6}">Event Detail</a> <br /> <a href="{7}">Acknowledge</a> <br /> <a href="{8}">Close</a> <br /> <a href="{9}">Device Events</a>""".format(severity_string, evt.device, evt.summary, evt.component, evt.lastTime, evt.message, alrt_urls[0], alrt_urls[1], alrt_urls[2], alrt_urls[3])
			else:
				message = """[casc-zenoss] SYSTEMS - CLEAR: {0} {7} <br /> Event: {1} <br /> Cleared by: {7} <br /> At: {2} <br /> Device: {0} <br /> Component: {3} <br /> Severity: {4} <br /> Message: <br /> {5} <br /> <a href="{6}">Undelete</a>""".format(evt.device, evt.summary, alrt_urls[2], evt.component, severity_string, evt.message, alrt_urls[0], alrt_urls[1])

		if message != None:
			post_alert(alrt_type, severity_string, message)
		else:
			raise Exception("Invalid region name: {0}".format(regions[x]))
コード例 #6
0
 def setConfigValues(self, values):
     """
     @type  values: Dictionary
     @param values: Key Value pairs of config values
     """
     zepConfigProtobuf = from_dict(ZepConfig, values)
     self.configClient.setConfigValues(zepConfigProtobuf)
コード例 #7
0
ファイル: ZenPackLoader.py プロジェクト: c0ns0le/zenoss-4
    def load(self, configData):
        """
        configData is a JSON dict that contains a key of the same
        name as specified in this class (ie self.key).

        The value from this key is expected to be an arrary of dictionaries
        as used by the ZEP system. See the documentation in the 
        ZenModel/ZenPackTemplate/CONTENT/zep/zep.json.example file.
        """
        if configData:
            self.zep = getFacade('zep')
            items = configData.get(EventDetailItemHandler.key)
            if items is None:
                log.warn("Expected key '%s' for details is missing from the zep.json file",
                          self.key)
                return
            detailItemSet = from_dict(EventDetailItemSet, dict(
                # An empty array in details casues ZEP to puke
                details = items
            ))
            try:
                self.zep.addIndexedDetails(detailItemSet)
            except Exception as ex:
                log.error("ZEP %s error adding detailItemSet data: %s\nconfigData= %s",
                              getattr(ex, 'status', 'unknown'), detailItemSet, configData)
                log.error("See the ZEP logs for more information.")
コード例 #8
0
    def _processArgs(self, eventFilter, exclusionFilter, userName):
        if eventFilter:
            eventFilter = from_dict(EventFilter, eventFilter)
        if exclusionFilter:
            exclusionFilter = from_dict(EventFilter, exclusionFilter)

        if not userName:
            userUuid, userName = self._findUserInfo()
        else:
            userUuid = self._getUserUuid(userName)

        if eventFilter is None and exclusionFilter is None:
            raise NoFiltersException("Cannot modify event summaries without at least one filter specified.")

        return {'eventFilter': eventFilter, 'exclusionFilter': exclusionFilter,
                'userName': userName, 'userUuid': userUuid}
コード例 #9
0
ファイル: triggersfacade.py プロジェクト: c0ns0le/zenoss-4
    def updateTrigger(self, **data):
        user = getSecurityManager().getUser()

        triggerObj = self._guidManager.getObject(data['uuid'])

        log.debug('Trying to update trigger: %s' % triggerObj.id)

        if self.triggerPermissions.userCanManageTrigger(user, triggerObj):
            if 'globalRead' in data:
                triggerObj.globalRead = data.get('globalRead', False)
                log.debug('setting globalRead %s' % triggerObj.globalRead)

            if 'globalWrite' in data:
                triggerObj.globalWrite = data.get('globalWrite', False)
                log.debug('setting globalWrite %s' % triggerObj.globalWrite)

            if 'globalManage' in data:
                triggerObj.globalManage = data.get('globalManage', False)
                log.debug('setting globalManage %s' % triggerObj.globalManage)

            triggerObj.users = data.get('users', [])
            self.triggerPermissions.clearPermissions(triggerObj)
            self.triggerPermissions.updatePermissions(self._guidManager,
                                                      triggerObj)

        if self.triggerPermissions.userCanUpdateTrigger(user, triggerObj):
            if "name" in data:
                triggerObj.setTitle(data["name"])
            trigger = from_dict(zep.EventTrigger, data)
            response, content = self.triggers_service.updateTrigger(trigger)
            return content
コード例 #10
0
ファイル: triggersfacade.py プロジェクト: c0ns0le/zenoss-4
    def updateTrigger(self, **data):
        user = getSecurityManager().getUser()

        triggerObj = self._guidManager.getObject(data['uuid'])

        log.debug('Trying to update trigger: %s' % triggerObj.id)

        if self.triggerPermissions.userCanManageTrigger(user, triggerObj):
            if 'globalRead' in data:
                triggerObj.globalRead = data.get('globalRead', False)
                log.debug('setting globalRead %s' % triggerObj.globalRead)

            if 'globalWrite' in data:
                triggerObj.globalWrite = data.get('globalWrite', False)
                log.debug('setting globalWrite %s' % triggerObj.globalWrite)

            if 'globalManage' in data:
                triggerObj.globalManage = data.get('globalManage', False)
                log.debug('setting globalManage %s' % triggerObj.globalManage)

            triggerObj.users = data.get('users', [])
            self.triggerPermissions.clearPermissions(triggerObj)
            self.triggerPermissions.updatePermissions(self._guidManager, triggerObj)

        if self.triggerPermissions.userCanUpdateTrigger(user, triggerObj):
            if "name" in data:
                triggerObj.setTitle(data["name"])
            trigger = from_dict(zep.EventTrigger, data)
            response, content = self.triggers_service.updateTrigger(trigger)
            return content
コード例 #11
0
 def create_exception_event(self, message, exception):
     # construct wrapper event to report this event processing failure
     # including content of the original event
     orig_zep_event = ZepRawEvent()
     orig_zep_event.event.CopyFrom(message)
     failure_event = {
         'uuid':
         guid.generate(),
         'created_time':
         int(time() * 1000),
         'fingerprint':
         '|'.join(['zeneventd', 'processMessage',
                   repr(exception)]),
         # Don't send the *same* event class or we loop endlessly
         'eventClass':
         '/',
         'summary':
         'Internal exception processing event: %r' % exception,
         'message':
         'Internal exception processing event: %r/%s' %
         (exception, to_dict(orig_zep_event.event)),
         'severity':
         4,
     }
     zep_raw_event = ZepRawEvent()
     zep_raw_event.event.CopyFrom(from_dict(Event, failure_event))
     event_context = EventContext(log, zep_raw_event)
     event_context.eventProxy.device = 'zeneventd'
     event_context.eventProxy.component = 'processMessage'
     return event_context
コード例 #12
0
ファイル: ZenPackLoader.py プロジェクト: c0ns0le/zenoss-4
    def load(self, configData):
        """
        configData is a JSON dict that contains a key of the same
        name as specified in this class (ie self.key).

        The value from this key is expected to be an arrary of dictionaries
        as used by the ZEP system. See the documentation in the 
        ZenModel/ZenPackTemplate/CONTENT/zep/zep.json.example file.
        """
        if configData:
            self.zep = getFacade('zep')
            items = configData.get(EventDetailItemHandler.key)
            if items is None:
                log.warn(
                    "Expected key '%s' for details is missing from the zep.json file",
                    self.key)
                return
            detailItemSet = from_dict(
                EventDetailItemSet,
                dict(
                    # An empty array in details casues ZEP to puke
                    details=items))
            try:
                self.zep.addIndexedDetails(detailItemSet)
            except Exception as ex:
                log.error(
                    "ZEP %s error adding detailItemSet data: %s\nconfigData= %s",
                    getattr(ex, 'status', 'unknown'), detailItemSet,
                    configData)
                log.error("See the ZEP logs for more information.")
コード例 #13
0
ファイル: zepservice.py プロジェクト: TifaSky/zenoss_midrest
    def getEventSummaries(self, offset, limit=1000, sort=None, filter=None, exclusion_filter=None):
        client_fn = self.client.getEventSummaries

        if filter is not None and isinstance(filter, dict):
            filter = from_dict(EventFilter, filter)
        if exclusion_filter is not None and isinstance(exclusion_filter, dict):
            exclusion_filter = from_dict(EventFilter, exclusion_filter)
        if sort is not None:
            sort = tuple(self._getEventSort(s) for s in safeTuple(sort))

        result = self._getEventSummaries(source=partial(client_fn,
                                         filter=filter,
                                         exclusion_filter=exclusion_filter,
                                         sort=sort),
                                         offset=offset, limit=limit)

        return result
コード例 #14
0
ファイル: ZenPackLoader.py プロジェクト: c0ns0le/zenoss-4
 def upgrade(self, configData):
     if configData:
         self.zep = getFacade('zep')
         items = configData.get(EventDetailItemHandler.key, [])
         for item in items:
             log.info("Upgrading the following to be indexed by ZEP: %s" % item)
             detailItem = from_dict(EventDetailItem, item)
             self.zep.updateIndexedDetailItem(detailItem)
コード例 #15
0
    def updateTrigger(self, **data):
        user = getSecurityManager().getUser()

        triggerObj = self._guidManager.getObject(data['uuid'])

        log.debug('Trying to update trigger: %s' % triggerObj.id)

        if self.triggerPermissions.userCanManageTrigger(user, triggerObj):
            if 'globalRead' in data:
                triggerObj.globalRead = data.get('globalRead', False)
                log.debug('setting globalRead %s' % triggerObj.globalRead)

            if 'globalWrite' in data:
                triggerObj.globalWrite = data.get('globalWrite', False)
                log.debug('setting globalWrite %s' % triggerObj.globalWrite)

            if 'globalManage' in data:
                triggerObj.globalManage = data.get('globalManage', False)
                log.debug('setting globalManage %s' % triggerObj.globalManage)

            triggerObj.users = data.get('users', [])
            self.triggerPermissions.clearPermissions(triggerObj)
            self.triggerPermissions.updatePermissions(
                self._guidManager, triggerObj
            )

        if self.triggerPermissions.userCanUpdateTrigger(user, triggerObj):
            if "name" in data:
                triggerObj.setTitle(cgi.escape(data["name"]))
                parent = triggerObj.getPrimaryParent()
                path = triggerObj.absolute_url_path()
                oldId = triggerObj.getId()
                newId = triggerObj.title
                if not isinstance(newId, unicode):
                    newId = Utils.prepId(newId)
                newId = newId.strip()
                if not newId:
                    raise Exception("New trigger id cannot be empty.")
                if newId != oldId:
                    # rename the trigger id since its title changed
                    try:
                        if triggerObj.getDmd().Triggers.findObject(newId):
                            message = 'Trigger %s already exists' % newId
                            # Duplicate trigger found
                            raise Exception(message)
                    except AttributeError as ex:
                        # the newId is not a duplicate
                        pass

                    try:
                        parent.manage_renameObject(oldId, newId)
                        triggerObj.id = newId
                    except CopyError:
                        raise Exception("Trigger rename failed.")

            trigger = from_dict(zep.EventTrigger, data)
            response, content = self.triggers_service.updateTrigger(trigger)
            return content
コード例 #16
0
ファイル: zep.py プロジェクト: jhanson/zenoss-protocols
 def reopenEventSummaries(self, userUuid, userName=None, event_filter=None, exclusionFilter=None, limit=None,
                          timeout=None):
     update = from_dict(EventSummaryUpdate, dict(
         status = STATUS_NEW,
         current_user_uuid = userUuid,
         current_user_name = userName,
     ))
     return self.updateEventSummaries(update, event_filter=event_filter, exclusion_filter=exclusionFilter,
                                      limit=limit, timeout=timeout)
コード例 #17
0
 def _getEventSort(self, sortParam):
     eventSort = {}
     if isinstance(sortParam, (list, tuple)):
         field, direction = sortParam
         eventSort['direction'] = self.SORT_DIRECTIONAL_MAP[direction.lower()]
     else:
         field = sortParam
     eventSort.update(getDetailsInfo().getSortMap()[field.lower()])
     return from_dict(EventSort, eventSort)
コード例 #18
0
ファイル: ZenPackLoader.py プロジェクト: c0ns0le/zenoss-4
 def upgrade(self, configData):
     if configData:
         self.zep = getFacade('zep')
         items = configData.get(EventDetailItemHandler.key, [])
         for item in items:
             log.info("Upgrading the following to be indexed by ZEP: %s" %
                      item)
             detailItem = from_dict(EventDetailItem, item)
             self.zep.updateIndexedDetailItem(detailItem)
コード例 #19
0
ファイル: zep.py プロジェクト: zenoss/zenoss-protocols
    def addNote(self, uuid, message, userUuid=None, userName=None):
        """
        Add a note (what used to be called log) to an event summary.
        """

        note = from_dict(
            EventNote,
            dict(user_uuid=userUuid, user_name=userName, message=message))

        return self.client.post('%s/notes' % uuid, body=note)
コード例 #20
0
    def getEventSummaries(self, offset, limit=1000, sort=None, filter=None, exclusion_filter=None, client_fn=None,
                          use_permissions=False):
        if client_fn is None:
            client_fn = self.client.getEventSummaries
        if filter is not None and isinstance(filter,dict):
            filter = from_dict(EventFilter, filter)
        if exclusion_filter is not None and isinstance(exclusion_filter, dict):
            exclusion_filter = from_dict(EventFilter, exclusion_filter)
        if sort is not None:
            sort = tuple(self._getEventSort(s) for s in safeTuple(sort))

        result = None

        if use_permissions:
            user = getSecurityManager().getUser()
            userSettings = self._dmd.ZenUsers._getOb(user.getId())
            hasGlobalRoles = not userSettings.hasNoGlobalRoles()
            if not hasGlobalRoles:
                adminRoles = userSettings.getAllAdminRoles()
                if adminRoles:
                    # get ids for the objects they have permission to access
                    # and add to filter
                    ids = [IGlobalIdentifier(x.managedObject()).getGUID() for x in adminRoles]
                    if filter is None:
                        filter = EventFilter()
                    tf = filter.tag_filter.add()
                    tf.tag_uuids.extend(ids)
                else:
                    # no permission to see events, return 0
                    result =  {
                        'total' : 0,
                        'events' : [],
                    }

        if not result:
            result = self._getEventSummaries(source=partial(client_fn,
                                                   filter=filter,
                                                   exclusion_filter=exclusion_filter,
                                                   sort=sort
                                                   ),
                                           offset=offset, limit=limit
                                           )
        return result
コード例 #21
0
    def getEventSummaries(self, offset, limit=1000, sort=None, filter=None, exclusion_filter=None, client_fn=None,
                          use_permissions=False):
        if client_fn is None:
            client_fn = self.client.getEventSummaries
        if filter is not None and isinstance(filter,dict):
            filter = from_dict(EventFilter, filter)
        if exclusion_filter is not None and isinstance(exclusion_filter, dict):
            exclusion_filter['operator'] = 1 # Set operator to OR
            exclusion_filter = from_dict(EventFilter, exclusion_filter)
        if sort is not None:
            sort = tuple(self._getEventSort(s) for s in safeTuple(sort))

        result = None

        if use_permissions:
            user = getSecurityManager().getUser()
            userSettings = self._dmd.ZenUsers._getOb(user.getId())
            hasGlobalRoles = not userSettings.hasNoGlobalRoles()
            if not hasGlobalRoles:
                # get guids for the objects user has permission to access
                # and add to filter
                guids = userSettings.getAllAdminGuids(returnChildrenForRootObj=True)
                if guids:
                    if filter is None:
                        filter = EventFilter()
                    tf = filter.tag_filter.add()
                    tf.tag_uuids.extend(guids)
                else:
                    # no permission to see events, return 0
                    result =  {
                        'total' : 0,
                        'events' : [],
                    }

        if not result:
            result = self._getEventSummaries(source=partial(client_fn,
                                                   filter=filter,
                                                   exclusion_filter=exclusion_filter,
                                                   sort=sort
                                                   ),
                                           offset=offset, limit=limit
                                           )
        return result
コード例 #22
0
ファイル: zep.py プロジェクト: malysoun/zenoss-protocols
    def addNoteBulkAsync(self, uuids, message, userUuid=None, userName=None):
        """
        Add a note (what used to be called log) to several event summaries.
        """

        note = from_dict(EventNote, dict(
            user_uuid = userUuid,
            user_name = userName,
            message = message
        ))

        return self.client.post('notes_async', body=note, params={'uuid': uuids})
コード例 #23
0
ファイル: zep.py プロジェクト: zenoss/zenoss-protocols
    def addNoteBulkAsync(self, uuids, message, userUuid=None, userName=None):
        """
        Add a note (what used to be called log) to several event summaries.
        """

        note = from_dict(
            EventNote,
            dict(user_uuid=userUuid, user_name=userName, message=message))

        return self.client.post('notes_async',
                                body=note,
                                params={'uuid': uuids})
コード例 #24
0
ファイル: zep.py プロジェクト: jhanson/zenoss-protocols
    def addNote(self, uuid, message, userUuid=None, userName=None):
        """
        Add a note (what used to be called log) to an event summary.
        """

        note = from_dict(EventNote, dict(
            user_uuid = userUuid,
            user_name = userName,
            message = message
        ))

        return self.client.post('%s/notes' % uuid, body=note)
コード例 #25
0
    def _getEventTagSeverities(self, eventClass=(), severity=(), status=(), tags=()):
        if not severity:
            severity = (SEVERITY_CRITICAL, SEVERITY_ERROR, SEVERITY_WARNING)
        if not status:
            status = (STATUS_NEW, STATUS_ACKNOWLEDGED)
        eventFilter = self.createEventFilter(
            severity=severity,
            status=status,
            event_class=eventClass,
            tags=tags,
            )

        response, content = self.client.getEventTagSeverities(from_dict(EventFilter, eventFilter))
        return content.severities
コード例 #26
0
 def updateNotificationSubscriptions(self, notification):
     triggerSubscriptions = []
     notification_guid = IGlobalIdentifier(notification).getGUID()
     for subscription in notification.subscriptions:
         triggerSubscriptions.append(dict(
             delay_seconds = notification.delay_seconds,
             repeat_seconds = notification.repeat_seconds,
             subscriber_uuid = notification_guid,
             send_initial_occurrence = notification.send_initial_occurrence,
             trigger_uuid = subscription,
         ))
     subscriptionSet = from_dict(zep.EventTriggerSubscriptionSet, dict(
         subscriptions = triggerSubscriptions
     ))
     self.triggers_service.updateSubscriptions(notification_guid, subscriptionSet)
コード例 #27
0
ファイル: triggersfacade.py プロジェクト: c0ns0le/zenoss-4
 def updateNotificationSubscriptions(self, notification):
     triggerSubscriptions = []
     notification_guid = IGlobalIdentifier(notification).getGUID()
     for subscription in notification.subscriptions:
         triggerSubscriptions.append(dict(
             delay_seconds = notification.delay_seconds,
             repeat_seconds = notification.repeat_seconds,
             subscriber_uuid = notification_guid,
             send_initial_occurrence = notification.send_initial_occurrence,
             trigger_uuid = subscription,
         ))
     subscriptionSet = from_dict(zep.EventTriggerSubscriptionSet, dict(
         subscriptions = triggerSubscriptions
     ))
     self.triggers_service.updateSubscriptions(notification_guid, subscriptionSet)
コード例 #28
0
ファイル: zep.py プロジェクト: c0ns0le/zenoss-4
 def reopenEventSummaries(self,
                          userUuid,
                          userName=None,
                          event_filter=None,
                          exclusionFilter=None,
                          limit=None):
     update = from_dict(
         EventSummaryUpdate,
         dict(
             status=STATUS_NEW,
             current_user_uuid=userUuid,
             current_user_name=userName,
         ))
     return self.updateEventSummaries(update,
                                      event_filter=event_filter,
                                      exclusion_filter=exclusionFilter,
                                      limit=limit)
コード例 #29
0
    def test_1_DetailUpdates(self):
        eventproto = from_dict(Event, self.initialEvent)
        proxy = EventProxy(eventproto)

        proxy.details['A'] = 1000
        proxy.details['B'] = (1000,)

        self.assertEqual(len(proxy.details), 2)
        self.assertEqual(proxy.details['A'], '1000')
        self.assertRaises(KeyError, proxy.details.__getitem__, 'C')
        del proxy.details['B']
        self.assertEqual(len(proxy.details), 1)
        self.assertRaises(KeyError, proxy.details.__getitem__, 'B')
        # but this does not raise a KeyError
        del proxy.details['B']
        del proxy.details['A']
        self.assertEqual(len(proxy.details), 0)
コード例 #30
0
    def test_1_DetailUpdates(self):
        eventproto = from_dict(Event, self.initialEvent)
        proxy = EventProxy(eventproto)

        proxy.details['A'] = 1000
        proxy.details['B'] = (1000, )

        self.assertEqual(len(proxy.details), 2)
        self.assertEqual(proxy.details['A'], '1000')
        self.assertRaises(KeyError, proxy.details.__getitem__, 'C')
        del proxy.details['B']
        self.assertEqual(len(proxy.details), 1)
        self.assertRaises(KeyError, proxy.details.__getitem__, 'B')
        # but this does not raise a KeyError
        del proxy.details['B']
        del proxy.details['A']
        self.assertEqual(len(proxy.details), 0)
コード例 #31
0
    def test_0_TagUpdates(self):
        eventproto = from_dict(ZepRawEvent, self.initialEvent)
        proxy = ZepRawEventProxy(eventproto)

        proxy.tags.addAll('TAG_TYPE_1', ['value%d' % i for i in range(10)])
        proxy.tags.addAll('TAG_TYPE_2', ['value0',])
        proxy.tags.addAll('TAG_TYPE_3', ['value0', 'value1'])
        self.assertEqual(self._countTags(eventproto.event), 13)

        proxy.tags.clearType('TAG_TYPE_1')
        self.assertEqual(self._countTags(eventproto.event), 3)

        self.assertEqual(len(proxy.tags.getByType('TAG_TYPE_3')), 2)

        proxy.tags.clearType('TAG_TYPE_3')
        self.assertEquals(self._countTags(eventproto.event), 1)
        self.assertEqual(len(proxy.tags.getByType('TAG_TYPE_2')), 1)
コード例 #32
0
 def updateNotificationSubscriptions(self, notification):
     triggerSubscriptions = []
     notification_guid = IGlobalIdentifier(notification).getGUID()
     for subscription in notification.subscriptions:
         triggerSubscriptions.append({
             'delay_seconds': notification.delay_seconds,
             'repeat_seconds': notification.repeat_seconds,
             'subscriber_uuid': notification_guid,
             'send_initial_occurrence':
                 notification.send_initial_occurrence,
             'trigger_uuid': subscription,
         })
     subscriptionSet = from_dict(
         zep.EventTriggerSubscriptionSet,
         {'subscriptions': triggerSubscriptions}
     )
     self.triggers_service.updateSubscriptions(
         notification_guid, subscriptionSet
     )
コード例 #33
0
ファイル: zep.py プロジェクト: zenoss/zenoss-protocols
 def acknowledgeEventSummaries(self,
                               userUuid,
                               userName=None,
                               event_filter=None,
                               exclusionFilter=None,
                               limit=None,
                               timeout=None):
     update = from_dict(
         EventSummaryUpdate,
         dict(
             status=STATUS_ACKNOWLEDGED,
             current_user_uuid=userUuid,
             current_user_name=userName,
         ))
     return self.updateEventSummaries(update,
                                      event_filter=event_filter,
                                      exclusion_filter=exclusionFilter,
                                      limit=limit,
                                      timeout=timeout)
コード例 #34
0
ファイル: zenqpush.py プロジェクト: malysoun/zenoss-protocols
    def push(self, data, routingKey, mandatory=False):
        """
        Push a message on the queue

        @param data The data to populate the protobuf with
        """

        proto = self.protobufClass
        proto = jsonformat.from_dict(proto, data)

        log.info('Sending message of type "%s" to "%s" using key "%s"', proto.DESCRIPTOR.full_name, self.exchange.name, routingKey)
        log.debug('Message:\n    %s' % '\n    '.join(MessageToString(proto).split('\n')))

        published = False
        try:
            self.publisher.publish(self.exchange, routingKey, proto, mandatory=mandatory)
            published = True
        except PublishException, e:
            log.error("%s (%d)", e.reply_text, e.reply_code)
コード例 #35
0
    def test_0_TagUpdates(self):
        eventproto = from_dict(ZepRawEvent, self.initialEvent)
        proxy = ZepRawEventProxy(eventproto)

        proxy.tags.addAll('TAG_TYPE_1', ['value%d' % i for i in range(10)])
        proxy.tags.addAll('TAG_TYPE_2', [
            'value0',
        ])
        proxy.tags.addAll('TAG_TYPE_3', ['value0', 'value1'])
        self.assertEqual(self._countTags(eventproto.event), 13)

        proxy.tags.clearType('TAG_TYPE_1')
        self.assertEqual(self._countTags(eventproto.event), 3)

        self.assertEqual(len(proxy.tags.getByType('TAG_TYPE_3')), 2)

        proxy.tags.clearType('TAG_TYPE_3')
        self.assertEquals(self._countTags(eventproto.event), 1)
        self.assertEqual(len(proxy.tags.getByType('TAG_TYPE_2')), 1)
コード例 #36
0
    def _getEventTagSeverities(self, eventClass=(), severity=(), status=(), tags=(), deviceOnly=False):
        if not severity:
            severity = (SEVERITY_CRITICAL, SEVERITY_ERROR, SEVERITY_WARNING)
        if not status:
            status = (STATUS_NEW, STATUS_ACKNOWLEDGED)
        if deviceOnly:
            eventFilter = self.createEventFilter(
                severity=severity,
                status=status,
                event_class=eventClass,
                tags=tags,
                element_sub_identifier=[""],
                )
        else:
            eventFilter = self.createEventFilter(
                severity=severity,
                status=status,
                event_class=eventClass,
                tags=tags,
                )

        response, content = self.client.getEventTagSeverities(from_dict(EventFilter, eventFilter))
        return content.severities
コード例 #37
0
ファイル: zeneventd.py プロジェクト: zenoss/zenoss-prodbin
 def create_exception_event(self, message, exception):
     # construct wrapper event to report this event processing failure
     # including content of the original event
     orig_zep_event = ZepRawEvent()
     orig_zep_event.event.CopyFrom(message)
     failure_event = {
         'uuid': guid.generate(),
         'created_time': int(time() * 1000),
         'fingerprint':
             '|'.join(['zeneventd', 'processMessage', repr(exception)]),
         # Don't send the *same* event class or we loop endlessly
         'eventClass': '/',
         'summary': 'Internal exception processing event: %r' % exception,
         'message':
             'Internal exception processing event: %r/%s' %
             (exception, to_dict(orig_zep_event.event)),
         'severity': 4,
     }
     zep_raw_event = ZepRawEvent()
     zep_raw_event.event.CopyFrom(from_dict(Event, failure_event))
     event_context = EventContext(log, zep_raw_event)
     event_context.eventProxy.device = 'zeneventd'
     event_context.eventProxy.component = 'processMessage'
     return event_context
コード例 #38
0
ファイル: zenqpush.py プロジェクト: c0ns0le/zenoss-4
    def push(self, data, routingKey, mandatory=False):
        """
        Push a message on the queue

        @param data The data to populate the protobuf with
        """

        proto = self.protobufClass
        proto = jsonformat.from_dict(proto, data)

        log.info('Sending message of type "%s" to "%s" using key "%s"',
                 proto.DESCRIPTOR.full_name, self.exchange.name, routingKey)
        log.debug('Message:\n    %s' %
                  '\n    '.join(MessageToString(proto).split('\n')))

        published = False
        try:
            self.publisher.publish(self.exchange,
                                   routingKey,
                                   proto,
                                   mandatory=mandatory)
            published = True
        except PublishException, e:
            log.error("%s (%d)", e.reply_text, e.reply_code)
コード例 #39
0
    def processMessage(self, message):
        """
        Handles a queue message, can call "acknowledge" on the Queue Consumer
        class when it is done with the message
        """

        if self.SYNC_EVERY_EVENT:
            doSync = True
        else:
            # sync() db if it has been longer than self.syncInterval since the last time
            currentTime = datetime.now()
            doSync = currentTime > self.nextSync
            self.nextSync = currentTime + self.syncInterval

        if doSync:
            self.dmd._p_jar.sync()

        try:
            retry = True
            processed = False
            while not processed:
                try:
                    # extract event from message body
                    zepevent = ZepRawEvent()
                    zepevent.event.CopyFrom(message)
                    if log.isEnabledFor(logging.DEBUG):
                        log.debug("Received event: %s", to_dict(zepevent.event))

                    eventContext = EventContext(log, zepevent)

                    for pipe in self._pipes:
                        eventContext = pipe(eventContext)
                        if log.isEnabledFor(logging.DEBUG):
                            log.debug('After pipe %s, event context is %s' % ( pipe.name, to_dict(eventContext.zepRawEvent) ))
                        if eventContext.event.status == STATUS_DROPPED:
                            raise DropEvent('Dropped by %s' % pipe, eventContext.event)

                    processed = True

                except AttributeError:
                    # _manager throws Attribute errors if connection to zope is lost - reset
                    # and retry ONE time
                    if retry:
                        retry=False
                        log.debug("Resetting connection to catalogs")
                        self._manager.reset()
                    else:
                        raise

        except DropEvent:
            # we want these to propagate out
            raise
        except Exception as e:
            log.info("Failed to process event, forward original raw event: %s", to_dict(zepevent.event))
            # Pipes and plugins may raise ProcessingException's for their own reasons - only log unexpected
            # exceptions of other type (will insert stack trace in log)
            if not isinstance(e, ProcessingException):
                log.exception(e)

            # construct wrapper event to report this event processing failure (including content of the
            # original event)
            origzepevent = ZepRawEvent()
            origzepevent.event.CopyFrom(message)
            failReportEvent = dict(
                uuid = guid.generate(),
                created_time = int(time.time()*1000),
                fingerprint='|'.join(['zeneventd', 'processMessage', repr(e)]),
                # Don't send the *same* event class or we trash and and crash endlessly
                eventClass='/',
                summary='Internal exception processing event: %r' % e,
                message='Internal exception processing event: %r/%s' % (e, to_dict(origzepevent.event)),
                severity=4,
            )
            zepevent = ZepRawEvent()
            zepevent.event.CopyFrom(from_dict(Event, failReportEvent))
            eventContext = EventContext(log, zepevent)
            eventContext.eventProxy.device = 'zeneventd'
            eventContext.eventProxy.component = 'processMessage'

        if log.isEnabledFor(logging.DEBUG):
            log.debug("Publishing event: %s", to_dict(eventContext.zepRawEvent))

        return eventContext.zepRawEvent
コード例 #40
0
from zenoss.protocols.data.queueschema import SCHEMA
from zenoss.protocols.protobufs.zep_pb2 import EventTrigger, EventTriggerSet, EventTriggerSubscriptionSet, RULE_TYPE_JYTHON
import BaseHTTPServer
import threading
from uuid import uuid4
import logging
from time import time

test_trigger_data = dict(uuid=str(uuid4()),
                         name='test trigger',
                         enabled=True,
                         send_clear=False,
                         rule=dict(api_version=1,
                                   type=RULE_TYPE_JYTHON,
                                   source=''))
mock_trigger = from_dict(EventTrigger, test_trigger_data)

mock_trigger_set = from_dict(EventTriggerSet,
                             dict(triggers=[test_trigger_data]))

# for testing subscription updates.
mock_subscriber_uuid = str(uuid4())

mock_trigger_subscription = dict(
    delay_seconds=10,
    repeat_seconds=60,
    subscriber_uuid=mock_subscriber_uuid,
    trigger_uuid=test_trigger_data['uuid'],
)

mock_subscription_set = from_dict(
コード例 #41
0
ファイル: suppress.py プロジェクト: fraibacas/my_zenoss

from zenoss.protocols.jsonformat import to_dict, from_dict
from zenoss.protocols.protobufs.zep_pb2 import EventSummary, EventNote, EventSummaryUpdate, EventFilter
from zenoss.protocols.protobufs.zep_pb2 import STATUS_NEW, STATUS_SUPPRESSED
zep = getFacade('zep')
user_name = 'admin'
user_uuid = zep._getUserUuid(user_name)
filter_dict = {'event_summary': ['hola']}
filter_protobuf = from_dict(EventFilter, filter_dict)

suppress_update = from_dict(EventSummaryUpdate, dict(
        status = STATUS_SUPPRESSED,
        current_user_uuid = user_uuid,
        current_user_name = user_name,
))


new_update = from_dict(EventSummaryUpdate, dict(
        status = STATUS_NEW,
        current_user_uuid = user_uuid,
        current_user_name = user_name,
))

print 'Suppressing events that contain the word "hola" in the summary'

#zep.client.updateEventSummaries(suppress_update, event_filter=filter_protobuf)
#zep.client.updateEventSummaries(new_update, event_filter=filter_protobuf)


コード例 #42
0
 def testFromDict(self):
     pb = from_dict(TestMessage, self.data)
     self._compareProtoDict(self.data, pb)
コード例 #43
0
import datetime
import time

from zenoss.protocols.jsonformat import to_dict, from_dict
from zenoss.protocols.protobufs.zep_pb2 import EventSummary, EventNote, EventSummaryUpdate, EventFilter
from zenoss.protocols.protobufs.zep_pb2 import STATUS_NEW, STATUS_ACKNOWLEDGED, STATUS_CLOSED, STATUS_SUPPRESSED

from Products.ZenUtils import debugtools

event_summary = str(datetime.datetime.now())

zep = getFacade('zep')
user_name = 'admin'
user_uuid = zep._getUserUuid(user_name)
filter_dict = { 'event_summary': [ event_summary ] }
filter_protobuf = from_dict(EventFilter, filter_dict)


print 'Creating 1000 events containing "{0}" in the event summary'.format(event_summary)
for i in range(0,1000):
	os.system('zensendevent -d localhost "{0} {1}"'.format(event_summary, i))

print 'Sleeping for 1 minute to wait for events to be created'
time.sleep(60)

#Get the events that we just created
response = zep.getEventSummaries(0, filter=filter_protobuf)

uuids = [ event['uuid'] for event in response['events'] ]

@debugtools.profile
コード例 #44
0
# zep_filterA = zep.createEventFilter(status=[0,1], operator=zep.AND, severity=[5])
# zep_filterB = zep.createEventFilter(subfilter=zep_filterA, details={'zenoss.device.production_state':1000})
# zep_filterC = zep.createEventFilter(subfilter=zep_filterB, details={'zenoss.device.priority':1}, operator=zep.OR)

# See $ZENHOME/Products/Zuul/facades/zepfacade.py for more information

# fetch	the events from	zep using the filter we just created
for summary in zep.getEventSummariesGenerator(filter=zep_filter):

    # synchronize each cycle for good measure
    sync()

    # create the event context so that the event can be
    # queried/manipulated as you would in an event transform
    # this is done using an event proxy
    evt = EventSummaryProxy(from_dict(EventSummary, summary))

#     # Here is a full list of available event-related items that are pullable from zen's dmd CLI interface:
#     #  These are commented out, as they are unused to generate the events.csv file for webpass use.
#     print 'component: %s' % (evt.component)
#     print 'dedupid : %s' % (evt.dedupid)
#     print 'evid : %s' % (evt.evid)
#     print 'device : %s' % (evt.device)
#     print 'component : %s' % (evt.component)
#     print 'eventClass : %s' % (evt.eventClass)
#     print 'eventKey : %s' % (evt.eventKey)
#     print 'summary : %s' % (evt.summary)
#     print 'message : %s' % (evt.message)
#     print 'severity : %s' % (evt.severity)
#     print 'eventState : %s' % (evt.eventState)
#     print 'eventClassKey : %s' % (evt.eventClassKey)
コード例 #45
0
 def getTriggers(self):
     trigger_set_data = {'triggers':self.triggers.values()}
     trigger_set = from_dict(zep.EventTriggerSet, trigger_set_data)
     return None, trigger_set
コード例 #46
0
 def postNote(self, uuid, note):
     self.client.postNote(uuid, from_dict(EventNote, note))
コード例 #47
0
 def nextEventSummaryUpdate(self, next_request):
     status, response = self.client.nextEventSummaryUpdate(from_dict(EventSummaryUpdateRequest, next_request))
     return status, to_dict(response)