Esempio n. 1
0
    def deleteNode(self, uid):
        """
        Deletes a node from the tree.

        B{NOTE}: You can not delete a root node of a tree

        @type  uid: string
        @param uid: Unique identifier of the node we wish to delete
        @rtype:   DirectResponse
        @return:  B{Properties}:
             - msg: (string) Status message
        """
        # make sure we are not deleting a root node
        if not self._canDeleteUid(uid):
            raise Exception('You cannot delete the root node')
        facade = self._getFacade()
        node = facade._getObject(uid)

        # Audit first so it can display details like "name" while they exist.
        # Trac #29148: When we delete a DeviceClass we also delete its devices
        #     and child device classes and their devices, so audit them all.
        if isinstance(node, DeviceClass):
            childBrains = ICatalogTool(node).search((
                'Products.ZenModel.DeviceClass.DeviceClass',
                'Products.ZenModel.Device.Device',
            ))
            for child in childBrains:
                audit(['UI', getDisplayType(child), 'Delete'], child.getPath())
        else:
            audit(['UI', getDisplayType(node), 'Delete'], node)

        facade.deleteNode(uid)
        msg = "Deleted node '%s'" % uid
        return DirectResponse.succeed(msg=msg)
Esempio n. 2
0
    def deleteNode(self, uid):
        """
        Deletes a node from the tree.

        B{NOTE}: You can not delete a root node of a tree

        @type  uid: string
        @param uid: Unique identifier of the node we wish to delete
        @rtype:   DirectResponse
        @return:  B{Properties}:
             - msg: (string) Status message
        """
        # make sure we are not deleting a root node
        if not self._canDeleteUid(uid):
            raise Exception('You cannot delete the root node')
        facade = self._getFacade()
        node = facade._getObject(uid)

        # Audit first so it can display details like "name" while they exist.
        # Trac #29148: When we delete a DeviceClass we also delete its devices
        #     and child device classes and their devices, so audit them all.
        if isinstance(node, DeviceClass):
            childBrains = ICatalogTool(node).search((
                'Products.ZenModel.DeviceClass.DeviceClass',
                'Products.ZenModel.Device.Device',
            ))
            for child in childBrains:
                audit(['UI', getDisplayType(child), 'Delete'], child.getPath())
        else:
            audit(['UI', getDisplayType(node), 'Delete'], node)

        facade.deleteNode(uid)
        msg = "Deleted node '%s'" % uid
        return DirectResponse.succeed(msg=msg)
Esempio n. 3
0
    def manage_deleteOrganizer(self, orgname, REQUEST=None):
        """
        Deletes an organizer underneath this organizer

        @param orgname: Name of the organizer to delete
        @type orgname: string
        @raise: KeyError
        @permission: ZEN_DELETE

        >>> dmd.Devices.manage_deleteOrganizer('/Devices/Server/Linux')
        """
        if REQUEST:
            audit(('UI', getDisplayType(self), 'Delete'), orgname)
        if orgname.startswith("/"):
            try:
                orgroot = self.getDmdRoot(self.dmdRootName)
                organizer = orgroot.getOrganizer(orgname)
                parent = aq_parent(organizer)
                parent._delObject(organizer.getId())
            except KeyError:
                pass  # we may have already deleted a sub object
        else:
            self._delObject(orgname)
        if REQUEST:
            messaging.IMessageSender(self).sendToBrowser(
                'Organizer Deleted',
                '%s "%s" was deleted.' % (getDisplayType(self), orgname)
            )
            return self.callZenScreen(REQUEST)
Esempio n. 4
0
    def manage_deleteOrganizers(self, organizerPaths=None, REQUEST=None):
        """
        Delete a list of Organizers from the database using their ids.

        @param organizerPaths: Names of organizer to be deleted
        @type organizerPaths: list
        @permission: ZEN_DELETE

        >>> dmd.Devices.manage_deleteOrganizers(['/Devices/Server/Linux',
        ... '/Devices/Server/Windows'])
        """
        if not organizerPaths:
            messaging.IMessageSender(self).sendToBrowser(
                'Error',
                'No organizers were specified.',
                priority=messaging.WARNING
            )
            return self.callZenScreen(REQUEST)
        for organizerName in organizerPaths:
            if REQUEST:
                audit(('UI',getDisplayType(self),'Delete'), organizerName)
            self.manage_deleteOrganizer(organizerName)
        if REQUEST:
            plural = ''
            if len(organizerPaths) > 1: plural = 's'
            messaging.IMessageSender(self).sendToBrowser(
                'Organizers Deleted',
                '%s%s %s were deleted.' % (getDisplayType(self),
                                    plural, ', '.join(organizerPaths))
            )
            return self.callZenScreen(REQUEST)
Esempio n. 5
0
    def manage_addOrganizer(self,
                            newPath,
                            factory=None,
                            properties=None,
                            REQUEST=None):
        """
        Adds a new organizer under this organizer. if given a fully qualified
        path it will create an organizer at that path

        @param newPath: Path of the organizer to be created
        @type newPath:  string
        @raise: ZentinelException
        @permission: ZEN_ADD

        """
        if factory is None:
            factory = self.__class__
        if not newPath: return self.callZenScreen(REQUEST)
        try:
            if newPath.startswith("/"):
                org = self.createOrganizer(newPath)
                name = org.titleOrId()
            else:
                # Strip out invalid characters from the newPath
                name = newPath
                newPath = self.prepId(newPath)
                org = factory(newPath)
                self._setObject(org.id, org)
                # Set the display name to the original string
                org = self._getOb(newPath)

            # Allow adding additional properties to the organizer.
            # All organizers use this to set description.
            # Locations use this to set address.
            if properties:
                for k, v in properties.items():
                    setattr(org, k, v)

            org.setTitle(name)
        except ZentinelException as e:
            if REQUEST:
                messaging.IMessageSender(self).sendToBrowser(
                    'Error', e, priority=messaging.WARNING)
                return self.callZenScreen(REQUEST)
        if REQUEST:
            audit(('UI', getDisplayType(org), 'Add'), org)
            messaging.IMessageSender(self).sendToBrowser(
                'Organizer Added',
                '%s "%s" was created.' % (getDisplayType(self), newPath))
            return self.callZenScreen(REQUEST)
Esempio n. 6
0
    def zmanage_editProperties(self, REQUEST=None, redirect=False, audit=True):
        """
        Edit a ZenModel object and return its proper page template.
        Object will be reindexed if nessesary.

        @permission: ZEN_MANAGE_DMD
        """
        self.manage_changeProperties(**REQUEST.form)
        index_object = getattr(self, 'index_object', lambda self: None)
        index_object()
        if REQUEST:
            from Products.ZenUtils.Time import SaveMessage
            messaging.IMessageSender(self).sendToBrowser(
                'Properties Saved',
                SaveMessage()
            )

            if audit:
                auditType = getDisplayType(self)
                auditKind = 'Setting' if auditType == 'DataRoot' else auditType
                auditFn(['UI', auditKind, 'Edit'],
                        data_=REQUEST.form,
                        skipFields_=('redirect',
                                'zenScreenName',
                                'zmanage_editProperties'),
                        maskFields_=('smtpPass'))
            return self.callZenScreen(REQUEST, redirect=redirect)
Esempio n. 7
0
    def setInfo(self, **data):
        """
        Set attributes on an object.
        This method accepts any keyword argument for the property that you wish
        to set. The only required property is "uid".

        @type    uid: string
        @keyword uid: Unique identifier of an object
        @rtype:  DirectResponse
        @return: B{Properties}:
            - data: (dictionary) The modified object
        """
        uid = data['uid']
        del data['uid']
        obj = self._getFacade()._getObject(uid)
        passwordFields = self._getPasswordFields(obj)
        oldData = self._getInfoData(obj, data)
        info = self._getFacade().setInfo(uid, data)
        newData = self._getInfoData(obj, data)
        # Trac #29376: Consistently show thresholdType with threshold operations.
        thresholdType = obj.getTypeName() if isinstance(obj, ThresholdClass) else None
        audit(['UI', getDisplayType(obj), 'Edit'], obj, thresholdType=thresholdType,
              data_=newData, oldData_=oldData,
              skipFields_=('newId',), # special case in TemplateFacade.setInfo()
              maskFields_=passwordFields)  
        return DirectResponse.succeed(data=Zuul.marshal(info))
Esempio n. 8
0
    def saveZenProperties(self, pfilt=iszprop, REQUEST=None):
        """Save all ZenProperties found in the REQUEST.form object.
        """
        maskFields = []
        for name, value in REQUEST.form.items():
            if pfilt(name):
                if self.zenPropIsPassword(name):
                    maskFields.append(name)
                    if self._onlystars(value):
                        continue
                if name == 'zCollectorPlugins':
                    if tuple(getattr(self, name, ())) != tuple(value):
                        self.setZenProperty(name, value)
                else:
                    self.setZenProperty(name, value)

        if REQUEST:
            audit(('UI', getDisplayType(self), 'EditProperties'),
                  self,
                  data_=REQUEST.form,
                  skipFields_=['savezenproperties', 'zenscreenname'],
                  maskFields_=maskFields)
            IMessageSender(self).sendToBrowser(
                'Configuration Propeties Updated',
                'Configuration properties have been updated.')

        return self.callZenScreen(REQUEST)
Esempio n. 9
0
    def setGraphDefinition(self, **data):
        """
        Set attributes on an graph definition.
        This method accepts any keyword argument for the property that you wish
        to set. Properties are enumerated via getGraphDefinition(). The only
        required property is "uid".

        @type    uid: string
        @keyword uid: Unique identifier of an object
        @rtype:  DirectResponse
        @return: B{Properties}:
            - data: (dictionary) The modified object
        """
        uid = data['uid']
        del data['uid']
        for axis_vals in ('miny', 'maxy'):
            try:
                x = float(data[axis_vals])
            except (ValueError, KeyError):
                x = -1
            data[axis_vals] = x
        obj = self._getFacade()._getObject(uid)
        oldData = self._getInfoData(obj, data)
        self._getFacade().setInfo(uid, data)
        newData = self._getInfoData(obj, data)
        audit(['UI', getDisplayType(obj), 'Edit'], data_=newData, oldData_=oldData,
              skipFields_=('newId',))  # special case in TemplateFacade.setInfo()
        return DirectResponse.succeed()
Esempio n. 10
0
 def removeDevices(self,
                   deviceNames=None,
                   deleteStatus=False,
                   deleteHistory=False,
                   deletePerf=False,
                   REQUEST=None):
     """see IManageDevice"""
     from Products.ZenUtils.Utils import unused
     unused(deleteHistory, deletePerf, deleteStatus)
     if not deviceNames: return self()
     if isinstance(deviceNames, basestring): deviceNames = (deviceNames, )
     for devname in deviceNames:
         self.devices._delObject(devname)
         if REQUEST:
             if self.meta_type == 'PerformanceConf':
                 actionName = 'RemoveFromCollector'
                 objId = self.id
             else:
                 actionName = 'Remove'
                 objId = self.getPrimaryId()
             objType = getDisplayType(self)
             audit(['UI.Device', actionName],
                   devname,
                   data_={objType: objId})
     if REQUEST:
         return self()
Esempio n. 11
0
    def saveZenProperties(self, pfilt=iszprop, REQUEST=None):
        """Save all ZenProperties found in the REQUEST.form object.
        """
        maskFields=[]
        for name, value in REQUEST.form.items():
            if pfilt(name):
                if self.zenPropIsPassword(name):
                    maskFields.append(name)
                    if self._onlystars(value):
                        continue
                if name == 'zCollectorPlugins':
                    if tuple(getattr(self, name, ())) != tuple(value):
                        self.setZenProperty(name, value)
                else:
                    self.setZenProperty(name, value)

        if REQUEST:
            audit(('UI', getDisplayType(self), 'EditProperties'), self, data_=REQUEST.form,
                    skipFields_=['savezenproperties','zenscreenname'], maskFields_=maskFields)
            IMessageSender(self).sendToBrowser(
                'Configuration Propeties Updated',
                'Configuration properties have been updated.'
            )

        return self.callZenScreen(REQUEST)
Esempio n. 12
0
def manage_addReport(context, id, title = None, text=None,
                    REQUEST = None, submit=None):
    """make a Report"""
    id = str(id)
    if REQUEST is None:
        context._setObject(id, Report(id, text))
        ob = getattr(context, id)
        if title:
            ob.pt_setTitle(title)
        return ob
    else:
        file = REQUEST.form.get('file')
        headers = getattr(file, 'headers', None)
        if headers is None or not file.filename:
            zpt = Report(id)
        else:
            zpt = Report(id, file, headers.get('content_type'))

        context._setObject(id, zpt)

        audit('UI.Report.Add', zpt.id, title=title, text=text, 
              reportType=getDisplayType(zpt), organizer=context)

        try:
            u = context.DestinationURL()
        except AttributeError:
            u = REQUEST['URL1']

        if submit == " Add and Edit ":
            u = "%s/%s" % (u, quote(id))
        REQUEST.RESPONSE.redirect(u+'/manage_main')
    return '' 
Esempio n. 13
0
    def setGraphDefinition(self, **data):
        """
        Set attributes on an graph definition.
        This method accepts any keyword argument for the property that you wish
        to set. Properties are enumerated via getGraphDefinition(). The only
        required property is "uid".

        @type    uid: string
        @keyword uid: Unique identifier of an object
        @rtype:  DirectResponse
        @return: B{Properties}:
            - data: (dictionary) The modified object
        """
        uid = data['uid']
        del data['uid']
        for int_attr in ('miny', 'maxy'):
            try:
                x = int(data[int_attr])
            except (ValueError, KeyError):
                x = -1
            data[int_attr] = x
        obj = self._getFacade()._getObject(uid)
        oldData = self._getInfoData(obj, data)
        self._getFacade().setInfo(uid, data)
        newData = self._getInfoData(obj, data)
        audit(['UI', getDisplayType(obj), 'Edit'],
              data_=newData,
              oldData_=oldData,
              skipFields_=(
                  'newId', ))  # special case in TemplateFacade.setInfo()
        return DirectResponse.succeed()
Esempio n. 14
0
    def zmanage_editProperties(self, REQUEST=None, redirect=False, audit=True):
        """
        Edit a ZenModel object and return its proper page template.
        Object will be reindexed if nessesary.

        @permission: ZEN_MANAGE_DMD
        """
        self.manage_changeProperties(**REQUEST.form)
        index_object = getattr(self, 'index_object', lambda self: None)
        index_object()
        if REQUEST:            
            messaging.IMessageSender(self).sendToBrowser(
                'Properties Saved',
                "Saved At: %s" % self.getCurrentUserNowString()
            )

            if audit:
                auditType = getDisplayType(self)
                auditKind = 'Setting' if auditType == 'DataRoot' else auditType
                auditFn(['UI', auditKind, 'Edit'],
                        data_=REQUEST.form,
                        skipFields_=('redirect',
                                'zenScreenName',
                                'zmanage_editProperties'),
                        maskFields_=('smtpPass'))
            return self.callZenScreen(REQUEST, redirect=redirect)
Esempio n. 15
0
    def setInfo(self, **data):
        """
        Set attributes on an object.
        This method accepts any keyword argument for the property that you wish
        to set. The only required property is "uid".

        @type    uid: string
        @keyword uid: Unique identifier of an object
        @rtype:  DirectResponse
        @return: B{Properties}:
            - data: (dictionary) The modified object
        """
        uid = data['uid']
        del data['uid']
        obj = self._getFacade()._getObject(uid)
        oldData = self._getInfoData(obj, data)
        info = self._getFacade().setInfo(uid, data)
        newData = self._getInfoData(obj, data)
        # Trac #29376: Consistently show thresholdType with threshold operations.
        thresholdType = obj.getTypeName() if isinstance(
            obj, ThresholdClass) else None
        audit(['UI', getDisplayType(obj), 'Edit'],
              obj,
              thresholdType=thresholdType,
              data_=newData,
              oldData_=oldData,
              skipFields_=(
                  'newId', ))  # special case in TemplateFacade.setInfo()
        return DirectResponse.succeed(data=Zuul.marshal(info))
    def manage_editAdministrativeRoles(self, ids=(), role=(), REQUEST=None):
        """
        Edit list of admin roles.
        """
        if isinstance(ids, basestring):
            ids = [ids]
            role = [role]

        editedRoles = []
        for i, id in enumerate(ids):
            roleEdit = (id, role[i])
            editedRoles.append(roleEdit)
            ar = self.adminRoles._getOb(roleEdit[0])
            ar.update(roleEdit[1])

        self.setAdminLocalRoles()
        self.index_object()
        notify(IndexingEvent(self))
        if REQUEST:
            for roleEdit in editedRoles:
                audit(['UI', getDisplayType(self), 'EditAdministrativeRole'], self,
                      id=roleEdit[0], role=roleEdit[1])
            messaging.IMessageSender(self).sendToBrowser(
                'Admin Roles Updated',
                ('The following administrative roles have been updated: '
                 '%s' % ", ".join(ids))
            )
            return self.callZenScreen(REQUEST)
Esempio n. 17
0
def manage_addMultiGraphReport(context, id, REQUEST = None):
    """ Create a new MultiGraphReport
    """
    gr = MultiGraphReport(id)
    context._setObject(gr.id, gr)
    if REQUEST is not None:
        audit('UI.Report.Add', gr.id, reportType=getDisplayType(gr), organizer=context)
        REQUEST['RESPONSE'].redirect(context.absolute_url_path()+'/manage_main')
Esempio n. 18
0
    def moveOrganizer(self, moveTarget, organizerPaths=None, REQUEST=None):
        """
        Move organizers under this organizer to another organizer

        @param moveTarget: Name of the destination organizer
        @type moveTarget: string
        @param organizerPaths: Paths of organizers to be moved
        @type organizerPaths: list

        >>> dmd.Events.Status.moveOrganizer('/Events/Ignore',
        ... ['Ping', 'Snmp'])
        """
        if not moveTarget or not organizerPaths: return self()
        target = self.getDmdRoot(self.dmdRootName).getOrganizer(moveTarget)
        movedStuff = False
        for organizerName in organizerPaths:
            if moveTarget.find(organizerName) > -1: continue
            obj = self._getOb(organizerName, None)
            if obj is None: continue
            obj._operation = 1  #move object
            self._delObject(organizerName)
            target._setObject(organizerName, obj)
            movedStuff = True
        if REQUEST:
            if movedStuff:
                plural = ''
                if len(organizerPaths) > 1: plural = 's'
                for organizerName in organizerPaths:
                    audit(('UI', getDisplayType(self), 'Move'),
                          organizerName,
                          data_={
                              'from': getDisplayName(self),
                              'to': getDisplayName(target)
                          })
                messaging.IMessageSender(self).sendToBrowser(
                    'Organizers Moved', '%s%s %s were moved to %s.' %
                    (getDisplayType(self), plural, ', '.join(organizerPaths),
                     moveTarget))
            else:
                messaging.IMessageSender(self).sendToBrowser(
                    'Error',
                    'No %s were moved.' % getDisplayType(self),
                    priority=messaging.WARNING)
            return target.callZenScreen(REQUEST)
Esempio n. 19
0
    def saveCustProperties(self, REQUEST):
        """
        Save custom properties from REQUEST.form.

        @permission: ZEN_MANAGE_DMD
        """
        redirect = self.saveZenProperties(iscustprop, REQUEST)
        auditFn(['UI', getDisplayType(self), 'Edit'], self, data_=REQUEST.form,
              skipFields_=('zenScreenName', 'saveCustProperties'))
        return redirect
 def manage_addMultiGraphReport(self, id, REQUEST=None):
     """Add a MultiGraph report to this object.
     """
     fr = MultiGraphReport(id)
     self._setObject(id, fr)
     if REQUEST:
         audit('UI.Report.Add', fr.id, reportType=getDisplayType(fr))
         url = '%s/%s/editMultiGraphReport' % (self.getPrimaryUrlPath(), id)
         return REQUEST['RESPONSE'].redirect(url)
     return self._getOb(id)
 def manage_addMultiGraphReport(self, id, REQUEST=None):
     """Add a MultiGraph report to this object.
     """
     fr = MultiGraphReport(id)
     self._setObject(id, fr)
     if REQUEST:
         audit("UI.Report.Add", fr.id, reportType=getDisplayType(fr))
         url = "%s/%s/editMultiGraphReport" % (self.getPrimaryUrlPath(), id)
         return REQUEST["RESPONSE"].redirect(url)
     return self._getOb(id)
Esempio n. 22
0
    def saveCustProperties(self, REQUEST):
        """
        Save custom properties from REQUEST.form.

        @permission: ZEN_MANAGE_DMD
        """
        redirect = self.saveZenProperties(iscustprop, REQUEST)
        auditFn(['UI', getDisplayType(self), 'Edit'], self, data_=REQUEST.form,
              skipFields_=('zenScreenName', 'saveCustProperties'))
        return redirect
 def manage_addGraphReport(self, id, REQUEST=None):
     """Add a graph report to this object.
     """
     fr = GraphReport(id)
     self._setObject(id, fr)
     fr = self._getOb(id)
     if REQUEST:
         audit('UI.Report.Add', fr.id, reportType=getDisplayType(fr))
         url = '%s/%s/editGraphReport' % (self.getPrimaryUrlPath(),id)
         return REQUEST['RESPONSE'].redirect(url)
     return fr
 def manage_addDeviceReport(self, id, REQUEST=None):
     """Add a custom device report to this object.
     """
     rpt = DeviceReport(id)
     self._setObject(rpt.id, rpt)
     rpt = self._getOb(rpt.id)
     if REQUEST:
         audit('UI.Report.Add', rpt.id, reportType=getDisplayType(rpt))
         url = '%s/%s/editDeviceReport' % (self.getPrimaryUrlPath(), id)
         return REQUEST['RESPONSE'].redirect(url)
     return rpt
 def manage_addDeviceReport(self, id, REQUEST=None):
     """Add a custom device report to this object.
     """
     rpt = DeviceReport(id)
     self._setObject(rpt.id, rpt)
     rpt = self._getOb(rpt.id)
     if REQUEST:
         audit('UI.Report.Add', rpt.id, reportType=getDisplayType(rpt))
         url = '%s/%s/editDeviceReport' % (self.getPrimaryUrlPath(), id)
         return REQUEST['RESPONSE'].redirect(url)
     return rpt
Esempio n. 26
0
def manage_addMultiGraphReport(context, id, REQUEST=None):
    """ Create a new MultiGraphReport
    """
    gr = MultiGraphReport(id)
    context._setObject(gr.id, gr)
    if REQUEST is not None:
        audit('UI.Report.Add',
              gr.id,
              reportType=getDisplayType(gr),
              organizer=context)
        REQUEST['RESPONSE'].redirect(context.absolute_url() + '/manage_main')
Esempio n. 27
0
    def moveOrganizer(self, moveTarget, organizerPaths=None, REQUEST=None):
        """
        Move organizers under this organizer to another organizer

        @param moveTarget: Name of the destination organizer
        @type moveTarget: string
        @param organizerPaths: Paths of organizers to be moved
        @type organizerPaths: list

        >>> dmd.Events.Status.moveOrganizer('/Events/Ignore',
        ... ['Ping', 'Snmp'])
        """
        if not moveTarget or not organizerPaths: return self()
        target = self.getDmdRoot(self.dmdRootName).getOrganizer(moveTarget)
        movedStuff = False
        for organizerName in organizerPaths:
            if moveTarget.find(organizerName) > -1: continue
            obj = self._getOb(organizerName, None)
            if obj is None: continue
            obj._operation = 1 #move object
            self._delObject(organizerName)
            target._setObject(organizerName, obj)
            movedStuff = True
        if REQUEST:
            if movedStuff:
                plural = ''
                if len(organizerPaths) > 1: plural = 's'
                for organizerName in organizerPaths:
                    audit(('UI', getDisplayType(self), 'Move'), organizerName, data_={'from':getDisplayName(self), 'to':getDisplayName(target)})
                messaging.IMessageSender(self).sendToBrowser(
                    'Organizers Moved',
                    '%s%s %s were moved to %s.' % (getDisplayType(self),
                                plural, ', '.join(organizerPaths), moveTarget)
                )
            else:
                messaging.IMessageSender(self).sendToBrowser(
                    'Error',
                    'No %s were moved.' % getDisplayType(self),
                    priority=messaging.WARNING
                )
            return target.callZenScreen(REQUEST)
Esempio n. 28
0
 def manage_addGraphReport(self, id, REQUEST=None):
     """Add an graph report to this object.
     """
     if id:
         from Products.ZenModel.GraphReport import GraphReport
         gr = GraphReport(id)
         self._setObject(id, gr)
         if REQUEST:
             audit('UI.Report.Add', gr.id, reportType=getDisplayType(gr))
             messaging.IMessageSender(self).sendToBrowser(
                 'Report Created', 'Graph report %s was created.' % id)
             return self.callZenScreen(REQUEST)
def manage_addDeviceReport(context, id, title = None, REQUEST = None):
    """Add a DeviceReport
    """
    dc = DeviceReport(id, title)
    context._setObject(id, dc)
    if REQUEST is not None:
        audit('UI.Report.Add', dc.id, title=title, reportType=getDisplayType(dc), organizer=context)
        messaging.IMessageSender(context).sendToBrowser(
            'Report Created',
            'Device report %s was created.' % id
        )
        return REQUEST['RESPONSE'].redirect(context.absolute_url() + '/manage_main')
Esempio n. 30
0
def manage_addDeviceReport(context, id, title = None, REQUEST = None):
    """Add a DeviceReport
    """
    dc = DeviceReport(id, title)
    context._setObject(id, dc)
    if REQUEST is not None:
        audit('UI.Report.Add', dc.id, title=title, reportType=getDisplayType(dc), organizer=context)
        messaging.IMessageSender(context).sendToBrowser(
            'Report Created',
            'Device report %s was created.' % id
        )
        return REQUEST['RESPONSE'].redirect(context.absolute_url_path() + '/manage_main')
 def manage_addDeviceReport(self, id, REQUEST=None):
     """Add a report to this object.
     """
     from Products.ZenModel.DeviceReport import DeviceReport
     fr = DeviceReport(id)
     self._setObject(id, fr)
     fr = self._getOb(id)
     if REQUEST:
         audit('UI.Report.Add', fr.id, reportType=getDisplayType(fr))
         url = '%s/%s/editDeviceReport' % (self.getPrimaryUrlPath(), id)
         return REQUEST['RESPONSE'].redirect(url)
     return fr
Esempio n. 32
0
 def manage_addDeviceReport(self, id, REQUEST=None):
     """Add a report to this object.
     """
     from Products.ZenModel.DeviceReport import DeviceReport
     fr = DeviceReport(id)
     self._setObject(id, fr)
     fr = self._getOb(id)
     if REQUEST:
         audit('UI.Report.Add', fr.id, reportType=getDisplayType(fr))
         url = '%s/%s/editDeviceReport' % (self.getPrimaryUrlPath(), id)
         return REQUEST['RESPONSE'].redirect(url)
     return fr
Esempio n. 33
0
    def setInfo(self, **data):
        """
        Main method for setting attributes on a network or network organizer.
        This method accepts any keyword argument for the property that you wish
        to set. The only required property is "uid".

        @type    uid: string
        @keyword uid: Unique identifier of an object
        @rtype: DirectResponse
        """
        network = self.api.getInfo(data['uid'])
        Zuul.unmarshal(data, network)
        audit(['UI', getDisplayType(network), 'Edit'], network, data_=data)
        return DirectResponse.succeed()
Esempio n. 34
0
 def manage_addGraphReport(self, id, REQUEST=None):
     """Add an graph report to this object.
     """
     if id:
         from Products.ZenModel.GraphReport import GraphReport
         gr = GraphReport(id)
         self._setObject(id, gr)
         if REQUEST:
             audit('UI.Report.Add', gr.id, reportType=getDisplayType(gr))
             messaging.IMessageSender(self).sendToBrowser(
                 'Report Created',
                 'Graph report %s was created.' % id
             )
             return self.callZenScreen(REQUEST)
Esempio n. 35
0
    def setInfo(self, **data):
        """
        Main method for setting attributes on a network or network organizer.
        This method accepts any keyword argument for the property that you wish
        to set. The only required property is "uid".

        @type    uid: string
        @keyword uid: Unique identifier of an object
        @rtype: DirectResponse
        """
        network = self.api.getInfo(data['uid'])
        Zuul.unmarshal(data, network)
        audit(['UI', getDisplayType(network), 'Edit'], network, data_=data)
        return DirectResponse.succeed()
 def manage_addAdministrativeRole(self, newId=None, REQUEST=None):
     "Add a Admin Role to this device"
     us = self.ZenUsers.getUserSettings(newId)
     AdministrativeRole(us, self)
     self.setAdminLocalRoles()
     self.index_object()
     notify(IndexingEvent(self))
     if REQUEST:
         if us:
             audit(['UI', getDisplayType(self), 'AddAdministrativeRole'], self, newId=newId)
             messaging.IMessageSender(self).sendToBrowser(
                 'Admin Role Added',
                 'The %s administrative role has been added.' % newId
             )
         return self.callZenScreen(REQUEST)
Esempio n. 37
0
    def moveOrganizer(self, targetUid, organizerUid):
        """
        Move the organizer uid to be underneath the organizer
        specified by the targetUid.

        @type  targetUid: string
        @param targetUid: New parent of the organizer
        @type  organizerUid: string
        @param organizerUid: The organizer to move
        @rtype:   DirectResponse
        @return:  B{Properties}:
             - data: (dictionary) Moved organizer
        """
        facade = self._getFacade()
        display_type = getDisplayType(facade._getObject(organizerUid))
        audit(['UI', display_type, 'Move'], organizerUid, to=targetUid)
        data = facade.moveOrganizer(targetUid, organizerUid)
        return DirectResponse.succeed(data=Zuul.marshal(data))
Esempio n. 38
0
    def moveOrganizer(self, targetUid, organizerUid):
        """
        Move the organizer uid to be underneath the organizer
        specified by the targetUid.

        @type  targetUid: string
        @param targetUid: New parent of the organizer
        @type  organizerUid: string
        @param organizerUid: The organizer to move
        @rtype:   DirectResponse
        @return:  B{Properties}:
             - data: (dictionary) Moved organizer
        """
        facade = self._getFacade()
        display_type = getDisplayType(facade._getObject(organizerUid))
        audit(['UI', display_type, 'Move'], organizerUid, to=targetUid)
        data = facade.moveOrganizer(targetUid, organizerUid)
        return DirectResponse.succeed(data=Zuul.marshal(data))
Esempio n. 39
0
 def deleteZenProperty(self, propname=None, REQUEST=None):
     """
     Delete device tree properties from the this DeviceClass object.
     """
     if propname:
         try:
             self._delProperty(propname)
         except AttributeError:
             #occasional object corruption where the propName is in
             #_properties but not set as an attribute. filter out the prop
             #and create a new _properties tuple
             newProps = [x for x in self._properties if x['id'] != propname]
             self._properties=tuple(newProps)
         except ValueError:
             raise ZenPropertyDoesNotExist()
     if REQUEST:
         if propname:
             audit(('UI',getDisplayType(self),'DeleteZProperty'), self, property=propname)
         return self.callZenScreen(REQUEST)
 def removeDevices(self, deviceNames=None, deleteStatus=False, 
                   deleteHistory=False, deletePerf=False,REQUEST=None):
     """see IManageDevice"""
     from Products.ZenUtils.Utils import unused
     unused(deleteHistory, deletePerf, deleteStatus)
     if not deviceNames: return self()
     if isinstance(deviceNames, basestring): deviceNames = (deviceNames,)
     for devname in deviceNames:
         self.devices._delObject(devname)
         if REQUEST:
             if self.meta_type == 'PerformanceConf':
                 actionName = 'RemoveFromCollector'
                 objId = self.id
             else:
                 actionName = 'Remove'
                 objId = self.getPrimaryId()
             objType = getDisplayType(self)
             audit(['UI.Device', actionName], devname, data_={objType:objId})
     if REQUEST:
         return self()
 def manage_deleteAdministrativeRole(self, delids=(), REQUEST=None):
     "Delete a admin role to this device"
     if isinstance(delids, basestring):
         delids = [delids]
     for userid in delids:
         ar = self.adminRoles._getOb(userid, None)
         if ar is not None: ar.delete()
         self.manage_delLocalRoles((userid,))
     self.setAdminLocalRoles()
     self.index_object()
     notify(IndexingEvent(self))
     if REQUEST:
         if delids:
             for userid in delids:
                 audit(['UI', getDisplayType(self), 'DeleteAdministrativeRole'], self, userid=userid)
             messaging.IMessageSender(self).sendToBrowser(
                 'Admin Roles Deleted',
                 ('The following administrative roles have been deleted: '
                  '%s' % ", ".join(delids))
             )
         return self.callZenScreen(REQUEST)
Esempio n. 42
0
def manage_addReport(context,
                     id,
                     title=None,
                     text=None,
                     REQUEST=None,
                     submit=None):
    """make a Report"""
    id = str(id)
    if REQUEST is None:
        context._setObject(id, Report(id, text))
        ob = getattr(context, id)
        if title:
            ob.pt_setTitle(title)
        return ob
    else:
        file = REQUEST.form.get('file')
        headers = getattr(file, 'headers', None)
        if headers is None or not file.filename:
            zpt = Report(id)
        else:
            zpt = Report(id, file, headers.get('content_type'))

        context._setObject(id, zpt)

        audit('UI.Report.Add',
              zpt.id,
              title=title,
              text=text,
              reportType=getDisplayType(zpt),
              organizer=context)

        try:
            u = context.DestinationURL()
        except AttributeError:
            u = REQUEST['URL1']

        if submit == " Add and Edit ":
            u = "%s/%s" % (u, quote(id))
        REQUEST.RESPONSE.redirect(u + '/manage_main')
    return ''
Esempio n. 43
0
    def addNode(self, type, contextUid, id, description=None):
        """
        Add a node to the existing tree underneath the node specified
        by the context UID

        @type  type: string
        @param type: Either 'class' or 'organizer'
        @type  contextUid: string
        @param contextUid: Path to the node that will
                           be the new node's parent (ex. /zport/dmd/Devices)
        @type  id: string
        @param id: Identifier of the new node, must be unique in the
                   parent context
        @type  description: string
        @param description: (optional) Describes this new node (default: None)
        @rtype:   dictionary
        @return:  Marshaled form of the created node
        """
        result = {}
        try:
            facade = self._getFacade()
            if type.lower() == 'class':
                uid = facade.addClass(contextUid, id)
                audit('UI.Class.Add', uid)
            else:
                organizer = facade.addOrganizer(contextUid, id, description)
                uid = organizer.uid
                audit(['UI', getDisplayType(organizer), 'Add'], organizer)

            treeNode = facade.getTree(uid)
            result['nodeConfig'] = Zuul.marshal(treeNode)
            result['success'] = True
        except Exception as e:
            log.exception(e)
            result['msg'] = str(e)
            result['success'] = False
        return result
Esempio n. 44
0
    def addNode(self, type, contextUid, id, description=None):
        """
        Add a node to the existing tree underneath the node specified
        by the context UID

        @type  type: string
        @param type: Either 'class' or 'organizer'
        @type  contextUid: string
        @param contextUid: Path to the node that will
                           be the new node's parent (ex. /zport/dmd/Devices)
        @type  id: string
        @param id: Identifier of the new node, must be unique in the
                   parent context
        @type  description: string
        @param description: (optional) Describes this new node (default: None)
        @rtype:   dictionary
        @return:  Marshaled form of the created node
        """
        result = {}
        try:
            facade = self._getFacade()
            if type.lower() == 'class':
                uid = facade.addClass(contextUid, id)
                audit('UI.Class.Add', uid)
            else:
                organizer = facade.addOrganizer(contextUid, id, description)
                uid = organizer.uid
                audit(['UI', getDisplayType(organizer), 'Add'], organizer)

            treeNode = facade.getTree(uid)
            result['nodeConfig'] = Zuul.marshal(treeNode)
            result['success'] = True
        except Exception, e:
            log.exception(e)
            result['msg'] = str(e)
            result['success'] = False
    def test_getDisplayType(self):
        testObj = None
        self.assertEqual(getDisplayType(testObj), 'None')

        testObj = 'string!'
        self.assertEqual(getDisplayType(testObj), 'Str')

        testObj = u'string!'
        self.assertEqual(getDisplayType(testObj), 'Unicode')

        testObj = 1
        self.assertEqual(getDisplayType(testObj), 'Int')

        testObj = MetaTypeTestObject()
        self.assertEqual(getDisplayType(testObj), 'MetaTypeTestObject')

        testObj = SaneMetaType()
        self.assertEqual(getDisplayType(testObj), 'SaneMetaType')

        testObj = NoneMetaType()
        self.assertEqual(getDisplayType(testObj), 'NoneMetaType')

        testObj = EmptyMetaType()
        self.assertEqual(getDisplayType(testObj), 'EmptyMetaType')

        testObj = UnrelatedMetaType()
        self.assertEqual(getDisplayType(testObj), 'EntirelyUnrelatedMetaType')

        testObj = IntegerMetaType()
        self.assertEqual(getDisplayType(testObj), '42')

        testObj = UnicodeMetaType()
        self.assertEqual(getDisplayType(testObj), '\xc3\xa4\xc3\xb6\xc3\xbc')

        testObj = SelfMetaType()
        self.assertEqual(getDisplayType(testObj), str(testObj))
Esempio n. 46
0
class Organizer(ZenModelRM, EventView):
    """
    The base for all hierarchical organization classes.  It allows Organizers
    to be addressed and created with file system like paths like
    /Devices/Servers.  Organizers have a containment relation called children.
    Subclasses must define the attribute:

    dmdRootName - root in the dmd database for this organizer
    """

    _properties = (
                    {'id':'description', 'type':'string', 'mode':'w'},
                   )

    _relations = ZenModelRM._relations

    security = ClassSecurityInfo()
    security.declareObjectProtected(ZEN_COMMON)

    def __init__(self, id, description = ''):
        """
        @param id: Name of this organizer
        @type id: string
        @param description: A decription of this organizer
        @type description: string
        @rtype: Organizer
        """
        ZenModelRM.__init__(self, id)
        self.description = description

    @unpublished
    def urlLink(self, text=None, url=None, attrs={}):
        """
        Override urlLink to return a link with the full path of the organizer.

        >>> dmd.Devices.Server.urlLink()
        '<a href="/zport/dmd/Devices/Server">/Server</a>'
        """
        if text is None: text = self.getOrganizerName()
        return ZenModelRM.urlLink(self, text=text, url=url, attrs=attrs)


    def childMoveTargets(self):
        """
        Returns a list of all organizer names
        under the same root excluding ourselves

        @return: A list of organizers excluding our self.
        @rtype: list
        @todo: We should be using either deviceMoveTargets or childMoveTargets

        >>> dmd.Events.getOrganizerName() in dmd.Events.childMoveTargets()
        False
        """
        myname = self.getOrganizerName()
        return filter(lambda x: x != myname,
                    self.getDmdRoot(self.dmdRootName).getOrganizerNames())

    def getChildMoveTarget(self, moveTargetName):
        """
        Returns an organizer under the same root.

        @param moveTargetName: Name of the organizer
        @type moveTargetName: string
        @rtype: Organizer

        >>> dmd.Devices.getChildMoveTarget('Server')
        <DeviceClass at /zport/dmd/Devices/Server>
        """
        return self.getDmdRoot(self.dmdRootName).getOrganizer(moveTargetName)


    security.declareProtected(ZEN_COMMON, "children")
    def children(self, sort=False, checkPerm=True, spec=None):
        """
        Returns the immediate children of an organizer

        @param sort: If True, sorts the returned children.
        @type sort: boolean
        @param checkPerm: If True, checks if the user has the permission
            to view each child.
        @type checkPerm: boolean
        @param spec: If set, returns children of the specified meta_type.
        @type spec: string
        @return: A list of children of the organizer
        @rtype: list
        @permission: ZEN_COMMON

        >>> dmd.Devices.Printer.children()
        [<DeviceClass at /zport/dmd/Devices/Printer/Laser>,
        <DeviceClass at /zport/dmd/Devices/Printer/InkJet>]
        """
        if spec is None:
            spec = self.meta_type
        kids = self.objectValues(spec=spec)
        if checkPerm:
            kids = [ kid for kid in kids if self.checkRemotePerm(ZEN_VIEW, kid)]
        if sort:
            kids.sort(key=lambda x: x.primarySortKey())
        return kids


    def childIds(self, spec=None):
        """
        Returns the ids of the immediate children of an organizer

        @param spec: If set, returns children of the specified meta_type.
        @type spec: string
        @return: Ids of children within our organizer
        @rtype: list

        >>> 'Discovered' in dmd.Devices.childIds()
        True
        """
        if spec is None:
            spec = self.meta_type
            #spec = self.getDefaultSpecForChildren()
        return self.objectIds(spec=spec)


    security.declareProtected(ZEN_COMMON, "countChildren")
    def countChildren(self, spec=None):
        """
        Returns the number of all the children underneath an organizer

        @param spec: If set, returns children of the specified meta_type.
        @type spec: string
        @return: A count of all our contained children.
        @rtype: integer
        @permission: ZEN_COMMON

        """
        if spec is None:
            spec = self.meta_type
            #spec = self.getDefaultSpecForChildren()
        count = len(self.objectIds(spec=spec))
        for child in self.children(spec=spec):
            count += child.countChildren(spec=spec)
        return count


    security.declareProtected(ZEN_ADD, 'manage_addOrganizer')
    def manage_addOrganizer(self, newPath, factory=None, REQUEST=None):
        """
        Adds a new organizer under this organizer. if given a fully qualified
        path it will create an organizer at that path

        @param newPath: Path of the organizer to be created
        @type newPath:  string
        @raise: ZentinelException
        @permission: ZEN_ADD

        >>> dmd.Devices.manage_addOrganizer('/Devices/DocTest')
        """
        if factory is None:
            factory = self.__class__
        if not newPath: return self.callZenScreen(REQUEST)
        try:
            if newPath.startswith("/"):
                org = self.createOrganizer(newPath)
            else:
                # Strip out invalid characters from the newPath
                name = newPath
                newPath = self.prepId(newPath)
                org = factory(newPath)
                self._setObject(org.id, org)
                # Set the display name to the original string
                org = self._getOb(newPath)
                org.setTitle(name)
        except ZentinelException, e:
            if REQUEST:
                messaging.IMessageSender(self).sendToBrowser(
                    'Error', e, priority=messaging.WARNING)
                return self.callZenScreen(REQUEST)
        if REQUEST:
            audit(('UI', getDisplayType(org), 'Add'), org)
            messaging.IMessageSender(self).sendToBrowser(
                'Organizer Added',
                '%s "%s" was created.' % (getDisplayType(self), newPath)
            )
            return self.callZenScreen(REQUEST)
Esempio n. 47
0
    def test_getDisplayType(self):
        testObj = None
        self.assertEqual(getDisplayType(testObj), 'None')

        testObj = 'string!'
        self.assertEqual(getDisplayType(testObj), 'Str')

        testObj = u'string!'
        self.assertEqual(getDisplayType(testObj), 'Unicode')

        testObj = 1
        self.assertEqual(getDisplayType(testObj), 'Int')

        testObj = MetaTypeTestObject()
        self.assertEqual(getDisplayType(testObj), 'MetaTypeTestObject')

        testObj = SaneMetaType()
        self.assertEqual(getDisplayType(testObj), 'SaneMetaType')

        testObj = NoneMetaType()
        self.assertEqual(getDisplayType(testObj), 'NoneMetaType')

        testObj = EmptyMetaType()
        self.assertEqual(getDisplayType(testObj), 'EmptyMetaType')

        testObj = UnrelatedMetaType()
        self.assertEqual(getDisplayType(testObj), 'EntirelyUnrelatedMetaType')

        testObj = IntegerMetaType()
        self.assertEqual(getDisplayType(testObj), '42')

        testObj = UnicodeMetaType()
        self.assertEqual(getDisplayType(testObj), '\xc3\xa4\xc3\xb6\xc3\xbc')

        testObj = SelfMetaType()
        self.assertEqual(getDisplayType(testObj), str(testObj))