Discussion:
Stale deviceSearch record:
dpetzel
2012-04-03 15:34:34 UTC
Permalink
dpetzel [http://community.zenoss.org/people/dpetzel] created the discussion

"Stale deviceSearch record:"

To view the discussion, visit: http://community.zenoss.org/message/65692#65692

--------------------------------------------------------------
WARNING ZenModel.DeviceOrganizer: Stale deviceSearch record: /zport/dmd/blah/blah
I can't say I've pinned to anything actually broken, but I'm curious what they mean.
--------------------------------------------------------------

Reply to this message by replying to this email -or- go to the discussion on Zenoss Community
[http://community.zenoss.org/message/65692#65692]

Start a new discussion in zenoss-users by email
[discussions-community-forums-zenoss--***@community.zenoss.org] -or- at Zenoss Community
[http://community.zenoss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2003]
dpetzel
2012-04-04 18:04:02 UTC
Permalink
dpetzel [http://community.zenoss.org/people/dpetzel] created the discussion

"Re: Stale deviceSearch record:"

To view the discussion, visit: http://community.zenoss.org/message/65732#65732

--------------------------------------------------------------
dev_group_list = device.getDeviceGroupNames()
group_path = group.getOrganizerName()
          dev_group_list.remove(group.getOrganizerName())
          device.setGroups(dev_group_list)
          #recatalog so the catalog picks up the changes
          dmd.Devices.deviceSearch.catalog_object(device)
After this happens I start to seethe message above and the group and device listed in the message are for the combination of what I was just removing.
2012-04-04T10:31:45 ERROR extdirect MyDevice
  File "/opt/zenoss/Products/ZenUtils/extdirect/router.py", line 128, in _processDirectRequest
    result = _targetfn(**data)
  File "/opt/zenoss/Products/Zuul/routers/device.py", line 181, in getDevices
    devices, details = facade.getDeviceList(uid, start, limit, sort, dir, params)
  File "/opt/zenoss/Products/Zuul/facades/devicefacade.py", line 152, in getDeviceList
    devices.append(IInfo(brain.getObject()))
  File "/opt/zenoss/lib/python/Products/ZCatalog/CatalogBrains.py", line 92, in getObject
    target = parent.restrictedTraverse(path[-1])
  File "/opt/zenoss/lib/python/OFS/Traversable.py", line 310, in restrictedTraverse
    return self.unrestrictedTraverse(path, default, restricted=True)
  File "/opt/zenoss/lib/python/OFS/Traversable.py", line 293, in unrestrictedTraverse
    raise e
NotFound: MyDevice
Is there a more appropriate way to remote a device from a group via DMD?
--------------------------------------------------------------

Reply to this message by replying to this email -or- go to the discussion on Zenoss Community
[http://community.zenoss.org/message/65732#65732]

Start a new discussion in zenoss-users by email
[discussions-community-forums-zenoss--***@community.zenoss.org] -or- at Zenoss Community
[http://community.zenoss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2003]
Shane Scott
2012-04-18 15:12:19 UTC
Permalink
Shane Scott [http://community.zenoss.org/people/hackman238] created the discussion

"Re: Stale deviceSearch record:"

To view the discussion, visit: http://community.zenoss.org/message/65957#65957

--------------------------------------------------------------
dpetzel:

Lets try my catalog cleaning script (indicator class required for progress bar):

indicator.py {
#!/usr/bin/env python
import sys,os

class PB:
    def __init__(self, mV = 0, MV = 100, w=77,**kwargs):
        self.c = kwargs.get('c', '#')
        self.b = ''
        self.mV = mV
        self.MV = MV
        self.s = MV - mV
        self.w = w
        self.a = 0
        self.uPa(0)


    def iNa(self, add_a = 1):
        nN = self.a + add_a
        if nN < self.mV: nN = self.mV
        if nN > self.MV: nN = self.MV
        self.a = nN
        self.bDb()


    def uPa(self, nN = None):
        if not nN: nN = self.a
        if nN < self.mV: nN = self.mV
        if nN > self.MV: nN = self.MV
        self.a = nN
        self.bDb()


    def bDb(self):
        d = float(self.a - self.mV)
        pD = int(round((d / float(self.s)) * 100.0))

        aF = self.w - 2
        nH = int(round((pD * aF) / 100))
        self.b = self.c * nH + ' ' * (aF-nH)

        pSrg = str(pD) + "%"
        self.b = '[ ' + self.b + ' ] ' + pSrg


    def __str__(self):
        return str(self.b)

}

clean_up_components.py {
#!/usr/bin/env python
from optparse import OptionParser
import types
import sys
import time
import os
import datetime
import smtplib

try:
   from indicator import PB
except:
   print 'Cannot find indicator.py'
   sys.exit(1)

try:
   import Globals
   from Products.ZenUtils.ZenScriptBase import ZenScriptBase
   from transaction import commit
   from Products.ZenUtils import Time
except:
    print 'Cannot find Zenoss python includes! Cannot continue.'
    sys.exit(1)

aBt='''......................................:oCCCCCCCoc:....................................................................................................
...................................coCCCCCCCc:........................................................................................................
...............................coCCCCCCo:.................................:c:.........................................................................
....coooc:..................:oCCCCCCc:.............o...c:..:c............cCCCo:...........................:coooo......................................
...:OCCCCO..................oCCCCoc................8:.:8C..CC............:oCCCCc..........................OOCCCCo.....................................
...co...:c...Oc...cO....OC. .c8o...O:..OOOOOc......Oo.oO8.:8:.Oc..O.....cO.:CCCOO....OC..::Oo....Oc.......Oo...::...OOOOO:.:OOOOOo.COOOOOCCOOOOO:.....
...:88888O...Oo:::oO...o:CC...OOO..O:..O...........o8:8:OCCC..Oc..O.....cO...CCO8...oCOOCCoOCc..OOc.......C88888o..:o...o:.cc...oO....O.....cO........
....:cccc8:..OOOOOOO..:O.:8...O.CO:O:..8OOC.........8oC.oOOc..Oc..O.....cO...:oCO...OCC8OCcO:8:CoOc........:ccccC..:o......cc...cO....O.....cO........
...c:...:8:..Oc...cO..COOOOc..O..o88:..O............COc..OO...Oc..O.....cO.....cO..C8OO8OC:O:oOC.Oc.......o:...:C..:o...C:.cc...cO....O.....cO........
...oOOOOO8:..Oc...cO.:8CCCCO..O...c8:..Ooooo:.......c8...Co...Oc..Ooooo.cOoooc.cO.:8CCCC8o.O:.o..Oc.......8OOOOOC..:OoCoOc.cCCooCO....O.....cO........
...................:CCCCCCo........................................................CCCCCC.............................................................
..................oCCCCCo:........................................................oCCCCCc. ...........................................................
.................cCCCCCCc.........................................................oCCCCCc.............................................................
Shane William Scott'''
lU = '04062011'

dFeIn = 1
dFeInN = -1
dFvLd = True
dFIvLd = False
dFsvLd = str(dFvLd)
dFsIvLd = str(dFIvLd)
dFzT = 0
rSrg = ''

pSr = OptionParser()

pSr.add_option('-p', '--pass', dest='pSsS',
                  help='Number of passes to complete on iterOp', metavar='Int', default='1')
pSr.add_option('-d', '--debug', dest='dOp',
                  help='Debug flag')
pSr.add_option('-v', '--verbose', dest='vBs',
                  help='Verbose logging')
pSr.add_option('-t', '--to', dest='mLtO',
                  help='Destination mailbox', metavar='String')
pSr.add_option('-a', '--about', dest='aBtF',
                          help='About dialog', action='store_true')


(opTs, args) = pSr.parse_args()

def mLfunC(tOu, bStrg, mailto:fmU='***@rackspace.net fmU='***@rackspace.net', sJt='RANCID Report'):
    mSg = 'From: ' + str(fmU) + '\n' + 'To: ' + str(tOu) + '\n' + 'Subject: ' + str(sJt) + '\n' + str(bStrg) + '\n'

    try:
        smtpObj = smtplib.SMTP('localhost')
        smtpObj.sendmail(fmU, tOu, mSg)
        lG('Successfully sent email', vBs)
    except:
        lG('Unable to send email - ERROR', vBs)
        sys.exit(1)

def lG(text, vBs, vBsBl=dFIvLd, dFIvLd=dFIvLd, rSrg=rSrg):
    if vBsBl != vBs and vBs == dFIvLd:
       pass
    else:
       print str(text) + datetime.datetime.now().strftime(' at %A (%a) %d/%m/%Y %I:%M:%S %p') + '\n'
       rSrg = rSrg + str(text) + '\n'
    return rSrg

if opTs.aBtF:
   print aBt
   print 'Last Update: ' + str(lU)
   sys.exit(0)

if not opTs.pSsS:
   pSsS = dFeIn
else:
   pSsS = opTs.pSsS

if not opTs.dOp:
   dOp = dFvLd
else:
   dOp= opTs.dOp

if not opTs.vBs:
   vBs = dFIvLd
else:
   vBs = opTs.vBs

if not opTs.mLtO:
   mlBl = dFsIvLd
else:
   mlBl = dFvLd
   mLtO = opTs.mLtO

hNSgr = os.uname()[1]
hNSgr = hNSgr.split('.')
hNSgr = hNSgr[dFeIn]

rSrg = rSrg + lG('Ver ' + str(lU), vBs)
rSrg = rSrg + lG('Starting process', vBs)
rSrg = rSrg + lG('Number of passes set to ' + str(pSsS), vBs)

if dOp == dFsIvLd:
   rSrg = rSrg + lG('WARNING! - Real operation mode!', vBs)
else:
   rSrg = rSrg + lG('Debug Mode', vBs)

try:
    dmd = ZenScriptBase(connect=dFvLd, noopts=dFvLd).dmd
except:
    print 'DMD Connection Failed'
    sys.exit(1)

rSrg = rSrg + lG('Connected to DMD OK', vBs)

pSsN = dFzT

for pSs_iter in range (int(dFzT), int(pSsS)):
    pSsN = pSsN + dFeIn
    rSrg = rSrg + lG('Started Cleaning Device Catalog Pass ' + str(pSsN), vBs)
    print '\r'
    eRr = dFvLd
    while eRr:
        eRr = dFIvLd
        oBj = dmd.Devices.deviceSearch()
        pSsNb = dFzT
        progB = PB(pSsNb, len(oBj), 77, c='#')
        for d in oBj:
            pSsNb = pSsNb + dFeIn
            rSrg = rSrg + lG('\r Working on device: ' + str(d.id) + '\r', vBs, dFvLd)
            try:
                bah = d.getObject()
            except Exception:
                dOpPth = d.getPath()
                if dOp == dFsIvLd:
                   rSrg = rSrg + lG(' RW ' + str(dOpPth), vBs)
                   dmd.Devices.deviceSearch.uncatalog_object(d.getPath())
                   time.sleep(4)
                   commit()
                   eRr = dFsvLd
                else:
                   rSrg = rSrg + lG(' RO ' + str(dOpPth), vBs)
            progB.iNa()
            print progB, str(pSsNb) + '\\' + str(len(oBj)) + '\r',
            sys.stdout.flush()

    if dOp == dFsIvLd:
       commit()

    print '\r'
    rSrg = rSrg + lG('Started Cleaning Component Catalog Pass ' + str(pSsN), vBs)
    print '\r'
    eRr = dFvLd
    while eRr:
        eRr = dFIvLd
        oBj = dmd.Devices.componentSearch()
        pSsNb = dFzT
        progC = PB(pSsNb, len(oBj), 77, c='#')
        for d in oBj:
            pSsNb = pSsNb + dFeIn
            rSrg = rSrg + lG('\r Working on ' +str(d.id) + '\r', vBs, dFvLd)
            try:
                bah = d.getObject()
            except Exception:
                dOpPth = d.getPath()
                if dOp == dFsIvLd:
                   rSrg = rSrg + lG(' RW ' + str(dOpPth), vBs)
                   dmd.Devices.componentSearch.uncatalog_object(d.getPath())
                   time.sleep(4)
                   commit()
                   eRr = dFvLd
                else:
                   rSrg = rSrg + lG(' RO ' + str(dOpPth), vBs)
            progC.iNa()
            print progC, str(pSsNb) + '\\' + str(len(oBj)) + '\r',
            sys.stdout.flush()

    if dOp == dFsIvLd:
       commit()

rSrg = rSrg + lG('\nFinished Cleaning Components Catalogs', vBs)

if mlBl == dFvLd:
   sJSrg = 'Component Cleanup Report for ' + str(hNSgr)
   mLfunC(mLtO, rSrg, mailto:'***@rackspace.com '***@rackspace.com', sJSrg)
}

Run as zenoss user, clean_up_components.py -p 1 -d True

(Single pass, don't commit. Use -t to mail a report)

Best,
--Shane
--------------------------------------------------------------

Reply to this message by replying to this email -or- go to the discussion on Zenoss Community
[http://community.zenoss.org/message/65957#65957]

Start a new discussion in zenoss-users by email
[discussions-community-forums-zenoss--***@community.zenoss.org] -or- at Zenoss Community
[http://community.zenoss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2003]
Loading...