You can subscribe to this list here.
2007 |
Jan
|
Feb
(65) |
Mar
(276) |
Apr
(544) |
May
(638) |
Jun
(225) |
Jul
(204) |
Aug
(294) |
Sep
(532) |
Oct
(506) |
Nov
(324) |
Dec
(359) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(208) |
Feb
(225) |
Mar
(248) |
Apr
(388) |
May
(222) |
Jun
(47) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <sv...@ze...> - 2007-03-08 22:59:58
|
Author: edahl Date: 2007-03-08 16:59:52 -0600 (Thu, 08 Mar 2007) New Revision: 4245 Modified: sandboxen/edahl/zenrelrefactor/ZenModel/tests/testIpRouteEntry.py sandboxen/edahl/zenrelrefactor/ZenModel/zenbuild.py Log: * add commit after dmdbuilder to zenbuild.py * fix bad test setup in testIpRouteEntry.py Modified: sandboxen/edahl/zenrelrefactor/ZenModel/tests/testIpRouteEntry.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenModel/tests/testIpRouteEntry.py 2007-03-08 22:58:21 UTC (rev 4244) +++ sandboxen/edahl/zenrelrefactor/ZenModel/tests/testIpRouteEntry.py 2007-03-08 22:59:52 UTC (rev 4245) @@ -28,14 +28,14 @@ tmpo = IpInterface('test0') self.dev.os.interfaces._setObject('test0',tmpo) - self.iface0 = self.dev.os.interfaces()[0] + self.iface0 = self.dev.os.interfaces._getOb('test0') self.iface0.setIpAddresses('1.2.3.4/24') self.iface0.ifindex = 0 self.iface0.interfaceName = 'iface0' tmpo = IpInterface('test1') self.dev.os.interfaces._setObject('test1',tmpo) - self.iface1 = self.dev.os.interfaces()[1] + self.iface1 = self.dev.os.interfaces._getOb('test1') self.iface1.setIpAddresses('2.3.4.5/24') self.iface1.ifindex = 1 self.iface1.interfaceName = 'iface1' Modified: sandboxen/edahl/zenrelrefactor/ZenModel/zenbuild.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenModel/zenbuild.py 2007-03-08 22:58:21 UTC (rev 4244) +++ sandboxen/edahl/zenrelrefactor/ZenModel/zenbuild.py 2007-03-08 22:59:52 UTC (rev 4245) @@ -110,7 +110,7 @@ self.options.smtphost, self.options.smtpport, self.options.snpphost, self.options.snppport) dmdBuilder.build() - + transaction.commit() # Set smtp and snpp values |
From: <sv...@ze...> - 2007-03-08 22:58:23
|
Author: edahl Date: 2007-03-08 16:58:21 -0600 (Thu, 08 Mar 2007) New Revision: 4244 Added: sandboxen/edahl/zenrelrefactor/ZenRelations/ZItem.py Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/PrimaryPathObjectManager.py sandboxen/edahl/zenrelrefactor/ZenRelations/RelationshipBase.py sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyContRelationship.py sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationship.py sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationshipBase.py sandboxen/edahl/zenrelrefactor/ZenRelations/ToOneRelationship.py Log: * fixes to inheritance make ownership work properly Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/PrimaryPathObjectManager.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/PrimaryPathObjectManager.py 2007-03-08 18:54:08 UTC (rev 4243) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/PrimaryPathObjectManager.py 2007-03-08 22:58:21 UTC (rev 4244) @@ -16,22 +16,19 @@ from Acquisition import Implicit, aq_base from OFS.ObjectManager import ObjectManager from AccessControl.Role import RoleManager -from OFS.SimpleItem import Item +import App.Undo +from ZItem import ZItem + from Products.ZenUtils.Utils import getObjByPath from Products.BTreeFolder2.BTreeFolder2 import BTreeFolder2 -class PrimaryPathManager( - RelCopyContainer, - Implicit, - Traversable, - #App.Management.Navigation, - #App.Management.Tabs, - ): +class PrimaryPathManager(ZItem, Implicit, RoleManager): + def getPrimaryPath(self, fromNode=None): """ Return the primary path of this object by following __primary_parent__ @@ -80,21 +77,19 @@ -class PrimaryPathObjectManagerBase(PrimaryPathManager): +class PrimaryPathObjectManager( + RelCopyContainer, + ObjectManager, + PrimaryPathManager, + App.Undo.UndoSupport, + ): """ - ZenRelations adds relationships to Zope's normal containment style data - system. Relationships give us a networked data model as opposed to a - simple hierarchy. It is difficult to path through a network of objects - so PrimaryPathObjectManager gives us a consistant hierarchical mechanism - for pathing to an object. This allows our network database to pretend to - Zope that it is really just hierarchical. It also lets us set our - acquisition chain to equal our primary path. This lets us do acquistion - within the networked database. - - The primary path of an object is maintained through the attribute - __primary_parent__. This is set every time an object is added to the - database using _setObject. + PrimaryPathObjectManager with basic Zope persistent classes. """ + manage_options = (ObjectManager.manage_options + + RoleManager.manage_options + + ZItem.manage_options) + def _setObject(self, id, obj, roles=None, user=None, set_owner=1): """Track __primary_parent__ when we are set into an object""" obj.__primary_parent__ = aq_base(self) @@ -108,17 +103,18 @@ obj.__primary_parent__ = None -class PrimaryPathObjectManager(PrimaryPathObjectManagerBase, ObjectManager, - RelCopyContainer, RoleManager, Item): +class PrimaryPathBTreeFolder2(BTreeFolder2): """ - PrimaryPathObjectManager with basic Zope persistent classes. + BTreeFolder2 PrimaryPathObjectManager. """ - manage_options = (ObjectManager.manage_options + - RoleManager.manage_options + - Item.manage_options) + def _setObject(self, id, obj, roles=None, user=None, set_owner=1): + """Track __primary_parent__ when we are set into an object""" + obj.__primary_parent__ = aq_base(self) + return ObjectManager._setObject(self, id, obj, roles, user, set_owner) -class PrimaryPathBTreeFolder2(PrimaryPathObjectManagerBase, BTreeFolder2): - """ - BTreeFolder2 PrimaryPathObjectManager. - """ + def _delObject(self, id, dp=1): + """When deleted clear __primary_parent__.""" + obj = self._getOb(id) + ObjectManager._delObject(self, id, dp) + obj.__primary_parent__ = None Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/RelationshipBase.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/RelationshipBase.py 2007-03-08 18:54:08 UTC (rev 4243) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/RelationshipBase.py 2007-03-08 22:58:21 UTC (rev 4244) @@ -24,6 +24,7 @@ from Products.ZenRelations.Exceptions import * from Products.ZenRelations.utils import importClass + from PrimaryPathObjectManager import PrimaryPathManager class RelationshipBase(PrimaryPathManager): Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyContRelationship.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyContRelationship.py 2007-03-08 18:54:08 UTC (rev 4243) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyContRelationship.py 2007-03-08 22:58:21 UTC (rev 4244) @@ -44,7 +44,9 @@ meta_type = "ToManyContRelationship" + security = ClassSecurityInfo() + def __init__(self, id): """set our instance values""" self.id = id @@ -193,6 +195,7 @@ return default + security.declareProtected('View', 'objectIds') def objectIds(self, spec=None): """only return contained objects""" if spec: @@ -203,6 +206,7 @@ objectIdsAll = objectIds + security.declareProtected('View', 'objectValues') def objectValues(self, spec=None): """over ride to only return owned objects for many to many rel""" if spec: @@ -211,6 +215,7 @@ return [ob.__of__(self) for ob in self._objects.values() \ if ob.meta_type in spec] return [ob.__of__(self) for ob in self._objects.values()] + security.declareProtected('View', 'objectValuesAll') objectValuesAll = objectValues Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationship.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationship.py 2007-03-08 18:54:08 UTC (rev 4243) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationship.py 2007-03-08 22:58:21 UTC (rev 4244) @@ -47,6 +47,7 @@ meta_type = "ToManyRelationship" + security = ClassSecurityInfo() def __init__(self, id): """ToManyRelationships use an array to store related objects""" @@ -159,6 +160,7 @@ return [] + security.declareProtected('View', 'objectValuesAll') def objectValuesAll(self): """return all related object values""" return [ob.__of__(self) for ob in self._objects] Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationshipBase.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationshipBase.py 2007-03-08 18:54:08 UTC (rev 4243) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationshipBase.py 2007-03-08 22:58:21 UTC (rev 4244) @@ -26,8 +26,6 @@ class ToManyRelationshipBase( RelCopyContainer, - Traversable, - Implicit, RelationshipBase ): """ @@ -40,7 +38,6 @@ _operation = -1 # if a Relationship's are only deleted - #_count = 0 def countObjects(self): """Return the number of objects in this relationship""" Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/ToOneRelationship.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/ToOneRelationship.py 2007-03-08 18:54:08 UTC (rev 4243) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/ToOneRelationship.py 2007-03-08 22:58:21 UTC (rev 4244) @@ -134,7 +134,8 @@ ToOne doesn't call beforeDelete on its related object because its not a container. """ - if getattr(item, "_operation", -1) < 1: + if (getattr(item, "_operation", -1) < 1 + and self.remoteTypeName() != 'ToManyCont'): self._remoteRemove() Added: sandboxen/edahl/zenrelrefactor/ZenRelations/ZItem.py |
From: <sv...@ze...> - 2007-03-08 18:54:12
|
Author: ian Date: 2007-03-08 12:54:08 -0600 (Thu, 08 Mar 2007) New Revision: 4243 Modified: trunk/Products/ZenEvents/skins/zenevents/viewHistoryEvents.pt trunk/Products/ZenModel/skins/zenmodel/zenoss.css trunk/Products/ZenWidgets/skins/zenui/css/tables.css trunk/Products/ZenWidgets/skins/zenui/zenuimacros.pt Log: * Modified history view pages * Changed table header size to px instead of em * Reduced font size in tables Modified: trunk/Products/ZenEvents/skins/zenevents/viewHistoryEvents.pt =================================================================== --- trunk/Products/ZenEvents/skins/zenevents/viewHistoryEvents.pt 2007-03-08 18:46:27 UTC (rev 4242) +++ trunk/Products/ZenEvents/skins/zenevents/viewHistoryEvents.pt 2007-03-08 18:54:08 UTC (rev 4243) @@ -51,32 +51,33 @@ page string:getHistoryEventListPage; "> <table class="zentable" cellpadding="3" cellspacing="1"> +<tr tal:define="tabletitle string:Event History"> +<tal:block metal:use-macro="here/zenuimacros/macros/tabletitle"> +<tal:block metal:fill-slot="tabletitlecontent"> +<div style="position:absolute;right:50px;top:0px;z-index:2007;"> <input type='hidden' name='table' value='history'/> - <tr class=tableheader> - <td>Start Date: + Start Date: <input class="tableheader" type="text" name="startdate" id="startdate" readonly="true" tal:attributes="value here/yesterdayDate"/> <input class="tableheader" type="button" value="select" onclick="displayDatePicker('startdate');"/> - </td> - <td>End Date: + End Date: <input class="tableheader" type="text" name="enddate" id="enddate" readonly="true" tal:attributes="value here/todayDate"/> <input class="tableheader" type="button" value="select" onclick="displayDatePicker('enddate');" /> - </td> - <td> <input class="tableheader" type="submit" name="search" value=" Search " onclick="getTablePage(this.form);return false;"/> - </td> - </tr> -</table> +</div> +</tal:block> +</tal:block> +</tr> +<tr> +<td style="padding:0px;"> +<table class="innerzentable" cellpadding="3" cellspacing="1"> -<span metal:use-macro="here/templates/macros/contentSeparator"/> - -<table class="zentable" cellpadding="3" cellspacing="1"> <tal:block metal:use-macro="here/viewEvents/macros/header"/> <tbody id="eventsBody"> <span metal:use-macro="here/getHistoryEventListPage/macros/page"/> @@ -111,6 +112,7 @@ </tr> </tal:block> </table> +</td></tr></table> </form> </span> </tal:block> Modified: trunk/Products/ZenModel/skins/zenmodel/zenoss.css =================================================================== --- trunk/Products/ZenModel/skins/zenmodel/zenoss.css 2007-03-08 18:46:27 UTC (rev 4242) +++ trunk/Products/ZenModel/skins/zenmodel/zenoss.css 2007-03-08 18:54:08 UTC (rev 4243) @@ -451,7 +451,7 @@ width: 100%; position: relative; z-index: 2000; - height: 2em; + height:25px; padding: 0pt; margin: 0pt; } Modified: trunk/Products/ZenWidgets/skins/zenui/css/tables.css =================================================================== --- trunk/Products/ZenWidgets/skins/zenui/css/tables.css 2007-03-08 18:46:27 UTC (rev 4242) +++ trunk/Products/ZenWidgets/skins/zenui/css/tables.css 2007-03-08 18:54:08 UTC (rev 4243) @@ -6,11 +6,11 @@ width: 100%; top: -3px; font-weight: normal; - font-size: 10pt; + font-size: 8pt; font-family: Verdana, Arial, Helvetica, sans-serif; } table.innerzentable tr td { padding: 1px; - font-size: 11pt; + font-size: 8pt; } Modified: trunk/Products/ZenWidgets/skins/zenui/zenuimacros.pt =================================================================== --- trunk/Products/ZenWidgets/skins/zenui/zenuimacros.pt 2007-03-08 18:46:27 UTC (rev 4242) +++ trunk/Products/ZenWidgets/skins/zenui/zenuimacros.pt 2007-03-08 18:54:08 UTC (rev 4243) @@ -55,7 +55,7 @@ <tal:block metal:define-macro="tabletitle"> -<th class="tabletitle" tal:attributes="colspan tblcolspan"> +<th class="tabletitle" tal:attributes="colspan tblcolspan|string:1"> <div class="tabletitlecontainer"> <div class="leftcorner"> </div> <span class="tabletitletext" tal:content="tabletitle | string:Items"> |
From: <sv...@ze...> - 2007-03-08 18:46:27
|
Author: marc Date: 2007-03-08 12:46:27 -0600 (Thu, 08 Mar 2007) New Revision: 4242 Modified: trunk/Products/DataCollector/ApplyDataMap.py trunk/Products/ZenModel/Lockable.py Log: #748 * sendEventOnBlock renaned to sendEventWhenBlocked Modified: trunk/Products/DataCollector/ApplyDataMap.py =================================================================== --- trunk/Products/DataCollector/ApplyDataMap.py 2007-03-08 18:38:11 UTC (rev 4241) +++ trunk/Products/DataCollector/ApplyDataMap.py 2007-03-08 18:46:27 UTC (rev 4242) @@ -121,7 +121,7 @@ log.info('%s obj is Lockable, status: %s' % (tobj and tobj.id or '', tobj.lockStatus())) if not tobj.isLockedFromUpdates(): changed = self._updateObject(tobj, datamap) - elif (tobj.sendEventOnBlock() + elif (tobj.sendEventWhenBlocked() and (self.datacollector and getattr(self.datacollector, 'generateEvents', False) and getattr(self.datacollector, 'dmd', None))): @@ -160,7 +160,7 @@ log.info('%s obj is Lockable, status: %s' % (obj and obj.id or '', obj.lockStatus())) if not obj.isLockedFromUpdates(): objchange = self._updateObject(obj, objmap) - elif (obj.sendEventOnBlock() + elif (obj.sendEventWhenBlocked() and (self.datacollector and getattr(self.datacollector, 'generateEvents', False) and getattr(self.datacollector, 'dmd', None))): @@ -189,7 +189,7 @@ "removing object %s from rel %s on device %s" % ( id, rname, device.id)) rel._delObject(id) - elif (obj.sendEventOnBlock() + elif (obj.sendEventWhenBlocked() and (self.datacollector and getattr(self.datacollector, 'generateEvents', False) and getattr(self.datacollector, 'dmd', None))): @@ -282,7 +282,7 @@ "adding object %s to relationship %s" % ( remoteObj.id, relname)) self._updateObject(remoteObj, objmap) - elif (remoteObj.sendEventOnBlock() + elif (remoteObj.sendEventWhenBlocked() and (self.datacollector and getattr(self.datacollector, 'generateEvents', False) and getattr(self.datacollector, 'dmd', None))): Modified: trunk/Products/ZenModel/Lockable.py =================================================================== --- trunk/Products/ZenModel/Lockable.py 2007-03-08 18:38:11 UTC (rev 4241) +++ trunk/Products/ZenModel/Lockable.py 2007-03-08 18:46:27 UTC (rev 4242) @@ -6,7 +6,7 @@ class Lockable: - sendEventOnBlockFlag = False + sendEventWhenBlockedFlag = False modelerLock = UNLOCKED def getNextLockableParent(self, obj=None): @@ -18,13 +18,13 @@ else: return self.getNextLockableParent(obj.getPrimaryParent()) - def sendEventOnBlock(self): - if sendEventOnBlockFlag: + def sendEventWhenBlocked(self): + if self.sendEventWhenBlockedFlag: return True else: lockableParent = self.getNextLockableParent() if lockableParent: - return lockableParent.sendEventOnBlock() + return lockableParent.sendEventWhenBlocked() else: return False @@ -76,7 +76,7 @@ return "Unlocked" def lockWarning(self): - if self.sendEventOnBlock(): + if self.sendEventWhenBlocked(): return "Send event on block" else: return "Do not send event on block" |
From: <sv...@ze...> - 2007-03-08 18:38:14
|
Author: ian Date: 2007-03-08 12:38:11 -0600 (Thu, 08 Mar 2007) New Revision: 4241 Modified: trunk/Products/ZenEvents/skins/zenevents/viewEvents.pt trunk/Products/ZenWidgets/skins/zenui/zenuimacros.pt Log: * Updated eventView to use the new table style Modified: trunk/Products/ZenEvents/skins/zenevents/viewEvents.pt =================================================================== --- trunk/Products/ZenEvents/skins/zenevents/viewEvents.pt 2007-03-08 18:37:42 UTC (rev 4240) +++ trunk/Products/ZenEvents/skins/zenevents/viewEvents.pt 2007-03-08 18:38:11 UTC (rev 4241) @@ -29,22 +29,12 @@ page string:getEventListPage; "> <table class="zentable" cellpadding="3" cellspacing="1" - metal:define-macro="eventTable"> - <tal:block metal:define-macro="header"> - <input type='hidden' name='sortedHeader' - tal:attributes="value sortedHeader"/> - <input type='hidden' name='sortedSence' value=""> - <input type='hidden' name='url' - tal:attributes="value string:${here/absolute_url_path}/${page}"/> - <input type='hidden' name='zenScreenName' - tal:attributes="value template/id" /> - <tr> - <th class="tabletitle" colspan=4 tal:attributes="colspan evcolspan"> - Filter - <input class="tableheader" type="text" name="filter" id="filter" - size="20" onkeypress="getPageViaEnter(event)" - tal:attributes="value request/filter | string:"> - + metal:define-macro="eventTable" + tal:define="tblcolspan string:4"> +<tr tal:define="tabletitle string:Event List"> +<tal:block metal:use-macro="here/zenuimacros/macros/tabletitle"> + <tal:block metal:fill-slot="tabletitlecontent"> +<div style="position:absolute;right:50px;top:0px;z-index:2007;"> Sev <select class="tableheader" name="severity:int" id="severity" onchange="getTablePage(this.form)"> @@ -68,9 +58,26 @@ onclick="startRefresh(this, this.form);"> <input class="tableheader" type="text" name="refreshRate" size='2' value='60'> + <tal:block metal:use-macro="here/zenuimacros/macros/filterboxinline"/> +</div> - </th> - </tr> + </tal:block> +</tal:block> +</tr> +<tr> +<td tal:attributes="colspan tblcolspan" +style="padding:0px;"> +<table class="innerzentable" cellpadding="3" cellspacing="1"> + + + <tal:block metal:define-macro="header"> + <input type='hidden' name='sortedHeader' + tal:attributes="value sortedHeader"/> + <input type='hidden' name='sortedSence' value=""> + <input type='hidden' name='url' + tal:attributes="value string:${here/absolute_url_path}/${page}"/> + <input type='hidden' name='zenScreenName' + tal:attributes="value template/id" /> <tr metal:define-macro="eventsHeader"> <td class="tableheader" tal:condition="evcontrol"> </td> @@ -118,6 +125,9 @@ </td> </tr> </tal:block> + +</table></td></tr> + </table> </form> </tal:block> Modified: trunk/Products/ZenWidgets/skins/zenui/zenuimacros.pt =================================================================== --- trunk/Products/ZenWidgets/skins/zenui/zenuimacros.pt 2007-03-08 18:37:42 UTC (rev 4240) +++ trunk/Products/ZenWidgets/skins/zenui/zenuimacros.pt 2007-03-08 18:38:11 UTC (rev 4241) @@ -50,35 +50,55 @@ </div> </tal:block> + + + + <tal:block metal:define-macro="tabletitle"> <th class="tabletitle" tal:attributes="colspan tblcolspan"> <div class="tabletitlecontainer"> <div class="leftcorner"> </div> <span class="tabletitletext" tal:content="tabletitle | string:Items"> Title</span> +<tal:block metal:define-slot="tabletitlecontent"> <tal:block tal:condition="showfilterbox | python:False"> <tal:block metal:use-macro="here/zenuimacros/macros/filterbox"/> </tal:block> <tal:block tal:condition="menu_id | python:False"> <tal:block metal:use-macro="here/zenuimacros/macros/devmovemenu"/> </tal:block> +</tal:block> <div class="rightcorner"> </div> </div> </th> </tal:block> + + <tal:block metal:define-macro="filterbox"> <link href="css/filterbox.css" rel="stylesheet" type="text/css" /> <div class="filterbox" - tal:define="ts python:here.ZenTableManager.getTableState(tableName); + tal:define=" tableName tableName | nothing; + ts python:test( + tableName, here.ZenTableManager.getTableState(tableName), + request); message request/SESSION/message | nothing;"> <input type="text" name="filter" - onkeypress="submitViaEnter(event)" onfocus="select(this)" - tal:attributes="value ts/filter" /> + tal:attributes="value ts/filter | string:; + onkeypress python:test(tableName, 'submitViaEnter(event)', + 'getPageViaEnter(event)' )" /> </div> </tal:block> +<tal:block metal:define-macro="filterboxinline"> +<tal:block metal:use-macro="here/zenuimacros/macros/filterbox"/> +<style>.filterbox{position:relative;top:0px; +left:0px;right:0px;bottom:0px;display:inline; +padding-right:20px;margin-left:20px;}</style> +</tal:block> + + <tal:block metal:define-macro="devmovemenu"> <link href="css/menus.css" rel="stylesheet" type="text/css" /> |
From: <sv...@ze...> - 2007-03-08 18:37:46
|
Author: marc Date: 2007-03-08 12:37:42 -0600 (Thu, 08 Mar 2007) New Revision: 4240 Modified: trunk/Products/ZenModel/Lockable.py Log: #748 Modified: trunk/Products/ZenModel/Lockable.py =================================================================== --- trunk/Products/ZenModel/Lockable.py 2007-03-08 18:34:50 UTC (rev 4239) +++ trunk/Products/ZenModel/Lockable.py 2007-03-08 18:37:42 UTC (rev 4240) @@ -9,7 +9,8 @@ sendEventOnBlockFlag = False modelerLock = UNLOCKED - def getNextLockableParent(self, obj): + def getNextLockableParent(self, obj=None): + if not obj: obj = self if obj.getPrimaryParent() == self.getDmd(): return None elif isinstance(obj.getPrimaryParent(), Lockable): @@ -21,9 +22,9 @@ if sendEventOnBlockFlag: return True else: - lockableParent = self.getNextLockableParent(self) + lockableParent = self.getNextLockableParent() if lockableParent: - return self.getNextLockableParent(self).sendEventOnBlock() + return lockableParent.sendEventOnBlock() else: return False @@ -31,9 +32,9 @@ if self.modelerLock == DELETE_LOCKED or self.modelerLock == UPDATE_LOCKED: return True else: - lockableParent = self.getNextLockableParent(self) + lockableParent = self.getNextLockableParent() if lockableParent: - return getNextLockableParent(self).isLockedFromDeletion() + return lockableParent.isLockedFromDeletion() else: return False @@ -41,9 +42,9 @@ if self.modelerLock == UPDATE_LOCKED: return True else: - lockableParent = self.getNextLockableParent(self) + lockableParent = self.getNextLockableParent() if lockableParent: - return getNextLockableParent(self).isLockedFromUpdates() + return lockableParent.isLockedFromUpdates() else: return False |
From: <sv...@ze...> - 2007-03-08 18:34:51
|
Author: marc Date: 2007-03-08 12:34:50 -0600 (Thu, 08 Mar 2007) New Revision: 4239 Modified: trunk/Products/ZenModel/Lockable.py Log: Modified: trunk/Products/ZenModel/Lockable.py =================================================================== --- trunk/Products/ZenModel/Lockable.py 2007-03-08 16:50:12 UTC (rev 4238) +++ trunk/Products/ZenModel/Lockable.py 2007-03-08 18:34:50 UTC (rev 4239) @@ -10,35 +10,43 @@ modelerLock = UNLOCKED def getNextLockableParent(self, obj): - if isinstance(obj.getPrimaryNode(), Lockable): - return obj.getPrimaryNode() + if obj.getPrimaryParent() == self.getDmd(): + return None + elif isinstance(obj.getPrimaryParent(), Lockable): + return obj.getPrimaryParent() else: - return self.getNextLockableParent(self.getPrimaryParent()) + return self.getNextLockableParent(obj.getPrimaryParent()) def sendEventOnBlock(self): if sendEventOnBlockFlag: return True - elif isinstance(self, Device): - return False else: - return self.getNextLockableParent(self).sendEventOnBlock() - + lockableParent = self.getNextLockableParent(self) + if lockableParent: + return self.getNextLockableParent(self).sendEventOnBlock() + else: + return False + def isLockedFromDeletion(self): if self.modelerLock == DELETE_LOCKED or self.modelerLock == UPDATE_LOCKED: return True - elif isinstance(self, Device): - return False else: - return getNextLockableParent(self).isLockedFromDeletion() - + lockableParent = self.getNextLockableParent(self) + if lockableParent: + return getNextLockableParent(self).isLockedFromDeletion() + else: + return False + def isLockedFromUpdates(self): if self.modelerLock == UPDATE_LOCKED: return True - elif isinstance(self, Device): - return False else: - return getNextLockableParent(self).isLockedFromUpdates() - + lockableParent = self.getNextLockableParent(self) + if lockableParent: + return getNextLockableParent(self).isLockedFromUpdates() + else: + return False + def unlock(self): self.modelerLock = UNLOCKED |
From: <sv...@ze...> - 2007-03-08 16:50:21
|
Author: marc Date: 2007-03-08 10:50:12 -0600 (Thu, 08 Mar 2007) New Revision: 4238 Modified: trunk/Products/ZenModel/Lockable.py Log: #748 * fixed recursion error Modified: trunk/Products/ZenModel/Lockable.py =================================================================== --- trunk/Products/ZenModel/Lockable.py 2007-03-08 16:35:09 UTC (rev 4237) +++ trunk/Products/ZenModel/Lockable.py 2007-03-08 16:50:12 UTC (rev 4238) @@ -9,30 +9,33 @@ sendEventOnBlockFlag = False modelerLock = UNLOCKED - def getNextLockableParent(obj): - if obj.getPrimaryNode(): - if isinstance(obj.getPrimaryNode(), Lockable): - return obj.getPrimaryNode() - else: - return getLockableParent(self.getPrimaryParent()) + def getNextLockableParent(self, obj): + if isinstance(obj.getPrimaryNode(), Lockable): + return obj.getPrimaryNode() else: - return None - + return self.getNextLockableParent(self.getPrimaryParent()) + def sendEventOnBlock(self): if sendEventOnBlockFlag: return True + elif isinstance(self, Device): + return False else: - return getNextLockableParent(self).sendEventOnBlock() + return self.getNextLockableParent(self).sendEventOnBlock() def isLockedFromDeletion(self): if self.modelerLock == DELETE_LOCKED or self.modelerLock == UPDATE_LOCKED: return True + elif isinstance(self, Device): + return False else: return getNextLockableParent(self).isLockedFromDeletion() def isLockedFromUpdates(self): if self.modelerLock == UPDATE_LOCKED: return True + elif isinstance(self, Device): + return False else: return getNextLockableParent(self).isLockedFromUpdates() |
From: <sv...@ze...> - 2007-03-08 16:35:13
|
Author: marc Date: 2007-03-08 10:35:09 -0600 (Thu, 08 Mar 2007) New Revision: 4237 Modified: trunk/Products/DataCollector/ApplyDataMap.py trunk/Products/ZenModel/Lockable.py Log: #748 * Update Lockable to traverse parent nodes for lock status Modified: trunk/Products/DataCollector/ApplyDataMap.py =================================================================== --- trunk/Products/DataCollector/ApplyDataMap.py 2007-03-08 16:25:45 UTC (rev 4236) +++ trunk/Products/DataCollector/ApplyDataMap.py 2007-03-08 16:35:09 UTC (rev 4237) @@ -119,9 +119,9 @@ elif hasattr(datamap, 'modname'): if isinstance(tobj, Lockable): log.info('%s obj is Lockable, status: %s' % (tobj and tobj.id or '', tobj.lockStatus())) - if not tobj.isLockedFromUpdate(): + if not tobj.isLockedFromUpdates(): changed = self._updateObject(tobj, datamap) - elif (tobj.sendEventOnBlock + elif (tobj.sendEventOnBlock() and (self.datacollector and getattr(self.datacollector, 'generateEvents', False) and getattr(self.datacollector, 'dmd', None))): @@ -154,12 +154,13 @@ else: seenids[objmap.id] = 1 if objmap.id in relids: + objchange = False obj = rel._getOb(objmap.id) if isinstance(obj, Lockable): log.info('%s obj is Lockable, status: %s' % (obj and obj.id or '', obj.lockStatus())) - if not obj.isLockedFromUpdate(): + if not obj.isLockedFromUpdates(): objchange = self._updateObject(obj, objmap) - elif (obj.sendEventOnBlock + elif (obj.sendEventOnBlock() and (self.datacollector and getattr(self.datacollector, 'generateEvents', False) and getattr(self.datacollector, 'dmd', None))): @@ -183,12 +184,12 @@ obj = rel._getOb(id) if isinstance(obj, Lockable): log.info('%s obj is Lockable, status: %s' % (obj and obj.id or '', obj.lockStatus())) - if not obj.isLockedFromDelete(): + if not obj.isLockedFromDeletion(): self.logChange(device, Change_Remove, "removing object %s from rel %s on device %s" % ( id, rname, device.id)) rel._delObject(id) - elif (obj.sendEventOnBlock + elif (obj.sendEventOnBlock() and (self.datacollector and getattr(self.datacollector, 'generateEvents', False) and getattr(self.datacollector, 'dmd', None))): @@ -276,12 +277,12 @@ remoteObj = rel._getOb(remoteObj.id) if isinstance(remoteObj, Lockable): log.info('%s obj is Lockable, status: %s' % (remoteObj and remoteObj.id or '', remoteObj.lockStatus())) - if not remoteObj.isLockedFromUpdate(): + if not remoteObj.isLockedFromUpdates(): self.logChange(device, Change_Add, "adding object %s to relationship %s" % ( remoteObj.id, relname)) self._updateObject(remoteObj, objmap) - elif (remoteObj.sendEventOnBlock + elif (remoteObj.sendEventOnBlock() and (self.datacollector and getattr(self.datacollector, 'generateEvents', False) and getattr(self.datacollector, 'dmd', None))): Modified: trunk/Products/ZenModel/Lockable.py =================================================================== --- trunk/Products/ZenModel/Lockable.py 2007-03-08 16:25:45 UTC (rev 4236) +++ trunk/Products/ZenModel/Lockable.py 2007-03-08 16:35:09 UTC (rev 4237) @@ -1,3 +1,5 @@ +from Products.ZenRelations import RelationshipBase + UNLOCKED = 0 DELETE_LOCKED = 1 UPDATE_LOCKED = 2 @@ -4,24 +6,35 @@ class Lockable: - sendEventOnBlock = False + sendEventOnBlockFlag = False modelerLock = UNLOCKED - def isLockedFromDelete(self): + def getNextLockableParent(obj): + if obj.getPrimaryNode(): + if isinstance(obj.getPrimaryNode(), Lockable): + return obj.getPrimaryNode() + else: + return getLockableParent(self.getPrimaryParent()) + else: + return None + + def sendEventOnBlock(self): + if sendEventOnBlockFlag: + return True + else: + return getNextLockableParent(self).sendEventOnBlock() + + def isLockedFromDeletion(self): if self.modelerLock == DELETE_LOCKED or self.modelerLock == UPDATE_LOCKED: return True - elif isinstance(self.getPrimaryParent(), Lockable): - return self.getPrimaryParent().isLockedFromDelete() else: - return False + return getNextLockableParent(self).isLockedFromDeletion() - def isLockedFromUpdate(self): + def isLockedFromUpdates(self): if self.modelerLock == UPDATE_LOCKED: return True - elif isinstance(self.getPrimaryParent(), Lockable): - return self.getPrimaryParent().isLockedFromUpdate() else: - return False + return getNextLockableParent(self).isLockedFromUpdates() def unlock(self): self.modelerLock = UNLOCKED @@ -29,10 +42,11 @@ def lockFromDeletion(self): self.modelerLock = DELETE_LOCKED - def lockFromUpdate(self): + def lockFromUpdates(self): self.modelerLock = UPDATE_LOCKED def lockStatus(self): + ''' if self.modelerLock == DELETE_LOCKED: return "Locked from deletion" elif self.modelerLock == UPDATE_LOCKED: @@ -41,9 +55,16 @@ return "%s by parent" % self.getPrimaryParent().lockStatus() elif self.modelerLock == UNLOCKED: return "Unlocked" - + ''' + if self.isLockedFromDeletion(): + return "Locked from deletion" + elif self.isLockedFromUpdates(): + return "Locked from updates and deletion" + else: + return "Unlocked" + def lockWarning(self): - if self.sendEventOnBlock: + if self.sendEventOnBlock(): return "Send event on block" else: return "Do not send event on block" |
From: <sv...@ze...> - 2007-03-08 16:25:46
|
Author: edahl Date: 2007-03-08 10:25:45 -0600 (Thu, 08 Mar 2007) New Revision: 4236 Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/PrimaryPathObjectManager.py sandboxen/edahl/zenrelrefactor/ZenRelations/RelCopySupport.py sandboxen/edahl/zenrelrefactor/ZenRelations/RelationshipBase.py sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyContRelationship.py sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationship.py sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationshipBase.py sandboxen/edahl/zenrelrefactor/ZenRelations/ToOneRelationship.py sandboxen/edahl/zenrelrefactor/ZenRelations/tests/dataImportExport.py Log: * new big chunk relationships that keep relation objects in the same pickle as the relationship manager they hare part of. Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/PrimaryPathObjectManager.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/PrimaryPathObjectManager.py 2007-03-08 16:20:13 UTC (rev 4235) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/PrimaryPathObjectManager.py 2007-03-08 16:25:45 UTC (rev 4236) @@ -12,18 +12,25 @@ # base classes for PrimaryPathObjectManager from RelCopySupport import RelCopyContainer +from OFS.Traversable import Traversable +from Acquisition import Implicit, aq_base from OFS.ObjectManager import ObjectManager from AccessControl.Role import RoleManager from OFS.SimpleItem import Item -from Acquisition import aq_base from Products.ZenUtils.Utils import getObjByPath from Products.BTreeFolder2.BTreeFolder2 import BTreeFolder2 -class PrimaryPathManager(object): +class PrimaryPathManager( + RelCopyContainer, + Implicit, + Traversable, + #App.Management.Navigation, + #App.Management.Tabs, + ): def getPrimaryPath(self, fromNode=None): """ Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/RelCopySupport.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/RelCopySupport.py 2007-03-08 16:20:13 UTC (rev 4235) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/RelCopySupport.py 2007-03-08 16:25:45 UTC (rev 4236) @@ -18,6 +18,7 @@ import types # base class for RelCopyContainer +from OFS.ObjectManager import checkValidId from OFS.CopySupport import CopyContainer from Acquisition import aq_base @@ -34,7 +35,7 @@ def manage_renameObject(self, id, new_id, REQUEST=None): """Rename a particular sub-object""" - try: self._checkId(new_id) + try: checkValidId(self, new_id) except: raise CopyError, MessageDialog( title='Invalid Id', message=sys.exc_info()[1], Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/RelationshipBase.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/RelationshipBase.py 2007-03-08 16:20:13 UTC (rev 4235) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/RelationshipBase.py 2007-03-08 16:25:45 UTC (rev 4236) @@ -37,7 +37,11 @@ """Return the contents of this relation.""" raise NotImplementedError - + + def getId(self): + return self.id + + def hasobject(self, obj): """Does this relationship relate to obj.""" raise NotImplementedError Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyContRelationship.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyContRelationship.py 2007-03-08 16:20:13 UTC (rev 4235) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyContRelationship.py 2007-03-08 16:25:45 UTC (rev 4236) @@ -15,6 +15,7 @@ from Globals import InitializeClass from AccessControl import ClassSecurityInfo from Acquisition import aq_base +from OFS.ObjectManager import checkValidId from BTrees.OOBTree import OOBTree @@ -47,7 +48,7 @@ def __init__(self, id): """set our instance values""" self.id = id - self._objects = OOBTree() + self._objects = {} def __call__(self): @@ -87,20 +88,57 @@ """ObjectManager interface to add contained object.""" object.__primary_parent__ = aq_base(self) self.addRelation(object) + object.manage_afterAdd(object, self) return object.getId() + def manage_afterAdd(self, item, container): + """ + Copied code from ObjectManager + """ + for object in self.objectValues(): + try: s=object._p_changed + except: s=0 + if hasattr(aq_base(object), 'manage_afterAdd'): + object.manage_afterAdd(item, container) + if s is None: object._p_deactivate() + + + def manage_afterClone(self, item): + """ + Copied code from ObjectManager + """ + for object in self.objectValues(): + try: s=object._p_changed + except: s=0 + if hasattr(aq_base(object), 'manage_afterClone'): + object.manage_afterClone(item) + if s is None: object._p_deactivate() + + def manage_beforeDelete(self, item, container): """ - there are 4 possible states for _operation during beforeDelete - -1 = object being deleted remove relation - 0 = copy, 1 = move, 2 = rename - ToManyCont will propagate beforeDelete because its a container + Copied code from ObjectManager """ - if getattr(item, "_operation", -1) < 1: - self._remoteRemove() - ToManyRelationshipBase.manage_beforeDelete(self, item, container) - + for object in self.objectValues(): + try: s=object._p_changed + except: s=0 + try: + if hasattr(aq_base(object), 'manage_beforeDelete'): + object.manage_beforeDelete(item, container) + except BeforeDeleteException, ob: + raise + except ConflictError: + raise + except: + LOG('Zope',ERROR,'manage_beforeDelete() threw', + error=sys.exc_info()) + # In debug mode when non-Manager, let exceptions propagate. + if getConfiguration().debug_mode: + if not getSecurityManager().getUser().has_role('Manager'): + raise + if s is None: object._p_deactivate() + def _add(self,obj): """add an object to one side of a ToManyContRelationship. @@ -108,13 +146,11 @@ id = obj.id if self._objects.has_key(id): raise RelationshipExistsError - #del self._objects[id] - v=self._checkId(id) + v=checkValidId(self, id) if v is not None: id=v self._objects[id] = aq_base(obj) obj = aq_base(obj).__of__(self) - self._count=len(self._objects) - self._p_changed = 1 + self.__primary_parent__._p_changed = True def _remove(self, obj=None): @@ -132,8 +168,7 @@ del self._objects[id] else: self._objects = OOBTree() - self._count=len(self._objects) - self._p_changed = 1 + self.__primary_parent__._p_changed = True def _remoteRemove(self, obj=None): @@ -243,9 +278,10 @@ def checkRelation(self, repair=False): """Check to make sure that relationship bidirectionality is ok. """ - if repair and len(self._objects) != self._count: - log.warn("resetting count on %s", self.getPrimaryId()) - self._resetCount() + pass + #if repair and len(self._objects) != self._count: + # log.warn("resetting count on %s", self.getPrimaryId()) + # self._resetCount() InitializeClass(ToManyContRelationship) Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationship.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationship.py 2007-03-08 16:20:13 UTC (rev 4235) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationship.py 2007-03-08 16:25:45 UTC (rev 4236) @@ -90,8 +90,7 @@ """add an object to one side of this toMany relationship""" if obj in self._objects: raise RelationshipExistsError self._objects.append(aq_base(obj)) - self._count=len(self._objects) - self._p_changed = 1 + self.__primary_parent__._p_changed = True def _remove(self, obj=None): @@ -105,8 +104,7 @@ (obj.id, self.id)) else: self._objects = [] - self._count=len(self._objects) - self._p_changed = 1 + self.__primary_parent__._p_changed = True def _remoteRemove(self, obj=None): @@ -258,7 +256,7 @@ if repair: log.warn("removing rel to:%s", obj.getPrimaryId()) self._objects.remove(obj) - self._p_changed = 1 + self.__primary_parent__._p_changed = True # find duplicate objects keycount = {} @@ -282,10 +280,5 @@ except KeyError: log.critical("obj %s not found in database", key) - # Fix bad count cache - if repair and len(self._objects) != self._count: - log.warn("resetting count on %s", self.getPrimaryId()) - self._resetCount() - InitializeClass(ToManyRelationship) Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationshipBase.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationshipBase.py 2007-03-08 16:20:13 UTC (rev 4235) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/ToManyRelationshipBase.py 2007-03-08 16:25:45 UTC (rev 4236) @@ -10,8 +10,11 @@ __version__ = "$Revision: 1.48 $"[11:-2] # Base classes for ToManyRelationshipBase -from PrimaryPathObjectManager import PrimaryPathObjectManager +#from PrimaryPathObjectManager import PrimaryPathObjectManager from RelationshipBase import RelationshipBase +from RelCopySupport import RelCopyContainer +from OFS.Traversable import Traversable +from Acquisition import Implicit from Globals import DTMLFile from Acquisition import aq_base, aq_parent @@ -21,7 +24,12 @@ from Products.ZenRelations.Exceptions import zenmarker -class ToManyRelationshipBase(PrimaryPathObjectManager, RelationshipBase): +class ToManyRelationshipBase( + RelCopyContainer, + Traversable, + Implicit, + RelationshipBase + ): """ Abstract base class for all ToMany relationships. """ @@ -32,19 +40,13 @@ _operation = -1 # if a Relationship's are only deleted - _count = 0 + #_count = 0 def countObjects(self): """Return the number of objects in this relationship""" - return self._count + return len(self._objects) - def _resetCount(self): - """Reset the count of the total objects in this relation. - """ - self._count = len(self._objects) - - def findObjectsById(self, partid): """Return a list of objects by running find on their id""" objects = [] @@ -58,6 +60,7 @@ """Emulate ObjectManager deletetion.""" obj = self._getOb(id) self.removeRelation(obj) + obj.__primary_parent__ = None def _setOb(self, id, obj): Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/ToOneRelationship.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/ToOneRelationship.py 2007-03-08 16:20:13 UTC (rev 4235) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/ToOneRelationship.py 2007-03-08 16:25:45 UTC (rev 4236) @@ -21,7 +21,6 @@ # Base classes for ToOneRelationship from RelationshipBase import RelationshipBase -from OFS.SimpleItem import SimpleItem from Globals import InitializeClass from Globals import DTMLFile @@ -43,7 +42,7 @@ addToOneRelationship = DTMLFile('dtml/addToOneRelationship',globals()) -class ToOneRelationship(RelationshipBase, SimpleItem): +class ToOneRelationship(RelationshipBase): """ToOneRelationship represents a to one Relationship on a RelationshipManager""" @@ -73,12 +72,14 @@ if obj == self.obj: raise RelationshipExistsError self._remoteRemove() self.obj = aq_base(obj) + self.__primary_parent__._p_changed = True def _remove(self,obj=None): """remove the to one side of a relationship""" if obj == None or obj == self.obj: self.obj = None + self.__primary_parent__._p_changed = True else: raise ObjectNotFound @@ -114,6 +115,14 @@ return rel + def manage_afterAdd(self, item, container): + """Don't do anything here because we have on containment""" + pass + + def manage_afterClone(self, item): + """Don't do anything here because we have on containment""" + pass + def manage_beforeDelete(self, item, container): """ There are 4 possible states during when beforeDelete is called. Modified: sandboxen/edahl/zenrelrefactor/ZenRelations/tests/dataImportExport.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenRelations/tests/dataImportExport.py 2007-03-08 16:20:13 UTC (rev 4235) +++ sandboxen/edahl/zenrelrefactor/ZenRelations/tests/dataImportExport.py 2007-03-08 16:25:45 UTC (rev 4236) @@ -6,7 +6,7 @@ objwithprops = \ """<object id='dev' module='Products.ZenRelations.tests.TestSchema' class='Device'> -<property setter='setPingStatus' type='int' id='pingStatus' mode='w' > +<property setter="setPingStatus" type="int" id="pingStatus" mode="w" > 0 </property> </object> @@ -14,7 +14,7 @@ objwithtoone = \ """<object id='dev' module='Products.ZenRelations.tests.TestSchema' class='Device'> -<property setter='setPingStatus' type='int' id='pingStatus' mode='w' > +<property setter="setPingStatus" type="int" id="pingStatus" mode="w" > 0 </property> <toone id='location' objid='loc'/> @@ -31,7 +31,7 @@ objwithtomanycont = \ """<object id='dev' module='Products.ZenRelations.tests.TestSchema' class='Device'> -<property setter='setPingStatus' type='int' id='pingStatus' mode='w' > +<property setter="setPingStatus" type="int" id="pingStatus" mode="w" > 0 </property> <tomanycont id='interfaces'> |
From: <sv...@ze...> - 2007-03-08 16:20:43
|
Author: edahl Date: 2007-03-08 10:20:13 -0600 (Thu, 08 Mar 2007) New Revision: 4235 Modified: sandboxen/edahl/zenrelrefactor/ZenEvents/DbAccessBase.py Log: * don't open a db connection until requested Modified: sandboxen/edahl/zenrelrefactor/ZenEvents/DbAccessBase.py =================================================================== --- sandboxen/edahl/zenrelrefactor/ZenEvents/DbAccessBase.py 2007-03-08 15:56:07 UTC (rev 4234) +++ sandboxen/edahl/zenrelrefactor/ZenEvents/DbAccessBase.py 2007-03-08 16:20:13 UTC (rev 4235) @@ -6,9 +6,6 @@ _cpool = DbConnectionPool() - def __init__(self): - self.close(self.connect()) # Create and return a connection - def close(self, conn): self._cpool.put(conn) |
From: <sv...@ze...> - 2007-03-08 15:56:07
|
Author: marc Date: 2007-03-08 09:56:07 -0600 (Thu, 08 Mar 2007) New Revision: 4234 Modified: trunk/Products/DataCollector/ApplyDataMap.py trunk/Products/ZenModel/data/events.xml Log: #748 * better logging for ApplyDatMap * new EventClasses in event.xml Modified: trunk/Products/DataCollector/ApplyDataMap.py =================================================================== --- trunk/Products/DataCollector/ApplyDataMap.py 2007-03-08 15:45:09 UTC (rev 4233) +++ trunk/Products/DataCollector/ApplyDataMap.py 2007-03-08 15:56:07 UTC (rev 4234) @@ -118,7 +118,7 @@ changed = self._updateRelationship(tobj, datamap) elif hasattr(datamap, 'modname'): if isinstance(tobj, Lockable): - log.info('%s obj is Lockable' % (tobj and tobj.id or '')) + log.info('%s obj is Lockable, status: %s' % (tobj and tobj.id or '', tobj.lockStatus())) if not tobj.isLockedFromUpdate(): changed = self._updateObject(tobj, datamap) elif (tobj.sendEventOnBlock @@ -156,7 +156,7 @@ if objmap.id in relids: obj = rel._getOb(objmap.id) if isinstance(obj, Lockable): - log.info('%s obj is Lockable' % (obj and obj.id or '')) + log.info('%s obj is Lockable, status: %s' % (obj and obj.id or '', obj.lockStatus())) if not obj.isLockedFromUpdate(): objchange = self._updateObject(obj, objmap) elif (obj.sendEventOnBlock @@ -182,13 +182,13 @@ for id in relids: obj = rel._getOb(id) if isinstance(obj, Lockable): - log.info('%s obj is Lockable' % (obj and obj.id or '')) + log.info('%s obj is Lockable, status: %s' % (obj and obj.id or '', obj.lockStatus())) if not obj.isLockedFromDelete(): self.logChange(device, Change_Remove, "removing object %s from rel %s on device %s" % ( id, rname, device.id)) rel._delObject(id) - elif (obj.sendEventOnBlock() + elif (obj.sendEventOnBlock and (self.datacollector and getattr(self.datacollector, 'generateEvents', False) and getattr(self.datacollector, 'dmd', None))): @@ -275,7 +275,7 @@ "No relation %s found on device %s" % (relname, device.id)) remoteObj = rel._getOb(remoteObj.id) if isinstance(remoteObj, Lockable): - log.info('%s obj is Lockable' % (remoteObj and remoteObj.id or '')) + log.info('%s obj is Lockable, status: %s' % (remoteObj and remoteObj.id or '', remoteObj.lockStatus())) if not remoteObj.isLockedFromUpdate(): self.logChange(device, Change_Add, "adding object %s to relationship %s" % ( Modified: trunk/Products/ZenModel/data/events.xml =================================================================== --- trunk/Products/ZenModel/data/events.xml 2007-03-08 15:45:09 UTC (rev 4233) +++ trunk/Products/ZenModel/data/events.xml 2007-03-08 15:56:07 UTC (rev 4234) @@ -1091,12 +1091,18 @@ history </property> <object id='Add' module='Products.ZenEvents.EventClass' class='EventClass'> +<object id='Blocked' module='Products.ZenEvents.EventClass' class='EventClass'> </object> +</object> <object id='Remove' module='Products.ZenEvents.EventClass' class='EventClass'> +<object id='Blocked' module='Products.ZenEvents.EventClass' class='EventClass'> </object> +</object> <object id='Set' module='Products.ZenEvents.EventClass' class='EventClass'> +<object id='Blocked' module='Products.ZenEvents.EventClass' class='EventClass'> </object> </object> +</object> <object id='Cmd' module='Products.ZenEvents.EventClass' class='EventClass'> <object id='Ok' module='Products.ZenEvents.EventClass' class='EventClass'> </object> |
From: <sv...@ze...> - 2007-03-08 15:45:35
|
Author: chris Date: 2007-03-08 09:45:09 -0600 (Thu, 08 Mar 2007) New Revision: 4233 Modified: trunk/inst/docs/BUILD_Source-Solaris10.txt Log: incorporated rory brown's instructions. he went through it from scratch (something we haven't done yet) and made note of the changes he needed to make Modified: trunk/inst/docs/BUILD_Source-Solaris10.txt =================================================================== --- trunk/inst/docs/BUILD_Source-Solaris10.txt 2007-03-08 15:21:25 UTC (rev 4232) +++ trunk/inst/docs/BUILD_Source-Solaris10.txt 2007-03-08 15:45:09 UTC (rev 4233) @@ -52,7 +52,7 @@ 4.) Install the wget .tar.gz package from www.sunfreeware.com // download it manually - # gzip -d wget-*.gz | tar -xf - + # gzip -dc wget-*.gz | tar -xf - # rm wget-*.gz # cd wget-* # ./configure; make; make install @@ -60,7 +60,7 @@ 5.) Download and install openssl from source # wget ftp://ftp.sunfreeware.com/pub/freeware/SOURCES/openssl-0.9.8d.tar.gz -O openssl.tar.gz - # gzip -d openssl.tar.gz | tar -xf - + # gzip -dc openssl.tar.gz | tar -xf - # rm openssl.tar.gz # cd openssl* # ./Configure solaris64-sparcv9-cc shared @@ -96,13 +96,14 @@ # gzip -d sudo-local.gz # pkgadd -d sudo-local // uncomment the NOPASSWD wheel line in /usr/local/etc/sudoer + # ln -s /usr/local/bin/sudo /usr/bin/sudo 10.) Remove the Sun MYSQL package and download MySQL # pkgrm SUNWmysqlr SUNWmysqlu SUNWmysqlt # wget ftp://ftp.sunfreeware.com/pub/freeware/SOURCES/mysql-5.0.24.tar.gz -O mysql.tar.gz # gzip -dc mysql.tar.gz | tar xf - - # rm mysql*.tar.gz + # rm mysql.tar.gz # cd mysql* @@ -121,10 +122,6 @@ # pkgadd -d mysql-standard-5.0* -13.) Create a symbolic link for sudo - # ln -s /usr/local/bin/sudo /usr/bin/sudo - - 14.) Create a zenoss user in the wheel group # groupadd wheel # useradd -g wheel -s /usr/bin/bash zenoss @@ -150,7 +147,7 @@ # bzip2 -dc python.tar.bz2 | tar xf - # rm python.tar.bz2 # cd Python* - # export BASECFLAGS="-xarch=v9" + # BASECFLAGS="-xarch=v9"; export BASECFLAGS # ./configure --without-gcc --enable-shared // comment out if #if LONG_BIT != 8 * SIZEOF_LONG in the following file: Include/pyport.h @@ -167,6 +164,7 @@ 19.) Download the zenoss "installation tarball" + # su - zenoss # wget http://dev.zenoss.com/downloads/zenoss-1.0.2.tar.gz -O zenoss.tar.gz # gzip -dc zenoss.tar.gz | tar xf - # rm zenoss.tar.gz |
From: <sv...@ze...> - 2007-03-08 15:21:27
|
Author: marc Date: 2007-03-08 09:21:25 -0600 (Thu, 08 Mar 2007) New Revision: 4232 Modified: trunk/Products/DataCollector/ApplyDataMap.py Log: #748 * Updated ApplyDataMap.py to use logChange when blocked Modified: trunk/Products/DataCollector/ApplyDataMap.py =================================================================== --- trunk/Products/DataCollector/ApplyDataMap.py 2007-03-08 12:49:26 UTC (rev 4231) +++ trunk/Products/DataCollector/ApplyDataMap.py 2007-03-08 15:21:25 UTC (rev 4232) @@ -44,7 +44,7 @@ and getattr(self.datacollector, 'dmd', None)): eventDict = { 'eventClass': eventClass, - 'device': device.id, + 'device': device.device().id, 'component': component and component.id or '', 'summary': msg, 'severity': Event.Info, @@ -118,22 +118,14 @@ changed = self._updateRelationship(tobj, datamap) elif hasattr(datamap, 'modname'): if isinstance(tobj, Lockable): + log.info('%s obj is Lockable' % (tobj and tobj.id or '')) if not tobj.isLockedFromUpdate(): changed = self._updateObject(tobj, datamap) elif (tobj.sendEventOnBlock and (self.datacollector and getattr(self.datacollector, 'generateEvents', False) and getattr(self.datacollector, 'dmd', None))): - - component = tobj and tobj.id or '' - eventDict = { - 'eventClass': Change_Set_Blocked, - 'device': device, - 'component': component, - 'summary': '%s is locked from any updates' % component, - 'severity': Event.Info, - } - self.datacollector.dmd.ZenEventManager.sendEvent(eventDict) + self.logChange(device, Change_Set_Blocked, 'Locked from updates and deletion') else: changed = self._updateObject(tobj, datamap) else: @@ -164,23 +156,15 @@ if objmap.id in relids: obj = rel._getOb(objmap.id) if isinstance(obj, Lockable): + log.info('%s obj is Lockable' % (obj and obj.id or '')) if not obj.isLockedFromUpdate(): objchange = self._updateObject(obj, objmap) elif (obj.sendEventOnBlock and (self.datacollector and getattr(self.datacollector, 'generateEvents', False) and getattr(self.datacollector, 'dmd', None))): - - component = obj and obj.id or '' - eventDict = { - 'eventClass': Change_Set_Blocked, - 'device': device, - 'component': component, - 'summary': '%s is locked from any updates' % component, - 'severity': Event.Info, - } - self.datacollector.dmd.ZenEventManager.sendEvent(eventDict) - else: + self.logChange(device, Change_Set_Blocked, 'Locked from updates and deletion') + else: objchange = self._updateObject(obj, objmap) if not changed: changed = objchange relids.remove(objmap.id) @@ -196,28 +180,19 @@ else: log.warn("ignoring objmap no id found") for id in relids: - obj = rel._getOb(id) + obj = rel._getOb(id) if isinstance(obj, Lockable): + log.info('%s obj is Lockable' % (obj and obj.id or '')) if not obj.isLockedFromDelete(): self.logChange(device, Change_Remove, "removing object %s from rel %s on device %s" % ( id, rname, device.id)) rel._delObject(id) - elif (obj.isLockedFromDelete() + elif (obj.sendEventOnBlock() and (self.datacollector and getattr(self.datacollector, 'generateEvents', False) and getattr(self.datacollector, 'dmd', None))): - - component = obj and obj.id or '' - eventDict = { - 'eventClass': Change_Remove_Blocked, - 'device': device, - 'component': component, - 'summary': '%s is locked from deletions' % component, - 'severity': Event.Info, - } - self.datacollector.dmd.ZenEventManager.sendEvent(eventDict) - + self.logChange(device, Change_Remove_Blocked, 'Locked from deletion') if relids: changed=True return changed @@ -300,6 +275,7 @@ "No relation %s found on device %s" % (relname, device.id)) remoteObj = rel._getOb(remoteObj.id) if isinstance(remoteObj, Lockable): + log.info('%s obj is Lockable' % (remoteObj and remoteObj.id or '')) if not remoteObj.isLockedFromUpdate(): self.logChange(device, Change_Add, "adding object %s to relationship %s" % ( @@ -309,16 +285,7 @@ and (self.datacollector and getattr(self.datacollector, 'generateEvents', False) and getattr(self.datacollector, 'dmd', None))): - - component = remoteObj and remoteObj.id or '' - eventDict = { - 'eventClass': Change_Set_Blocked, - 'device': device, - 'component': component, - 'summary': '%s is locked from any updates' % component, - 'severity': Event.Info, - } - self.datacollector.dmd.ZenEventManager.sendEvent(eventDict) + self.logChange(device, Change_Set_Blocked, 'Locked from deletion') else: self.logChange(device, Change_Add, "adding object %s to relationship %s" % ( |
From: <sv...@ze...> - 2007-03-08 12:49:27
|
Author: edahl Date: 2007-03-08 06:49:26 -0600 (Thu, 08 Mar 2007) New Revision: 4231 Added: sandboxen/edahl/zenrelrefactor/ Log: * branch for new zenrel using big pickles Copied: sandboxen/edahl/zenrelrefactor (from rev 4230, trunk/Products) |
From: <sv...@ze...> - 2007-03-08 00:56:43
|
Author: ahajda Date: 2007-03-07 18:56:42 -0600 (Wed, 07 Mar 2007) New Revision: 4230 Modified: trunk/wmi/Samba/source/lib/com/dcom/dcom.h trunk/wmi/Samba/source/pidl/lib/Parse/Pidl/Samba4/COM/Proxy.pm Log: Fixed compile errors Modified: trunk/wmi/Samba/source/lib/com/dcom/dcom.h =================================================================== --- trunk/wmi/Samba/source/lib/com/dcom/dcom.h 2007-03-08 00:24:30 UTC (rev 4229) +++ trunk/wmi/Samba/source/lib/com/dcom/dcom.h 2007-03-08 00:56:42 UTC (rev 4230) @@ -24,6 +24,7 @@ struct cli_credentials; struct dcerpc_pipe; struct IRemUnknown; +struct rpc_request; #include "lib/com/com.h" #include "librpc/gen_ndr/orpc.h" Modified: trunk/wmi/Samba/source/pidl/lib/Parse/Pidl/Samba4/COM/Proxy.pm =================================================================== --- trunk/wmi/Samba/source/pidl/lib/Parse/Pidl/Samba4/COM/Proxy.pm 2007-03-08 00:24:30 UTC (rev 4229) +++ trunk/wmi/Samba/source/pidl/lib/Parse/Pidl/Samba4/COM/Proxy.pm 2007-03-08 00:56:42 UTC (rev 4230) @@ -90,10 +90,14 @@ my $uname = uc $name; my $args_in = 0; my $args_out = 0; + my $if_in = 0; + my $if_out = 0; foreach my $a (@{$fn->{ELEMENTS}}) { $args_in++ if has_property($a, "in"); $args_out++ if has_property($a, "out"); + $if_in++ if (Parse::Pidl::Typelist::typeIs($a->{TYPE}, "INTERFACE") && has_property($a, "in")); + $if_out++ if (Parse::Pidl::Typelist::typeIs($a->{TYPE}, "INTERFACE") && has_property($a, "out")); } $args_out++ if $fn->{RETURN_TYPE} ne "void"; @@ -125,8 +129,7 @@ struct composite_context *c, *c_pipe; struct dcom_proxy_async_call_state *s; struct ${name} *r; - NTSTATUS status; - +" . ($if_in > 0 ? "\tNTSTATUS status;\n" : "" ) . " c = composite_create(mem_ctx, d->ctx->event_ctx); if (c == NULL) return NULL; @@ -267,14 +270,15 @@ { struct $interface->{NAME}_${name}_out *out; NTSTATUS status; -" . (($fn->{RETURN_TYPE} ne "void") ? "\t" . mapType($fn->{RETURN_TYPE}) . " result;" : "") . " - +" . (($fn->{RETURN_TYPE} ne "void") ? "\t" . mapType($fn->{RETURN_TYPE}) . " result;\n" : "") . " status = composite_wait(c); if (!NT_STATUS_IS_OK(status)) { talloc_free(c); return"; if ($fn->{RETURN_TYPE} eq "WERROR") { $res.=" ntstatus_to_werror(status)"; + } elsif($fn->{RETURN_TYPE} eq "uint32") { + $res.=" 0"; } $res .= "; } @@ -290,25 +294,28 @@ } $res .= " talloc_free(c); - return result; +" . (($fn->{RETURN_TYPE} ne "void") ? "\treturn result;\n" : "") . " } "; #### * sync ################################################## $res.=" -static " . mapType($fn->{RETURN_TYPE}) . " dcom_proxy_$interface->{NAME}_${name}(struct IWbemServices *d, TALLOC_CTX *mem_ctx" . Parse::Pidl::Samba4::COM::Header::GetArgumentProtoList($fn) . ") +static " . mapType($fn->{RETURN_TYPE}) . " dcom_proxy_$interface->{NAME}_${name}(struct $interface->{NAME} *d, TALLOC_CTX *mem_ctx" . Parse::Pidl::Samba4::COM::Header::GetArgumentProtoList($fn) . ") { struct composite_context *c; c = dcom_proxy_$interface->{NAME}_${name}_send(d, mem_ctx" . Parse::Pidl::Samba4::COM::Header::GetArgumentList($fn, "in") . "); if (c == NULL) return"; if ($fn->{RETURN_TYPE} eq "WERROR") { - $res.=" WERR_NOMEM;"; + $res.=" WERR_NOMEM"; + } elsif($fn->{RETURN_TYPE} eq "uint32") { + $res.=" 0"; } - $res.=" + $res.="; return dcom_proxy_$interface->{NAME}_${name}_recv(c" . Parse::Pidl::Samba4::COM::Header::GetArgumentList($fn, "out") . "); -}"; +} +"; } |
From: <sv...@ze...> - 2007-03-08 00:25:02
|
Author: ahajda Date: 2007-03-07 18:24:30 -0600 (Wed, 07 Mar 2007) New Revision: 4229 Modified: trunk/wmi/Samba/source/lib/com/dcom/dcom.h trunk/wmi/Samba/source/lib/com/dcom/main.c trunk/wmi/Samba/source/pidl/lib/Parse/Pidl/Samba4/COM/Header.pm trunk/wmi/Samba/source/pidl/lib/Parse/Pidl/Samba4/COM/Proxy.pm Log: pidl generates now async functions *_send, *_recv and sync wrappers. Removed bugs causing hanging of apps(I hope). Modified: trunk/wmi/Samba/source/lib/com/dcom/dcom.h =================================================================== --- trunk/wmi/Samba/source/lib/com/dcom/dcom.h 2007-03-07 20:56:08 UTC (rev 4228) +++ trunk/wmi/Samba/source/lib/com/dcom/dcom.h 2007-03-08 00:24:30 UTC (rev 4229) @@ -48,6 +48,15 @@ } *object_exporters; }; +struct dcom_proxy_async_call_state { + struct IUnknown *d; + const struct dcerpc_interface_table *table; + uint32_t opnum; + void (*continuation)(struct rpc_request *); + TALLOC_CTX *mem_ctx; + void *r; +}; + #define WERR_NDR_CHECK(call) do { NTSTATUS _status; \ _status = call; \ if (!NT_STATUS_IS_OK(_status)) \ Modified: trunk/wmi/Samba/source/lib/com/dcom/main.c =================================================================== --- trunk/wmi/Samba/source/lib/com/dcom/main.c 2007-03-07 20:56:08 UTC (rev 4228) +++ trunk/wmi/Samba/source/lib/com/dcom/main.c 2007-03-08 00:24:30 UTC (rev 4229) @@ -29,6 +29,7 @@ #include "librpc/rpc/dcerpc_table.h" #include "lib/util/dlinklist.h" #include "auth/credentials/credentials.h" +#include "libcli/composite/composite.h" #define DCOM_NEGOTIATED_PROTOCOLS { EPM_PROTOCOL_TCP, EPM_PROTOCOL_SMB, EPM_PROTOCOL_NCALRPC } @@ -510,3 +511,48 @@ { return getpid(); } + +/* FIXME:Fake async dcom_get_pipe_* */ +struct composite_context *dcom_get_pipe_send(struct IUnknown *d, TALLOC_CTX *mem_ctx) +{ + struct composite_context *c; + + c = composite_create(0, d->ctx->event_ctx); + if (c == NULL) return NULL; + c->private_data = d; + /* composite_done(c); bugged - callback is triggered twice by composite_continue and composite_done */ + c->state = COMPOSITE_STATE_DONE; /* this is workaround */ + + return c; +} + +NTSTATUS dcom_get_pipe_recv(struct composite_context *c, struct dcerpc_pipe **pp) +{ + NTSTATUS status; + + status = dcom_get_pipe((struct IUnknown *)c->private_data, pp); + talloc_free(c); + + return status; +} + +void dcom_proxy_async_call_recv_pipe_send_rpc(struct composite_context *c_pipe) +{ + struct composite_context *c; + struct dcom_proxy_async_call_state *s; + struct dcerpc_pipe *p; + struct rpc_request *req; + NTSTATUS status; + + c = c_pipe->async.private_data; + s = talloc_get_type(c->private_data, struct dcom_proxy_async_call_state); + + status = dcom_get_pipe_recv(c_pipe, &p); + if (!NT_STATUS_IS_OK(status)) { + composite_error(c, status); + return; + } + + req = dcerpc_ndr_request_send(p, &s->d->obj.u_objref.u_standard.std.ipid, s->table, s->opnum, s->mem_ctx, s->r); + composite_continue_rpc(c, req, s->continuation, c); +} Modified: trunk/wmi/Samba/source/pidl/lib/Parse/Pidl/Samba4/COM/Header.pm =================================================================== --- trunk/wmi/Samba/source/pidl/lib/Parse/Pidl/Samba4/COM/Header.pm 2007-03-07 20:56:08 UTC (rev 4228) +++ trunk/wmi/Samba/source/pidl/lib/Parse/Pidl/Samba4/COM/Header.pm 2007-03-08 00:24:30 UTC (rev 4229) @@ -21,40 +21,50 @@ } } -sub GetArgumentProtoList($) +sub GetArgumentProto($) { - my $f = shift; - my $res = ""; + my $a = shift; + my $res = HeaderType($a) . " "; - foreach my $a (@{$f->{ELEMENTS}}) { + my $l = $a->{POINTERS}; + $l-- if (Parse::Pidl::Typelist::scalar_is_reference($a->{TYPE})); + foreach my $i (1..$l) { + $res .= "*"; + } - $res .= ", " . HeaderType($a) . " "; + if (defined $a->{ARRAY_LEN}[0] && !is_constant($a->{ARRAY_LEN}[0]) && + !$a->{POINTERS}) { + $res .= "*"; + } + $res .= $a->{NAME}; + if (defined $a->{ARRAY_LEN}[0] && is_constant($a->{ARRAY_LEN}[0])) { + $res .= "[$a->{ARRAY_LEN}[0]]"; + } + return $res; +} - my $l = $a->{POINTERS}; - $l-- if (Parse::Pidl::Typelist::scalar_is_reference($a->{TYPE})); - foreach my $i (1..$l) { - $res .= "*"; - } +sub GetArgumentProtoList +{ + my ($f,$filter) = @_; + my $res = ""; - if (defined $a->{ARRAY_LEN}[0] && !is_constant($a->{ARRAY_LEN}[0]) && - !$a->{POINTERS}) { - $res .= "*"; - } - $res .= $a->{NAME}; - if (defined $a->{ARRAY_LEN}[0] && is_constant($a->{ARRAY_LEN}[0])) { - $res .= "[$a->{ARRAY_LEN}[0]]"; - } + foreach my $a (@{$f->{ELEMENTS}}) { + next if defined($filter) && !has_property($a, $filter); + $res .= ", " . GetArgumentProto($a); } return $res; } -sub GetArgumentList($) +sub GetArgumentList { - my $f = shift; + my ($f,$filter) = @_; my $res = ""; - foreach (@{$f->{ELEMENTS}}) { $res .= ", $_->{NAME}"; } + foreach (@{$f->{ELEMENTS}}) { + next if defined($filter) && !has_property($_, $filter); + $res .= ", $_->{NAME}"; + } return $res; } @@ -72,7 +82,11 @@ my $data = $interface->{DATA}; foreach my $d (@{$data}) { - $res .= "\t" . mapType($d->{RETURN_TYPE}) . " (*$d->{NAME}) (struct $interface->{NAME} *d, TALLOC_CTX *mem_ctx" . GetArgumentProtoList($d) . ");\\\n" if ($d->{TYPE} eq "FUNCTION"); + if ($d->{TYPE} eq "FUNCTION") { + $res .= "\t" . mapType($d->{RETURN_TYPE}) . " (*$d->{NAME}) (struct $interface->{NAME} *d, TALLOC_CTX *mem_ctx" . GetArgumentProtoList($d) . ");\\\n"; + $res .= "\tstruct composite_context *(*$d->{NAME}_send) (struct $interface->{NAME} *d, TALLOC_CTX *mem_ctx" . GetArgumentProtoList($d, "in") . ");\\\n"; + $res .= "\t" . mapType($d->{RETURN_TYPE}) . " (*$d->{NAME}_recv) (struct composite_context *c" . GetArgumentProtoList($d, "out") . ");\\\n"; + } } $res .= "\n"; $res .= "struct $interface->{NAME}_vtable {\n"; @@ -108,10 +122,14 @@ my $defname = ($d->{NAME} =~ /^$if->{NAME}_(.*)$/) ? $1 : $d->{NAME}; $res .= "#define $if->{NAME}_${defname}(interface, mem_ctx" . GetArgumentList($d) . ") "; - $res .= "((interface)->vtable->$d->{NAME}(interface, mem_ctx" . GetArgumentList($d) . "))"; - $res .="\n"; + $res .= "#define $if->{NAME}_${defname}_send(interface, mem_ctx" . GetArgumentList($d, "in") . ") "; + $res .= "((interface)->vtable->$d->{NAME}_send(interface, mem_ctx" . GetArgumentList($d, "in") . "))"; + $res .="\n"; + $res .= "#define $if->{NAME}_${defname}_recv(c" . GetArgumentList($d, "out") . ") "; + $res .= "((interface)->vtable->$d->{NAME}_recv(c" . GetArgumentList($d, "out") . "))"; + $res .="\n"; } $res .= "\nNTSTATUS dcom_proxy_$if->{NAME}_init(void);\n"; Modified: trunk/wmi/Samba/source/pidl/lib/Parse/Pidl/Samba4/COM/Proxy.pm =================================================================== --- trunk/wmi/Samba/source/pidl/lib/Parse/Pidl/Samba4/COM/Proxy.pm 2007-03-07 20:56:08 UTC (rev 4228) +++ trunk/wmi/Samba/source/pidl/lib/Parse/Pidl/Samba4/COM/Proxy.pm 2007-03-08 00:24:30 UTC (rev 4229) @@ -88,100 +88,66 @@ my $fn = shift; my $name = $fn->{NAME}; my $uname = uc $name; + my $args_in = 0; + my $args_out = 0; - ##### *_state struct ######################################### - $res.=" -struct dcom_proxy_$interface->{NAME}_${name}_state { - struct $interface->{NAME} *d; - struct ORPCTHAT that; - struct $name r; -"; foreach my $a (@{$fn->{ELEMENTS}}) { - next unless (has_property($a, "out")); - if (Parse::Pidl::Typelist::typeIs($a->{TYPE}, "INTERFACE")) { -# if (!has_property($a, "in")) { - $res.="\tstruct $a->{TYPE} " . "*"x$a->{POINTERS} ."$a->{NAME};\n" -# } - } + $args_in++ if has_property($a, "in"); + $args_out++ if has_property($a, "out"); } - $res.="};\n"; - #### *_continue ############################################## + $args_out++ if $fn->{RETURN_TYPE} ne "void"; + + #### declarations ############################################ $res.=" -static void dcom_proxy_$interface->{NAME}_${name}_continue(struct rpc_request *req) -{ - struct composite_context *c; - struct dcom_proxy_$interface->{NAME}_${name}_state *s; - NTSTATUS status; - uint32_t flags; - - c = talloc_get_type(req->async.private, struct composite_context); - s = talloc_get_type(c->private_data, struct dcom_proxy_$interface->{NAME}_${name}_state); - - flags = req->p->conn->flags; - status = dcerpc_ndr_request_recv(req); - if (!NT_STATUS_IS_OK(status)) { - composite_error(c, status); - return; - } - - if (flags & DCERPC_DEBUG_PRINT_OUT) { - NDR_PRINT_OUT_DEBUG($name, &s->r); - } - +static void dcom_proxy_$interface->{NAME}_${name}_recv_rpc(struct rpc_request *req); "; - foreach $a (@{$fn->{ELEMENTS}}) { - next unless (has_property($a, "out")); - - if (Parse::Pidl::Typelist::typeIs($a->{TYPE}, "INTERFACE")) { - $res .= -" if (s->r.out.$a->{NAME} && *s->r.out.$a->{NAME}) { - status = dcom_IUnknown_from_OBJREF(s->d->ctx, (struct IUnknown **)s->$a->{NAME}, &(**s->r.out.$a->{NAME}).obj); - if (*s->r.out.$a->{NAME}) talloc_free(*s->r.out.$a->{NAME}); - talloc_free(s->r.out.$a->{NAME}); - } + ##### *_out struct ########################################### + if ($args_out > 0) { + $res.=" +struct $interface->{NAME}_${name}_out { "; + foreach my $a (@{$fn->{ELEMENTS}}) { + next unless (has_property($a, "out")); + my $decl = Parse::Pidl::Samba4::COM::Header::GetArgumentProto($a); + $decl =~ s/ \*/ /; + $res.= "\t" . $decl . ";\n"; } + if ($fn->{RETURN_TYPE} ne "void") { + $res.= "\t" . mapType($fn->{RETURN_TYPE}) . " result;\n"; + } + $res.="};\n"; } - $res.=" - if (!NT_STATUS_IS_OK(status)) { - composite_error(c, status); - return; - } - composite_done(c); -} -"; - #### *_async ################################################# + #### *_send ################################################## $res.=" -static struct composite_context *dcom_proxy_$interface->{NAME}_${name}_async(struct $interface->{NAME} *d, TALLOC_CTX *mem_ctx" . Parse::Pidl::Samba4::COM::Header::GetArgumentProtoList($fn) . ") +static struct composite_context *dcom_proxy_$interface->{NAME}_${name}_send(struct $interface->{NAME} *d, TALLOC_CTX *mem_ctx" . Parse::Pidl::Samba4::COM::Header::GetArgumentProtoList($fn, "in") . ") { - struct composite_context *c; - struct dcom_proxy_$interface->{NAME}_${name}_state *s; - struct dcerpc_pipe *p; - struct rpc_request *req; + struct composite_context *c, *c_pipe; + struct dcom_proxy_async_call_state *s; + struct ${name} *r; NTSTATUS status; c = composite_create(mem_ctx, d->ctx->event_ctx); if (c == NULL) return NULL; - s = talloc_zero(c, struct dcom_proxy_$interface->{NAME}_${name}_state); + s = talloc_zero(c, struct dcom_proxy_async_call_state); if (composite_nomem(s, c)) return c; c->private_data = s; - status = dcom_get_pipe((struct IUnknown *)d, &p); - if (!NT_STATUS_IS_OK(status)) { - composite_error(c, status); - return c; - } + r = talloc_zero(s, struct ${name}); + if (composite_nomem(r, c)) return c; - s->d = d; + s->d = (struct IUnknown *)d; + s->table = &dcerpc_table_$interface->{NAME}; + s->opnum = DCERPC_$uname; + s->continuation = dcom_proxy_$interface->{NAME}_${name}_recv_rpc; + s->mem_ctx = mem_ctx; + s->r = r; - s->r.in.ORPCthis.version.MajorVersion = COM_MAJOR_VERSION; - s->r.in.ORPCthis.version.MinorVersion = COM_MINOR_VERSION; - s->r.in.ORPCthis.cid = GUID_random(); - s->r.out.ORPCthat = &s->that; + r->in.ORPCthis.version.MajorVersion = COM_MAJOR_VERSION; + r->in.ORPCthis.version.MinorVersion = COM_MINOR_VERSION; + r->in.ORPCthis.cid = GUID_random(); "; - # Put arguments into r foreach my $a (@{$fn->{ELEMENTS}}) { next unless (has_property($a, "in")); @@ -191,7 +157,7 @@ my $n; foreach $n (0..$a->{POINTERS}-1) { $res .=sprintf(("\t" x $n)."\tif (%s$a->{NAME}) {\n", ("*" x $n)); - $varname = ("*" x $n) . "s->r.in.$a->{NAME}"; + $varname = ("*" x $n) . "r->in.$a->{NAME}"; $res .=sprintf(("\t" x $n)."\t\t$varname = talloc_zero($ctx, struct MInterfacePointer%s);\n", ("*" x ($a->{POINTERS}-$n-1))); $ctx = $varname; } @@ -206,67 +172,146 @@ $res .=("\t" x $n)."}\n"; } } else { - $res .= "\ts->r.in.$a->{NAME} = $a->{NAME};\n"; + $res .= "\tr->in.$a->{NAME} = $a->{NAME};\n"; } } - # Reserve memory for out interfaces FIXME:AVG:memcheck,auto_alloc,arrays + $res .=" + if (DEBUGLVL(9)) { + NDR_PRINT_IN_DEBUG(${name}, r); + } + + c_pipe = dcom_get_pipe_send((struct IUnknown *)d, mem_ctx); + composite_continue(c, c_pipe, dcom_proxy_async_call_recv_pipe_send_rpc, c); + + return c; +} +"; + + #### *_recv_rpc ############################################## + $res.=" +static void dcom_proxy_$interface->{NAME}_${name}_recv_rpc(struct rpc_request *req) +{ + struct composite_context *c; + struct dcom_proxy_async_call_state *s; + struct $interface->{NAME}_${name}_out *out; + struct ${name} *r; + struct ORPCTHAT that; + NTSTATUS status; +"; foreach my $a (@{$fn->{ELEMENTS}}) { next unless (has_property($a, "out")); if (Parse::Pidl::Typelist::typeIs($a->{TYPE}, "INTERFACE")) { - if (has_property($a, "in")) { - $res .= "\ts->r.out.$a->{NAME} = s->r.in.$a->{NAME};\n" - . "\ts->$a->{NAME} = $a->{NAME};\n"; - } else { - $res .= -" s->r.out.$a->{NAME} = talloc_zero(mem_ctx, struct MInterfacePointer *); - *s->r.out.$a->{NAME} = talloc_zero(mem_ctx, struct MInterfacePointer); - (*s->r.out.$a->{NAME})->size = sizeof(struct OBJREF); - s->$a->{NAME} = $a->{NAME}; + $res.="\tstruct MInterfacePointer *mip_$a->{NAME};\n"; + } + } + + $res.=" + c = req->async.private; + s = c->private_data; + r = s->r; + out = talloc_zero(c, struct $interface->{NAME}_${name}_out); + if (composite_nomem(out, c)) return; + c->private_data = out; + + r->out.ORPCthat = &that; "; - } + foreach $a (@{$fn->{ELEMENTS}}) { + next unless (has_property($a, "out")); + + if (Parse::Pidl::Typelist::typeIs($a->{TYPE}, "INTERFACE")) { + $res.="\tr->out.$a->{NAME} = &mip_$a->{NAME};\n"; } else { - $res .= "\ts->r.out.$a->{NAME} = $a->{NAME};\n"; + $res.="\tr->out.$a->{NAME} = &out->$a->{NAME};\n"; } } - $res .=" - if (p->conn->flags & DCERPC_DEBUG_PRINT_IN) { - NDR_PRINT_IN_DEBUG($name, &s->r); + + $res.=" + status = dcerpc_ndr_request_recv(req); + if (!NT_STATUS_IS_OK(status)) { + composite_error(c, status); + return; + } + + if (DEBUGLVL(9)) { + NDR_PRINT_OUT_DEBUG(${name}, r); + } +"; + foreach $a (@{$fn->{ELEMENTS}}) { + next unless (has_property($a, "out")); + + if (Parse::Pidl::Typelist::typeIs($a->{TYPE}, "INTERFACE")) { + $res .= +" if (r->out.$a->{NAME} && *r->out.$a->{NAME}) { + status = dcom_IUnknown_from_OBJREF(s->d->ctx, (struct IUnknown **)&out->$a->{NAME}, &(**r->out.$a->{NAME}).obj); + if (*r->out.$a->{NAME}) talloc_free(*r->out.$a->{NAME}); + } else { + out->$a->{NAME} = NULL; } +"; + } + } - req = dcerpc_ndr_request_send(p, &d->obj.u_objref.u_standard.std.ipid, &dcerpc_table_$interface->{NAME}, DCERPC_$uname, mem_ctx, &s->r); - if (composite_nomem(req, c)) return c; - - req->async.private = c; - req->async.callback = dcom_proxy_$interface->{NAME}_${name}_continue; - return c; + if ($fn->{RETURN_TYPE} ne "void") { + $res.="\tout->result = r->out.result;\n"; + } + $res .=" + talloc_free(s); + composite_done(c); } "; - #### sync ######################################################### + + #### *_recv ################################################## $res.=" -static " . mapType($fn->{RETURN_TYPE}) . " dcom_proxy_$interface->{NAME}_$name(struct $interface->{NAME} *d, TALLOC_CTX *mem_ctx" . Parse::Pidl::Samba4::COM::Header::GetArgumentProtoList($fn) . ") +static " . mapType($fn->{RETURN_TYPE}) . " dcom_proxy_$interface->{NAME}_${name}_recv(struct composite_context *c" . Parse::Pidl::Samba4::COM::Header::GetArgumentProtoList($fn, "out") . ") { - struct composite_context *c; - struct dcom_proxy_$interface->{NAME}_${name}_state *s; + struct $interface->{NAME}_${name}_out *out; NTSTATUS status; +" . (($fn->{RETURN_TYPE} ne "void") ? "\t" . mapType($fn->{RETURN_TYPE}) . " result;" : "") . " - c = dcom_proxy_$interface->{NAME}_${name}_async(d, mem_ctx" . join("", map(", $_->{NAME}", @{$fn->{ELEMENTS}})) . "); - if (c) { - s = talloc_get_type(c->private_data, struct dcom_proxy_$interface->{NAME}_${name}_state); - status = composite_wait(c); + status = composite_wait(c); + if (!NT_STATUS_IS_OK(status)) { + talloc_free(c); + return"; + if ($fn->{RETURN_TYPE} eq "WERROR") { + $res.=" ntstatus_to_werror(status)"; } + $res .= "; + } + out = c->private_data; "; - if ($fn->{RETURN_TYPE} eq "NTSTATUS") { - $res.="\treturn c?status:NT_STATUS_NO_MEMORY;\n"; - } elsif ($fn->{RETURN_TYPE} eq "WERROR") { - $res.="\treturn c? (NT_STATUS_IS_OK(status)?s->r.out.result:ntstatus_to_werror(status)):WERR_NOMEM;\n"; - } elsif ($fn->{RETURN_TYPE} eq "uint32") { - $res.="\t return 0UL;\n"; + foreach $a (@{$fn->{ELEMENTS}}) { + next unless (has_property($a, "out")); + $res.="\t*$a->{NAME} = out->$a->{NAME};\n"; } - $res.="}\n"; + if ($fn->{RETURN_TYPE} ne "void") { + $res.="\tresult = out->result;\n"; + } + $res .= " + talloc_free(c); + return result; } +"; + + #### * sync ################################################## + $res.=" +static " . mapType($fn->{RETURN_TYPE}) . " dcom_proxy_$interface->{NAME}_${name}(struct IWbemServices *d, TALLOC_CTX *mem_ctx" . Parse::Pidl::Samba4::COM::Header::GetArgumentProtoList($fn) . ") +{ + struct composite_context *c; + c = dcom_proxy_$interface->{NAME}_${name}_send(d, mem_ctx" . Parse::Pidl::Samba4::COM::Header::GetArgumentList($fn, "in") . "); + if (c == NULL) return"; + if ($fn->{RETURN_TYPE} eq "WERROR") { + $res.=" WERR_NOMEM;"; + } + $res.=" + + return dcom_proxy_$interface->{NAME}_${name}_recv(c" . Parse::Pidl::Samba4::COM::Header::GetArgumentList($fn, "out") . "); +}"; + +} + ##################################################################### # parse the interface definitions sub ParseInterface($) |
From: <sv...@ze...> - 2007-03-07 20:56:20
|
Author: ian Date: 2007-03-07 14:56:08 -0600 (Wed, 07 Mar 2007) New Revision: 4228 Modified: trunk/Products/ZenModel/skins/zenmodel/deviceLoggingHeader.pt Log: * Fixes the menus and whatnot breaking during a stream logging Modified: trunk/Products/ZenModel/skins/zenmodel/deviceLoggingHeader.pt =================================================================== --- trunk/Products/ZenModel/skins/zenmodel/deviceLoggingHeader.pt 2007-03-07 20:09:45 UTC (rev 4227) +++ trunk/Products/ZenModel/skins/zenmodel/deviceLoggingHeader.pt 2007-03-07 20:56:08 UTC (rev 4228) @@ -3,9 +3,27 @@ <body> <div id="frame"> <div metal:use-macro="here/templates/macros/topPane"/> + <div metal:use-macro="here/templates/macros/infoBar"/> + <div id="paneToggle"></div> + <style tal:condition="python:'Zenoss_Collapsed_Menu' in + here.REQUEST.HTTP_COOKIE"> + #leftPane { display:none;} + #rightPane { margin-left:12px;} + #paneToggle { + background-image: url('paneToggle_bg_collapsed.gif'); + border-right: medium none; + } + #leftPaneToggle{ display:block; + background:transparent url(img/leftpanetoggle_bg.gif) top + left repeat-x; + height: 30px; + width: 30px; + } + #breadCrumbPane{ padding-left: 35px;} + + </style> <div metal:use-macro="here/templates/macros/leftPane"/> <div id="rightPane"/> - <div metal:use-macro="here/templates/macros/breadCrumbPane"/> <div metal:use-macro="here/templates/macros/tabsPane"/> <script type="text/javascript">zenPageInit()</script> <div id="contentPane"> |
From: <sv...@ze...> - 2007-03-07 20:09:50
|
Author: marc Date: 2007-03-07 14:09:45 -0600 (Wed, 07 Mar 2007) New Revision: 4227 Modified: trunk/Products/DataCollector/ApplyDataMap.py Log: #748 * fixed condition when object is not Lockable Modified: trunk/Products/DataCollector/ApplyDataMap.py =================================================================== --- trunk/Products/DataCollector/ApplyDataMap.py 2007-03-07 19:56:35 UTC (rev 4226) +++ trunk/Products/DataCollector/ApplyDataMap.py 2007-03-07 20:09:45 UTC (rev 4227) @@ -134,7 +134,8 @@ 'severity': Event.Info, } self.datacollector.dmd.ZenEventManager.sendEvent(eventDict) - + else: + changed = self._updateObject(tobj, datamap) else: log.warn("plugin returned unknown map skipping") return changed @@ -179,7 +180,8 @@ 'severity': Event.Info, } self.datacollector.dmd.ZenEventManager.sendEvent(eventDict) - + else: + objchange = self._updateObject(obj, objmap) if not changed: changed = objchange relids.remove(objmap.id) else: @@ -317,7 +319,12 @@ 'severity': Event.Info, } self.datacollector.dmd.ZenEventManager.sendEvent(eventDict) - + else: + self.logChange(device, Change_Add, + "adding object %s to relationship %s" % ( + remoteObj.id, relname)) + self._updateObject(remoteObj, objmap) + return True |
From: <sv...@ze...> - 2007-03-07 19:56:51
|
Author: marc Date: 2007-03-07 13:56:35 -0600 (Wed, 07 Mar 2007) New Revision: 4226 Added: trunk/Products/ZenModel/Lockable.py Log: #748 * Added Lockable Added: trunk/Products/ZenModel/Lockable.py |
From: <sv...@ze...> - 2007-03-07 19:51:34
|
Author: marc Date: 2007-03-07 13:51:31 -0600 (Wed, 07 Mar 2007) New Revision: 4225 Modified: trunk/Products/DataCollector/ApplyDataMap.py trunk/Products/ZenEvents/ZenEventClasses.py trunk/Products/ZenModel/Device.py trunk/Products/ZenModel/DeviceComponent.py trunk/Products/ZenModel/migrate/menus.py trunk/Products/ZenModel/skins/zenmodel/deviceStatus.pt Log: #748 * still testing the modeler lock feature * Added Lockable class now used by Device and DeviceComponent Modified: trunk/Products/DataCollector/ApplyDataMap.py =================================================================== --- trunk/Products/DataCollector/ApplyDataMap.py 2007-03-07 19:42:10 UTC (rev 4224) +++ trunk/Products/DataCollector/ApplyDataMap.py 2007-03-07 19:51:31 UTC (rev 4225) @@ -15,7 +15,8 @@ from Products.ZenUtils.Utils import importClass, getObjByPath from Exceptions import * -from Products.ZenEvents.ZenEventClasses import Change_Add,Change_Remove,Change_Set +from Products.ZenEvents.ZenEventClasses import Change_Add,Change_Remove,Change_Set,Change_Add_Blocked,Change_Remove_Blocked,Change_Set_Blocked +from Products.ZenModel.Lockable import Lockable import Products.ZenEvents.Event as Event import logging log = logging.getLogger("zen.ApplyDataMap") @@ -116,7 +117,24 @@ if hasattr(datamap, "relname"): changed = self._updateRelationship(tobj, datamap) elif hasattr(datamap, 'modname'): - changed = self._updateObject(tobj, datamap) + if isinstance(tobj, Lockable): + if not tobj.isLockedFromUpdate(): + changed = self._updateObject(tobj, datamap) + elif (tobj.sendEventOnBlock + and (self.datacollector + and getattr(self.datacollector, 'generateEvents', False) + and getattr(self.datacollector, 'dmd', None))): + + component = tobj and tobj.id or '' + eventDict = { + 'eventClass': Change_Set_Blocked, + 'device': device, + 'component': component, + 'summary': '%s is locked from any updates' % component, + 'severity': Event.Info, + } + self.datacollector.dmd.ZenEventManager.sendEvent(eventDict) + else: log.warn("plugin returned unknown map skipping") return changed @@ -143,8 +161,25 @@ else: seenids[objmap.id] = 1 if objmap.id in relids: - obj = rel._getOb(objmap.id) - objchange = self._updateObject(obj, objmap) + obj = rel._getOb(objmap.id) + if isinstance(obj, Lockable): + if not obj.isLockedFromUpdate(): + objchange = self._updateObject(obj, objmap) + elif (obj.sendEventOnBlock + and (self.datacollector + and getattr(self.datacollector, 'generateEvents', False) + and getattr(self.datacollector, 'dmd', None))): + + component = obj and obj.id or '' + eventDict = { + 'eventClass': Change_Set_Blocked, + 'device': device, + 'component': component, + 'summary': '%s is locked from any updates' % component, + 'severity': Event.Info, + } + self.datacollector.dmd.ZenEventManager.sendEvent(eventDict) + if not changed: changed = objchange relids.remove(objmap.id) else: @@ -159,10 +194,28 @@ else: log.warn("ignoring objmap no id found") for id in relids: - self.logChange(device, Change_Remove, - "removing object %s from rel %s on device %s" % ( - id, rname, device.id)) - rel._delObject(id) + obj = rel._getOb(id) + if isinstance(obj, Lockable): + if not obj.isLockedFromDelete(): + self.logChange(device, Change_Remove, + "removing object %s from rel %s on device %s" % ( + id, rname, device.id)) + rel._delObject(id) + elif (obj.isLockedFromDelete() + and (self.datacollector + and getattr(self.datacollector, 'generateEvents', False) + and getattr(self.datacollector, 'dmd', None))): + + component = obj and obj.id or '' + eventDict = { + 'eventClass': Change_Remove_Blocked, + 'device': device, + 'component': component, + 'summary': '%s is locked from deletions' % component, + 'severity': Event.Info, + } + self.datacollector.dmd.ZenEventManager.sendEvent(eventDict) + if relids: changed=True return changed @@ -244,10 +297,27 @@ raise ObjectCreationError( "No relation %s found on device %s" % (relname, device.id)) remoteObj = rel._getOb(remoteObj.id) - self.logChange(device, Change_Add, - "adding object %s to relationship %s" % ( - remoteObj.id, relname)) - self._updateObject(remoteObj, objmap) + if isinstance(remoteObj, Lockable): + if not remoteObj.isLockedFromUpdate(): + self.logChange(device, Change_Add, + "adding object %s to relationship %s" % ( + remoteObj.id, relname)) + self._updateObject(remoteObj, objmap) + elif (remoteObj.sendEventOnBlock + and (self.datacollector + and getattr(self.datacollector, 'generateEvents', False) + and getattr(self.datacollector, 'dmd', None))): + + component = remoteObj and remoteObj.id or '' + eventDict = { + 'eventClass': Change_Set_Blocked, + 'device': device, + 'component': component, + 'summary': '%s is locked from any updates' % component, + 'severity': Event.Info, + } + self.datacollector.dmd.ZenEventManager.sendEvent(eventDict) + return True Modified: trunk/Products/ZenEvents/ZenEventClasses.py =================================================================== --- trunk/Products/ZenEvents/ZenEventClasses.py 2007-03-07 19:42:10 UTC (rev 4224) +++ trunk/Products/ZenEvents/ZenEventClasses.py 2007-03-07 19:51:31 UTC (rev 4225) @@ -4,6 +4,10 @@ Change = "/Change" Change_Remove = "/Change/Remove" Change_Set = "/Change/Set" +Change_Add_Blocked = "/Change/Add/Blocked" +Change_Blocked = "/Change/Blocked" +Change_Remove_Blocked = "/Change/Remove/Blocked" +Change_Set_Blocked = "/Change/Set/Blocked" Cmd_Fail = "/Cmd/Fail" Cmd_Ok = "/Cmd/Ok" Heartbeat = "/Heartbeat" Modified: trunk/Products/ZenModel/Device.py =================================================================== --- trunk/Products/ZenModel/Device.py 2007-03-07 19:42:10 UTC (rev 4224) +++ trunk/Products/ZenModel/Device.py 2007-03-07 19:51:31 UTC (rev 4225) @@ -51,6 +51,7 @@ from AdministrativeRole import DeviceAdministrativeRole from UserCommand import UserCommand from Commandable import Commandable +from Lockable import Lockable from OperatingSystem import OperatingSystem from DeviceHW import DeviceHW @@ -181,7 +182,7 @@ addDevice = DTMLFile('dtml/addDevice',globals()) -class Device(ManagedEntity, Commandable): +class Device(ManagedEntity, Commandable, Lockable): """ Device is a key class within zenoss. It represents the combination of computer hardware running an operating system. @@ -435,7 +436,7 @@ for o in self.os.getMonitoredComponents(): if o.meta_type != "OSProcess": oids.extend(o.getSnmpOidTargets()) - return (float(self.getLastChange()), self.getSnmpConnInfo(), oids, max) + return (self.getSnmpConnInfo(), oids, max) def getDataSourceCommands(self): Modified: trunk/Products/ZenModel/DeviceComponent.py =================================================================== --- trunk/Products/ZenModel/DeviceComponent.py 2007-03-07 19:42:10 UTC (rev 4224) +++ trunk/Products/ZenModel/DeviceComponent.py 2007-03-07 19:51:31 UTC (rev 4225) @@ -15,9 +15,9 @@ from Globals import InitializeClass from AccessControl import ClassSecurityInfo from Acquisition import aq_base +from Lockable import Lockable - -class DeviceComponent(object): +class DeviceComponent(object, Lockable): """ DeviceComponent is a mix-in class for all components of a device. These include LogicalComponent, Software, and Hardware. Modified: trunk/Products/ZenModel/migrate/menus.py =================================================================== --- trunk/Products/ZenModel/migrate/menus.py 2007-03-07 19:42:10 UTC (rev 4224) +++ trunk/Products/ZenModel/migrate/menus.py 2007-03-07 19:51:31 UTC (rev 4225) @@ -147,6 +147,29 @@ action= 'dialog_addToZenPack', permissions=('View',) ), + ], + 'Lockable':[ + dict( + id= 'unlock', + description='Unlock', + action= 'unlock', + permissions=('Change Device',), + allowed_classes=('Device','DeviceComponent') + ), + dict( + id= 'lockFromDeletion', + description='Lock from Deletion', + action= 'lockFromDeletion', + permissions=('Change Device',), + allowed_classes=('Device','DeviceComponent') + ), + dict( + id= 'lockFromUpdate', + description='Lock from Update/Deletion', + action= 'lockFromUpdate', + permissions=('Change Device',), + allowed_classes=('Device','DeviceComponent') + ), ] }) Modified: trunk/Products/ZenModel/skins/zenmodel/deviceStatus.pt =================================================================== --- trunk/Products/ZenModel/skins/zenmodel/deviceStatus.pt 2007-03-07 19:42:10 UTC (rev 4224) +++ trunk/Products/ZenModel/skins/zenmodel/deviceStatus.pt 2007-03-07 19:51:31 UTC (rev 4225) @@ -2,7 +2,7 @@ <tal:block metal:fill-slot="contentPane"> <table class="zentable" cellpadding="3" cellspacing="1" metal:define-macro="deviceStatusInfo"> - <tr> + <tr tal:define="menu_id string:Lockable"> <th class="tabletitle" colspan=4>Status</th> </tr> <tr> @@ -52,6 +52,18 @@ device priority </td> </tr> + <tr> + <td class="tableheader">Modeler Lock</td> + <td class="tablevalues" + tal:content="python:here.lockStatus()"> + Unlocked + </td> + <td class="tableheader">Lock Warning</td> + <td class="tablevalues" + tal:content="python:here.lockWarning()"> + Do not send event on block + </td> + </tr> </table> <span metal:use-macro="here/templates/macros/contentSeparator"/> |
From: <sv...@ze...> - 2007-03-07 19:42:19
|
Author: ecn Date: 2007-03-07 13:42:10 -0600 (Wed, 07 Mar 2007) New Revision: 4224 Modified: trunk/Products/ZenRRD/zenperfsnmp.py Log: * make the directory, not the filename Modified: trunk/Products/ZenRRD/zenperfsnmp.py =================================================================== --- trunk/Products/ZenRRD/zenperfsnmp.py 2007-03-07 19:11:02 UTC (rev 4223) +++ trunk/Products/ZenRRD/zenperfsnmp.py 2007-03-07 19:42:10 UTC (rev 4224) @@ -67,7 +67,7 @@ return '' def write(fname, data): - makeDirs(os.path.basename(fname)) + makeDirs(os.path.dirname(fname)) fp = open(fname, 'wb') try: fp.write(data) |
From: <sv...@ze...> - 2007-03-07 19:11:08
|
Author: ecn Date: 2007-03-07 13:11:02 -0600 (Wed, 07 Mar 2007) New Revision: 4223 Modified: trunk/Products/ZenRRD/zenperfsnmp.py Log: * cycle the config after you know how long the config cycle should be Modified: trunk/Products/ZenRRD/zenperfsnmp.py =================================================================== --- trunk/Products/ZenRRD/zenperfsnmp.py 2007-03-07 19:01:43 UTC (rev 4222) +++ trunk/Products/ZenRRD/zenperfsnmp.py 2007-03-07 19:11:02 UTC (rev 4223) @@ -266,8 +266,13 @@ 'Periodically ask the Zope server for basic configuration data.' self.syncdb() + + log.info("fetching property items") + yield self.model.callRemote('propertyItems') + self.setPropertyItems(driver.next()) + driveLater(self.configCycleInterval * 60, self.startUpdateConfig) - + log.info("checking for outdated configs") current = [(k, v.lastChange) for k, v in self.proxies.items()] yield self.model.callRemote('getDeviceUpdates', current) @@ -284,15 +289,12 @@ yield self.model.callRemote('getSnmpStatus', self.options.device) self.updateSnmpStatus(driver.next()) - log.info("fetching property items") - yield self.model.callRemote('propertyItems') - self.setPropertyItems(driver.next()) - log.info("fetching default RRDCreateCommand") yield self.model.callRemote('getDefaultRRDCreateCommand') createCommand = driver.next() self.rrd = RRDUtil(createCommand, self.snmpCycleInterval) + def updateDeviceList(self, requested, responses): |
From: <sv...@ze...> - 2007-03-07 19:02:12
|
Author: ecn Date: 2007-03-07 13:01:43 -0600 (Wed, 07 Mar 2007) New Revision: 4222 Modified: trunk/Products/ZenRRD/zenprocess.py Log: * ignore devices that are down Modified: trunk/Products/ZenRRD/zenprocess.py =================================================================== --- trunk/Products/ZenRRD/zenprocess.py 2007-03-07 19:01:17 UTC (rev 4221) +++ trunk/Products/ZenRRD/zenprocess.py 2007-03-07 19:01:43 UTC (rev 4222) @@ -236,9 +236,14 @@ def __init__(self): SnmpDaemon.__init__(self, 'zenprocess') - self.devices = {} + self._devices = {} self.perfScanJob = None + self.downDevices = Set() + def devices(self): + "Return a filtered list of devices" + return dict([(k, v) for k, v in self._devices.items() + if k not in self.downDevices]) def fetchConfig(self): 'Get configuration values from the Zope server' @@ -263,11 +268,11 @@ self.syncdb() yield self.fetchConfig(); n = driver.next() - removed = Set(self.devices.keys()) + removed = Set(self._devices.keys()) for (name, addr, snmpConf), procs in n: community, version, timeout, tries = snmpConf removed.discard(name) - d = self.devices.setdefault(name, Device()) + d = self._devices.setdefault(name, Device()) d.name = name d.address = addr d.community = community @@ -277,7 +282,7 @@ d.updateConfig(procs) d.protocol = self.snmpPort.protocol for r in removed: - del self.devices[r] + del self._devices[r] yield self.model.callRemote('getSnmpStatus', self.options.device) self.updateSnmpStatus(driver.next()) @@ -286,13 +291,12 @@ self.updateProcessStatus(driver.next()) # fetch pids with an SNMP scan - yield self.findPids(self.devices.values()); driver.next() driveLater(self.configCycleInterval * 60, self.start) def updateSnmpStatus(self, updates): for name, count in updates: - d = self.devices.get(name) + d = self._devices.get(name) if d: d.snmpStatus = count @@ -300,7 +304,7 @@ down = {} for device, component, count in status: down[ (device, component) ] = count - for name, device in self.devices.items(): + for name, device in self._devices.items(): for p in device.processes.values(): p.status = down.get( (name, p.originalName), 0) @@ -436,11 +440,23 @@ def periodic(self, unused=None): "Basic SNMP scan loop" reactor.callLater(self.snmpCycleInterval, self.periodic) - d = defer.DeferredList([self.countScan(), self.perfScan()], - consumeErrors=True) - d.addCallback(self.heartbeat) + def doPeriodic(driver): + yield self.zem.callRemote('getDevicePingIssues') + try: + self.downDevices = Set([d[0] for d in driver.next()]) + except Exception, ex: + log.exception(ex) + + yield self.countScan() + driver.next() + yield self.perfScan() + driver.next() + + drive(doPeriodic).addCallback(self.heartbeat) + + def perfScan(self): "Read performance data for non-counted Processes" if self.perfScanJob: @@ -453,13 +469,13 @@ # in M-parallel, for each device # fetch the process status self.perfScanJob = NJobs(MAX_OIDS_PER_REQUEST, - self.fetchDevicePerf, self.devices.values()) + self.fetchDevicePerf, self.devices().values()) return self.perfScanJob.start() def countScan(self): "Read counts for counted Processes" - return self.findPids(self.devices.values()) + return self.findPids(self.devices().values()) def fetchDevicePerf(self, device): @@ -502,7 +518,7 @@ path = 'Devices/%s/os/processes/%s/%s' % (deviceName, pidName, statName) value = self.rrd.save(path, value, rrdType, min=min, max=max) - thresholds = self.devices[deviceName].processes[pidName].thresholds + thresholds = self._devices[deviceName].processes[pidName].thresholds for t in thresholds.get(statName,[]): t.check(deviceName, pidName, statName, value, self.sendThresholdEvent) @@ -510,9 +526,10 @@ def heartbeat(self, *unused): self.perfScanJob = None - pids = sum(map(lambda x: len(x.pids), self.devices.values())) + devices = self.devices() + pids = sum(map(lambda x: len(x.pids), devices.values())) log.debug("Pulled process status for %d devices and %d processes", - len(self.devices), pids) + len(devices), pids) SnmpDaemon.heartbeat(self) |
From: <sv...@ze...> - 2007-03-07 19:01:28
|
Author: ecn Date: 2007-03-07 13:01:17 -0600 (Wed, 07 Mar 2007) New Revision: 4221 Modified: trunk/Products/ZenRRD/RRDDaemon.py Log: * log better messages Modified: trunk/Products/ZenRRD/RRDDaemon.py =================================================================== --- trunk/Products/ZenRRD/RRDDaemon.py 2007-03-07 18:10:36 UTC (rev 4220) +++ trunk/Products/ZenRRD/RRDDaemon.py 2007-03-07 19:01:17 UTC (rev 4221) @@ -274,7 +274,7 @@ error.printTraceback(s) self.log.error('%s: %s', msg, s.getvalue()) else: - self.log.error(error) + self.log.error('%s %s', msg, error) def error(self, error): 'Log an error, including any traceback data for a failure Exception' |