ZenDMD Tip - Fix Broken Muiltigraph Collections

From Zenoss Wiki
This is the approved revision of this page, as well as being the most recent.
Jump to: navigation, search

Occasionally collections in MultiGraph reports can stop working as expected. Here's some zendmd code to rebuild them...

from Acquisition import aq_base
from Products.ZenRelations.ToManyContRelationship import ToManyContRelationship
reportclass = dmd.Reports._getOb('Multi-Graph Reports')
for organizer in reportclass.getSubOrganizers():
    for report in organizer.reports():
        try:
            rptcolls = report.collections
        except AttributeError:
            continue
        for coll in rptcolls():
            rel = coll.items
            if isinstance(rel, ToManyContRelationship):
                obs = []
                for ob in rel():
                    obs.append(aq_base(ob))
                    remote_rel = ob.collection
                    remote_rel._remove(coll)
                    rel._remove(ob)
                coll._delObject('items')
                coll.buildRelations()
                newrel = coll.collection_items.primaryAq()
                for ob in obs:
                    newrel._setObject(ob.getId(), ob)
                    ob = newrel._getOb(ob.getId())
                    print ob.__primary_parent__
                    assert ob.__primary_parent__ == newrel
                    assert ob.collection() == coll
                    assert ob in newrel()
commit()