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...> - 2008-04-24 21:26:17
|
Author: jstevens Date: 2008-04-24 17:26:22 -0400 (Thu, 24 Apr 2008) New Revision: 9112 Modified: trunk/Products/ZenUtils/ZenPackCmd.py Log: * specifying path to the correct python when using python in subprocess.popen calls. This fixes the issues EAD was seeing when his python was not the zenoss-provided python * Added an egg-only option to zenpack --install. Modified: trunk/Products/ZenUtils/ZenPackCmd.py =================================================================== --- trunk/Products/ZenUtils/ZenPackCmd.py 2008-04-24 21:24:00 UTC (rev 9111) +++ trunk/Products/ZenUtils/ZenPackCmd.py 2008-04-24 21:26:22 UTC (rev 9112) @@ -256,7 +256,7 @@ # Install the egg if link: - cmd = ('python setup.py develop ' + cmd = ('%s setup.py develop ' % zenPath('bin', 'python') + '--site-dirs=%s ' % zenPackDir + '-d %s' % zenPackDir) p = subprocess.Popen(cmd, @@ -730,7 +730,8 @@ if uninstallEgg: if zp.isDevelopment(): zenPackDir = zenPath('ZenPacks') - cmd = ('python setup.py develop -u ' + cmd = ('%s setup.py develop -u ' + % zenPath('bin', 'python') + '--site-dirs=%s ' % zenPackDir + '-d %s' % zenPackDir) p = subprocess.Popen(cmd, @@ -874,17 +875,29 @@ """ self.connect() - def PrintInstalled(installed): + def PrintInstalled(installed, eggOnly=False): if installed: - print('Installed ZenPack%s: %s' % ( - len(installed) > 1 and 's' or '', - ', '.join([i.id for i in installed]))) + if eggOnly: + names = [i['id'] for i in installed] + what = 'ZenPack egg' + else: + names = [i.id for i in installed] + what = 'ZenPack' + print('Installed %s%s: %s' % ( + what, + len(names) > 1 and 's' or '', + ', '.join(names))) else: print('No ZenPacks installed.') if not getattr(self.dmd, 'ZenPackManager', None): raise ZenPackNeedMigrateException('Your Zenoss database appears' ' to be out of date. Try running zenmigrate to update.') + if self.options.eggOnly and self.options.eggPath: + zpDists = InstallEgg(self.dmd, self.options.eggPath, + link=self.options.link) + PrintInstalled([{'id':d.project_name} for d in zpDists], + eggOnly=True) if self.options.eggPath: installed = InstallEggAndZenPack( self.dmd, self.options.eggPath, @@ -908,6 +921,8 @@ sys.stderr.write(str(e) + '\n') elif self.options.list: self.list() + else: + self.parser.print_help() def buildOptions(self): |
From: <sv...@ze...> - 2008-04-24 21:23:57
|
Author: jstevens Date: 2008-04-24 17:24:00 -0400 (Thu, 24 Apr 2008) New Revision: 9111 Modified: trunk/Products/ZenModel/ZenPackPersistence.py Log: * adding path() method to ZenPackPersistence Modified: trunk/Products/ZenModel/ZenPackPersistence.py =================================================================== --- trunk/Products/ZenModel/ZenPackPersistence.py 2008-04-24 21:19:22 UTC (rev 9110) +++ trunk/Products/ZenModel/ZenPackPersistence.py 2008-04-24 21:24:00 UTC (rev 9111) @@ -91,7 +91,18 @@ """ Return the ZenPack instance that provides this object. """ + # NB: we can probably use self.dmd rather than passing in a context return context.dmd.ZenPackManager.packs._getOb(self.ZENPACKID, None) + + + def path(self, *parts): + """ + Return the path to the installed ZenPack directory or a subdirectory. + Example: zenpack.path('libexec') would return something like + $ZENHOME/ZenPacks/ZenPacks.Me.MyZenPack/ZenPacks/Me/MyZenPack/libexec + """ + zp = self.getZenPack(self) + return zp.path(*parts) # index_object and unindex_object are overridden so that instances |
From: <sv...@ze...> - 2008-04-24 21:19:17
|
Author: jstevens Date: 2008-04-24 17:19:22 -0400 (Thu, 24 Apr 2008) New Revision: 9110 Modified: trunk/Products/ZenModel/DeviceClass.py Log: refs #3043 * fixing device list in graph report edit page Modified: trunk/Products/ZenModel/DeviceClass.py =================================================================== --- trunk/Products/ZenModel/DeviceClass.py 2008-04-24 20:10:25 UTC (rev 9109) +++ trunk/Products/ZenModel/DeviceClass.py 2008-04-24 21:19:22 UTC (rev 9110) @@ -371,11 +371,11 @@ def jsonGetDeviceNames(self, query=''): ''' Return a list of all device names that match the filter. ''' - def cmpDevice(a, b): - return cmp(a.id, b.id) - devices = self.searchDevices(query) - devices.sort(cmpDevice) - return simplejson.dumps([d.id for d in devices]) + brains = self.deviceSearch.evalAdvancedQuery( + MatchGlob('id', query.rstrip('*') + '*')) + deviceIds = [b.id for b in brains] + deviceIds.sort(lambda x, y: cmp(x.lower(), y.lower())) + return simplejson.dumps(deviceIds) security.declareProtected('View', 'jsonGetComponentPaths') |
From: <sv...@ze...> - 2008-04-24 20:10:43
|
Author: ecn Date: 2008-04-24 16:10:25 -0400 (Thu, 24 Apr 2008) New Revision: 9109 Modified: trunk/Products/DataCollector/SnmpClient.py Log: * be a teensy bit more specific about the top of the SNMP tree Modified: trunk/Products/DataCollector/SnmpClient.py =================================================================== --- trunk/Products/DataCollector/SnmpClient.py 2008-04-24 19:05:49 UTC (rev 9108) +++ trunk/Products/DataCollector/SnmpClient.py 2008-04-24 20:10:25 UTC (rev 9109) @@ -85,7 +85,7 @@ def doRun(self, driver): # test snmp connectivity log.debug("Testing SNMP configuration") - yield self.proxy.walk('.1') + yield self.proxy.walk('.1.3') try: driver.next() except TimeoutError, ex: |
From: <sv...@ze...> - 2008-04-24 19:05:45
|
Author: jstevens Date: 2008-04-24 15:05:49 -0400 (Thu, 24 Apr 2008) New Revision: 9108 Modified: trunk/zenpacks/ZenPacks.zenoss.LDAPMonitor/setup.py Log: Replaced a missing comma Modified: trunk/zenpacks/ZenPacks.zenoss.LDAPMonitor/setup.py =================================================================== --- trunk/zenpacks/ZenPacks.zenoss.LDAPMonitor/setup.py 2008-04-24 18:37:37 UTC (rev 9107) +++ trunk/zenpacks/ZenPacks.zenoss.LDAPMonitor/setup.py 2008-04-24 19:05:49 UTC (rev 9108) @@ -39,7 +39,7 @@ namespace_packages = NAMESPACE_PACKAGES, # Tell setuptools what packages this zenpack provides. - packages = find_packages() + packages = find_packages(), # Tell setuptools to figure out for itself which files to include # in the binary egg when it is built. |
Author: jstevens Date: 2008-04-24 14:37:37 -0400 (Thu, 24 Apr 2008) New Revision: 9107 Added: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/GNUmakefile trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/HelloWorld.py trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/__init__.py trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/about.txt trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/daemons/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/datasources/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/hello.py trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/lib/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/modeler/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/objects/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/reports/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/services/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/skins/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/src/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/INSTALL.txt trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/README.txt trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/PKG-INFO trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/SOURCES.txt trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/dependency_links.txt trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/entry_points.txt trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/namespace_packages.txt trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/not-zip-safe trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/top_level.txt trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/zenpack_info trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/__init__.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/GNUmakefile trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/HelloWorld.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/__init__.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/about.txt trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/daemons/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/daemons/hello trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/datasources/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/datasources/HelloWorldDataSource.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/datasources/__init__.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/hello.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/lib/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/lib/HelloModule/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/lib/HelloModule/HelloModule.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/lib/HelloModule/__init__.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/lib/__init__.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/modeler/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/modeler/plugins/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/modeler/plugins/hello.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/objects/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/objects/objects.xml trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/reports/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/reports/Hello/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/reports/Hello/World.rpt trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/reports/plugins/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/reports/plugins/hello.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/services/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/services/HelloWorldConfig.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/services/__init__.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/skins/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/skins/HelloWorldZenPack/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/skins/HelloWorldZenPack/HelloWorld.pt trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/skins/HelloWorldZenPack/editHelloWorld.pt trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/skins/HelloWorldZenPack/editHelloWorldDataSource.pt trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/skins/HelloWorldZenPack/viewHelloWorld.pt trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/skins/helloWorld/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/src/ trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/__init__.py trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/setup.py Removed: trunk/zenpacks/HelloWorldZenPack/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/GNUmakefile trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/HelloWorld.py trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/__init__.py trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/about.txt trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/daemons/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/datasources/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/hello.py trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/lib/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/modeler/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/objects/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/reports/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/services/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/skins/ trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/src/ trunk/zenpacks/README.txt Log: Converted HelloWorldZenPack to an egg Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack (from rev 9103, trunk/zenpacks/HelloWorldZenPack) Deleted: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/GNUmakefile Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/GNUmakefile (from rev 9105, trunk/zenpacks/HelloWorldZenPack/GNUmakefile) Deleted: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/HelloWorld.py Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/HelloWorld.py (from rev 9105, trunk/zenpacks/HelloWorldZenPack/HelloWorld.py) Deleted: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/__init__.py Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/__init__.py (from rev 9105, trunk/zenpacks/HelloWorldZenPack/__init__.py) Deleted: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/about.txt Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/about.txt (from rev 9105, trunk/zenpacks/HelloWorldZenPack/about.txt) Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/daemons (from rev 9105, trunk/zenpacks/HelloWorldZenPack/daemons) Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/datasources (from rev 9105, trunk/zenpacks/HelloWorldZenPack/datasources) Deleted: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/hello.py Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/hello.py (from rev 9105, trunk/zenpacks/HelloWorldZenPack/hello.py) Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/lib (from rev 9105, trunk/zenpacks/HelloWorldZenPack/lib) Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/modeler (from rev 9105, trunk/zenpacks/HelloWorldZenPack/modeler) Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/objects (from rev 9105, trunk/zenpacks/HelloWorldZenPack/objects) Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/reports (from rev 9105, trunk/zenpacks/HelloWorldZenPack/reports) Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/services (from rev 9105, trunk/zenpacks/HelloWorldZenPack/services) Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/skins (from rev 9105, trunk/zenpacks/HelloWorldZenPack/skins) Copied: trunk/zenpacks/OldNonEggPacks/HelloWorldZenPack/src (from rev 9105, trunk/zenpacks/HelloWorldZenPack/src) Deleted: trunk/zenpacks/README.txt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/INSTALL.txt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/README.txt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/GNUmakefile Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/HelloWorld.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/about.txt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/daemons/hello Property changes on: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/daemons/hello ___________________________________________________________________ Name: svn:executable + * Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/datasources/HelloWorldDataSource.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/datasources/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/hello.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/lib/HelloModule/HelloModule.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/lib/HelloModule/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/lib/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/modeler/plugins/hello.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/objects/objects.xml Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/reports/Hello/World.rpt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/reports/plugins/hello.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/services/HelloWorldConfig.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/services/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/skins/HelloWorldZenPack/HelloWorld.pt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/skins/HelloWorldZenPack/editHelloWorld.pt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/skins/HelloWorldZenPack/editHelloWorldDataSource.pt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/HelloWorldZenPack/skins/HelloWorldZenPack/viewHelloWorld.pt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks/zenoss/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/PKG-INFO Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/SOURCES.txt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/dependency_links.txt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/entry_points.txt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/namespace_packages.txt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/not-zip-safe Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/top_level.txt Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/ZenPacks.zenoss.HelloWorldZenPack.egg-info/zenpack_info Added: trunk/zenpacks/ZenPacks.zenoss.HelloWorldZenPack/setup.py |
From: <sv...@ze...> - 2008-04-24 18:35:12
|
Author: ian Date: 2008-04-24 14:35:19 -0400 (Thu, 24 Apr 2008) New Revision: 9106 Modified: trunk/Products/ZenModel/skins/zenmodel/Dashboard.pt trunk/Products/ZenWidgets/skins/zenui/javascript/portlet.js Log: * Fixes #3034: Added last updated time and lost connection messages to the dashboard. Modified: trunk/Products/ZenModel/skins/zenmodel/Dashboard.pt =================================================================== --- trunk/Products/ZenModel/skins/zenmodel/Dashboard.pt 2008-04-24 18:27:22 UTC (rev 9105) +++ trunk/Products/ZenModel/skins/zenmodel/Dashboard.pt 2008-04-24 18:35:19 UTC (rev 9106) @@ -30,9 +30,11 @@ function initDashboardPortlets() { ContainerObject = new YAHOO.zenoss.portlet.PortletContainer( 'portletContainer'); + YAHOO.zenoss.globalPortletContainer = ContainerObject; if (dashboardState) { ContainerObject.restore(dashboardState); } else { + // Create a default dashboard ContainerObject.setLayout('2coleq', false); p1 = new YAHOO.zenoss.portlet.ProdStatePortlet({id:'prodstates'}); p2 = new YAHOO.zenoss.portlet.DeviceIssuesPortlet({id:'devissues'}); @@ -47,3 +49,4 @@ </script> </tal:block> </tal:block> + Modified: trunk/Products/ZenWidgets/skins/zenui/javascript/portlet.js =================================================================== --- trunk/Products/ZenWidgets/skins/zenui/javascript/portlet.js 2008-04-24 18:27:22 UTC (rev 9105) +++ trunk/Products/ZenWidgets/skins/zenui/javascript/portlet.js 2008-04-24 18:35:19 UTC (rev 9106) @@ -34,6 +34,8 @@ '3col': [3, 'yui-gb'] }; +YAHOO.namespace('zenoss.globalPortletContainer'); + function getUID(base) { return base + new Date().getTime(); } @@ -300,6 +302,13 @@ this.columnContainer = null; this.isDirty = false; }, + goodConnection: function() { + setInnerHTML($('connectionmessage'), + 'Last updated ' + toISOTimestamp(new Date()) + '.'); + }, + brokenConnection: function() { + setInnerHTML($('connectionmessage'), 'Lost connection to the server.'); + }, setContainerHeight: function() { var heights = []; for (var i=0;i<this.columns.length;i++) { @@ -438,12 +447,15 @@ this.dialogLink = A({'class':"tinylink"}, "Configure layout..."); this.portDialogLink = A({'class':"tinylink"}, "Add portlet..."); this.doRefresh = A({'class':"tinylink"}, "Stop Refresh"); + messagebox = DIV({'class':'msgbox', 'id':'connectionmessage'}, + 'Last updated ' + toISOTimestamp(new Date()) + '.'); connect(this.dialogLink, "onclick", this.showLayoutDialog); connect(this.portDialogLink, "onclick", this.showAddPortletDialog); connect(this.doRefresh, "onclick", this.stopRefresh); var newContainer = DIV({'class':colsclass}, - [DIV({'class':'tinylink-container'}, - [this.doRefresh, this.portDialogLink, this.dialogLink]), + [DIV({'class':'tinylink-container'}, [ + messagebox, + this.doRefresh, this.portDialogLink, this.dialogLink]), this.columnElements()]); if (!this.columnContainer) { this.columnContainer = newContainer; @@ -590,7 +602,13 @@ get: function(callback) { this.callback = callback; var d = doXHR(this.url); - d.addCallback(callback); + d.addCallback(function(r){ + YAHOO.zenoss.globalPortletContainer.goodConnection(); + callback(r); + }); + d.addErrback(function(){ + YAHOO.zenoss.globalPortletContainer.brokenConnection() + }); return d; } } @@ -628,7 +646,11 @@ sendContent: serializeJSON(this.postContent) }); d.addCallback(bind(function(r){ + YAHOO.zenoss.globalPortletContainer.goodConnection(); this.parseResponse(r, callback)},this)); + d.addErrback(function(){ + YAHOO.zenoss.globalPortletContainer.brokenConnection() + }); }, parseResponse: function(response, callback) { response = evalJSONRequest(response); |
From: <sv...@ze...> - 2008-04-24 18:27:16
|
Author: jstevens Date: 2008-04-24 14:27:22 -0400 (Thu, 24 Apr 2008) New Revision: 9105 Modified: trunk/zenpacks/zenpacks.spec Log: Adding latest core zenpacks to the rpm spec file Modified: trunk/zenpacks/zenpacks.spec =================================================================== --- trunk/zenpacks/zenpacks.spec 2008-04-24 18:25:34 UTC (rev 9104) +++ trunk/zenpacks/zenpacks.spec 2008-04-24 18:27:22 UTC (rev 9105) @@ -13,7 +13,7 @@ # we come up with a more generic way of calculating which should be installed # first, second, third, etc... # note: el4 requires these to be on one line... -%define zenpacks "ZenPacks.zenoss.ApacheMonitor ZenPacks.zenoss.DnsMonitor ZenPacks.zenoss.HPMonitor ZenPacks.zenoss.MySqlMonitor ZenPacks.zenoss.DellMonitor ZenPacks.zenoss.HttpMonitor ZenJMX" +%define zenpacks "ZenPacks.zenoss.ApacheMonitor ZenPacks.zenoss.DellMonitor ZenPacks.zenoss.DigMonitor ZenPacks.zenoss.DnsMonitor ZenPacks.zenoss.FtpMonitor ZenPacks.zenoss.HPMonitor ZenPacks.zenoss.HttpMonitor ZenPacks.zenoss.IRCDMonitor ZenPacks.zenoss.JabberMonitor ZenPacks.zenoss.LDAPMonitor ZenPacks.zenoss.MySqlMonitor ZenPacks.zenoss.NNTPMonitor ZenPacks.zenoss.NtpMonitor ZenPacks.zenoss.RPCMonitor ZenJMX" %define zenpack_install_dir %{zenhome}/packs |
From: <sv...@ze...> - 2008-04-24 18:25:28
|
Author: jstevens Date: 2008-04-24 14:25:34 -0400 (Thu, 24 Apr 2008) New Revision: 9104 Modified: trunk/zenpacks/HelloWorldZenPack/__init__.py Log: The skin registration is a little more careful now Modified: trunk/zenpacks/HelloWorldZenPack/__init__.py =================================================================== --- trunk/zenpacks/HelloWorldZenPack/__init__.py 2008-04-24 17:30:43 UTC (rev 9103) +++ trunk/zenpacks/HelloWorldZenPack/__init__.py 2008-04-24 18:25:34 UTC (rev 9104) @@ -14,12 +14,17 @@ __doc__="HelloWorld ZenPack" import Globals +import os.path # If the ZenPack contains a skins directory it needs to be registered when # the ZenPack module is loaded. from Products.CMFCore.DirectoryView import registerDirectory -registerDirectory('skins', globals()) -registerDirectory('help', globals()) +skinsDir = os.path.join(os.path.dirname(__file__), 'skins') +if os.path.isdir(skinsDir): + registerDirectory('skins', globals()) +helpDir = os.path.join(os.path.dirname(__file__), 'help') +if os.path.isdir(helpDir): + registerDirectory('help', globals()) # When a user creates a ZenPack through the Zenoss Create New ZenPack # command in the UI the ZenPack that's created is an instance of |
From: <sv...@ze...> - 2008-04-24 17:30:41
|
Author: ecn Date: 2008-04-24 13:30:43 -0400 (Thu, 24 Apr 2008) New Revision: 9103 Modified: trunk/Products/ZenHub/PBDaemon.py Log: * try harder to not complain about connections that are down right now Modified: trunk/Products/ZenHub/PBDaemon.py =================================================================== --- trunk/Products/ZenHub/PBDaemon.py 2008-04-24 17:24:17 UTC (rev 9102) +++ trunk/Products/ZenHub/PBDaemon.py 2008-04-24 17:30:43 UTC (rev 9103) @@ -23,9 +23,11 @@ from Products.ZenUtils.PBUtil import ReconnectingPBClientFactory from Products.ZenUtils.DaemonStats import DaemonStats +from twisted.cred import credentials from twisted.internet import reactor, defer +from twisted.internet.error import ConnectionLost from twisted.internet.defer import TimeoutError -from twisted.cred import credentials +from twisted.python.failure import Failure from twisted.spread import pb class RemoteException(Exception, pb.Copyable, pb.RemoteCopy): @@ -194,7 +196,6 @@ self.connected() return result def errback(error): - from twisted.python.failure import Failure if (isinstance(error, Failure) and \ isinstance(error.value, TimeoutError)): self.log.error('Timeout connecting to zenhub: is it running?') @@ -252,7 +253,10 @@ # event service we should just log events that don't get sent # and then drop them. if reactor.running: - self.log.error('Error sending event: %s' % error) + # don't complain if you get disconnected: you'll reconnect + if not (isinstance(error, Failure) and + isinstance(error.value, ConnectionLost)): + self.log.error('Error sending event: %s' % error) self.eventQueue.append(event) if event: self.eventQueue.append(event) |
From: <sv...@ze...> - 2008-04-24 17:24:17
|
Author: ecn Date: 2008-04-24 13:24:17 -0400 (Thu, 24 Apr 2008) New Revision: 9102 Modified: trunk/Products/ZenHub/PBDaemon.py Log: * change no-service-now error into a warning, with a clue as to why it's not available Modified: trunk/Products/ZenHub/PBDaemon.py =================================================================== --- trunk/Products/ZenHub/PBDaemon.py 2008-04-24 16:08:03 UTC (rev 9101) +++ trunk/Products/ZenHub/PBDaemon.py 2008-04-24 17:24:17 UTC (rev 9102) @@ -136,7 +136,7 @@ def getServiceNow(self, svcName): if not self.services.has_key(svcName): - self.log.error('getServiceNow returning FakeRemote for %s' % svcName) + self.log.warning('No service %s named: ZenHub may be disconnected' % svcName) return self.services.get(svcName, None) or FakeRemote() |
From: <sv...@ze...> - 2008-04-24 16:08:00
|
Author: jstevens Date: 2008-04-24 12:08:03 -0400 (Thu, 24 Apr 2008) New Revision: 9101 Modified: trunk/Products/ZenReports/ReportMail.py Log: refs #3038 * fixing ReportMail issue Modified: trunk/Products/ZenReports/ReportMail.py =================================================================== --- trunk/Products/ZenReports/ReportMail.py 2008-04-24 16:01:11 UTC (rev 9100) +++ trunk/Products/ZenReports/ReportMail.py 2008-04-24 16:08:03 UTC (rev 9101) @@ -117,7 +117,6 @@ self.title += data def slurp(self, url): - self.base = url.strip() req = urllib2.Request(url) encoded = base64.encodestring('%s:%s' % (self.user, self.passwd))[:-1] req.add_header("Authorization", "Basic %s" % encoded) @@ -129,6 +128,7 @@ return result def fetch(self, url): + self.base = url.strip() self.feed(self.slurp(url).read()) def mail(self): |
From: <sv...@ze...> - 2008-04-24 16:01:22
|
Author: ecn Date: 2008-04-24 12:01:11 -0400 (Thu, 24 Apr 2008) New Revision: 9100 Modified: trunk/bin/zenfunctions Log: * don't run zenwinperf under the watchdog Modified: trunk/bin/zenfunctions =================================================================== --- trunk/bin/zenfunctions 2008-04-24 15:11:35 UTC (rev 9099) +++ trunk/bin/zenfunctions 2008-04-24 16:01:11 UTC (rev 9100) @@ -65,7 +65,7 @@ else echo starting... case "$PRGNAME" in - zenwin* | zeneventlog* ) WATCHDOG=--watchdog ;; + zenwinmodeler | zenwin | zeneventlog ) WATCHDOG=--watchdog ;; * ) WATCHDOG= esac if [ "$CFGFILE" = "" ]; then |
From: <sv...@ze...> - 2008-04-24 15:11:32
|
Author: ecn Date: 2008-04-24 11:11:35 -0400 (Thu, 24 Apr 2008) New Revision: 9099 Modified: trunk/bin/zenoss_upgrade_pre Log: * hide error message about python2.4 not found Modified: trunk/bin/zenoss_upgrade_pre =================================================================== --- trunk/bin/zenoss_upgrade_pre 2008-04-24 14:42:12 UTC (rev 9098) +++ trunk/bin/zenoss_upgrade_pre 2008-04-24 15:11:35 UTC (rev 9099) @@ -45,7 +45,7 @@ # version 2.1.1 and below used the system python, but in 2.1.70 we # started shipping our own. replace the old scripts with references # to the new python -/usr/bin/replace /usr/bin/python $ZENHOME/bin/python -- $ZENHOME/bin/* +/usr/bin/replace /usr/bin/python $ZENHOME/bin/python -- $ZENHOME/bin/* 2>/dev/null /usr/bin/replace /usr/bin/python $ZENHOME/bin/python -- $ZENHOME/etc/zeo.conf # migrate the zeo database |
From: <sv...@ze...> - 2008-04-24 14:42:15
|
Author: jstevens Date: 2008-04-24 10:42:12 -0400 (Thu, 24 Apr 2008) New Revision: 9098 Modified: trunk/zendocs/DevGuide/devguide/zenpacks.xml Log: Updating ZenPacks section of dev guid Modified: trunk/zendocs/DevGuide/devguide/zenpacks.xml =================================================================== --- trunk/zendocs/DevGuide/devguide/zenpacks.xml 2008-04-24 14:20:46 UTC (rev 9097) +++ trunk/zendocs/DevGuide/devguide/zenpacks.xml 2008-04-24 14:42:12 UTC (rev 9098) @@ -19,156 +19,556 @@ <para>A ZenPack is a package that adds new functionality to Zenoss. For basic information on ZenPacks see the Zenoss Admin Guide section on - ZenPacks. The following information pertains to the creation of ZenPacks - that need to contain more than just database objects.</para> + ZenPacks. The following information pertains to the creation of more + complex ZenPacks that contain skins, python classes, daemons, etc.</para> + + <para>As of Zenoss 2.2 the ZenPack framework has switched to using Python + eggs as the packaging mechanism for ZenPacks. The use of dotted names for + ZenPacks (see "ZenPack Names" below) was also introduced in this version. + Zenoss 2.2 supports installation and use of pre-2.2 ZenPacks, but all new + ZenPacks are created in the new format. This document relates to ZenPacks + created in the new style. For documentation on ZenPacks predating Zenoss + 2.2 please see previous versions of this document and the Zenoss Admin + Guide.</para> + + <para>If you developed pre-2.2 ZenPacks and wish to convert them to egg + ZenPacks see the section below "Converting older ZenPacks to ZenPack + eggs".</para> </section> <section xml:id="zenpack_installing"> - <title>How do I create a ZenPack?</title> + <title>Creating a ZenPack</title> <para>ZenPacks can be created through the Zenoss user interface by using the “Create ZenPack…” menu item on the ZenPacks page. This creates the - ZenPack object in the database as well as a directory for your ZenPack - within $ZENHOME/Products.</para> + ZenPack on the filesystem at $ZENHOME/ZenPacks/<zenpackid> and + installs it into Zenoss.</para> </section> <section> + <title>ZenPack Names</title> + + <para>ZenPack names consist of at least three strings joined by periods. + The first of these strings is always "ZenPacks." Each of these strings + must start with a letter and contain only letters, numbers and + underscores. The reason for this naming scheme is that the ZenPack will + setup namespaces in Python that reflect these names. There is a python + namespace called ZenPacks. Within that namespace are packages representing + the second part of all the installed ZenPack and so on. So for example if + you have a ZenPack named ZenPacks.MyCompany.MyZenPack then it is + importable in Python (and zendmd) as<programlisting>import ZenPacks.MyCompany.MyZenPack</programlisting></para> + + <para>And a datasource class provided by this example might be accessed + as<programlisting>from ZenPacks.MyCompany.MyZenPack.datasources.MyDataSourceClass import MyDataSourceClass</programlisting></para> + + <para>The advantage of these namespaces is that they help prevent + namespace conflicts between different organizations authoring ZenPacks. So + if a third party wants to develop an http monitoring ZenPack they could + name it ZenPacks.OurCompany.HttpMonitor and it would not conflict with the + ZenPacks.zenoss.HttpMonitor core ZenPack.</para> + </section> + + <section> + <title>Specifying Dependencies</title> + + <para>The ZenPack edit page allows you to specify versions of Zenoss that + your ZenPack is compatible with as well as dependencies on other ZenPacks. + The first item in the Dependencies section of that page is the version of + Zenoss that is required. If that field is blank then your ZenPack will be + installable under any version of Zenoss version 2.2 or later. If you enter + a specific version number then the ZenPack will run only under that exact + version of Zenoss, this is usually not desirable. The most typical verson + requirement is to specify that the ZenPack is compatible with any version + of Zenoss equal to or greater than a specific version. The syntax for this + is ">=X" where X is the minimum version the ZenPack requires. For + example, if a ZenPack requires Zenoss version 2.2.1 or greater the version + specification would be<programlisting>>=2.2.1</programlisting>Below the + Zenoss version specification is a list of all other ZenPack eggs + installed. Old-style (non-egg) ZenPacks can not be listed as dependencies + and do not appear in this list. If your ZenPack requires another ZenPack + to be installed then check the checkbox to the left of the other ZenPack's + name. Optionally you can also give a version specification for each + ZenPack you require.</para> + </section> + + <section> <title>Location of ZenPack Files</title> - <para>For ZenPacks that will include any items other than just database - objects we recommend using a symbolic link within $ZENHOME/Products that - points to your ZenPack directory rather than having your ZenPack live - directly within the Products directory. There are a couple reasons for + <para>For any nontrivial ZenPacks we recommend maintaining the source code + somewhere other than $ZENHOME/ZenPacks. There are a couple reasons for this:</para> + <itemizedlist> + <listitem> + <para>Performing a "zenpack --remove" delete the ZenPack's directory + from $ZENHOME/ZenPacks. If you do not have the files copied in another + location you can easily lose all or some of your work.</para> + </listitem> + + <listitem> + <para>If your ZenPack source is maintained in a version control system + it is frequently easier to keep the code within a larger checkout + directory elsewhere on the filesystem.</para> + </listitem> + </itemizedlist> + + <para>To move a ZenPack source directory out of $ZENHOME/ZenPacks you can + simply copy the directory to the new location then run install again using + the --link option. This will remove the + $ZENHOME/ZenPacks/<YourZenPackId> directory.<programlisting>cp -r $ZENHOME/ZenPacks/<YourZenPackId> <SomeOtherDirectory> +zenpack --link --install <SomeOtherDirectory>/<YourZenPackId></programlisting></para> + </section> + + <section> + <title>ZenPack Structure and Contents</title> + + <para>This section describes the files and directory structures that make + up most ZenPacks.</para> + <para></para> <itemizedlist> <listitem> - <para>Performing a “zenpack –remove” deletes the ZenPack directory - from $ZENHOME/Products. If your ZenPack is symlinked then just the - link is deleted, otherwise all your files are deleted.</para> + <para>setup.py</para> - <para></para> + <para>This file contains parameters for use by setuptools and + distutils in creating eggs and doing source installs. Zenoss creates + an appropriate setup.py when a ZenPack is created. Any time a ZenPack + is saved or exported via the GUI Zenoss will modify certain values at + the top of setup.py. The lines that Zenoss modifies are clearly + commented and segregated at the top of the file. If you wish to make + changes to setup.py you can safely do so as long as you leave those + lines intact.</para> </listitem> <listitem> - <para>If your Zenoss installation is checked out from the subversion - repository and you want to keep your ZenPack code in a version control - system then having the one within the other can sometimes cause - complications.</para> + <para>ZenPacks</para> + + <para>This directory mirrors the dotted name structure of your ZenPack + name. For example, if your ZenPack name is + ZenPacks.MyCompany.MyZenPack then this directory will contain a + directory named MyCompany which will contain a MyZenPack directory. + This last directory with the same name as the last part of your + ZenPack name is where most of the ZenPac code resides. The structure + of that directory is very similar to that of previous non-egg + ZenPacks.</para> + + <itemizedlist> + <listitem> + <para>Other directories</para> + + <para>As mentioned above, the ZenPacks directory will contain a + directory structure that mirrors the name of your ZenPack.</para> + + <itemizedlist> + <listitem> + <para><ZenPackId></para> + + <para>This is the directory whose name is that of the last + part of your dotted ZenPack name.</para> + + <itemizedlist> + <listitem> + <para>__init__.py</para> + + <para>This file contains any code that needs to be + executed when the ZenPack is loaded. Zenoss loads all + installed ZenPacks on startup. Typically this file + contains a few lines that will register a skins directory + if the ZenPack provides one. Also, if this class contains + a class named ZenPack then on installation Zenoss will + create an instance of that class rather than the base + ZenPack class in the object database.</para> + </listitem> + + <listitem> + <para>daemons</para> + + <para>See below for more details on providing daemons in + ZenPacks.</para> + </listitem> + + <listitem> + <para>datasources</para> + + <para>See below for more details on providing datasource + classes in ZenPacks.</para> + </listitem> + + <listitem> + <para>lib</para> + + <para>This directory is intended to hold any 3rd part + modules or other code your ZenPack depends on. A module + named Foo in this directory would be imported + with<programlisting>import ZenPacks.MyCompany.MyZenPack.lib.Foo</programlisting></para> + </listitem> + + <listitem> + <para>migrate</para> + + <para>See below for more details on migrating between + versions of your ZenPack.</para> + </listitem> + + <listitem> + <para>modeler</para> + + <para>See below for more details on providing modeler + plugins in ZenPacks.</para> + </listitem> + + <listitem> + <para>objects</para> + + <para>Database objects such as Device Classes and + Performance Templates that are added to the ZenPack via + the GUI are exported to an objects.xml file in this + directory. When the ZenPack is installed on another system + those objects will be copied into that object + database.</para> + </listitem> + + <listitem> + <para>reports</para> + + <para>This directory contains any report plugins provided + by the ZenPack.</para> + </listitem> + + <listitem> + <para>services</para> + + <para>Zenoss daemons usually communicate with ZenHub to + retrieve their configuration, send events, and write + performance data. If a ZenPack provides a daemon then it + typically will also provide a ZenHub service for that + daemon. See the section on ZenHub for further + details.</para> + </listitem> + + <listitem> + <para>skins</para> + + <para>This directory contains any skins directories that + should be added to Zope. Note that this contains + directories of skins, not the skin files themselves. If + you include skins directories make sure that the + __init__.py file in the directory above skins is + registering this directory. (The default __init__.py file + provided in new ZenPacks does this for you.)</para> + </listitem> + </itemizedlist> + </listitem> + </itemizedlist> + </listitem> + </itemizedlist> </listitem> + + <listitem> + <para>build</para> + + <para>This directory is created by Python when the ZenPack is exported + to an egg file or when it is installed from source. This directory can + safely be deleted at any time if you wish and need not be kept within + any version control system.</para> + </listitem> + + <listitem> + <para>dist</para> + + <para>This directory is created when thet ZenPack is exported to an + egg file. The egg file is initially created within here then copied to + $ZENHOME/export. This directory can safely be deleted at any time if + you wish and need not be kept within any version control + system.</para> + </listitem> + + <listitem> + <para><ZenPackId>.egg-info</para> + + <para>This directory contains files which describe the egg metadata. + This is created when the egg file is generated or the ZenPack is + installed from source. This directory can safely be deleted at any + time if you wish and need not be kept within any version control + system.</para> + </listitem> </itemizedlist> + </section> - <para>To relocate a ZenPack you can simply move the ZenPack’s directory - out of $ZENHOME/Products and replace it with a symbolic link to the - ZenPack’s new location. If you are installing an existing ZenPack you can - use the –link option to the zenpack command to create the symlink - automatically:</para> + <section> + <title>Building and Distributing ZenPacks</title> - <para><programlisting>zenpack –link –install MyZenPack</programlisting>When - using the –link option you must specify a directory rather than a .zip - file for the ZenPack. Note that if you specify a directory to zenpack but - omit the –link option then zenpack will copy the directory to - $ZENHOME/Products rather than creating a symlink for it.</para> + <para>From your ZenPack's page in the GUI select the Export ZenPack... + menu item to create an egg file. The file is first created in your + ZenPack's dist directory then copied to $ZENHOME/export. You can + optionally also download the egg file through your web browser when doing + the export. As part of the export process Zenoss exports database objects + to the objects/objects.xml file in your ZenPack source directory. If you + don't need to update the objects .xml file you can create the egg from the + command line instead<programlisting>cd <YourZenPackDirectory> +python setup.py bdist_egg</programlisting>This creates the egg file in the + ZenPack's dist directory.</para> + + <para>Users who install your egg file will not be able to edit the ZenPack + or reexport it. These functions require the setup.py file which is not + usually distributed within the egg file itself. In most cases this is + desirable because end users should usually not be making changes and + redistributing a different version of your ZenPack than the one you + developed. Sometimes however you want to allow others to codevelop a + ZenPack with you. In these cases you must provide them with the entire + source directory, not just an egg file.</para> </section> <section> - <title>What is the structure of a ZenPack?</title> + <title>Migrating between versions</title> - <para>HelloWorldZenPack is an example ZenPack that illustrates many of the - capabilities of the ZenPack architecture. Because of this it is much more - complex than many ZenPacks will ever need to be. However, if you need to - include more than just database objects in your ZenPack then - HelloWorldZenPack is the best reference for how to do so. - HelloWorldZenPack and other Community ZenPacks are available at - http://www.zenoss.com/community/projects/zenpacks.</para> + <para>Any time a ZenPack is installed Zenoss looks in the ZenPack's + migrate directory for steps whose version is greater than or equal to the + version of the ZenPack being installed. Migrate steps are classes that + subclass ZenModel.ZenPack.ZenPackMigration. This mechanism allows zenpacks + to modify items in the object database that were created by previous + versions of the ZenPack and need updating. The ZenPacks.zenoss.HttpMonitor + Core ZenPack includes good examples of how migrate steps are + written.</para> + </section> - <section xml:id="zenpack_helloworld"> - <title>HelloWorldZenPack/</title> + <section> + <title>Converting older ZenPacks to ZenPack eggs</title> - <para>In the top level directory of our ZenPack contains our Model - Extensions, this would be the Python code that may extend the existing - object model in any way. In this example, we have two files, init.py and - HelloWorld.py. You are not required to have an init.py file or any other - files at this level. You are also not restricted to any particular - number of files.</para> + <para>Zenoss 2.2 includes a new script called eggifyzenpack which + automates much or all of the process of converting a pre-2.2 ZenPack to an + egg ZenPack. The script is in $ZENHOME/bin so is usually on the zenoss + user's path already. The --newid option is required and specifies the new + name of the ZenPack. (See the section above on ZenPack names.) the sole + positional argument to eggifyzenpack is the current name of the installed + ZenPack to be converted. Zeo must be running prior to invoking the + script.<programlisting>eggifyzenpack --newid ZenPacks.MyCompany.MyZenPackName MyOldZenPackName</programlisting>This + will create a ZenPack with the name given with --newid in + $ZENHOME/ZenPacks. The old ZenPack that was converted is uninstalled and + removed from $ZENHOME/Products. ZenPacks converted in this way have + PREV_ZENPACK_NAME in their setup.py set to the name of the old ZenPack + that they replace. When a user with the old ZenPack installed installs the + new egg ZenPack it will be processed as an upgrade and the older ZenPack + will be removed.</para> + </section> - <section xml:id="zenpack_helloworld_initpy"> - <title>HelloWorldZenPack/init.py</title> + <section> + <title>ZenPack.py</title> - <para>Just like in a Python module, init.py contains any - initialization code for your ZenPack.</para> - </section> + <para>ZenModel/ZenPack.py contains the base ZenPack class. When a ZenPack + is installed Zenoss inspects + <YourZenPackId>/ZenPacks/..../<LastPartOfName>/__init__.py to + see if it contains a class named ZenPack. If it does then Zenoss + instantiates it otherwise Zenoss instantiates the base + ZenModel.ZenPack.ZenPack class. That instance is then added to + dmd.ZenPackManager.packs.</para> - <section xml:id="zenpack_helloworld_helloworldpy"> - <title>HelloWorldZenPack/HelloWorld.py</title> + <para>There are several attributes and methods of ZenPack that subclasses + might be interested in overriding.</para> - <para>Includes some example Model Extensions, which illustrates the - implementation of new objects with attributes and relationships. In - the file, Device, Group, Location, Admin classes are defined. Each - class has an attribute and some sort of relationship with one - another.</para> - </section> + <itemizedlist> + <listitem> + <para>packZProperties is a mechanism for easily adding zProperties. + packZProperties is a list tuples each containing three strings in this + order: the name of the zProperty, the default value of the zProperty, + and the type of the zProperty ('string', 'int', etc.) Zenoss will + automatically create these when the ZenPack is installed and remove + them when the ZenPack is removed. See ZenPacks.zenoss.MySqlMonitor for + an example of this.</para> + </listitem> - <section xml:id="zenpack_helloworld_daemons"> - <title>HelloWorldZenPack/daemons</title> + <listitem> + <para>install(self, app) is called when the ZenPack is installed. If + you override this be sure to call the inherited method within your + code.</para> + </listitem> - <para>This directory should exist in the ZenPack however this - directory may be left empty. This directory contains binaries which - represent additional daemons for Zenoss.</para> + <listitem> + <para>remove(self, app, leaveObjects) is called when the ZenPack is + removed. As with install, make sure you call the inherited method if + you override.</para> + </listitem> + </itemizedlist> + </section> - <para>Once the ZenPack is installed the daemon will be started during - a zenoss start.</para> - </section> + <section> + <title>ZenPackPersistence.py</title> - <section xml:id="zenpack_helloworld_modeler"> - <title>HelloWorldZenPack/modeler</title> + <para>ZenPacks can provide Python classes for objects that will be stored + in the object database. The most frequent example of this is DataSource + subclasses. When a ZenPack is removed those classes are no longer + accessible so the objects in the database are broken. (Zeo needs to have + the appropriate Python class in order to unpickle an object from the + database.) In previous versions of Zenoss there was not an easy way to + associate instances of a ZenPack-provided class with the ZenPack that + provided the class. As a result ZenPack removal could easily cause broken + objects to remain in the database. If Zope had already loaded a class into + the interpreter the objects in question might continue to function until + Zope was restarted, making diagnosis of such problems even more + difficult.</para> - <para>This directory should exist in the ZenPack however this - directory may be left empty.</para> - </section> + <para>In Zenoss 2.2 the ZenPackPersistance class aims to remedy this + problem. Any Python class provided by a ZenPack should subclass + ZenModel.ZenPackPersistence.ZenPackPersistence. Zenoss maintains a catalog + of all ZenPackPersistence instances in the database. When a ZenPack is + removed, the catalog is queried to determine which objects need to be + deleted. Any ZenPack-provided Python class that might be instantiaed in + the object database should subclass ZenPackPersistence and define + ZENPACKID in the class as the name of the ZenPack providing the class. For + an example of this see + ZenPacks.zenoss.MySqlMonitor.datasources.MySqlMonitorDataSource.</para> + </section> - <section xml:id="zenpack_helloworld_objects"> - <title>HelloWorldZenPack/objects</title> + <section> + <title>Providing DataSource classes</title> - <para>This directory should exist in the ZenPack however this - directory may be left empty. This directory contains xml files to be - imported into the ZeoDB. When imported an object will be instantiated - based on the data in the xml files. Each xml may contain one or many - object definitions.</para> + <para>ZenPacks can provide new classes of DataSources by subclassing + ZenModel.RRDDataSource.RRDDataSource. If you include only one DataSource + class per file, name the modules after the class the contain (ie + MyDataSource.py contains the class MyDataSource), and place those modules + in the ZenPack's datasources directory then they will automatically be + discovered by Zenoss. If you wish to customized this behavior take a look + at ZenPack.getDataSourceClasses(). See ZenPacks.zenoss.HttpMonitor and + ZenPacks.zenoss.MySqlMonitor for examples of ZenPacks that provide custom + DataSource classes.</para> - <para>This file is not usually edited by hand. Instead it is created - during the ZenPack export process. During export of a ZenPack, Zenoss - will create an objects.xml which includes any Zeo database objects - which have been added to the ZenPack through the user interface. If - you wish to export Zeo objects manually you can do so with the zendump - command:</para> + <para>When creating a custom DataSource class one of the first decisions + you have to make is whether you want zencommand to process these + DataSources for you or whether you will provide a custom collector daemon + to process them. Zencommand is a very versatile mechanism for executing + arbitrary commands either on the Zenoss server or on the device being + monitored, processing performance data returned by the DataSource and + generating events in Zenoss as appropriate. Zencommand expects the command + it executes be compatible with the Nagios plug-in API. Specifically two + aspects of that API are of most importance:</para> - <para><programlisting>zendump --dataroot=<PATH_TO_OBJECT> --outfile=<XML_OUTPUT_FILE></programlisting></para> - </section> + <itemizedlist> + <listitem> + <para>Return code</para> - <section xml:id="zenpack_helloworld_reports"> - <title>HelloWorldZenPack/reports</title> + <para>The command should exit with a return code of 0, 1, 2 or 3. + These are described at + http://nagiosplug.sourceforge.net/developer-guidelines.html#AEN78</para> + </listitem> - <para>This directory should exist in the ZenPack however this - directory may be left empty. This directory contains report plugins to - be added to Zenoss.</para> - </section> + <listitem> + <para>Performance data</para> - <section xml:id="zenpack_helloworld_skins"> - <title>HelloWorldZenPack/skins/HelloWorldZenPack</title> + <para>If the command returns performance data then that data can be + pulled into Zenoss by creating DataPoints with the same names used in + the command output. The output format is described at + http://nagiosplug.sourceforge.net/developer-guidelines.html#AEN203</para> + </listitem> + </itemizedlist> - <para>This directory should exist in the ZenPack however this - directory may be left empty. This directory contains page templates - that add new UI to Zenoss. The "skins" directory will be registered - with Zope as a Directory View and acts like other "skins" directories - within $ZENHOME/Products directory.</para> - </section> - </section> + <para></para> + + <para>If you want zencommand to handle instances of your custom DataSource + class then several methods in RRDDataSource are of particular + insterest:</para> + + <itemizedlist> + <listitem> + <para>getDescription(self)</para> + + <para>This returns a string describing the DataSource instance. This + string is displayed next to the DataSource on the RRDTemplate view + page.</para> + </listitem> + + <listitem> + <para>useZenCommand(self)</para> + + <para>The default implementation returns False. If you want to use + zencommand then override this method and return True.</para> + </listitem> + + <listitem> + <para>getCommand(self, context, cmd=None)</para> + + <para>This returns the string that is the command for zencommand to + execute. context is the device or component to be collected. If you + need to evaluate TALES expressions in the command to replace things + like ${dev/id} and so forth you can call the parent class's + getCommand() and pass your command as the cmd argument. (cmd will not + be passed into your method, it existis specifically for subclasses to + pass their commands to the parent for TALES evaluation.)</para> + </listitem> + + <listitem> + <para>checkCommandPrefix(self, context, cmd)</para> + + <para>Zenoss will check the string you return from getCommand() to see + if it is a relative or absolute path to a command. If the string + starts with '/' or '$' then Zenoss assumes it is absolute. Otherwise + the zProperty zCommandPath from the context is prepended to the cmd + string. You can override checkCommandPrefix() if you wish to alter + this behavior.</para> + </listitem> + </itemizedlist> + + <para>Make sure that your DataSource subclasses also subclass + ZenPackPersistence and list it first among the parent classes. See the + section on ZenPackPersistence.py for more details.</para> </section> <section> + <title>Providing daemons</title> + + <para>ZenPacks can provide new performance collectors and event monitors. + This is a somewhat complex undertaking, so before deciding to write your + own daemons make sure that zencommand and a custom DataSource class won't + fit your needs (see "Providing DataSource classes" above.) Any file in a + ZenPack's daemons directory is symlinked in $ZENHOME/bin when the ZenPack + is installed. Also, the zenoss script that controls the core daemons will + attempt to manage your daemon too. So a "zenoss start", for example, will + attempt to start your daemon as well as the core daemons.</para> + + <para>Custom daemons usually subclass ZenHub.PBDaemon.PBDaemon. This class + provides the basic framework for communicating with ZenHub. See the + section "Writing a Zenoss Performance Collector" for more details.</para> + </section> + + <section> + <title>Setuptools and the zenpacksupport egg</title> + + <para>Zenoss requires a Python module called setuptools to create and + install eggs. Setuptools is installed by the Zenoss installer in + $ZENHOME/lib/python. Zenoss also provides a module named zenpacksupport + which extends setuptools. Zenpacksupport defines additional metadata that + is written to and read from ZenPack eggs. This metadata is provided + through additional options passed to the setup() call in a ZenPack's + setup.py file. Those arguments are:</para> + + <itemizedlist> + <listitem> + <para>compatZenossVers</para> + + <para>This is the version spec representing the required Zenoss + version from the ZenPack's edit page.</para> + </listitem> + + <listitem> + <para>prevZenPackName</para> + + <para>This is the name of the old-style (non-egg) ZenPack that this + ZenPack replaces. If a ZenPack with this name is installed in Zenoss + then it is upgraded and replaced when this ZenPack is installed. For + example, if HttpMonitor is installed and then + ZenPacks.zenoss.HttpMonitor is installed (which has + prevZenPackName=HttpMonitor) then ZenPacks.zenoss.HttpMonitor will + replace HttpMonitor. All packable objects in the database that are + included in HttpMonitor will be added to ZenPacks.zenoss.HttpMonitor + instead. A migrate script is usually required to set __class__ + correctly on instances of ZenPack-provided classes in the object + database. ZenPacks.zenoss.HttpMonitor has an example of this in its + migrate directory, ConvertHttpMonitorDataSources.py.</para> + </listitem> + </itemizedlist> + </section> + + <section> <title>Where to Get More Information</title> <para>Discussion regarding development of ZenPacks takes place on the |
From: <sv...@ze...> - 2008-04-24 14:20:47
|
Author: ian Date: 2008-04-24 10:20:46 -0400 (Thu, 24 Apr 2008) New Revision: 9097 Modified: trunk/Products/ZenWidgets/skins/zenui/javascript/zengrid.js Log: * Fixes #3033: Clear out rows when server inaccessible Modified: trunk/Products/ZenWidgets/skins/zenui/javascript/zengrid.js =================================================================== --- trunk/Products/ZenWidgets/skins/zenui/javascript/zengrid.js 2008-04-24 12:57:38 UTC (rev 9096) +++ trunk/Products/ZenWidgets/skins/zenui/javascript/zengrid.js 2008-04-24 14:20:46 UTC (rev 9097) @@ -339,7 +339,7 @@ this.askformore.addErrback(bind(function(x) { callLater(5, bind(function(){ this.message('Unable to communicate with the server.'); - this.clearTable(); + this.emptyTable(); delete this.askformore; this.killLoading()}, this)) }, this)); @@ -382,7 +382,7 @@ this.askformore.addErrback(bind(function(x) { callLater(5, bind(function(){ this.message('Unable to communicate with the server.'); - this.clearTable(); + this.emptyTable(); this.killLoading()}, this)) delete this.askformore; }, this)); @@ -557,6 +557,9 @@ updateColumns(); }, this)); }, + emptyTable: function() { + this.setTableNumRows(0); + }, clearTable: function() { table = this.zgtable; var cells = getElementsByTagAndClassName('div', 'cell_inner', table); |
From: <sv...@ze...> - 2008-04-24 12:57:31
|
Author: ecn Date: 2008-04-24 08:57:38 -0400 (Thu, 24 Apr 2008) New Revision: 9096 Modified: trunk/Products/ZenHub/PBDaemon.py Log: * fixes #3029: watchdog and busy zenhub can result in servers killing themselves and not recovering Modified: trunk/Products/ZenHub/PBDaemon.py =================================================================== --- trunk/Products/ZenHub/PBDaemon.py 2008-04-24 12:49:54 UTC (rev 9095) +++ trunk/Products/ZenHub/PBDaemon.py 2008-04-24 12:57:38 UTC (rev 9096) @@ -200,7 +200,6 @@ self.log.error('Timeout connecting to zenhub: is it running?') else: self.log.error('Unable to connect to zenhub: \n%s' % error) - self.stop() d.addCallbacks(callback, errback) reactor.run() self.log.info('%s shutting down' % self.name) |
From: <sv...@ze...> - 2008-04-24 12:49:55
|
Author: ian Date: 2008-04-24 08:49:54 -0400 (Thu, 24 Apr 2008) New Revision: 9095 Added: trunk/zenpacks/ZenPacks.zenoss.DellMonitor/ZenPacks/zenoss/DellMonitor/modeler/__init__.py trunk/zenpacks/ZenPacks.zenoss.DellMonitor/ZenPacks/zenoss/DellMonitor/modeler/plugins/__init__.py trunk/zenpacks/ZenPacks.zenoss.HPMonitor/ZenPacks/zenoss/HPMonitor/modeler/__init__.py trunk/zenpacks/ZenPacks.zenoss.HPMonitor/ZenPacks/zenoss/HPMonitor/modeler/plugins/__init__.py Log: fixes #569: make directories into packages with empty __init__.py files Added: trunk/zenpacks/ZenPacks.zenoss.DellMonitor/ZenPacks/zenoss/DellMonitor/modeler/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.DellMonitor/ZenPacks/zenoss/DellMonitor/modeler/plugins/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.HPMonitor/ZenPacks/zenoss/HPMonitor/modeler/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.HPMonitor/ZenPacks/zenoss/HPMonitor/modeler/plugins/__init__.py |
From: <sv...@ze...> - 2008-04-23 18:16:42
|
Author: noel Date: 2008-04-23 14:16:42 -0400 (Wed, 23 Apr 2008) New Revision: 9094 Modified: trunk/Products/ZenModel/skins/zenmodel/ipServiceDetail.pt Log: *refs #2678 re added monitored field on ipserviceDetail Modified: trunk/Products/ZenModel/skins/zenmodel/ipServiceDetail.pt =================================================================== --- trunk/Products/ZenModel/skins/zenmodel/ipServiceDetail.pt 2008-04-23 17:41:00 UTC (rev 9093) +++ trunk/Products/ZenModel/skins/zenmodel/ipServiceDetail.pt 2008-04-23 18:16:42 UTC (rev 9094) @@ -85,7 +85,7 @@ tal:content="python: '\n'.join(here.ipaddresses)"/> </td> </tr> - <tr tal:condition="python:here.protocol!='udp'"> + <tr> <td class="tableheader">Monitor</td> <td class="tablevalues" tal:condition="python:not here.cantMonitor() and manager"> |
From: <sv...@ze...> - 2008-04-23 17:41:08
|
Author: ian Date: 2008-04-23 13:41:00 -0400 (Wed, 23 Apr 2008) New Revision: 9093 Modified: trunk/Products/ZenModel/skins/zenmodel/deviceListMacro.pt Log: * Fixes #3015: Can't call pill macro on an IpAddress. Now we don't try. Modified: trunk/Products/ZenModel/skins/zenmodel/deviceListMacro.pt =================================================================== --- trunk/Products/ZenModel/skins/zenmodel/deviceListMacro.pt 2008-04-23 17:24:33 UTC (rev 9092) +++ trunk/Products/ZenModel/skins/zenmodel/deviceListMacro.pt 2008-04-23 17:41:00 UTC (rev 9093) @@ -78,14 +78,9 @@ tal:content="device/id">device </a> </td> - <td class='tablevalues' tal:define="severity python:4"> - <table width="100%" cellspacing='1' cellpadding='3' - tal:on-error="structure string: - <span class='errorvalues'>Events unavailable</span>"> - <tr> - <td tal:content="structure device/getEventPill"/> - </tr> - </table> + <td class='tablevalues' tal:define="severity python:4;"> + <tal:block tal:condition="python:device.meta_type=='Device'" + tal:content="structure device/getEventPill"/> </td> </tr> </tal:block> |
From: <sv...@ze...> - 2008-04-23 17:24:45
|
Author: ian Date: 2008-04-23 13:24:33 -0400 (Wed, 23 Apr 2008) New Revision: 9092 Modified: trunk/Products/ZenWidgets/skins/zenui/javascript/zenoss-core.js Log: * Fixes #1934: For some reason, calling focus() twice seems to do the trick. Modified: trunk/Products/ZenWidgets/skins/zenui/javascript/zenoss-core.js =================================================================== --- trunk/Products/ZenWidgets/skins/zenui/javascript/zenoss-core.js 2008-04-23 17:11:23 UTC (rev 9091) +++ trunk/Products/ZenWidgets/skins/zenui/javascript/zenoss-core.js 2008-04-23 17:24:33 UTC (rev 9092) @@ -1091,6 +1091,7 @@ var textboxes = elements[1]; var submits = elements[2]; var submt = submits[0]; + first.focus(); var connectTextboxes = function(box) { connect(box, 'onkeyup', function(e){ if (e.key().string=='KEY_ENTER') submt.click(); |
From: <sv...@ze...> - 2008-04-23 17:12:39
|
Author: ian Date: 2008-04-23 13:11:23 -0400 (Wed, 23 Apr 2008) New Revision: 9091 Modified: trunk/Products/ZenModel/skins/zenmodel/editCollection.pt Log: * Fixes #2543: Javascript syntax error was breaking all other js on the page Modified: trunk/Products/ZenModel/skins/zenmodel/editCollection.pt =================================================================== --- trunk/Products/ZenModel/skins/zenmodel/editCollection.pt 2008-04-23 16:20:14 UTC (rev 9090) +++ trunk/Products/ZenModel/skins/zenmodel/editCollection.pt 2008-04-23 17:11:23 UTC (rev 9091) @@ -103,9 +103,8 @@ // This is what keeps the return/enter key in the device filter // field from submitting the form. $('addToCollectionForm').onsubmit = function() {return false;} - - connect('addToCollectionBtn', 'onclick', - $('addToCollectionForm'), 'submit'); + var submitform = function(){$('addToCollectionForm').submit()}; + connect('addToCollectionBtn', 'onclick', submitform); connect('deviceFilter', 'onkeydown', handleDeviceKeys); connect('filterButton', 'onclick', getDeviceList); connect('itemType', 'onchange', handleItemType); |
From: <sv...@ze...> - 2008-04-23 16:20:31
|
Author: ian Date: 2008-04-23 12:20:14 -0400 (Wed, 23 Apr 2008) New Revision: 9090 Modified: trunk/Products/ZenModel/skins/zenmodel/zenrrdzoom.js Log: * Fixes #2542: Fixified swoopy graphs in IE7 Modified: trunk/Products/ZenModel/skins/zenmodel/zenrrdzoom.js =================================================================== --- trunk/Products/ZenModel/skins/zenmodel/zenrrdzoom.js 2008-04-23 14:51:13 UTC (rev 9089) +++ trunk/Products/ZenModel/skins/zenmodel/zenrrdzoom.js 2008-04-23 16:20:14 UTC (rev 9090) @@ -61,7 +61,7 @@ getData: function(url) { this.deferreds[url] = this.lock.acquire(); this.deferreds[url].addCallback(bind(function(){ - this.IFrameProxy.onload = this.registerResponse; + connect(this.IFrameProxy, 'onload', this.registerResponse); this.IFrameProxy.src = url; }, this)); }, @@ -319,7 +319,8 @@ }, loadImage : function() { - checkurl = this.url+'&getImage=&graphid='+this.obj.id+'&ftype=html'; + checkurl = this.url+'&getImage=&graphid='+this.obj.id+'&ftype=html'+ + '&ms='+new Date().getTime(); var onSuccess = bind(function(r) { if (r.responseText=='True') { if (this.obj.src!=this.url) { |
Author: jplouis Date: 2008-04-23 10:51:13 -0400 (Wed, 23 Apr 2008) New Revision: 9089 Added: trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/__init__.py trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/__init__.py trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/daemons/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/datasources/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/datasources/FtpMonitorDataSource.py trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/datasources/__init__.py trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/lib/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/lib/__init__.py trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/migrate/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/migrate/__init__.py trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/modeler/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/modeler/plugins/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/objects/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/objects/objects.xml trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/reports/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/skins/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/skins/ZenPacks.zenoss.FtpMonitor/ trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/skins/ZenPacks.zenoss.FtpMonitor/editFtpMonitorDataSource.pt trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/skins/ZenPacks.zenoss.FtpMonitor/placeholder.txt trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/__init__.py trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/setup.py Log: inital checkin of ftp zenpack; refs #2981 Added: trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/datasources/FtpMonitorDataSource.py Added: trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/datasources/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/lib/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/migrate/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/objects/objects.xml Added: trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/skins/ZenPacks.zenoss.FtpMonitor/editFtpMonitorDataSource.pt Added: trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/FtpMonitor/skins/ZenPacks.zenoss.FtpMonitor/placeholder.txt Added: trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/ZenPacks/zenoss/__init__.py Added: trunk/zenpacks/ZenPacks.zenoss.FtpMonitor/setup.py |
From: <sv...@ze...> - 2008-04-23 14:28:01
|
Author: chris Date: 2008-04-23 10:27:47 -0400 (Wed, 23 Apr 2008) New Revision: 9088 Removed: trunk/zendocs/AdminGuide/docbook/IncludedReports.xml~ trunk/zendocs/AdminGuide/docbook/ModelingSNMP.xml~ trunk/zendocs/AdminGuide/docbook/TestingWMI.xml~ trunk/zendocs/AdminGuide/docbook/WatchList.xml~ trunk/zendocs/AdminGuide/docbook/WinSNMPInformant.xml~ trunk/zendocs/AdminGuide/docbook/WindowsEventLog.xml~ trunk/zendocs/AdminGuide/docbook/WindowsMon-CH.xml~ trunk/zendocs/AdminGuide/docbook/troubleappendix.xml~ trunk/zendocs/AdminGuide/docbook/troubleshooting.xml~ trunk/zendocs/AdminGuide/docbook/windowszprop.xml~ trunk/zendocs/AdminGuide/docbook/zProperties-CH.xml~ trunk/zendocs/AdminGuide/docbook/zenjmx.xml~ Log: * removed. these files are temporary and shouldn't be here Deleted: trunk/zendocs/AdminGuide/docbook/IncludedReports.xml~ Deleted: trunk/zendocs/AdminGuide/docbook/ModelingSNMP.xml~ Deleted: trunk/zendocs/AdminGuide/docbook/TestingWMI.xml~ Deleted: trunk/zendocs/AdminGuide/docbook/WatchList.xml~ Deleted: trunk/zendocs/AdminGuide/docbook/WinSNMPInformant.xml~ Deleted: trunk/zendocs/AdminGuide/docbook/WindowsEventLog.xml~ Deleted: trunk/zendocs/AdminGuide/docbook/WindowsMon-CH.xml~ Deleted: trunk/zendocs/AdminGuide/docbook/troubleappendix.xml~ Deleted: trunk/zendocs/AdminGuide/docbook/troubleshooting.xml~ Deleted: trunk/zendocs/AdminGuide/docbook/windowszprop.xml~ Deleted: trunk/zendocs/AdminGuide/docbook/zProperties-CH.xml~ Deleted: trunk/zendocs/AdminGuide/docbook/zenjmx.xml~ |