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-05-23 15:07:26
|
Author: jplouis Date: 2008-05-23 11:07:33 -0400 (Fri, 23 May 2008) New Revision: 9339 Modified: trunk/Products/ZenModel/skins/zenmodel/addDevice.pt Log: remove add collector section from the Add Device page. Modified: trunk/Products/ZenModel/skins/zenmodel/addDevice.pt =================================================================== --- trunk/Products/ZenModel/skins/zenmodel/addDevice.pt 2008-05-23 13:17:18 UTC (rev 9338) +++ trunk/Products/ZenModel/skins/zenmodel/addDevice.pt 2008-05-23 15:07:33 UTC (rev 9339) @@ -333,17 +333,6 @@ name="addDeviceGroup:method" value="Add" /> </td> </tr> - <tr> - <td class="tableheader" align="left">New Collector</td> - <td class="tablevalues" align="left" colspan="3"> - <input class="tablevalues" type="text" - size="40" name="newPerformanceMonitor" - onkeypress="return submitViaEnter(event, - 'setPerformanceMonitor');"/> - <input class="tableheader" type="submit" - name="setPerformanceMonitor:method" value="Add" /> - </td> - </tr> </tal:block> <tr> <td class=tableheader align="left" > |
From: <sv...@ze...> - 2008-05-23 13:17:13
|
Author: ian Date: 2008-05-23 09:17:18 -0400 (Fri, 23 May 2008) New Revision: 9338 Added: sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/zenoss-utils.js Log: * Refs #3217: Refactored js to use yuiloader instead of willy-nilly script tags, so dependencies are loaded in proper order Added: sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/zenoss-utils.js |
From: <sv...@ze...> - 2008-05-23 13:16:43
|
Author: ian Date: 2008-05-23 09:16:49 -0400 (Fri, 23 May 2008) New Revision: 9337 Modified: sandboxen/ian/Products-jschanges/ZenEvents/skins/zenevents/viewEvents.pt sandboxen/ian/Products-jschanges/ZenEvents/skins/zenevents/viewHistoryEvents.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/Dashboard.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/administeredDevices.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/commandOutputTemplate.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/commandTestOutput.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceListMacro.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceLoggingHeader.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceOsDetail.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceStatus.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/discoverLoggingHeader.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/editSettings.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/templates.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/userCommandsMacros.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/viewGraphReport.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/viewPerformanceDetail.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/zenossDotNet.pt sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/zenrrdzoom.js sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/ZenAutoCompleter-example.pt sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/dialogmacros.pt sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/devicezengrid.js sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/geomap-2.1.js sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/geomap.js sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/zenoss-core.js sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/locationGeoMap.pt sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/simpleLocationGeoMap.pt sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/zenuimacros.pt Log: * Refs #3217: Refactored js to use yuiloader instead of willy-nilly script tags, so dependencies are loaded in proper order Modified: sandboxen/ian/Products-jschanges/ZenEvents/skins/zenevents/viewEvents.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenEvents/skins/zenevents/viewEvents.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenEvents/skins/zenevents/viewEvents.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -16,10 +16,6 @@ </div> <link type="text/css" rel="stylesheet" href="css/zengrid.css"/> -<script type="text/javascript" src="/zport/js/zenutils.js"></script> -<script type="text/javascript" src="/zport/javascript/zengrid.js"></script> -<script type="text/javascript" - src="/zport/portal_skins/zenevents/zeneventsfuncs.js"></script> <form name="control" method="post" tal:attributes="action here/absolute_url_path" tal:define=" @@ -88,12 +84,16 @@ <!-- BEGIN TABLE CONTENTS --> <tr><td> <div id="gridcontainer" style="width:100%;"> </div> -<script tal:content="string: +<script tal:define="ref python:test(here.dmd.ZenUsers.getUserSettings().eventConsoleRefresh, 'On', 'Off')" + tal:content="string: var eventZenGridBuffer, eventZenGrid; function updateEventConsoleMessage(msg) { $('msgbox').innerHTML = msg; } -addLoadEvent( function() { +addLoadEvent(function(){ +var loader = YAHOO.zenoss.getLoader(); +loader.require(['eventzengrid']); +loader.insert({onSuccess: function() { eventZenGridBuffer = new ZenGridBuffer(); eventZenGrid = new ZenGrid('gridcontainer', 'getJSONEventsInfo', 'mygrid', eventZenGridBuffer, @@ -102,21 +102,9 @@ connect('filter', 'onkeyup', eventZenGrid.doEventLivesearch); connect('state', 'onchange', eventZenGrid.refreshFromFormElement); connect('severity', 'onchange', eventZenGrid.refreshFromFormElement); - -});"> + eventZenGrid.turnRefresh${ref}(); +}})});"> </script> -<script tal:condition=" -python:here.dmd.ZenUsers.getUserSettings().eventConsoleRefresh"> -addLoadEvent( function() { - eventZenGrid.turnRefreshOn(); -}); -</script> -<script tal:condition=" -python:not here.dmd.ZenUsers.getUserSettings().eventConsoleRefresh"> -addLoadEvent( function() { - eventZenGrid.turnRefreshOff(); -}); -</script> </td></tr> <!-- END TABLE CONTENTS --> </tal:block> Modified: sandboxen/ian/Products-jschanges/ZenEvents/skins/zenevents/viewHistoryEvents.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenEvents/skins/zenevents/viewHistoryEvents.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenEvents/skins/zenevents/viewHistoryEvents.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -4,10 +4,6 @@ <span metal:define-macro="body"> <link type="text/css" rel="stylesheet" href="css/zengrid.css"/> <script type="text/javascript"> var djConfig = { isDebug: true }; </script> -<script type="text/javascript" src="/zport/js/zenutils.js"></script> -<script type="text/javascript" src="/zport/javascript/zengrid.js"></script> -<script type="text/javascript" - src="/zport/portal_skins/zenevents/zeneventsfuncs.js"></script> <script type="text/javascript" src="/zport/portal_skins/zenmodel/datePicker.js"> </script> @@ -114,6 +110,9 @@ <script tal:content="string: var eventZenGridBuffer, eventZenGrid; addLoadEvent( function() { +var loader = YAHOO.zenoss.getLoader(); +loader.require(['eventzengrid']); +loader.insert({onSuccess:function(){ eventZenGridBuffer = new ZenGridBuffer(); eventZenGrid = new ZenGrid('gridcontainer', 'getJSONHistoryEventsInfo', 'mygrid', eventZenGridBuffer, @@ -121,7 +120,7 @@ connect('filter', 'onkeyup', eventZenGrid.doEventLivesearch); connect('state', 'onchange', eventZenGrid.refreshFromFormElement); connect('severity', 'onchange', eventZenGrid.refreshFromFormElement); -});"> +}})});"> </script> <script type="text/javascript"> Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/Dashboard.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/Dashboard.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/Dashboard.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -44,8 +44,9 @@ ContainerObject.rightCol().addPortlet(p3); } } -YAHOO.zenoss.loader.require(['portletsource']); -YAHOO.zenoss.loader.insert({ 'onSuccess':initDashboardPortlets }); +var loader = YAHOO.zenoss.getLoader(); +loader.require(['portletsource']); +loader.insert({ 'onSuccess':initDashboardPortlets }); </script> </tal:block> </tal:block> Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/administeredDevices.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/administeredDevices.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/administeredDevices.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -17,10 +17,12 @@ q.input.name = 'deviceName' } -YAHOO.zenoss.loader.require(['zenautocomplete']); -YAHOO.zenoss.loader.insert(); +var loader = YAHOO.zenoss.getLoader(); +loader.require(['zenautocomplete']); +loader.insert(function(){ + $('dialog').addLoadEvent('dialog_addAdministeredDevice', function() { createAnAutocompleter('deviceLiveSearch') ;} ) +}); // don't pass it a callback, calling it later manually -$('dialog').addLoadEvent('dialog_addAdministeredDevice', function() { createAnAutocompleter('deviceLiveSearch') ;} ) </script> Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/commandOutputTemplate.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/commandOutputTemplate.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/commandOutputTemplate.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -36,7 +36,6 @@ <div metal:use-macro="here/templates/macros/leftPane"/> <div id="rightPane"/> <div metal:use-macro="here/templates/macros/tabsPane"/> - <script type="text/javascript">zenPageInit()</script> <div id="contentPane"> Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/commandTestOutput.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/commandTestOutput.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/commandTestOutput.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -36,7 +36,6 @@ <div metal:use-macro="here/templates/macros/leftPane"/> <div id="rightPane"/> <div metal:use-macro="here/templates/macros/tabsPane"/> - <script type="text/javascript">zenPageInit()</script> <div id="contentPane"> Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceListMacro.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceListMacro.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceListMacro.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -247,23 +247,23 @@ <tal:block metal:define-macro="devGridBody"> <tr><td> <link type="text/css" rel="stylesheet" href="css/zengrid.css"/> - <script type="text/javascript" - src="/zport/javascript/devicezengrid.js"></script> - <div id="gridcontainer" style="width:100%;"> </div> <tal:block tal:define="ismanager python:test( here.zport.has_permission('View', here.dmd), 'true', 'false')"> <script tal:content="string: var devZenGridBuffer, devZenGrid; - addLoadEvent( function() { + loader = YAHOO.zenoss.getLoader(); + loader.require(['devicezengrid']); + loader.insert({onSuccess: function() { isManager = ${ismanager}; devZenGridBuffer = new DeviceZenGridBuffer(); devZenGrid = new DeviceZenGrid('gridcontainer', 'getJSONDeviceInfo', 'mygrid', devZenGridBuffer, '${here/absolute_url_path}'); connect('filter', 'onkeypress', devZenGrid.doEventLivesearch); - });"></script> + }}); +"></script> </tal:block> </td></tr> </tal:block>:w Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceLoggingHeader.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceLoggingHeader.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceLoggingHeader.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -31,7 +31,6 @@ <div metal:use-macro="here/leftPane/macros/leftPane"/> <div id="rightPane"/> <div metal:use-macro="here/templates/macros/tabsPane"/> - <script type="text/javascript">zenPageInit()</script> <div id="contentPane"> <table class=" zentable"> Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceOsDetail.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceOsDetail.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceOsDetail.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -31,11 +31,13 @@ q.input.name = 'className' } -YAHOO.zenoss.loader.require(['zenautocomplete']); -YAHOO.zenoss.loader.insert(); +var loader = YAHOO.zenoss.getLoader(); +loader.require(['zenautocomplete']); +loader.insert( function(){ + $('dialog').addLoadEvent('dialog_addIpService', function() { createIpServiceClassAutocompleter('ipServiceClassLiveSearch') ;} ) + $('dialog').addLoadEvent('dialog_addWinService', function() { createWinServiceClassAutocompleter('winServiceClassLiveSearch') ;} ) +}); // don't pass it a callback, calling it later manually -$('dialog').addLoadEvent('dialog_addIpService', function() { createIpServiceClassAutocompleter('ipServiceClassLiveSearch') ;} ) -$('dialog').addLoadEvent('dialog_addWinService', function() { createWinServiceClassAutocompleter('winServiceClassLiveSearch') ;} ) </script> <tal:block Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceStatus.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceStatus.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/deviceStatus.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -92,8 +92,9 @@ 'component-event-table', mycolumndefs, dataSource, oConfigs); } addLoadEvent(function() { - YAHOO.zenoss.loader.require(["datatable", "datatablesamskin"]); - YAHOO.zenoss.loader.insert({onSuccess:makeComponentDataTable}); + var loader = YAHOO.zenoss.getLoader(); + loader.require(["datatable", "datatablesamskin"]); + loader.insert({onSuccess:makeComponentDataTable}); }); </script> </div> Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/discoverLoggingHeader.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/discoverLoggingHeader.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/discoverLoggingHeader.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -31,7 +31,6 @@ <div metal:use-macro="here/templates/macros/leftPane"/> <div id="rightPane"/> <div metal:use-macro="here/templates/macros/tabsPane"/> - <script type="text/javascript">zenPageInit()</script> <div id="contentPane"> <table class=" zentable"> Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/editSettings.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/editSettings.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/editSettings.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -27,8 +27,9 @@ mySimpleDialog.render(currentDocument().body); mySimpleDialog.show(); } -YAHOO.zenoss.loader.require(['container']); -YAHOO.zenoss.loader.insert(); +var loader=YAHOO.zenoss.getLoader(); +loader.require(['container']); +loader.insert(); </script> <form method=post tal:attributes="action string:${here/absolute_url_path}"> Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/templates.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/templates.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/templates.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -173,12 +173,24 @@ href="zenoss_ie6.css" > <![endif]--> <script type="text/javascript" src="js/MochiKit.js"></script> - <script> var YAHOO_config={load:{base: '/zport/dmd/yui/'}};</script> <script type="text/javascript" language="javascript" src="/zport/dmd/yui/yahoo/yahoo-min.js"></script> <script type="text/javascript" language="javascript" src="/zport/dmd/yui/yuiloader/yuiloader-beta-min.js"></script> <script type="text/javascript" src="javascript/zenoss-core.js"></script> + <script> + var loader = YAHOO.zenoss.getLoader(); + loader.require(['zenossutils']); + loader.insert({onSuccess:function(){ + removeElementAutoCompletes(); + applyBrowserSpecificStyles(); + addSelectionBar(); + checkForCollapsed(); + connectCheckboxListeners(); + notifyParentOfNewUrl(); + zenPageInit(); + }}); + </script> </tal:block> <!-- ====================================================== Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/userCommandsMacros.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/userCommandsMacros.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/userCommandsMacros.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -119,7 +119,12 @@ </li> </ul> </div> -<script>registerSubmenu('RunCommands_parent','RunCommands_submenu'); +<script> +var loader = YAHOO.zenoss.getLoader(); +loader.require(['zenossutils']); +loader.insert({onSuccess:function(){ + registerSubmenu('RunCommands_parent','RunCommands_submenu'); +}}); </script> </li> </tal:block> Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/viewGraphReport.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/viewGraphReport.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/viewGraphReport.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -38,6 +38,11 @@ } printableForm.submit(); } +addLoadEvent(function() { + var loader = YAHOO.zenoss.getLoader(); + loader.require(['swoopygraphs']); + loader.insert({onSuccess:function(){zenRRDInit()}}); +}); </script> @@ -106,10 +111,6 @@ </tal:block> -<script> - document.write('<\/script><script src="zenrrdzoom.js"><\/script><script>'); -</script> - <!-- END TABLE CONTENTS --> </tal:block> Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/viewPerformanceDetail.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/viewPerformanceDetail.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/viewPerformanceDetail.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -43,27 +43,34 @@ id="refreshRate" size='2' value='60'/> <script> var button = $('refreshButton'); - var refreshMgr; - function turnRefreshOff() { - try { - refreshMgr.cancelRefresh(); - } catch(e) { noop(); } - setStyle(button, - {'background-image':'url(img/refresh_on.png)'}); - button.onclick = turnRefreshOn; - button.blur(); - } - function turnRefreshOn () { - var rate = $('refreshRate').value; - var refreshMgr = new RefreshManager(rate, - function(){resetGraphs($('drange_select').value)} - ); - setStyle(button, - {'background-image':'url(img/refresh_off.png)'}); - button.onclick = turnRefreshOff; - button.blur(); - } - turnRefreshOn(); + var refreshMgr, turnRefreshOff, turnRefreshOn; + addLoadEvent(function() { + var loader = YAHOO.zenoss.getLoader(); + loader.require(['swoopygraphs']); + loader.insert({onSuccess:function(){ + zenRRDInit(); + turnRefreshOff = function() { + try { + refreshMgr.cancelRefresh(); + } catch(e) { noop(); } + setStyle(button, + {'background-image':'url(img/refresh_on.png)'}); + button.onclick = turnRefreshOn; + button.blur(); + } + turnRefreshOn = function() { + var rate = $('refreshRate').value; + var refreshMgr = new RefreshManager(rate, + function(){resetGraphs($('drange_select').value)} + ); + setStyle(button, + {'background-image':'url(img/refresh_off.png)'}); + button.onclick = turnRefreshOff; + button.blur(); + } + turnRefreshOn(); + }}); + }); </script> <tal:block metal:define-slot="filterslot"> </tal:block> @@ -105,9 +112,6 @@ </tal:block> </tal:block> -<script> - document.write('<\/script><script src="zenrrdzoom.js"><\/script><script>'); -</script> <!-- END TABLE CONTENTS --> Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/zenossDotNet.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/zenossDotNet.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/zenossDotNet.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -1,8 +1,9 @@ <tal:block metal:use-macro="here/templates/macros/page1"> <tal:block metal:fill-slot="contentPane"> <script> - YAHOO.zenoss.loader.require(['container']); - YAHOO.zenoss.loader.insert(); + var loader=YAHOO.zenoss.getLoader(); + loader.require(['container']); + loader.insert(); function installZenPack(packName) { url = '/zport/dmd/ZenPackManager/fetchZenPack'; qs = {packName:packName}; Modified: sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/zenrrdzoom.js =================================================================== --- sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/zenrrdzoom.js 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenModel/skins/zenmodel/zenrrdzoom.js 2008-05-23 13:16:49 UTC (rev 9337) @@ -7,9 +7,6 @@ ##################################################### */ - - - var zoom_factor = 1.5; var pan_factor = 3; // Fraction of graph to move var drange_re = /&drange=([0-9]*)/; @@ -492,4 +489,5 @@ } } -addLoadEvent(zenRRDInit); +YAHOO.register('swoopygraphs', YAHOO.zenoss, {}); + Modified: sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/ZenAutoCompleter-example.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/ZenAutoCompleter-example.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/ZenAutoCompleter-example.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -15,8 +15,9 @@ ); } -YAHOO.zenoss.loader.require(['zenautocomplete']); -YAHOO.zenoss.loader.insert({onSuccess:createAnAutocompleter}); // pass it a callback +var loader = YAHOO.zenoss.getLoader(); +loader.require(['zenautocomplete']); +loader.insert({onSuccess:createAnAutocompleter}); // pass it a callback </script> Modified: sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/dialogmacros.pt =================================================================== --- sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/dialogmacros.pt 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/dialogmacros.pt 2008-05-23 13:16:49 UTC (rev 9337) @@ -1,7 +1,7 @@ <!--============Basic dialog box wrapper===============--> <tal:block metal:define-macro="dialog"> -<div id="dialog" class="dialog"> -<div id="dialog_innercontent"> +<div id="dialog" class="dialog" style="visibility:hidden;position:absolute"> +<div id="dialog_innercontent" style="visibility:visible"> <tal:block metal:define-slot="dialog_content"> This is a dialog box. </tal:block> @@ -9,8 +9,15 @@ <img id="dialog_close" src="img/close.gif" class="dialog_close"/> </div> <script> -var mydialog = new Dialog.Box($('dialog')); -connect('dialog_close','onclick', mydialog.box.hide); +loader = YAHOO.zenoss.getLoader(); +loader.require(['zenossutils']); +loader.insert({ + onSuccess: function(){ + mydialog = new Dialog.Box($('dialog')); + connect('dialog_close','onclick', mydialog.box.hide); + $('dialog').style.visibility = ''; + } +}); </script> </tal:block> Modified: sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/devicezengrid.js =================================================================== --- sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/devicezengrid.js 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/devicezengrid.js 2008-05-23 13:16:49 UTC (rev 9337) @@ -1,5 +1,7 @@ var Class = YAHOO.zenoss.Class; +YAHOO.namespace('YAHOO.zenoss.zengrid'); + var isManager = true; var ZenGridLoadingMsg = Class.create(); @@ -33,7 +35,7 @@ return new Coordinates((dims.w/2)+pos.x, (dims.h/2)+pos.y); }, show: function(msg) { - if (msg) setInnerHTML($('zengridload_content'),msg); + if (msg) YAHOO.zenoss.setInnerHTML($('zengridload_content'),msg); var p = this.getViewportCenter(); var d = getElementDimensions(this.framework); var pos = new Coordinates(p.x-(d.w/2),p.y-(d.h/2)); @@ -393,11 +395,11 @@ populateRow: function(row, data) { var stuffz = row.getElementsByTagName('div') for (i=0;i<stuffz.length;i++) { - setInnerHTML(stuffz[i], data[i]); + YAHOO.zenoss.setInnerHTML(stuffz[i], data[i]); } if (isManager) { var cb = '<input type="checkbox" style="visibility:hidden"/>'; - setInnerHTML(stuffz[0], cb); + YAHOO.zenoss.setInnerHTML(stuffz[0], cb); setStyle(stuffz[0], {'width':'20px'}); } }, @@ -509,7 +511,7 @@ table = this.zgtable; var cells = getElementsByTagAndClassName('div', 'cell_inner', table); for (i=0;(cell=cells[i]);i++){ - setInnerHTML(cell, ''); + YAHOO.zenoss.setInnerHTML(cell, ''); } }, setTableNumRows: function(numrows) { @@ -565,13 +567,13 @@ var firstcol = yo[0]; if (isManager) { mydata = concat([''],mydata); - setInnerHTML(divs[0], chkbox); + YAHOO.zenoss.setInnerHTML(divs[0], chkbox); setStyle(divs[0], {'width':'21px'}); connect($(evid), 'onclick', this.markAsChecked); } for (j=isManager?1:0;j<yo.length;j++) { var cellwidth = this.abswidths[j] - setInnerHTML(divs[j], unescape(mydata[j])); + YAHOO.zenoss.setInnerHTML(divs[j], unescape(mydata[j])); yo[j].title = scrapeText(divs[j]); } @@ -748,7 +750,7 @@ 500); }, updateStatusBar: function(rownum) { - setInnerHTML($('currentRows'), rownum+1 + '-' + + YAHOO.zenoss.setInnerHTML($('currentRows'), rownum+1 + '-' + parseInt(parseInt(rownum)+ Math.min(parseInt(this.numRows), parseInt(this.buffer.totalRows)) ) + ' of ' + this.buffer.totalRows); @@ -837,3 +839,4 @@ } } +YAHOO.register("devicezengrid", YAHOO.zenoss.zengrid, {}); Modified: sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/geomap-2.1.js =================================================================== --- sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/geomap-2.1.js 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/geomap-2.1.js 2008-05-23 13:16:49 UTC (rev 9337) @@ -292,8 +292,5 @@ } -addLoadEvent(function() { - YAHOO.zenoss.loader.require("container"); - YAHOO.zenoss.loader.insert({onSuccess:geomap_initialize}) -}); +YAHOO.register('simplegeomap', YAHOO.zenoss, {}); Modified: sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/geomap.js =================================================================== --- sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/geomap.js 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/geomap.js 2008-05-23 13:16:49 UTC (rev 9337) @@ -262,8 +262,4 @@ } -addLoadEvent(function() { - YAHOO.zenoss.loader.require("container"); - YAHOO.zenoss.loader.insert({onSuccess:geomap_initialize}) -}); - +YAHOO.register('geomap', YAHOO.zenoss, {}); Modified: sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/zenoss-core.js =================================================================== --- sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/zenoss-core.js 2008-05-23 13:11:46 UTC (rev 9336) +++ sandboxen/ian/Products-jschanges/ZenWidgets/skins/zenui/javascript/zenoss-core.js 2008-05-23 13:16:49 UTC (rev 9337) @@ -1,1169 +1,97 @@ -// Set up the Javascript loader -loader = new YAHOO.util.YUILoader(); -loader.base = '/zport/dmd/yui/'; - -// Register zenoss scripts -loader.addModule({ - name: "datatablesamskin", - type: "css", - fullpath: "/zport/dmd/yui/datatable/assets/skins/sam/datatable.css" -}); -loader.addModule({ - name: "autocompleteskin", - type: "css", - fullpath: "/zport/dmd/yui/autocomplete/assets/skins/sam/autocomplete.css" -}); -loader.addModule({ - name: "zenautocomplete", - type: "js", - fullpath: "/zport/dmd/javascript/zenautocomplete.js", - requires: ["autocomplete", "animation", "autocompleteskin"] -}); -loader.addModule({ - name: "portlet", - type: "js", - fullpath: "/zport/dmd/javascript/portlet.js", - requires: ["dragdrop", "event", "dom", "animation", - "datasource", "datatable", "datatablesamskin", - "container", "button","zenautocomplete"] -}); -loader.addModule({ - name: "portletsource", - type: "js", - fullpath: "/zport/ZenPortletManager/get_source", - requires: ["portlet"] -}); - -//Declare the Zenoss namespace -YAHOO.namespace("zenoss"); - -// Put the loader somewhere accessible -YAHOO.namespace("zenoss.loader"); -YAHOO.zenoss.loader = loader; - - -// Define a helpful "class" function (thanks, Prototype) - -var Class={ - create:function(){ - return function(){ - bindMethods(this); - this.__init__.apply(this,arguments); - } - } +// Graceful degradation of Firebug console object +// via http://ajaxian.com/archives/graceful-degradation-of-firebug-console-object +if (! ("console" in window) || !("firebug" in console)) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group" + , "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i <names.length; ++i) window.console[names[i]] = function() {}; } -YAHOO.zenoss.Class = Class; - - -function bindMethodsTo(src, scope) { - for (var property in src) { - if (typeof src[property]=='function') { - src[property] = method(scope, src[property]); +// Set up the Javascript loader +function getLoader() { + loader = new YAHOO.util.YUILoader({ + onProgress: function(o) { + console.info(o.name + " module loaded."); + }, + onFailure: function(msg, xhrreq) { + console.warn('FAILURE: ' + msg) } - } -} - -// Subclassing! (thanks, me) - -var Subclass={ - create: function(klass){ - return function() { - this.superclass = {}; - for (var property in klass.prototype) { - if (!(property in this)) - this[property] = klass.prototype[property]; - this.superclass[property] = klass.prototype[property]; - } - bindMethods(this); - bindMethodsTo(this.superclass, this); - this.__init__.apply(this, arguments); - } - } -} -YAHOO.zenoss.Subclass = Subclass; - - -function purge(d) { - var a = d.attributes, i, l, n; - if (a) { - l = a.length; - for (i = 0; i < l; i += 1) { - n = a[i].name; - if (typeof d[n] === 'function') { - d[n] = null; - } - } - } - a = d.childNodes; - if (a) { - l = a.length; - for (i = 0; i < l; i += 1) { - purge(d.childNodes[i]); - } - } -} -YAHOO.zenoss.purge = purge; - -// Code from Julien Lecomte of Yahoo! -YAHOO.zenoss.loader.require(['dom', 'event']); -YAHOO.zenoss.loader.insert(); -function setInnerHTML (el, html) { - el = YAHOO.util.Dom.get(el); - if (!el || typeof html !== 'string') { - return null; - } - // Break circular references. - (function (o) { - var a = o.attributes, i, l, n, c; - if (a) { - l = a.length; - for (i = 0; i <l; i += 1) { - n = a[i].name; - if (typeof o[n] === 'function') { - o[n] = null; - } - } - } - a = o.childNodes; - if (a) { - l = a.length; - for (i = 0; i <l; i += 1) { - c = o.childNodes[i]; - // Purge child nodes. - arguments.callee(c); - // Removes all listeners attached to the element via YUI's addListener. - YAHOO.util.Event.purgeElement(c); - } - } - })(el); - // Remove scripts from HTML string, and set innerHTML property - el.innerHTML = html.replace(/<script[^>]*>((.|[\r\n])*?)<\\?\/script>/ig, ""); - // Return a reference to the first child - return el.firstChild; -}; -YAHOO.zenoss.setInnerHTML = setInnerHTML; - -function unescapeHTML(str) { - if (!YAHOO.zenoss._dummydiv) YAHOO.zenoss._dummydiv=DIV(null, null); - _dummydiv = YAHOO.zenoss._dummydiv; - _dummydiv.innerHTML = str; - return _dummydiv.textContent; -} -YAHOO.zenoss.unescapeHTML = unescapeHTML; - -function getSelectValues(element) { - var element = $(element); - var values = []; - forEach(element.options, function(opt){ - if(opt.selected) values.push(opt.value); }); - return values; -} -YAHOO.zenoss.getSelectValues = getSelectValues; + loader.base = '/zport/dmd/yui/'; -/************************************ - * Less universally useful stuff - * (formerly separate scripts) - ***********************************/ - -function toggleElement(elementid) { - var element = $(elementid); - if (element.visible == 0) { - element.style.display = "none"; - element.visible = 1; - } else { - element.style.display = ""; - element.visible = 0; - } -} - - -/* Panel Effects */ - -function toggleVisible(elem) { - toggleElementClass("invisible", elem); -} - -function makeVisible(elem) { - removeElementClass(elem, "invisible"); -} - -function makeInvisible(elem) { - addElementClass(elem, "invisible"); -} - -function isVisible(elem) { - return !hasElementClass(elem, "invisible"); -} - -function getCookie(name) { - var s = document.cookie.indexOf(name + "="); - if ((!s) && name!=document.cookie.substring(0,name.length)) { - return null; - } - if (s < 0) { - return null; - } - var e = document.cookie.indexOf(';', s+name.length+1); - if (e<0) e = document.cookie.length; - if (e==s) { - return ''; - } - return unescape(document.cookie.substring(s+name.length+1, e)); -} - -function setCookie( name, value, expires, path, domain, secure ) { - var today = new Date(); - today.setTime( today.getTime() ); - if ( expires ) { - expires = expires * 1000 * 60 * 60 * 24; - } - var expires_date = new Date( today.getTime() + (expires) ); - document.cookie = name + "=" +escape( value ) + - ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + - ( ( path ) ? ";path=" + path : "" ) + - ( ( domain ) ? ";domain=" + domain : "" ) + - ( ( secure ) ? ";secure" : "" ); -} - -function deleteCookie(name,path,domain) { - if (getCookie(name)) { - document.cookie = - name + '=' + - ( (path) ? ';path=' + path : '') + - ( (domain) ? ';domain=' + domain : '') + - ';expires=Thu, 01-Jan-1970 00:00:01 GMT'; - } -} - -function hideLeftPane() { - var leftPane = $('leftPane'); - var rightPane = $('rightPane'); - //showElement('leftPaneToggle'); - makeInvisible(leftPane); - makeInvisible($('paneToggle')); - setStyle('paneToggle', { - 'background-image':'url(img/paneToggle_bg_collapsed.gif)', - 'border-right':'1px solid black' + // Register zenoss scripts + loader.addModule({ + name: "datatablesamskin", + type: "css", + fullpath: "/zport/dmd/yui/datatable/assets/skins/sam/datatable.css" }); - if ($('breadCrumbPane')) { - setStyle('breadCrumbPane', { 'padding-left':'35px'});} - setStyle('rightPane', {'margin-left':'12px'}); - setStyle('leftPaneToggle', { - 'background':'transparent url(img/leftpanetoggle_bg.gif) top left repeat-x', - 'height':'30px', - 'width':'30px' + loader.addModule({ + name: "autocompleteskin", + type: "css", + fullpath: "/zport/dmd/yui/autocomplete/assets/skins/sam/autocomplete.css" }); - disconnectAll('leftPaneToggle'); - connect('leftPaneToggle', 'onclick', function(){ - clearTimeout(t); - doShowing(); + loader.addModule({ + name: "zenautocomplete", + type: "js", + fullpath: "/zport/dmd/javascript/zenautocomplete.js", + requires: ["autocomplete", "animation", "autocompleteskin","zenossutils"] }); - doHover(); -} - -function showLeftPane() { - var leftPane = $('leftPane'); - var rightPane = $('rightPane'); - makeVisible(leftPane); - makeVisible($('paneToggle')); - //hideElement('leftPaneToggle'); - setStyle('paneToggle', { - 'background-image':'url(img/paneToggle_bg.gif)', - 'border-right':'1px solid black' + loader.addModule({ + name: "portlet", + type: "js", + fullpath: "/zport/dmd/javascript/portlet.js", + requires: ["dragdrop", "event", "dom", "animation", + "datasource", "datatable", "datatablesamskin", + "container", "button","zenautocomplete", "zenossutils"] }); - if ($('breadCrumbPane')) { - setStyle('breadCrumbPane', { 'padding-left':'120px'});} - setStyle(rightPane, {'margin-left':'120px'}); - setStyle('leftPaneToggle', { - 'background':'#5a6f8f url(img/leftpanetoggle_bg_expanded.gif) ' + - 'top left repeat-x', - 'height':'30px', - 'width':'115px' + loader.addModule({ + name: "portletsource", + type: "js", + fullpath: "/zport/ZenPortletManager/get_source", + requires: ["portlet"] }); - disconnectAll('leftPaneToggle'); - connect('leftPaneToggle','onclick',toggleLeftPane); - cancelHover(); -} - -function toggleLeftPane() { - var leftPane = $('leftPane'); - if (!isVisible(leftPane)) { showLeftPane() } - else { hideLeftPane() } -} - -function doHiding() { - hideElement($('leftPane')); - hideElement($('paneToggle')); -} - -function doShowing() { - showElement($('leftPane')); - showElement($('paneToggle')); -} - -var t; -function doHover() { - var leftPane = $('leftPane'); - var paneToggle = $('paneToggle'); - var leftPaneToggle = $('leftPaneToggle'); - var lpPopup = leftPane; - setStyle(paneToggle, { - 'z-index':'10000' + loader.addModule({ + name: "zenossutils", + type: "js", + fullpath: "/zport/javascript/zenoss-utils.js", + requires: ['dom', 'event'] }); - setStyle(lpPopup, { - 'position':'absolute', -// 'background-color':'white', -// 'padding':'2px', -// 'padding-top':'2px', - 'z-index':'10000' + loader.addModule({ + name: "devicezengrid", + type: "js", + fullpath: "/zport/dmd/javascript/devicezengrid.js", + requires: ['zenossutils'] }); - connect(leftPane, 'onmouseover', function(){ - clearTimeout(t); - doShowing(); + loader.addModule({ + name: "eventzengrid", + type: "js", + fullpath: "/zport/dmd/javascript/zengrid.js", + requires: ['zenossutils'] }); - connect($('paneToggle'), 'onmouseover', function(){ - clearTimeout(t); - doShowing(); + loader.addModule({ + name: 'geomap', + type: 'js', + fullpath: '/zport/dmd/javascript/geomap.js', + requires: ['zenossutils', 'container'] }); - connect(paneToggle,'onmouseout',function(){ - t=setTimeout('doHiding()',500); + loader.addModule({ + name: 'simplegeomap', + type: 'js', + fullpath: '/zport/dmd/javascript/geomap-2.1.js', + requires: ['zenossutils', 'container'] }); - connect(leftPane, 'onmouseout', function(){ - t=setTimeout('doHiding()',500); + loader.addModule({ + name: 'swoopygraphs', + type: 'js', + fullpath: '/zport/dmd/zenrrdzoom.js', + requires: ['zenossutils'] }); - connect('leftPaneToggle', 'onmouseout', function(){ - t=setTimeout('doHiding()',500); - }); - connect(paneToggle, 'onclick', function(){ - clearTimeout(t); - toggleLeftPane(); - }); - connect('leftPaneToggle','onmouseover', function() { - setStyle('leftPaneToggle', { - 'background':'transparent ' + - 'url("img/leftpanetoggle_bg_depressed.gif") top left repeat-x' - }) - }); - connect('leftPaneToggle','onmouseout', function() { - setStyle('leftPaneToggle', { - 'background':'transparent ' + - 'url("img/leftpanetoggle_bg.gif") top left repeat-x' - }) - }); - connect('leftPaneToggle', 'onclick', function(){ - clearTimeout(t); - doShowing(); - }); - setCookie('Zenoss_Collapsed_Menu', 'true',30,'/','',''); + return loader; } -function cancelHover() { - var leftPane = $('leftPane'); - var paneToggle = $('paneToggle'); - if (leftPane && paneToggle) { - setStyle(paneToggle, {'z-index':'1'}); - setStyle(leftPane, {'z-index':'1'}); - disconnectAll(paneToggle); - disconnectAll(leftPane); - disconnectAll('leftPaneToggle'); - connect('leftPaneToggle', 'onclick', toggleLeftPane); - connect('leftPaneToggle','onmouseover', function() { - setStyle('leftPaneToggle', { - 'background':'transparent ' + - 'url("img/leftpanetoggle_bg_expanded_depressed.gif") '+ - 'top left repeat-x' - }) - }); - connect('leftPaneToggle','onmouseout', function() { - setStyle('leftPaneToggle', { - 'background':'transparent ' + - 'url("img/leftpanetoggle_bg_expanded.gif") top left repeat-x' - }) - }); - deleteCookie('Zenoss_Collapsed_Menu','/',''); - updateNodeAttributes(leftPane, { - 'style':'display:block' - });} -} +//Declare the Zenoss namespace +YAHOO.namespace("zenoss"); -function checkForCollapsed() { - var x = getCookie('Zenoss_Collapsed_Menu'); - if ($('leftPaneToggle')){ - if (!x){ - disconnectAll('leftPaneToggle'); - connect('leftPaneToggle','onclick',toggleLeftPane); - connect('leftPaneToggle','onmouseover', function() { - setStyle('leftPaneToggle', { - 'background':'transparent ' + - 'url("img/leftpanetoggle_bg_expanded_depressed.gif") top left repeat-x' - }) - }); - connect('leftPaneToggle','onmouseout', function() { - setStyle('leftPaneToggle', { - 'background':'transparent ' + - 'url("img/leftpanetoggle_bg_expanded.gif") top left repeat-x' - }) - }); - } else { - hideLeftPane(); - } - } -} +// Put the loader somewhere accessible +YAHOO.zenoss.getLoader = getLoader; -function getChildCheckboxes(element) { - return filter( - function(x){return x.type=='checkbox'}, - element.getElementsByTagName('input') - ) -} - -var tablesOnPage=0; -function insertSelBar(table, index) { - var getselall = function() { - return function() {selectAllCheckboxes(table)} - } - var getselnone = function() { - return function() {selectNoneCheckboxes(table)} - } - var all = LI({id:'selectall_' + index}, 'All'); - var nun = LI({id:'selectnone_' + index}, 'None'); - var selbar = DIV({'class':'zentable_selectionbar'}, - [ 'Select: ', UL(null, [all, nun ]) ]); - insertSiblingNodesBefore(table, selbar); - connect(all, 'onclick', getselall()); - connect(nun, 'onclick', getselnone()); -} - -function selectAllCheckboxes(table) { - var cbs = getChildCheckboxes(table); - map(function(x){x.checked=true},cbs); -} - -function selectNoneCheckboxes(table) { - var cbs = getChildCheckboxes(table); - map(function(x){x.checked=null},cbs); -} - -function addSelectionBar() { - var tables = getElementsByTagAndClassName('table', 'innerzentable'); - for (i=0;i<tables.length;i++) { - if (!getNodeAttribute(tables[i], 'noselectionbar')) { - var inputs = tables[i].getElementsByTagName('input'); - var cbs = filter(function(x){return x.type=='checkbox'}, inputs); - if (cbs.length>1) insertSelBar(tables[i], i); - } - } -} - -function applyBrowserSpecificStyles() { - if (navigator.userAgent.match('Mac')) { - var searchform=$("searchform-label"); - if (searchform) - setStyle(searchform, { - 'left':'-5em' - }); - } -} - -var removeAutoComplete = function(el) { - setNodeAttribute(el, 'autocomplete', 'off'); -} - -var removeElementAutoCompletes = function() { - var inputs = $$('input'); - map(removeAutoComplete, inputs); -} - -addLoadEvent(removeElementAutoCompletes); -addLoadEvent(applyBrowserSpecificStyles); -addLoadEvent(addSelectionBar); -addLoadEvent(checkForCollapsed); - - -postJSONDoc = function (url, postVars) { - var req = getXMLHttpRequest(); - req.open("POST", url, true); - req.setRequestHeader("Content-type", - "application/x-www-form-urlencoded"); - var data = queryString(postVars); - var d = sendXMLHttpRequest(req, data); - return d.addCallback(evalJSONRequest); - -} - -var cancelWithTimeout = function (deferred, timeout) { - var canceller = callLater(timeout, function () { - // cancel the deferred after timeout seconds - deferred.cancel(); - //log("cancel load data") - }); - return deferred.addCallback(function (res) { - // if the deferred fires successfully, cancel the timeout - canceller.cancel(); - return res; - }); -}; - -function handle(delta) { - if (delta < 0) - /* something. */; - else - /* something. */; -} - -function wheel(event){ - var delta = 0; - if (!event) event = window.event; - if (event.wheelDelta) { - delta = event.wheelDelta/120; - if (window.opera) delta = -delta; - } else if (event.detail) { - delta = -event.detail/3; - } - if (delta) - handle(delta); - if (event.preventDefault) - event.preventDefault(); - event.returnValue = false; -} - -function captureSubmit(e){ - switch (e.key().string) { - case 'KEY_ENTER': - var submit = $('dialog_submit'); - submit.click(); - return; - default: - } -} - - -function checkValidId(e){ - var errmsg = $('errmsg'); - var input = $('new_id'); - var label = $('new_id_label'); - var new_id = escape(input.value); - var submit = $('dialog_submit'); - var path = $('checkValidIdPath').value - - errmsg.innerHTML = ""; - Morph(input, {"style": {"color": "black"}}); - Morph(label, {"style": {"color": "white"}}); - - d = callLater(0, doXHR, path+'/checkValidId', {queryString:{'id':new_id}}); - d.addCallback(function (r) { - if (r.responseText == 'True') { - submit.disabled = false; - if (e && e.key().string == 'KEY_ENTER') submit.click(); - } else { - submit.disabled = true; - Morph(input, {"style": {"color": "red"}}); - Morph(label, {"style": {"color": "red"}}); - errmsg.innerHTML = r.responseText; - shake(input); - shake(label); - shake(errmsg); - } - }); -} - -function connectTextareas() { - - var vDims, vPos, aDims, aPos, rightedge_area, rightedge_vp; - - var refreshVars = function() { - vDims = getViewportDimensions(); - vPos = getViewportPosition(); - rightedge_vp = vDims.w + vPos.x; - var area = $$('textarea')[0]; - aDims = getElementDimensions(area); - aPos = getElementPosition(area); - rightedge_area = aDims.w + aPos.x; - } - - function resizeAll() { - refreshVars(); - map(resizeArea, $$('textarea')); - } - - function resizeArea(area) { - var w = aDims.w + rightedge_vp-rightedge_area-50; - setElementDimensions(area, {w:w}); - } - - connect(currentWindow(), 'onresize', function(e) { - map(resizeAll, $$('textarea')); - }); - - map(resizeAll, $$('textarea')); -} - - -ImagePreloader = Class.create(); -ImagePreloader.prototype = { - __init__: function() { - bindMethods(this); - this.buffer = new Image(25, 25); - this.queue = new Array(); - this.lock = new DeferredLock(); - }, - add: function(img) { - this.queue.push(img); - this.start(); - }, - start: function() { - var d = this.lock.acquire(); - d.addCallback(this.next); - }, - next: function() { - var img = this.queue.pop(); - if (img) this.buffer.src = img; - this.lock.release(); - } -} - -/* MENUS */ -var calcSubmenuPos = function(rel, sub) { - // rel is the parent that triggered the submenu show - var pPos = getElementPosition(rel); - var pDims = getElementDimensions(rel); - var sDims = getElementDimensions(sub); - var vDims = getViewportDimensions(); - var vPos = getViewportPosition(); - finalDims = {x:0, y:0} - // Check to see if the menu will appear outside the viewport - // If so, make it fly out on the left - totalX = pPos.x + pDims.w + sDims.w; - finalDims.x = totalX>=vDims.w+vPos.x?-sDims.w+2:sDims.w-10; - // Check to see if the menu bottom is outside the viewport - // If so, move it up so that it fits - totalY = pPos.y + sDims.h; - finalDims.y = totalY>=vDims.h+vPos.y?0-(totalY-vDims.h)+vPos.y:0; - return finalDims -} - - -var calcMenuPos = function(rel, menu) { - var isIE//@cc_on=1 - var pPos = getElementPosition(rel); - var pDims = getElementDimensions(rel); - var vDims = getViewportDimensions(); - var mDims = getElementDimensions(menu); - var vPos = getViewportPosition(); - finalDims = $(menu).className=='devmovemenuitems'?{x:0, y:0}:{x:0, y:24}; - totalX = pPos.x + mDims.w; - finalDims.x = totalX>=vDims.w+vPos.x?pDims.w-mDims.w:3+finalDims.x; - finalDims.x = $(menu).className=='devmovemenuitems'?4-pDims.w:finalDims.x; - finalDims.x -= 1; - totalY = pPos.y + pDims.h + mDims.h; - var topmenu = getElementsByTagAndClassName('div', 'menu_top', menu)[0]; - if (totalY>=vDims.h+vPos.y) { - finalDims.y = 0-(totalY-vDims.h)+vPos.y; - setStyle(topmenu, {'background-image':'url(img/menu_top_rounded.gif)'}); - } else { - setStyle(topmenu, {'background-image':'url(img/menu_top.gif)'}); - } - if (isIE && $(menu).className!='devmovemenuitems') finalDims.y += 10; - return finalDims -} - -var showSubMenu = function(rel, sub) { - var relPos = calcSubmenuPos(rel, sub); - setElementPosition(sub, relPos); - setStyle(sub, {'visibility':'visible','z-index':'10001'}); - hideOtherSubmenus(rel, sub); -} - -var hideSubMenu = function(sub) { - setStyle(sub, {'visibility':'hidden','z-index':'1'}); -} - -var hideMenu = function(menu) { - setStyle(menu, {'visibility':'hidden','z-index':'1'}); - try { - setStyle(getFirstParentByTagAndClassName(menu, 'div', - 'tabletitlecontainer'), {'z-index':'1'}); - } catch(e){noop()} - if (navigator.userAgent.match('Mac')) { - try {setStyle(eventZenGrid.scrollbar, {'overflow':'auto'})} - catch(e) {noop()}; - } -} - -var showMenu = function(rel, menu) { - dropOtherMenuButtons(rel); - var relPos = calcMenuPos(rel, menu); - setElementPosition(menu, relPos); - setStyle(menu, {'visibility':'visible','z-index':'10000', - 'zoom':1}); - if (navigator.userAgent.match('Mac')) { - try {setStyle(eventZenGrid.scrollbar, {'overflow':'hidden'})} - catch(e) {noop()}; - } -} - -var showContextMenu = function() { - var menu = $('contextmenuitems'); - -} - -var dropOtherMenuButtons = function(button) { - var lowerButton = function(btn) { setStyle(btn, {'z-index':'1'})}; - try { - mymenu = getFirstParentByTagAndClassName($(button).parentNode, 'div', - 'tabletitlecontainer'); - } catch(e) { - mymenu = null; - } - others = $$("div.tabletitlecontainer"); - map(lowerButton, others); - if (mymenu) setStyle(mymenu, {'z-index':'10000'}); -} - -var hideOtherSubmenus = function(menu, submenu) { - var smartHideSub = function(sub){if ($(submenu)!=sub) hideSubMenu(sub)} - map(smartHideSub, $$('div.submenu')); -} - -var smto = Array(); - -var registerSubmenu = function(menu, submenu) { - try { - connect(menu, 'onmouseover', function() { - clearTimeout(smto[menu]); - clearTimeout(smto[submenu]); - showSubMenu(menu, submenu); }); - connect(submenu, 'onmouseover', function() { - clearTimeout(smto[menu]); - clearTimeout(smto[submenu]); - showSubMenu(menu, submenu); }); - connect(menu, 'onmouseout', function() { - smto[submenu] = setTimeout('hideSubMenu("'+submenu+'")', 500); }); - connect(submenu, 'onmouseout', function() { - smto[submenu] = setTimeout('hideSubMenu("'+submenu+'")', 500); }); - connect(submenu, 'onclick', function() { - hideSubMenu(submenu); - }); - } catch(e) {noop()}; -} - -var registerMenu = function(button, menu) { - connect(button, 'onclick', function() { - clearTimeout(smto[menu]); - showMenu(button, menu); - addElementClass(button, 'menuselected'); - connect(button, 'onmouseover', function() { - clearTimeout(smto[menu]); - showMenu(button, menu); - addElementClass(button, 'menuselected'); - }); - }); - connect(menu, 'onmouseover', function() { - clearTimeout(smto[menu]); - showMenu(button, menu); - addElementClass(button, 'menuselected'); - connect(button, 'onmouseover', function() { - clearTimeout(smto[menu]); - showMenu(button, menu); - addElementClass(button, 'menuselected'); - }); - }); - connect(menu, 'onclick', function() { - hideMenu(menu); - disconnectAll(button, 'onmouseover'); - }); - connect(button, 'onmouseout', function() { - smto[menu] = setTimeout('hideMenu("'+menu+'");disconnectAll("'+ - button+'", "onmouseover");', 500); }); - connect(menu, 'onmouseout', function() { - smto[menu] = setTimeout('hideMenu("'+menu+'");disconnectAll("'+ - button+'", "onmouseover");', 500); }); -} - - -/* ZGDAgent */ - -function notifyParentOfNewUrl() { - try { - var parwin = currentWindow().parent; - var url = location.href; - parwin.zmlistener.checkForDomainChange(url); - } - catch(e){ noop() } -} - -addLoadEvent(notifyParentOfNewUrl); - -/* Selection stuff */ -var checkboxes; -var currentCheckbox; -var isCheckbox = function(elem) { - return (elem.type=='checkbox') } - -function getCheckboxes(elem) { - var inputs = getElementsByTagAndClassName('input', null); - return filter(isCheckbox, inputs); -} - -function selectCheckboxRange(start, end) { - a = end>start?start:end; - b = start==a?end:start; - newstate = -checkboxes[end].checked; - var todo = checkboxes.slice(a, b+1); - for (i=0;(box=todo[i]);i++) { - if ((!box.checked && newstate) || - (box.checked && !newstate)) box.click(); - //box.checked = newstate; - } -} - -function getIndex(box) { - return findIdentical(checkboxes, box); -} - -function handleChange(e) { - var t = e.src(); - var shift = e.modifier().shift; - if (isCheckbox(t) && shift) { - if (currentCheckbox){ - selectCheckboxRange( - getIndex(currentCheckbox), getIndex(t)); - currentCheckbox = t; - } - } - currentCheckbox = t; -} - -var CbCxs = new Array(); -function connectCheckboxListeners() { - disconnectAllTo(handleChange); - checkboxes = getCheckboxes(); - for (i=0; i<checkboxes.length; i++){ - var box = checkboxes[i]; - connect(box, 'onkeypress', handleChange); - connect(box, 'onclick', handleChange); - } -} - -addLoadEvent(connectCheckboxListeners); - -/* zenmodelfuncs */ - -function zenPageInit(){ - - var as = $$('#leftPane a'); - for(var i=0; i< as.length; i++){ - if (location.href.indexOf('notabs') != -1 && - location.href==as[i].href) { - as[i].className = 'selected'; - } - else if( location.href.indexOf('notabs')==-1 && - as[i].href.indexOf('notabs')==-1 && - location.pathname.indexOf(as[i].pathname) != -1){ - as[i].className = 'selected'; - //lastLeft = as[i]; - } - else { - as[i].className = 'unselected'; - } - } -} - -function submitAction(myform, url) { - myform.action=url - myform.submit() -} - -function submitViaEnter(evt, submitName) { - evt = (evt) ? evt : event; - var target = (evt.target) ? evt.target : evt.srcElement; - var form = target.form; - var charCode = (evt.charCode) ? evt.charCode : - ((evt.which) ? evt.which : evt.keyCode); - if (charCode == 13 || charCode == 3) { - if (submitName) { form.action += "/" + submitName } - form.submit(); - return false; - } - return true; -} - -function blockSubmitViaEnter(evt) { - evt = (evt) ? evt : event; - var charCode = (evt.charCode) ? evt.charCode : - ((evt.which) ? evt.which : evt.keyCode); - if (charCode == 13 || charCode == 3) { - return false; - } - return true; -} - -isSelected = false; - -function toggleSelect(form) { - if (isSelected == false) { - for (i = 0; i < form.length; i++) { - if (form.elements[i].name == "negateFilter") { continue } - form.elements[i].checked = true ; - } - isSelected = true; - form.SelectButton.value = "Deselect All"; - return isSelected; - } - else { - for (i = 0; i < form.length; i++) { - if (form.elements[i].name == "negateFilter") { continue } - form.elements[i].checked = false ; - } - isSelected = false; - form.SelectButton.value = "Select All"; - return isSelected; - } -} - -addLoadEvent(zenPageInit) - -/* DIALOGS */ -function getFormElements(parentbox) { - var firstElement; - var textBoxes = []; - var submitButtons = []; - var formElements = []; - var traverse = function(node) { - if ((node.tagName=='SELECT'||node.tagName=='INPUT'|| - node.tagName=='TEXTAREA')&&node.type!='hidden') { - formElements[formElements.length]=node; - if (!firstElement) - firstElement = node; - } - if (node.tagName=='INPUT'&&(node.type=='text'||node.type=='password')) - textBoxes[textBoxes.length]=node; - if (node.tagName=='INPUT'&&(node.type=='submit'||node.type=='button')&& - node.id!='dialog_cancel') - submitButtons[submitButtons.length] = node; - if (node.childNodes != null) { - for (var i=0;i<node.childNodes.length;i++) { - traverse(node.childNodes.item(i)); - } - } - } - traverse(parentbox); - return [firstElement, textBoxes, submitButtons,... [truncated message content] |
From: <sv...@ze...> - 2008-05-23 13:11:42
|
Author: ian Date: 2008-05-23 09:11:46 -0400 (Fri, 23 May 2008) New Revision: 9336 Added: sandboxen/ian/Products-jschanges/ Log: * Refs #3217: Creating branch to hold changes Copied: sandboxen/ian/Products-jschanges (from rev 9335, trunk/Products) |
From: <sv...@ze...> - 2008-05-23 13:11:00
|
Author: ian Date: 2008-05-23 09:11:09 -0400 (Fri, 23 May 2008) New Revision: 9335 Removed: sandboxen/ian/Products-jschanges/ Log: * Refs #3217: I'm an idiot. Forgot to copy the trunk. |
From: <sv...@ze...> - 2008-05-23 13:00:33
|
Author: ian Date: 2008-05-23 09:00:40 -0400 (Fri, 23 May 2008) New Revision: 9334 Added: sandboxen/ian/Products-jschanges/ Log: * Refs #3217: Creating branch |
From: <sv...@ze...> - 2008-05-23 00:30:00
|
Author: edahl Date: 2008-05-22 20:30:07 -0400 (Thu, 22 May 2008) New Revision: 9333 Modified: trunk/Products/ZenModel/Device.py trunk/Products/ZenModel/DeviceClass.py trunk/Products/ZenModel/migrate/makeZenPackManager.py trunk/Products/ZenRelations/RelationshipManager.py Log: * allow migration of devices to / from different python classes * cleanup of some object moving code Modified: trunk/Products/ZenModel/Device.py =================================================================== --- trunk/Products/ZenModel/Device.py 2008-05-22 19:14:34 UTC (rev 9332) +++ trunk/Products/ZenModel/Device.py 2008-05-23 00:30:07 UTC (rev 9333) @@ -363,8 +363,8 @@ security = ClassSecurityInfo() - def __init__(self, id): - ManagedEntity.__init__(self, id) + def __init__(self, id, buildRelations=True): + ManagedEntity.__init__(self, id, buildRelations=buildRelations) os = OperatingSystem() self._setObject(os.id, os) hw = DeviceHW() Modified: trunk/Products/ZenModel/DeviceClass.py =================================================================== --- trunk/Products/ZenModel/DeviceClass.py 2008-05-22 19:14:34 UTC (rev 9332) +++ trunk/Products/ZenModel/DeviceClass.py 2008-05-23 00:30:07 UTC (rev 9333) @@ -178,7 +178,9 @@ def moveDevices(self, moveTarget, deviceNames=None, REQUEST=None): """ - Override default moveDevices because this is a contained relation. + Override default moveDevices because this is a contained relation. + If the python class bound to a DeviceClass is different we convert to + the new python class adding / removing relationships as needed. """ if not moveTarget or not deviceNames: return self() target = self.getDmdRoot(self.dmdRootName).getOrganizer(moveTarget) @@ -186,9 +188,18 @@ for devname in deviceNames: dev = self.findDevice(devname) source = dev.deviceClass() - dev._operation = 1 # moving object state - source.devices._delObject(devname) - target.devices._setObject(devname, dev) + dev = dev.moveMeBetweenRels(source.devices, target.devices) + if dev.__class__ != dev.getPythonDeviceClass(): + newdev = dev.getPythonDeviceClass()( + devname,buildRelations=False) + relnames = newdev.getRelationshipNames() + for rel in dev.getRelationships(): + if rel.id in relnames: + dev.moveObject(rel, newdev) + newdev.buildRelations() + target.devices._delObject(devname) + target.devices._setObject(devname, newdev) + dev = target.devices._getOb(devname) dev.setLastChange() if REQUEST: REQUEST['message'] = "Devices moved to %s" % moveTarget Modified: trunk/Products/ZenModel/migrate/makeZenPackManager.py =================================================================== --- trunk/Products/ZenModel/migrate/makeZenPackManager.py 2008-05-22 19:14:34 UTC (rev 9332) +++ trunk/Products/ZenModel/migrate/makeZenPackManager.py 2008-05-23 00:30:07 UTC (rev 9333) @@ -29,7 +29,7 @@ manage_addZenPackManager(dmd, 'ZenPackManager') for zp in dmd.packs(): zp.buildRelations() - zp.moveObject(dmd.packs, dmd.ZenPackManager.packs) + zp.moveMeBetweenRels(dmd.packs, dmd.ZenPackManager.packs) if getattr(dmd, ZENPACK_PERSISTENCE_CATALOG, None) is None: CreateZenPackPersistenceCatalog(dmd) Modified: trunk/Products/ZenRelations/RelationshipManager.py =================================================================== --- trunk/Products/ZenRelations/RelationshipManager.py 2008-05-22 19:14:34 UTC (rev 9332) +++ trunk/Products/ZenRelations/RelationshipManager.py 2008-05-23 00:30:07 UTC (rev 9333) @@ -1,3 +1,4 @@ + ########################################################################### # # This program is part of Zenoss Core, an open source monitoring platform. @@ -196,7 +197,7 @@ return 0 - def moveObject(self, srcRelationship, destRelationship): + def moveMeBetweenRels(self, srcRelationship, destRelationship): """ Move a relationship manager without deleting its relationships. """ @@ -207,6 +208,19 @@ return destRelationship._getOb(self.id) + + def moveObject(self, obj, destination): + """ + Move obj from this RM to the destination RM + """ + self._operation = 1 + self._delObject(obj.id) + obj = aq_base(obj) + destination._setObject(obj.id, obj) + return destination._getOb(obj.id) + + + ########################################################################## # # Functions for examining a RelationshipManager's schema @@ -221,6 +235,9 @@ for name, schema in self._relations: if name not in relnames: self._setObject(name, schema.createRelation(name)) + if name in relnames: relnames.remove(name) + for rname in relnames: + self._delObject(rname) def lookupSchema(cls, relname): |
From: <sv...@ze...> - 2008-05-22 19:14:26
|
Author: edahl Date: 2008-05-22 15:14:34 -0400 (Thu, 22 May 2008) New Revision: 9332 Modified: trunk/Products/ZenModel/PerformanceConf.py Log: * refs #262 - when modeling a device from the UI make sure the tab context is the device not the PerformanceConf Modified: trunk/Products/ZenModel/PerformanceConf.py =================================================================== --- trunk/Products/ZenModel/PerformanceConf.py 2008-05-22 18:26:10 UTC (rev 9331) +++ trunk/Products/ZenModel/PerformanceConf.py 2008-05-22 19:14:34 UTC (rev 9332) @@ -485,7 +485,7 @@ xmlrpc = isXmlRpc(REQUEST) if setlog and REQUEST and not xmlrpc: - handler = setupLoggingHeader(self, REQUEST) + handler = setupLoggingHeader(device, REQUEST) zm = zenPath('bin', 'zenmodeler') zenmodelerCmd = [zm, 'run', '--now','-F','-d', device.id] |
From: <sv...@ze...> - 2008-05-22 18:26:04
|
Author: noel Date: 2008-05-22 14:26:10 -0400 (Thu, 22 May 2008) New Revision: 9331 Modified: trunk/Products/ZenUITests/tests/selenium/util/selenium.py Log: *Upgrades to the newest selenium server Modified: trunk/Products/ZenUITests/tests/selenium/util/selenium.py =================================================================== --- trunk/Products/ZenUITests/tests/selenium/util/selenium.py 2008-05-22 17:25:09 UTC (rev 9330) +++ trunk/Products/ZenUITests/tests/selenium/util/selenium.py 2008-05-22 18:26:10 UTC (rev 9331) @@ -1,3 +1,4 @@ + """ Copyright 2006 ThoughtWorks, Inc. @@ -19,106 +20,149 @@ import httplib import urllib +import re class selenium: """ -Defines an object that runs Selenium commands. + Defines an object that runs Selenium commands. Element Locators ~~~~~~~~~~~~~~~~ + Element Locators tell Selenium which HTML element a command refers to. The format of a locator is: + \ *locatorType*\ **=**\ \ *argument* + + We support the following strategies for locating elements: - * \ **identifier**\ =\ *id* + + * \ **identifier**\ =\ *id*: Select the element with the specified @id attribute. If no match is found, select the first element whose @name attribute is \ *id*. (This is normally the default; see below.) - * \ **id**\ =\ *id* + * \ **id**\ =\ *id*: Select the element with the specified @id attribute. - * \ **name**\ =\ *name* + * \ **name**\ =\ *name*: Select the first element with the specified @name attribute. - - * username - * name=username + * username + * name=username - + The name may optionally be followed by one or more \ *element-filters*, separated from the name by whitespace. If the \ *filterType* is not specified, \ **value**\ is assumed. - - * name=flavour value=chocolate + * name=flavour value=chocolate - * \ **dom**\ =\ *javascriptExpression* - Find an element by evaluating the specified string. This allows you to traverse the HTML Document Object - Model using JavaScript. Note that you must not return a value in this string; simply make it the last expression in the block. - * dom=document.forms['myForm'].myDropdown - * dom=document.images[56] - * dom=function foo() { return document.links[1]; }; foo(); - - + * \ **dom**\ =\ *javascriptExpression*: - * \ **xpath**\ =\ *xpathExpression* + Find an element by evaluating the specified string. This allows you to traverse the HTML Document Object + Model using JavaScript. Note that you must not return a value in this string; simply make it the last expression in the block. + + * dom=document.forms['myForm'].myDropdown + * dom=document.images[56] + * dom=function foo() { return document.links[1]; }; foo(); + + + * \ **xpath**\ =\ *xpathExpression*: Locate an element using an XPath expression. - * xpath=//img[@alt='The image alt text'] - * xpath=//table[@id='table1']//tr[4]/td[2] + * xpath=//img[@alt='The image alt text'] + * xpath=//table[@id='table1']//tr[4]/td[2] + * xpath=//a[contains(@href,'#id1')] + * xpath=//a[contains(@href,'#id1')]/@class + * xpath=(//table[@class='stylee'])//th[text()='theHeaderText']/../td + * xpath=//input[@name='name2' and @value='yes'] + * xpath=//\*[text()="right"] - * \ **link**\ =\ *textPattern* + + * \ **link**\ =\ *textPattern*: Select the link (anchor) element which contains text matching the specified \ *pattern*. - * link=The link text + * link=The link text - * \ **css**\ =\ *cssSelectorSyntax* + + * \ **css**\ =\ *cssSelectorSyntax*: Select the element using css selectors. Please refer to CSS2 selectors, CSS3 selectors for more information. You can also check the TestCssLocators test in the selenium test suite for an example of usage, which is included in the downloaded selenium core package. - * css=a[href="#id3"] - * css=span#firstChild + span + * css=a[href="#id3"] + * css=span#firstChild + span - + Currently the css selector locator supports all css1, css2 and css3 selectors except namespace in css3, some pseudo classes(:nth-of-type, :nth-last-of-type, :first-of-type, :last-of-type, :only-of-type, :visited, :hover, :active, :focus, :indeterminate) and pseudo elements(::first-line, ::first-letter, ::selection, ::before, ::after). + + Without an explicit locator prefix, Selenium uses the following default strategies: - * \ **dom**\ , for locators starting with "document." - * \ **xpath**\ , for locators starting with "//" - * \ **identifier**\ , otherwise + * \ **dom**\ , for locators starting with "document." + * \ **xpath**\ , for locators starting with "//" + * \ **identifier**\ , otherwise + Element Filters - ~~~~~~~~~~~~~~~Element filters can be used with a locator to refine a list of candidate elements. They are currently used only in the 'name' element-locator. + ~~~~~~~~~~~~~~~ + + Element filters can be used with a locator to refine a list of candidate elements. They are currently used only in the 'name' element-locator. + Filters look much like locators, ie. - \ *filterType*\ **=**\ \ *argument*Supported element-filters are: + + \ *filterType*\ **=**\ \ *argument* + + Supported element-filters are: + \ **value=**\ \ *valuePattern* - Matches elements based on their values. This is particularly useful for refining a list of similarly-named toggle-buttons.\ **index=**\ \ *index* - Selects a single element based on its position in the list (offset from zero).String-match Patterns + Matches elements based on their values. This is particularly useful for refining a list of similarly-named toggle-buttons. + + \ **index=**\ \ *index* + + + Selects a single element based on its position in the list (offset from zero). + + String-match Patterns ~~~~~~~~~~~~~~~~~~~~~ + Various Pattern syntaxes are available for matching string values: - * \ **glob:**\ \ *pattern* + + * \ **glob:**\ \ *pattern*: Match a string against a "glob" (aka "wildmat") pattern. "Glob" is a kind of limited regular-expression syntax typically used in command-line - shells. In a glob pattern, "*" represents any sequence of characters, and "?" + shells. In a glob pattern, "\*" represents any sequence of characters, and "?" represents any single character. Glob patterns match against the entire string. - * \ **regexp:**\ \ *regexp* + * \ **regexp:**\ \ *regexp*: Match a string using a regular-expression. The full power of JavaScript regular-expressions is available. - * \ **exact:**\ \ *string* + * \ **regexpi:**\ \ *regexpi*: + Match a string using a case-insensitive regular-expression. + * \ **exact:**\ \ *string*: + Match a string exactly, verbatim, without any of that fancy wildcard stuff. + If no pattern prefix is specified, Selenium assumes that it's a "glob" pattern. + + For commands that return multiple values (such as verifySelectOptions), + the string being matched is a comma-separated list of the return values, + where both commas and backslashes in the values are backslash-escaped. + When providing a pattern, the optional matching syntax (i.e. glob, + regexp, etc.) is specified once, as usual, at the beginning of the + pattern. + + """ ### This part is hard-coded in the XSL @@ -132,7 +176,7 @@ def start(self): result = self.get_string("getNewBrowserSession", [self.browserStartCommand, self.browserURL]) try: - self.sessionId = long(result) + self.sessionId = result except ValueError: raise Exception, result @@ -201,7 +245,7 @@ def get_boolean_array(self, verb, args): boolarr = self.get_string_array(verb, args) - for i, boolstr in enumerate(boolarr): + for i in range(len(boolarr)): if ("true" == boolstr): boolarr[i] = True continue @@ -238,6 +282,15 @@ self.do_command("doubleClick", [locator,]) + def context_menu(self,locator): + """ + Simulates opening the context menu for the specified element (as might happen if the user "right-clicked" on the element). + + 'locator' is an element locator + """ + self.do_command("contextMenu", [locator,]) + + def click_at(self,locator,coordString): """ Clicks on a link, button, checkbox or radio button. If the click action @@ -262,6 +315,16 @@ self.do_command("doubleClickAt", [locator,coordString,]) + def context_menu_at(self,locator,coordString): + """ + Simulates opening the context menu for the specified element (as might happen if the user "right-clicked" on the element). + + 'locator' is an element locator + 'coordString' is specifies the x,y position (i.e. - 10,20) of the mouse event relative to the element returned by the locator. + """ + self.do_command("contextMenuAt", [locator,coordString,]) + + def fire_event(self,locator,eventName): """ Explicitly simulate an event, to trigger the corresponding "on\ *event*" @@ -273,6 +336,15 @@ self.do_command("fireEvent", [locator,eventName,]) + def focus(self,locator): + """ + Move the focus to the specified element; for example, if the element is an input field, move the cursor to that field. + + 'locator' is an element locator + """ + self.do_command("focus", [locator,]) + + def key_press(self,locator,keySequence): """ Simulates a user pressing and releasing a key. @@ -397,8 +469,8 @@ def mouse_down_at(self,locator,coordString): """ - Simulates a user pressing the mouse button (without releasing it yet) on - the specified element. + Simulates a user pressing the mouse button (without releasing it yet) at + the specified location. 'locator' is an element locator 'coordString' is specifies the x,y position (i.e. - 10,20) of the mouse event relative to the element returned by the locator. @@ -408,8 +480,8 @@ def mouse_up(self,locator): """ - Simulates a user pressing the mouse button (without releasing it yet) on - the specified element. + Simulates the event that occurs when the user releases the mouse button (i.e., stops + holding the button down) on the specified element. 'locator' is an element locator """ @@ -418,8 +490,8 @@ def mouse_up_at(self,locator,coordString): """ - Simulates a user pressing the mouse button (without releasing it yet) on - the specified element. + Simulates the event that occurs when the user releases the mouse button (i.e., stops + holding the button down) at the specified location. 'locator' is an element locator 'coordString' is specifies the x,y position (i.e. - 10,20) of the mouse event relative to the element returned by the locator. @@ -452,6 +524,7 @@ """ Sets the value of an input field, as though you typed it in. + Can also be used to set the value of combo boxes, check boxes, etc. In these cases, value should be the value of the option selected, not the visible text. @@ -462,6 +535,29 @@ self.do_command("type", [locator,value,]) + def type_keys(self,locator,value): + """ + Simulates keystroke events on the specified element, as though you typed the value key-by-key. + + + This is a convenience method for calling keyDown, keyUp, keyPress for every character in the specified string; + this is useful for dynamic UI widgets (like auto-completing combo boxes) that require explicit key events. + + Unlike the simple "type" command, which forces the specified value into the page directly, this command + may or may not have any visible effect, even in cases where typing keys would normally have a visible effect. + For example, if you use "typeKeys" on a form element, you may or may not see the results of what you typed in + the field. + + In some cases, you may need to use the simple "type" command to set the value of the field and then the "typeKeys" command to + send the keystroke events corresponding to what you just typed. + + + 'locator' is an element locator + 'value' is the value to type + """ + self.do_command("typeKeys", [locator,value,]) + + def set_speed(self,value): """ Set execution speed (i.e., set the millisecond length of a delay which will follow each selenium operation). By default, there is no such delay, i.e., @@ -480,7 +576,7 @@ See also setSpeed. """ - self.do_command("getSpeed", []) + return self.get_string("getSpeed", []) def check(self,locator): @@ -506,34 +602,42 @@ Select an option from a drop-down using an option locator. + Option locators provide different ways of specifying options of an HTML Select element (e.g. for selecting a specific option, or for asserting that the selected option satisfies a specification). There are several forms of Select Option Locator. - * \ **label**\ =\ *labelPattern* + + * \ **label**\ =\ *labelPattern*: matches options based on their labels, i.e. the visible text. (This is the default.) - * label=regexp:^[Oo]ther + * label=regexp:^[Oo]ther - * \ **value**\ =\ *valuePattern* + + * \ **value**\ =\ *valuePattern*: matches options based on their values. - * value=other + * value=other - * \ **id**\ =\ *id* + + * \ **id**\ =\ *id*: + matches options based on their ids. - * id=option1 + * id=option1 - * \ **index**\ =\ *index* + + * \ **index**\ =\ *index*: matches an option based on its index (offset from zero). - * index=2 + * index=2 + + If no option locator prefix is provided, the default behaviour is to match on \ **label**\ . @@ -568,6 +672,15 @@ self.do_command("removeSelection", [locator,optionLocator,]) + def remove_all_selections(self,locator): + """ + Unselects all of the selected options in a multi-select element. + + 'locator' is an element locator identifying a multi-select box + """ + self.do_command("removeAllSelections", [locator,]) + + def submit(self,formLocator): """ Submit the specified form. This is particularly useful for forms without @@ -602,6 +715,7 @@ After opening the window, you'll need to select it using the selectWindow command. + This command can also be a useful workaround for bug SEL-339. In some cases, Selenium will be unable to intercept a call to window.open (if the call occurs during or before the "onLoad" event, for example). In those cases, you can force Selenium to notice the open window's name by using the Selenium openWindow command, using an empty (blank) url, like this: openWindow("", "myFunnyWindow"). @@ -615,21 +729,53 @@ def select_window(self,windowID): """ - Selects a popup window; once a popup window has been selected, all + Selects a popup window using a window locator; once a popup window has been selected, all commands go to that window. To select the main window again, use null as the target. - Selenium has several strategies for finding the window object referred to by the "windowID" parameter. - 1.) if windowID is null, then it is assumed the user is referring to the original window instantiated by the browser). + + + + Window locators provide different ways of specifying the window object: + by title, by internal JavaScript "name," or by JavaScript variable. + + + * \ **title**\ =\ *My Special Window*: + Finds the window using the text that appears in the title bar. Be careful; + two windows can share the same title. If that happens, this locator will + just pick one. + + * \ **name**\ =\ *myWindow*: + Finds the window using its internal JavaScript "name" property. This is the second + parameter "windowName" passed to the JavaScript method window.open(url, windowName, windowFeatures, replaceFlag) + (which Selenium intercepts). + + * \ **var**\ =\ *variableName*: + Some pop-up windows are unnamed (anonymous), but are associated with a JavaScript variable name in the current + application window, e.g. "window.foo = window.open(url);". In those cases, you can open the window using + "var=foo". + + + + + If no window locator prefix is provided, we'll try to guess what you mean like this: + + 1.) if windowID is null, (or the string "null") then it is assumed the user is referring to the original window instantiated by the browser). + 2.) if the value of the "windowID" parameter is a JavaScript variable name in the current application window, then it is assumed that this variable contains the return value from a call to the JavaScript window.open() method. - 3.) Otherwise, selenium looks in a hash it maintains that maps string names to window objects. Each of these string - names matches the second parameter "windowName" past to the JavaScript method window.open(url, windowName, windowFeatures, replaceFlag) - (which selenium intercepts). - If you're having trouble figuring out what is the name of a window that you want to manipulate, look at the selenium log messages - which identify the names of windows created via window.open (and therefore intercepted by selenium). You will see messages + + 3.) Otherwise, selenium looks in a hash it maintains that maps string names to window "names". + + 4.) If \ *that* fails, we'll try looping over all of the known windows to try to find the appropriate "title". + Since "title" is not necessarily unique, this may have unexpected behavior. + + If you're having trouble figuring out the name of a window that you want to manipulate, look at the Selenium log messages + which identify the names of windows created via window.open (and therefore intercepted by Selenium). You will see messages like the following for each window as it is opened: + ``debug: window.open call intercepted; window ID (which you can use with selectWindow()) is "myNewWindow"`` + In some cases, Selenium will be unable to intercept a call to window.open (if the call occurs during or before the "onLoad" event, for example). (This is bug SEL-339.) In those cases, you can force Selenium to notice the open window's name by using the Selenium openWindow command, using an empty (blank) url, like this: openWindow("", "myFunnyWindow"). @@ -645,7 +791,10 @@ Selects a frame within the current window. (You may invoke this command multiple times to select nested frames.) To select the parent frame, use "relative=parent" as a locator; to select the top frame, use "relative=top". + You can also select a frame by its 0-based index number; select the first frame with + "index=0", or the third frame with "index=2". + You may also use a DOM expression to identify the frame you want directly, like this: ``dom=frames["main"].frames["subframe"]`` @@ -655,27 +804,11 @@ self.do_command("selectFrame", [locator,]) - def get_log_messages(self): - """ - Return the contents of the log. - - This is a placeholder intended to make the code generator make this API - available to clients. The selenium server will intercept this call, however, - and return its recordkeeping of log messages since the last call to this API. - Thus this code in JavaScript will never be called. - The reason I opted for a servercentric solution is to be able to support - multiple frames served from different domains, which would break a - centralized JavaScript logging mechanism under some conditions. - - - """ - return self.get_string("getLogMessages", []) - - def get_whether_this_frame_match_frame_expression(self,currentFrameString,target): """ Determine whether current/locator identify the frame containing this running code. + This is useful in proxy injection mode, where this code runs in every browser frame and window, and sometimes the selenium server needs to identify the "current" frame. In this case, when the test calls selectFrame, this @@ -693,6 +826,7 @@ """ Determine whether currentWindowString plus target identify the window containing this running code. + This is useful in proxy injection mode, where this code runs in every browser frame and window, and sometimes the selenium server needs to identify the "current" window. In this case, when the test calls selectWindow, this @@ -710,7 +844,7 @@ """ Waits for a popup window to appear and load up. - 'windowID' is the JavaScript window ID of the window that will appear + 'windowID' is the JavaScript window "name" of the window that will appear (not the text of the title bar) 'timeout' is a timeout in milliseconds, after which the action will return with an error """ self.do_command("waitForPopUp", [windowID,timeout,]) @@ -719,14 +853,32 @@ def choose_cancel_on_next_confirmation(self): """ By default, Selenium's overridden window.confirm() function will - return true, as if the user had manually clicked OK. After running + return true, as if the user had manually clicked OK; after running this command, the next call to confirm() will return false, as if - the user had clicked Cancel. + the user had clicked Cancel. Selenium will then resume using the + default behavior for future confirmations, automatically returning + true (OK) unless/until you explicitly call this command for each + confirmation. """ self.do_command("chooseCancelOnNextConfirmation", []) + def choose_ok_on_next_confirmation(self): + """ + Undo the effect of calling chooseCancelOnNextConfirmation. Note + that Selenium's overridden window.confirm() function will normally automatically + return true, as if the user had manually clicked OK, so you shouldn't + need to use this command unless for some reason you need to change + your mind prior to the next confirmation. After any confirmation, Selenium will resume using the + default behavior for future confirmations, automatically returning + true (OK) unless/until you explicitly call chooseCancelOnNextConfirmation for each + confirmation. + + """ + self.do_command("chooseOkOnNextConfirmation", []) + + def answer_on_next_prompt(self,answer): """ Instructs Selenium to return the specified answer string in response to @@ -767,6 +919,7 @@ Has an alert occurred? + This function never throws an exception @@ -780,6 +933,7 @@ Has a prompt occurred? + This function never throws an exception @@ -793,6 +947,7 @@ Has confirm() been called? + This function never throws an exception @@ -805,11 +960,14 @@ """ Retrieves the message of a JavaScript alert generated during the previous action, or fail if there were no alerts. + Getting an alert has the same effect as manually clicking OK. If an alert is generated but you do not get/verify it, the next Selenium action will fail. + NOTE: under Selenium, JavaScript alerts will NOT pop up a visible alert dialog. + NOTE: Selenium does NOT support JavaScript alerts that are generated in a page's onload() event handler. In this case a visible dialog WILL be generated and Selenium will hang until someone manually clicks OK. @@ -825,16 +983,19 @@ the previous action. + By default, the confirm function will return true, having the same effect as manually clicking OK. This can be changed by prior execution of the chooseCancelOnNextConfirmation command. If an confirmation is generated but you do not get/verify it, the next Selenium action will fail. + NOTE: under Selenium, JavaScript confirmations will NOT pop up a visible dialog. + NOTE: Selenium does NOT support JavaScript confirmations that are generated in a page's onload() event handler. In this case a visible dialog WILL be generated and Selenium will hang until you manually click @@ -851,11 +1012,14 @@ Retrieves the message of a JavaScript question prompt dialog generated during the previous action. + Successful handling of the prompt requires prior execution of the answerOnNextPrompt command. If a prompt is generated but you do not get/verify it, the next Selenium action will fail. + NOTE: under Selenium, JavaScript prompts will NOT pop up a visible dialog. + NOTE: Selenium does NOT support JavaScript prompts that are generated in a page's onload() event handler. In this case a visible dialog WILL be generated and Selenium will hang until someone manually clicks OK. @@ -912,18 +1076,28 @@ return self.get_string("getText", [locator,]) + def highlight(self,locator): + """ + Briefly changes the backgroundColor of the specified element yellow. Useful for debugging. + + 'locator' is an element locator + """ + self.do_command("highlight", [locator,]) + + def get_eval(self,script): """ Gets the result of evaluating the specified JavaScript snippet. The snippet may have multiple lines, but only the result of the last line will be returned. + Note that, by default, the snippet will run in the context of the "selenium" - object itself, so ``this`` will refer to the Selenium object, and ``window`` will - refer to the top-level runner test window, not the window of your application. - If you need a reference to the window of your application, you can refer - to ``this.browserbot.getCurrentWindow()`` and if you need to use + object itself, so ``this`` will refer to the Selenium object. Use ``window`` to + refer to the window of your application, e.g. ``window.document.getElementById('foo')`` + + If you need to use a locator to refer to a single element in your application page, you can - use ``this.page().findElement("foo")`` where "foo" is your locator. + use ``this.browserbot.findElement("id=foo")`` where "id=foo" is your locator. 'script' is the JavaScript snippet to run @@ -1042,9 +1216,11 @@ def get_attribute(self,attributeLocator): """ - Gets the value of an element attribute. + Gets the value of an element attribute. The value of the attribute may + differ across browsers (this is the case for the "style" attribute, for + example). - 'attributeLocator' is an element locator followed by an + 'attributeLocator' is an element locator followed by an @ sign and then the name of the attribute, e.g. "foo@bar" """ return self.get_string("getAttribute", [attributeLocator,]) @@ -1094,6 +1270,7 @@ """ Returns the IDs of all buttons on the page. + If a given button has no ID, it will appear as "" in this array. @@ -1105,6 +1282,7 @@ """ Returns the IDs of all links on the page. + If a given link has no ID, it will appear as "" in this array. @@ -1116,6 +1294,7 @@ """ Returns the IDs of all input fields on the page. + If a given field has no ID, it will appear as "" in this array. @@ -1142,6 +1321,31 @@ self.do_command("dragdrop", [locator,movementsString,]) + def set_mouse_speed(self,pixels): + """ + Configure the number of pixels between "mousemove" events during dragAndDrop commands (default=10). + + Setting this value to 0 means that we'll send a "mousemove" event to every single pixel + in between the start location and the end location; that can be very slow, and may + cause some browsers to force the JavaScript to timeout. + + If the mouse speed is greater than the distance between the two dragged objects, we'll + just send one "mousemove" at the start location and then one final one at the end location. + + + 'pixels' is the number of pixels between "mousemove" events + """ + self.do_command("setMouseSpeed", [pixels,]) + + + def get_mouse_speed(self): + """ + Returns the number of pixels between "mousemove" events during dragAndDrop commands (default=10). + + """ + return self.get_number("getMouseSpeed", []) + + def drag_and_drop(self,locator,movementsString): """ Drags an element a certain distance and then drops it @@ -1157,27 +1361,25 @@ Drags an element and drops it on another element 'locatorOfObjectToBeDragged' is an element to be dragged - 'locatorOfDragDestinationObject' is an element whose location (i.e., whose top left corner) will be the point where locatorOfObjectToBeDragged is dropped + 'locatorOfDragDestinationObject' is an element whose location (i.e., whose center-most pixel) will be the point where locatorOfObjectToBeDragged is dropped """ self.do_command("dragAndDropToObject", [locatorOfObjectToBeDragged,locatorOfDragDestinationObject,]) - def window_focus(self,windowName): + def window_focus(self): """ - Gives focus to a window + Gives focus to the currently selected window - 'windowName' is name of the window to be given focus """ - self.do_command("windowFocus", [windowName,]) + self.do_command("windowFocus", []) - def window_maximize(self,windowName): + def window_maximize(self): """ - Resize window to take up the entire screen + Resize currently selected window to take up the entire screen - 'windowName' is name of the window to be enlarged """ - self.do_command("windowMaximize", [windowName,]) + self.do_command("windowMaximize", []) def get_all_window_ids(self): @@ -1236,7 +1438,7 @@ def is_ordered(self,locator1,locator2): """ - Check if these two elements have same parent and are ordered. Two same elements will + Check if these two elements have same parent and are ordered siblings in the DOM. Two same elements will not be considered ordered. 'locator1' is an element locator pointing to the first element @@ -1285,6 +1487,7 @@ """ Retrieves the text cursor position in the given input element or textarea; beware, this may not work perfectly on all browsers. + Specifically, if the cursor/selection has been cleared by JavaScript, this command will tend to return the position of the last location of the cursor, even though the cursor is now gone from the page. This is filed as SEL-243. @@ -1295,42 +1498,80 @@ return self.get_number("getCursorPosition", [locator,]) - def set_context(self,context,logLevelThreshold): + def get_expression(self,expression): """ - Writes a message to the status bar and adds a note to the browser-side - log. + Returns the specified expression. - If logLevelThreshold is specified, set the threshold for logging - to that level (debug, info, warn, error). - (Note that the browser-side logs will \ *not* be sent back to the - server, and are invisible to the Client Driver.) + This is useful because of JavaScript preprocessing. + It is used to generate commands like assertExpression and waitForExpression. - 'context' is the message to be sent to the browser - 'logLevelThreshold' is one of "debug", "info", "warn", "error", sets the threshold for browser-side logging + + 'expression' is the value to return """ - self.do_command("setContext", [context,logLevelThreshold,]) + return self.get_string("getExpression", [expression,]) - def get_expression(self,expression): + def get_xpath_count(self,xpath): """ - Returns the specified expression. + Returns the number of nodes that match the specified xpath, eg. "//table" would give + the number of tables. - This is useful because of JavaScript preprocessing. - It is used to generate commands like assertExpression and waitForExpression. + 'xpath' is the xpath expression to evaluate. do NOT wrap this expression in a 'count()' function; we will do that for you. + """ + return self.get_number("getXpathCount", [xpath,]) + + + def assign_id(self,locator,identifier): + """ + Temporarily sets the "id" attribute of the specified element, so you can locate it in the future + using its ID rather than a slow/complicated XPath. This ID will disappear once the page is + reloaded. + 'locator' is an element locator pointing to an element + 'identifier' is a string to be used as the ID of the specified element + """ + self.do_command("assignId", [locator,identifier,]) + + + def allow_native_xpath(self,allow): + """ + Specifies whether Selenium should use the native in-browser implementation + of XPath (if any native version is available); if you pass "false" to + this function, we will always use our pure-JavaScript xpath library. + Using the pure-JS xpath library can improve the consistency of xpath + element locators between different browser vendors, but the pure-JS + version is much slower than the native implementations. - 'expression' is the value to return + 'allow' is boolean, true means we'll prefer to use native XPath; false means we'll only use JS XPath """ - return self.get_string("getExpression", [expression,]) + self.do_command("allowNativeXpath", [allow,]) + def ignore_attributes_without_value(self,ignore): + """ + Specifies whether Selenium will ignore xpath attributes that have no + value, i.e. are the empty string, when using the non-native xpath + evaluation engine. You'd want to do this for performance reasons in IE. + However, this could break certain xpaths, for example an xpath that looks + for an attribute whose value is NOT the empty string. + + The hope is that such xpaths are relatively rare, but the user should + have the option of using them. Note that this only influences xpath + evaluation when using the ajaxslt engine (i.e. not "javascript-xpath"). + + 'ignore' is boolean, true means we'll ignore attributes without value at the expense of xpath "correctness"; false means we'll sacrifice speed for correctness. + """ + self.do_command("ignoreAttributesWithoutValue", [ignore,]) + + def wait_for_condition(self,script,timeout): """ Runs the specified JavaScript snippet repeatedly until it evaluates to "true". The snippet may have multiple lines, but only the result of the last line will be considered. + Note that, by default, the snippet will be run in the runner's test window, not in the window of your application. To get the window of your application, you can use the JavaScript snippet ``selenium.browserbot.getCurrentWindow()``, and then @@ -1347,8 +1588,9 @@ """ Specifies the amount of time that Selenium will wait for actions to complete. - Actions that require waiting include "open" and the "waitFor*" actions. + Actions that require waiting include "open" and the "waitFor\*" actions. + The default timeout is 30 seconds. 'timeout' is a timeout in milliseconds, after which the action will return with an error @@ -1360,8 +1602,10 @@ """ Waits for a new page to load. + You can use this command instead of the "AndWait" suffixes, "clickAndWait", "selectAndWait", "typeAndWait" etc. (which are only available in the JS API). + Selenium constantly keeps track of new pages loading, and sets a "newPageLoaded" flag when it first notices a page load. Running any other Selenium command after turns the flag to false. Hence, if you want to wait for a page to load, you must @@ -1373,6 +1617,23 @@ self.do_command("waitForPageToLoad", [timeout,]) + def wait_for_frame_to_load(self,frameAddress,timeout): + """ + Waits for a new frame to load. + + + Selenium constantly keeps track of new pages and frames loading, + and sets a "newPageLoaded" flag when it first notices a page load. + + + See waitForPageToLoad for more information. + + 'frameAddress' is FrameAddress from the server side + 'timeout' is a timeout in milliseconds, after which this command will return with an error + """ + self.do_command("waitForFrameToLoad", [frameAddress,timeout,]) + + def get_cookie(self): """ Return all cookies of the current page under test. @@ -1381,23 +1642,205 @@ return self.get_string("getCookie", []) + def get_cookie_by_name(self,name): + """ + Returns the value of the cookie with the specified name, or throws an error if the cookie is not present. + + 'name' is the name of the cookie + """ + return self.get_string("getCookieByName", [name,]) + + + def is_cookie_present(self,name): + """ + Returns true if a cookie with the specified name is present, or false otherwise. + + 'name' is the name of the cookie + """ + return self.get_boolean("isCookiePresent", [name,]) + + def create_cookie(self,nameValuePair,optionsString): """ Create a new cookie whose path and domain are same with those of current page under test, unless you specified a path for this cookie explicitly. 'nameValuePair' is name and value of the cookie in a format "name=value" - 'optionsString' is options for the cookie. Currently supported options include 'path' and 'max_age'. the optionsString's format is "path=/path/, max_age=60". The order of options are irrelevant, the unit of the value of 'max_age' is second. + 'optionsString' is options for the cookie. Currently supported options include 'path', 'max_age' and 'domain'. the optionsString's format is "path=/path/, max_age=60, domain=.foo.com". The order of options are irrelevant, the unit of the value of 'max_age' is second. Note that specifying a domain that isn't a subset of the current domain will usually fail. """ self.do_command("createCookie", [nameValuePair,optionsString,]) - def delete_cookie(self,name,path): + def delete_cookie(self,name,optionsString): """ - Delete a named cookie with specified path. + Delete a named cookie with specified path and domain. Be careful; to delete a cookie, you + need to delete it using the exact same path and domain that were used to create the cookie. + If the path is wrong, or the domain is wrong, the cookie simply won't be deleted. Also + note that specifying a domain that isn't a subset of the current domain will usually fail. + Since there's no way to discover at runtime the original path and domain of a given cookie, + we've added an option called 'recurse' to try all sub-domains of the current domain with + all paths that are a subset of the current path. Beware; this option can be slow. In + big-O notation, it operates in O(n\*m) time, where n is the number of dots in the domain + name and m is the number of slashes in the path. + 'name' is the name of the cookie to be deleted - 'path' is the path property of the cookie to be deleted + 'optionsString' is options for the cookie. Currently supported options include 'path', 'domain' and 'recurse.' The optionsString's format is "path=/path/, domain=.foo.com, recurse=true". The order of options are irrelevant. Note that specifying a domain that isn't a subset of the current domain will usually fail. """ - self.do_command("deleteCookie", [name,path,]) + self.do_command("deleteCookie", [name,optionsString,]) + + def delete_all_visible_cookies(self): + """ + Calls deleteCookie with recurse=true on all cookies visible to the current page. + As noted on the documentation for deleteCookie, recurse=true can be much slower + than simply deleting the cookies using a known domain/path. + + """ + self.do_command("deleteAllVisibleCookies", []) + + + def set_browser_log_level(self,logLevel): + """ + Sets the threshold for browser-side logging messages; log messages beneath this threshold will be discarded. + Valid logLevel strings are: "debug", "info", "warn", "error" or "off". + To see the browser logs, you need to + either show the log window in GUI mode, or enable browser-side logging in Selenium RC. + + 'logLevel' is one of the following: "debug", "info", "warn", "error" or "off" + """ + self.do_command("setBrowserLogLevel", [logLevel,]) + + + def run_script(self,script): + """ + Creates a new "script" tag in the body of the current test window, and + adds the specified text into the body of the command. Scripts run in + this way can often be debugged more easily than scripts executed using + Selenium's "getEval" command. Beware that JS exceptions thrown in these script + tags aren't managed by Selenium, so you should probably wrap your script + in try/catch blocks if there is any chance that the script will throw + an exception. + + 'script' is the JavaScript snippet to run + """ + self.do_command("runScript", [script,]) + + + def add_location_strategy(self,strategyName,functionDefinition): + """ + Defines a new function for Selenium to locate elements on the page. + For example, + if you define the strategy "foo", and someone runs click("foo=blah"), we'll + run your function, passing you the string "blah", and click on the element + that your function + returns, or throw an "Element not found" error if your function returns null. + + We'll pass three arguments to your function: + + * locator: the string the user passed in + * inWindow: the currently selected window + * inDocument: the currently selected document + + + The function must return null if the element can't be found. + + 'strategyName' is the name of the strategy to define; this should use only letters [a-zA-Z] with no spaces or other punctuation. + 'functionDefinition' is a string defining the body of a function in JavaScript. For example: ``return inDocument.getElementById(locator);`` + """ + self.do_command("addLocationStrategy", [strategyName,functionDefinition,]) + + + def capture_entire_page_screenshot(self,filename): + """ + Saves the entire contents of the current window canvas to a PNG file. + Currently this only works in Mozilla and when running in chrome mode. + Contrast this with the captureScreenshot command, which captures the + contents of the OS viewport (i.e. whatever is currently being displayed + on the monitor), and is implemented in the RC only. Implementation + mostly borrowed from the Screengrab! Firefox extension. Please see + http://www.screengrab.org for details. + + 'filename' is the path to the file to persist the screenshot as. No filename extension will be appended by default. Directories will not be created if they do not exist, and an exception will be thrown, possibly by native code. + """ + self.do_command("captureEntirePageScreenshot", [filename,]) + + + def set_context(self,context): + """ + Writes a message to the status bar and adds a note to the browser-side + log. + + 'context' is the message to be sent to the browser + """ + self.do_command("setContext", [context,]) + + + def attach_file(self,fieldLocator,fileLocator): + """ + Sets a file input (upload) field to the file listed in fileLocator + + 'fieldLocator' is an element locator + 'fileLocator' is a URL pointing to the specified file. Before the file can be set in the input field (fieldLocator), Selenium RC may need to transfer the file to the local machine before attaching the file in a web page form. This is common in selenium grid configurations where the RC server driving the browser is not the same machine that started the test. Supported Browsers: Firefox ("\*chrome") only. + """ + self.do_command("attachFile", [fieldLocator,fileLocator,]) + + + def capture_screenshot(self,filename): + """ + Captures a PNG screenshot to the specified file. + + 'filename' is the absolute path to the file to be written, e.g. "c:\blah\screenshot.png" + """ + self.do_command("captureScreenshot", [filename,]) + + + def shut_down_selenium_server(self): + """ + Kills the running Selenium Server and all browser sessions. After you run this command, you will no longer be able to send + commands to the server; you can't remotely start the server once it has been stopped. Normally + you should prefer to run the "stop" command, which terminates the current browser session, rather than + shutting down the entire server. + + """ + self.do_command("shutDownSeleniumServer", []) + + + def key_down_native(self,keycode): + """ + Simulates a user pressing a key (without releasing it yet) by sending a native operating system keystroke. + This function uses the java.awt.Robot class to send a keystroke; this more accurately simulates typing + a key on the keyboard. It does not honor settings from the shiftKeyDown, controlKeyDown, altKeyDown and + metaKeyDown commands, and does not target any particular HTML element. To send a keystroke to a particular + element, focus on the element first before running this command. + + 'keycode' is an integer keycode number corresponding to a java.awt.event.KeyEvent; note that Java keycodes are NOT the same thing as JavaScript keycodes! + """ + self.do_command("keyDownNative", [keycode,]) + + + def key_up_native(self,keycode): + """ + Simulates a user releasing a key by sending a native operating system keystroke. + This function uses the java.awt.Robot class to send a keystroke; this more accurately simulates typing + a key on the keyboard. It does not honor settings from the shiftKeyDown, controlKeyDown, altKeyDown and + metaKeyDown commands, and does not target any particular HTML element. To send a keystroke to a particular + element, focus on the element first before running this command. + + 'keycode' is an integer keycode number corresponding to a java.awt.event.KeyEvent; note that Java keycodes are NOT the same thing as JavaScript keycodes! + """ + self.do_command("keyUpNative", [keycode,]) + + + def key_press_native(self,keycode): + """ + Simulates a user pressing and releasing a key by sending a native operating system keystroke. + This function uses the java.awt.Robot class to send a keystroke; this more accurately simulates typing + a key on the keyboard. It does not honor settings from the shiftKeyDown, controlKeyDown, altKeyDown and + metaKeyDown commands, and does not target any particular HTML element. To send a keystroke to a particular + element, focus on the element first before running this command. + + 'keycode' is an integer keycode number corresponding to a java.awt.event.KeyEvent; note that Java keycodes are NOT the same thing as JavaScript keycodes! + """ + self.do_command("keyPressNative", [keycode,]) + |
From: <sv...@ze...> - 2008-05-22 17:25:01
|
Author: jstevens Date: 2008-05-22 13:25:09 -0400 (Thu, 22 May 2008) New Revision: 9330 Modified: trunk/Products/ZenEvents/UpdateCheck.py Log: fixes #3213 * making sure dmd.lastVersionCheckAttempt gets committed when we do an update check. Modified: trunk/Products/ZenEvents/UpdateCheck.py =================================================================== --- trunk/Products/ZenEvents/UpdateCheck.py 2008-05-22 14:59:34 UTC (rev 9329) +++ trunk/Products/ZenEvents/UpdateCheck.py 2008-05-22 17:25:09 UTC (rev 9330) @@ -104,6 +104,8 @@ return now = long(time.time()) dmd.lastVersionCheckAttempt = now + if not manual: + transaction.commit() try: available = self.getUpdate(dmd, manual) except IOError: |
From: <sv...@ze...> - 2008-05-22 14:59:26
|
Author: ecn Date: 2008-05-22 10:59:34 -0400 (Thu, 22 May 2008) New Revision: 9329 Modified: trunk/Products/ZenModel/ZenPackManager.py Log: * fixes #3212: removal of old .zip style zenpacks fails Modified: trunk/Products/ZenModel/ZenPackManager.py =================================================================== --- trunk/Products/ZenModel/ZenPackManager.py 2008-05-22 13:28:32 UTC (rev 9328) +++ trunk/Products/ZenModel/ZenPackManager.py 2008-05-22 14:59:34 UTC (rev 9329) @@ -181,7 +181,7 @@ if zp.isEggPack(): ZenPackCmd.RemoveZenPack(self.dmd, zpId, skipDepsCheck=True) else: - os.system('%s run --remove %s' % ( + os.system('%s --remove %s' % ( zenPath('bin', 'zenpack'), zpId)) self._p_jar.sync() if REQUEST: |
From: <sv...@ze...> - 2008-05-22 13:28:24
|
Author: ecn Date: 2008-05-22 09:28:32 -0400 (Thu, 22 May 2008) New Revision: 9328 Added: trunk/inst/externallibs/wmi-0.1.12.1.tar.bz2 Removed: trunk/inst/externallibs/wmi-0.1.12.tar.bz2 Log: putting changes to allow non-admin user to run winexe in the trunk to do customer build Added: trunk/inst/externallibs/wmi-0.1.12.1.tar.bz2 Property changes on: trunk/inst/externallibs/wmi-0.1.12.1.tar.bz2 ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Deleted: trunk/inst/externallibs/wmi-0.1.12.tar.bz2 |
From: <sv...@ze...> - 2008-05-22 13:05:48
|
Author: ecn Date: 2008-05-22 09:05:55 -0400 (Thu, 22 May 2008) New Revision: 9327 Added: tags/wmi-0.1.12.1/ Log: tagging wmi-0.1.12.1 Copied: tags/wmi-0.1.12.1 (from rev 9326, trunk/wmi) |
From: <sv...@ze...> - 2008-05-22 12:53:33
|
Author: ecn Date: 2008-05-22 08:53:40 -0400 (Thu, 22 May 2008) New Revision: 9326 Modified: branches/wmi-0.1.12.x/wmi/Samba/source/winexe/winexesvc/winexesvc.c branches/wmi-0.1.12.x/wmi/Samba/source/winexe/winexesvc/winexesvc_exe.c branches/wmi-0.1.12.x/wmi/pycom/pythoncom.py Log: * allow winexe to connect/run programs as a non-admin user Modified: branches/wmi-0.1.12.x/wmi/Samba/source/winexe/winexesvc/winexesvc.c =================================================================== --- branches/wmi-0.1.12.x/wmi/Samba/source/winexe/winexesvc/winexesvc.c 2008-05-21 20:52:21 UTC (rev 9325) +++ branches/wmi-0.1.12.x/wmi/Samba/source/winexe/winexesvc/winexesvc.c 2008-05-22 12:53:40 UTC (rev 9326) @@ -314,7 +314,7 @@ BUFSIZE, BUFSIZE, NMPWAIT_USE_DEFAULT_WAIT, - &sa); + NULL); /* ecn: removed "&sa);" */ if (c->pio == INVALID_HANDLE_VALUE) { hprintf(c->pipe, "error Cannot create io pipe(%s), error 0x%08X\n", buf, GetLastError()); goto finishCloseToken; @@ -328,7 +328,7 @@ BUFSIZE, BUFSIZE, NMPWAIT_USE_DEFAULT_WAIT, - &sa); + NULL); /* ecn: removed "&sa);" */ if (c->perr == INVALID_HANDLE_VALUE) { hprintf(c->pipe, "error Cannot create err pipe\n"); goto finishClosePio; @@ -374,9 +374,8 @@ si.hStdError = c->perr; si.dwFlags |= STARTF_USESTDHANDLES; - if (CreateProcessAsUser( - c->token, - NULL, + /* ecn: was "if (CreateProcessAsUser(c->token, " */ + if (CreateProcess(NULL, cmdline, /* command line */ NULL, /* process security attributes */ NULL, /* primary thread security attributes */ @@ -510,7 +509,7 @@ BUFSIZE, BUFSIZE, NMPWAIT_USE_DEFAULT_WAIT, - &sa); + NULL); /* ecn: removed "&sa);" */ if (pipe->h == INVALID_HANDLE_VALUE) { SvcDebugOut("CreatePipe failed(%08X)\n", Modified: branches/wmi-0.1.12.x/wmi/Samba/source/winexe/winexesvc/winexesvc_exe.c =================================================================== --- branches/wmi-0.1.12.x/wmi/Samba/source/winexe/winexesvc/winexesvc_exe.c 2008-05-21 20:52:21 UTC (rev 9325) +++ branches/wmi-0.1.12.x/wmi/Samba/source/winexe/winexesvc/winexesvc_exe.c 2008-05-22 12:53:40 UTC (rev 9326) @@ -1,23 +1,23 @@ -unsigned int winexesvc_exe_len = 9728; +unsigned int winexesvc_exe_len = 28160; unsigned char winexesvc_exe[] = { 77,90,144,0,3,0,0,0,4,0,0,0,255,255,0,0,184,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,14,31,186,14, 0,180,9,205,33,184,1,76,205,33,84,104,105,115,32,112,114,111,103,114,97,109, 32,99,97,110,110,111,116,32,98,101,32,114,117,110,32,105,110,32,68,79,83,32, - 109,111,100,101,46,13,13,10,36,0,0,0,0,0,0,0,80,69,0,0,76,1,5,0,220,249,33, - 71,0,0,0,0,0,0,0,0,224,0,15,3,11,1,2,56,0,20,0,0,0,14,0,0,0,2,0,0,47,18,0,0, - 0,16,0,0,0,48,0,0,0,0,64,0,0,16,0,0,0,2,0,0,4,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0, - 0,112,0,0,0,4,0,0,137,234,0,0,3,0,0,0,0,0,32,0,0,16,0,0,0,0,16,0,0,16,0,0,0, - 0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,96,0,0,104,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 109,111,100,101,46,13,13,10,36,0,0,0,0,0,0,0,80,69,0,0,76,1,5,0,3,59,51,72,0, + 0,0,0,0,0,0,0,224,0,15,3,11,1,2,56,0,86,0,0,0,20,0,0,0,12,0,0,32,18,0,0,0,16, + 0,0,0,112,0,0,0,0,64,0,0,16,0,0,0,2,0,0,4,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0, + 176,0,0,0,4,0,0,24,226,0,0,3,0,0,0,0,0,32,0,0,16,0,0,0,0,16,0,0,16,0,0,0,0,0, + 0,16,0,0,0,0,0,0,0,0,0,0,0,0,160,0,0,132,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,116,101,120,116,0,0,0,112, - 19,0,0,0,16,0,0,0,20,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,96,46,100,97, - 116,97,0,0,0,112,0,0,0,0,48,0,0,0,2,0,0,0,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64, - 0,0,192,46,114,100,97,116,97,0,0,224,2,0,0,0,64,0,0,0,4,0,0,0,26,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,64,0,0,64,46,98,115,115,0,0,0,0,176,0,0,0,0,80,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,192,46,105,100,97,116,97,0,0,104,7,0,0, - 0,96,0,0,0,8,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,192,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,116,101,120,116,0,0,0,144,84,0, + 0,0,16,0,0,0,86,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,0,0,96,46,100,97,116, + 97,0,0,0,164,0,0,0,0,112,0,0,0,2,0,0,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0, + 192,46,114,100,97,116,97,0,0,112,6,0,0,0,128,0,0,0,8,0,0,0,92,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,64,0,0,64,46,98,115,115,0,0,0,0,64,10,0,0,0,144,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,192,46,105,100,97,116,97,0,0,132,8,0,0, + 0,160,0,0,0,10,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,192,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -29,243 +29,976 @@ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,137,229,131,236,8,199,69,248, - 0,0,0,0,131,236,12,141,69,248,80,255,53,64,48,64,0,141,69,252,80,104,4,80,64, - 0,104,0,80,64,0,232,99,16,0,0,131,196,32,201,195,85,137,229,131,236,8,131,61, - 32,80,64,0,0,116,118,161,32,80,64,0,163,80,48,64,0,131,61,36,98,64,0,0,116, - 25,131,236,8,255,53,32,80,64,0,161,36,98,64,0,255,112,16,232,22,16,0,0,131, - 196,16,131,61,36,98,64,0,224,116,28,131,236,8,255,53,32,80,64,0,161,36,98,64, - 0,131,192,32,255,112,16,232,241,15,0,0,131,196,16,131,61,36,98,64,0,192,116, - 28,131,236,8,255,53,32,80,64,0,161,36,98,64,0,131,192,64,255,112,16,232,204, - 15,0,0,131,196,16,232,180,15,0,0,137,194,161,80,48,64,0,137,2,201,195,85,137, - 229,131,236,24,199,69,248,0,0,0,0,199,69,244,0,0,0,0,139,69,8,139,0,139,0, - 137,69,240,129,125,240,145,0,0,192,119,23,129,125,240,141,0,0,192,115,113, - 129,125,240,5,0,0,192,116,28,233,191,0,0,0,129,125,240,147,0,0,192,116,90, - 129,125,240,148,0,0,192,116,88,233,168,0,0,0,131,236,8,106,0,106,11,232,56, - 15,0,0,131,196,16,137,69,252,131,125,252,1,117,24,131,236,8,106,1,106,11,232, - 32,15,0,0,131,196,16,199,69,248,255,255,255,255,235,120,131,125,252,0,116, - 114,131,236,12,106,11,139,69,252,255,208,131,196,16,199,69,248,255,255,255, - 255,235,92,199,69,244,1,0,0,0,131,236,8,106,0,106,8,232,229,14,0,0,131,196, - 16,137,69,252,131,125,252,1,117,35,131,236,8,106,1,106,8,232,205,14,0,0,131, - 196,16,131,125,244,0,116,5,232,191,13,0,0,199,69,248,255,255,255,255,235,26, - 131,125,252,0,116,20,131,236,12,106,8,139,69,252,255,208,131,196,16,199,69, - 248,255,255,255,255,139,69,248,201,194,4,0,85,137,229,131,236,8,131,236,12, - 104,199,16,64,0,232,66,15,0,0,131,196,12,232,122,13,0,0,232,21,254,255,255, - 232,66,254,255,255,232,68,13,0,0,131,228,240,131,236,4,131,236,12,232,77,14, - 0,0,131,196,12,255,48,255,53,4,80,64,0,255,53,0,80,64,0,232,173,12,0,0,131, - 196,16,137,69,252,232,28,14,0,0,131,236,12,255,117,252,232,1,15,0,0,85,137, - 229,131,236,8,131,236,12,106,1,161,28,98,64,0,255,208,131,196,16,232,130,255, - 255,255,85,137,229,131,236,8,131,236,12,106,2,161,28,98,64,0,255,208,131,196, - 16,232,104,255,255,255,85,137,229,131,236,8,131,236,12,255,117,8,161,52,98, - 64,0,255,208,131,196,16,201,195,85,137,229,131,236,8,131,236,12,255,117,8, - 161,40,98,64,0,255,208,131,196,16,201,195,144,144,144,144,144,144,144,144, - 144,144,144,144,144,85,137,229,49,192,87,252,141,125,204,185,6,0,0,0,131,236, - 56,199,69,200,0,0,0,0,199,69,196,0,0,0,0,243,170,141,69,200,80,106,0,106,0, - 106,0,106,0,106,0,106,0,104,32,2,0,0,106,32,106,2,141,69,204,80,198,69,209,5, - 232,152,15,0,0,49,210,133,192,15,132,142,0,0,0,139,69,200,137,69,248,141,69, - 196,80,106,0,141,69,220,80,106,1,199,69,220,255,1,31,0,199,69,224,2,0,0,0, - 199,69,228,0,0,0,0,199,69,240,0,0,0,0,199,69,244,2,0,0,0,232,100,15,0,0,49, - 210,133,192,117,78,106,20,106,64,232,5,14,0,0,49,210,133,192,137,199,116,61, - 106,1,80,232,85,15,0,0,49,210,133,192,116,47,106,0,255,117,196,106,1,87,232, - 82,15,0,0,49,210,133,192,116,28,199,5,80,80,64,0,12,0,0,0,137,61,84,80,64,0, - 199,5,88,80,64,0,0,0,0,0,178,1,137,208,139,125,252,201,195,85,137,229,87,86, - 83,80,80,139,117,12,139,93,8,199,69,236,0,0,0,0,131,238,2,120,77,139,125,16, - 131,199,4,87,106,0,106,1,83,139,69,16,255,48,232,153,13,0,0,133,192,117,12, - 232,160,13,0,0,61,229,3,0,0,117,39,106,1,141,69,240,80,87,139,69,16,255,48, - 232,152,13,0,0,133,192,116,18,131,125,240,0,116,12,128,59,10,116,7,255,69, - 236,67,78,235,177,198,3,0,139,69,236,141,101,244,91,94,95,201,195,85,137,229, - 87,86,83,129,236,4,4,0,0,141,69,16,80,255,117,12,104,0,4,0,0,141,133,244,251, - 255,255,139,93,8,80,232,237,12,0,0,141,115,4,131,196,16,86,106,0,49,192,252, - 131,201,255,141,189,244,251,255,255,242,174,247,209,73,81,141,133,244,251, - 255,255,80,255,51,232,52,13,0,0,133,192,117,29,232,11,13,0,0,61,229,3,0,0, - 117,17,106,1,141,133,240,251,255,255,80,86,255,51,232,3,13,0,0,255,51,232,28, - 13,0,0,139,133,240,251,255,255,141,101,244,91,94,95,201,195,85,137,229,87,86, - 83,131,236,24,106,32,139,117,8,255,118,4,199,69,240,0,0,0,0,232,97,12,0,0, - 133,192,89,91,137,195,15,132,216,0,0,0,255,53,32,48,64,0,67,83,232,56,12,0,0, - 57,216,95,90,117,48,161,32,48,64,0,137,69,236,131,201,255,49,192,252,139,125, - 236,242,174,247,209,141,65,255,128,60,3,32,117,18,141,68,3,1,80,232,250,11,0, - 0,137,70,24,233,141,0,0,0,255,53,36,48,64,0,83,232,246,11,0,0,57,216,90,89, - 117,40,49,192,131,201,255,139,61,36,48,64,0,252,242,174,247,209,141,65,255, - 128,60,3,32,117,15,141,68,3,1,80,232,189,11,0,0,137,70,20,235,83,255,53,40, - 48,64,0,83,232,188,11,0,0,57,216,89,95,117,45,161,40,48,64,0,137,69,220,131, - 201,255,49,192,252,139,125,220,242,174,247,209,141,65,255,128,60,3,32,117,15, - 141,68,3,1,80,232,190,10,0,0,137,70,28,235,20,255,118,4,104,34,64,64,0,255, - 54,232,134,254,255,255,131,196,12,235,8,90,199,69,240,1,0,0,0,139,69,240,141, - 101,244,91,94,95,201,195,85,137,229,87,86,83,86,86,106,32,139,69,8,255,112,4, - 199,69,240,0,0,0,0,232,86,11,0,0,133,192,89,91,137,198,116,98,141,88,1,255, - 53,44,48,64,0,83,232,47,11,0,0,57,216,95,90,117,27,161,44,48,64,0,137,69,236, - 131,201,255,49,192,252,139,125,236,242,174,247,209,128,60,49,0,116,23,139,69, - 8,255,112,4,104,69,64,64,0,255,48,232,8,254,255,255,131,196,12,235,27,106,80, - 104,98,64,64,0,139,69,8,255,48,232,242,253,255,255,131,196,12,199,69,240,1,0, - 0,0,139,69,240,141,101,244,91,94,95,201,195,85,137,229,86,83,106,47,139,93,8, - 83,232,209,10,0,0,133,192,90,139,117,12,89,117,14,106,92,83,232,192,10,0,0, - 133,192,90,89,116,9,198,0,0,64,137,94,4,235,9,137,216,199,70,4,114,64,64,0, - 137,6,106,37,80,232,158,10,0,0,133,192,90,89,116,4,198,0,0,64,137,70,8,141, - 101,248,91,184,1,0,0,0,94,201,195,85,137,229,86,83,131,236,20,139,93,8,139, - 83,28,49,246,133,210,116,106,141,69,232,80,82,232,134,255,255,255,133,192,90, - 89,117,19,104,116,64,64,0,255,51,232,81,253,255,255,91,88,233,45,1,0,0,141, - 67,16,80,106,0,106,2,255,117,240,255,117,236,255,117,232,232,248,11,0,0,133, - 192,117,35,232,143,10,0,0,80,255,117,240,255,117,236,255,117,232,104,151,64, - 64,0,255,51,232,21,253,255,255,131,196,24,233,240,0,0,0,190,1,0,0,0,233,230, - 0,0,0,131,123,24,0,116,37,141,69,228,80,104,255,0,15,0,232,147,10,0,0,80,232, - 189,11,0,0,133,192,117,98,232,68,10,0,0,80,104,188,64,64,0,235,24,139,3,255, - 48,232,179,11,0,0,133,192,117,23,232,42,10,0,0,80,104,222,64,64,0,255,51,232, - 185,252,255,255,233,148,0,0,0,141,69,228,80,106,0,104,255,0,15,0,232,88,10,0, - 0,80,232,146,11,0,0,133,192,117,23,232,249,9,0,0,80,104,10,65,64,0,255,51, - 232,136,252,255,255,131,196,12,235,64,141,67,16,80,106,1,255,115,20,106,0, - 104,0,0,0,2,255,117,228,232,111,11,0,0,133,192,117,23,232,198,9,0,0,80,104, - 43,65,64,0,255,51,232,85,252,255,255,131,196,12,235,5,190,1,0,0,0,255,117, - 228,232,7,10,0,0,131,123,24,0,117,32,232,76,11,0,0,133,192,117,23,232,147,9, - 0,0,80,104,76,65,64,0,255,51,232,34,252,255,255,49,246,131,196,12,141,101, - 248,91,137,240,94,201,195,85,137,229,87,86,83,129,236,132,1,0,0,106,32,139, - 117,8,255,118,4,232,255,8,0,0,133,192,90,89,137,133,112,254,255,255,15,132, - 223,2,0,0,86,255,133,112,254,255,255,232,94,254,255,255,133,192,95,15,132, - 202,2,0,0,232,165,9,0,0,137,195,193,227,16,3,94,32,83,104,106,65,64,0,141, - 189,244,254,255,255,87,232,139,8,0,0,104,80,80,64,0,106,0,104,0,1,0,0,104,0, - 1,0,0,106,1,106,0,106,3,87,232,126,9,0,0,137,70,8,131,196,12,64,117,27,232, - 240,8,0,0,80,87,104,132,65,64,0,255,54,232,126,251,255,255,131,196,16,233,98, - 2,0,0,83,104,179,65,64,0,87,232,62,8,0,0,104,80,80,64,0,106,0,104,0,1,0,0, - 104,0,1,0,0,106,1,106,0,106,3,87,232,49,9,0,0,137,70,12,131,196,12,64,117,19, - 104,206,65,64,0,255,54,232,56,251,255,255,89,91,233,21,2,0,0,83,104,236,65, - 64,0,255,54,232,36,251,255,255,106,0,255,118,8,232,14,9,0,0,131,196,12,133, - 192,117,31,232,114,8,0,0,61,23,2,0,0,116,19,104,253,65,64,0,255,54,232,251, - 250,255,255,88,90,233,208,1,0,0,106,0,255,118,12,232,222,8,0,0,133,192,117, - 31,232,69,8,0,0,61,23,2,0,0,116,19,104,26,66,64,0,255,54,232,206,250,255,255, - 91,95,233,155,1,0,0,106,1,106,1,255,118,8,232,191,8,0,0,106,1,106,1,255,118, - 12,232,179,8,0,0,141,189,212,254,255,255,252,49,192,185,4,0,0,0,243,171,106, - 68,106,0,141,157,132,254,255,255,83,199,133,228,254,255,255,12,0,0,0,199,133, - 236,254,255,255,1,0,0,0,199,133,232,254,255,255,0,0,0,0,232,21,7,0,0,139,70, - 8,137,133,188,254,255,255,137,133,192,254,255,255,139,70,12,137,133,196,254, - 255,255,141,133,212,254,255,255,80,83,106,0,106,0,106,0,106,1,106,0,106,0, - 255,181,112,254,255,255,106,0,255,118,16,129,141,176,254,255,255,0,1,0,0,199, - 133,132,254,255,255,68,0,0,0,232,69,9,0,0,131,196,12,133,192,15,132,199,0,0, - 0,139,22,139,66,20,137,133,124,254,255,255,139,133,212,254,255,255,137,133, - 128,254,255,255,255,114,20,232,11,8,0,0,139,22,141,66,4,80,106,0,106,1,141, - 133,123,254,255,255,80,255,50,232,51,7,0,0,133,192,117,5,232,58,7,0,0,106, - 255,106,0,141,133,124,254,255,255,80,106,2,232,232,7,0,0,133,192,137,133,116, - 254,255,255,116,20,141,133,116,254,255,255,80,255,181,212,254,255,255,232, - 220,7,0,0,235,26,104,52,18,0,0,255,181,212,254,255,255,199,133,116,254,255, - 255,52,18,0,0,232,208,7,0,0,255,118,8,232,24,7,0,0,255,118,12,232,16,7,0,0, - 255,181,212,254,255,255,232,53,7,0,0,255,181,216,254,255,255,232,42,7,0,0, - 255,181,116,254,255,255,104,56,66,64,0,255,54,232,84,249,255,255,131,196,12, - 235,27,232,174,6,0,0,80,255,181,112,254,255,255,104,74,66,64,0,255,54,232,55, - 249,255,255,131,196,16,255,118,12,232,128,7,0,0,255,118,8,232,120,7,0,0,255, - 118,12,232,224,6,0,0,255,118,8,232,216,6,0,0,255,118,16,232,208,6,0,0,141, - 101,244,91,94,49,192,95,201,195,85,137,229,87,86,83,131,236,56,104,0,128,0,0, - 139,93,8,232,176,5,0,0,133,192,137,198,89,117,17,104,105,66,64,0,255,51,232, - 217,248,255,255,233,229,0,0,0,104,0,128,0,0,106,0,80,232,107,5,0,0,141,125, - 196,252,49,192,185,9,0,0,0,243,171,139,3,137,69,196,139,67,4,83,137,117,200, - 137,69,228,232,90,5,0,0,131,196,16,255,117,196,104,0,128,0,0,86,232,32,248, - 255,255,131,196,12,133,192,126,104,187,0,48,64,0,131,61,0,48,64,0,0,116,71, - 255,51,86,232,108,5,0,0,57,240,95,90,117,30,139,3,137,69,188,131,201,255,49, - 192,252,139,125,188,242,174,247,209,138,68,49,255,132,192,116,12,60,32,116,8, - 131,195,8,131,59,0,235,202,131,59,0,116,14,141,125,196,87,255,83,4,133,192, - 91,117,152,235,19,86,104,151,66,64,0,255,117,196,232,43,248,255,255,131,196, - 12,235,131,139,69,196,255,48,232,176,5,0,0,139,69,196,255,48,232,102,6,0,0, - 139,69,196,255,48,232,204,5,0,0,139,69,196,255,112,20,232,193,5,0,0,255,117, - 196,232,169,4,0,0,86,232,163,4,0,0,141,101,244,91,94,95,201,195,85,137,229, - 87,83,81,232,128,246,255,255,131,202,255,133,192,15,132,246,0,0,0,235,21,255, - 115,20,232,139,5,0,0,83,232,117,4,0,0,49,210,233,223,0,0,0,106,24,232,119,4, - 0,0,137,195,252,141,120,4,185,5,0,0,0,49,192,243,171,106,0,106,1,106,1,106,0, - 232,251,5,0,0,137,67,20,104,80,80,64,0,106,0,104,0,1,0,0,104,0,1,0,0,104,255, - 0,0,0,106,0,104,3,0,0,64,104,188,66,64,0,232,81,5,0,0,137,3,131,248,255,90, - 116,150,141,123,4,87,80,232,79,5,0,0,133,192,117,97,232,182,4,0,0,61,23,2,0, - 0,116,25,61,229,3,0,0,117,78,106,1,141,69,244,80,87,255,51,232,170,4,0,0,133, - 192,116,60,106,8,232,239,3,0,0,139,21,16,80,64,0,66,137,24,137,21,16,80,64,0, - 137,80,4,106,0,106,0,80,104,250,26,64,0,106,0,106,0,232,122,5,0,0,133,192,95, - 116,11,80,232,191,4,0,0,233,60,255,255,255,255,51,232,179,4,0,0,255,115,20, - 232,171,4,0,0,83,232,149,3,0,0,91,233,33,255,255,255,141,101,248,91,137,208, - 95,201,194,4,0,144,144,144,144,85,137,229,139,69,8,131,248,2,116,14,119,5,72, - 116,33,235,71,131,248,3,116,14,235,64,199,5,100,80,64,0,7,0,0,0,235,52,199,5, - 100,80,64,0,4,0,0,0,235,40,199,5,108,80,64,0,0,0,0,0,199,5,100,80,64,0,1,0,0, - 0,199,5,116,80,64,0,0,0,0,0,199,5,120,80,64,0,0,0,0,0,104,96,80,64,0,255,53, - 128,80,64,0,232,151,5,0,0,133,192,117,5,232,190,3,0,0,201,194,4,0,85,137,229, - 106,0,106,0,106,0,104,21,28,64,0,106,0,106,0,232,179,4,0,0,133,192,186,1,0,0, - 0,116,8,80,232,244,3,0,0,49,210,137,208,201,195,85,137,229,80,104,48,29,64,0, - 104,208,66,64,0,199,5,96,80,64,0,48,0,0,0,199,5,100,80,64,0,2,0,0,0,199,5, - 104,80,64,0,3,0,0,0,199,5,108,80,64,0,0,0,0,0,199,5,112,80,64,0,0,0,0,0,199, - 5,116,80,64,0,0,0,0,0,199,5,120,80,64,0,0,0,0,0,232,21,5,0,0,133,192,163,128, - 80,64,0,15,132,138,0,0,0,141,69,252,80,255,117,12,255,117,8,232,95,255,255, - 255,131,196,12,133,192,116,61,104,96,80,64,0,163,108,80,64,0,255,53,128,80, - 64,0,139,69,252,199,5,100,80,64,0,1,0,0,0,199,5,116,80,64,0,0,0,0,0,199,5, - 120,80,64,0,0,0,0,0,163,112,80,64,0,232,167,4,0,0,235,55,104,96,80,64,0,255, - 53,128,80,64,0,199,5,100,80,64,0,4,0,0,0,199,5,116,80,64,0,0,0,0,0,199,5,120, - 80,64,0,0,0,0,0,232,119,4,0,0,133,192,117,5,232,158,2,0,0,201,194,8,0,85,137, - 229,131,236,16,232,35,1,0,0,141,69,240,80,199,69,240,208,66,64,0,199,69,244, - 210,29,64,0,199,69,248,0,0,0,0,199,69,252,0,0,0,0,232,90,4,0,0,49,192,201, - 195,144,144,144,144,144,144,85,137,229,131,236,8,139,69,8,137,69,248,139,69, - 248,59,69,12,115,35,139,85,248,139,69,16,3,66,4,137,69,252,139,77,252,139,85, - 252,139,69,248,139,0,3,2,137,1,141,69,248,131,0,8,235,213,201,195,85,137,229, - 104,0,0,64,0,104,224,66,64,0,104,224,66,64,0,232,176,255,255,255,131,196,12, - 201,195,144,144,144,144,144,144,144,144,144,144,144,85,137,229,219,227,201, - 195,144,144,144,144,144,144,144,144,144,85,137,229,131,236,8,161,96,48,64,0, - 131,56,0,116,18,161,96,48,64,0,139,0,255,208,131,5,96,48,64,0,4,235,228,201, - 195,85,137,229,131,236,8,161,96,35,64,0,137,69,252,131,125,252,255,117,27, - 199,69,252,0,0,0,0,139,69,252,131,60,133,100,35,64,0,0,116,7,141,69,252,255, - 0,235,236,139,69,252,137,69,248,131,125,248,0,116,19,139,69,248,139,4,133,96, - 35,64,0,255,208,141,69,248,255,8,235,231,131,236,12,104,112,31,64,0,232,116, - 242,255,255,131,196,16,201,195,85,137,229,131,236,8,131,61,48,80,64,0,0,117, - 15,199,5,48,80,64,0,1,0,0,0,232,130,255,255,255,201,195,144,144,144,144,144, - 144,144,144,144,144,144,144,255,37,4,98,64,0,144,144,0,0,0,0,0,0,0,0,255,37, - 28,98,64,0,144,144,0,0,0,0,0,0,0,0,255,37,32,98,64,0,144,144,0,0,0,0,0,0,0,0, - 255,37,20,98,64,0,144,144,0,0,0,0,0,0,0,0,255,37,72,98,64,0,144,144,0,0,0,0, - 0,0,0,0,255,37,24,98,64,0,144,144,0,0,0,0,0,0,0,0,255,37,44,98,64,0,144,144, - 0,0,0,0,0,0,0,0,255,37,16,98,64,0,144,144,0,0,0,0,0,0,0,0,255,37,68,98,64,0, - 144,144,0,0,0,0,0,0,0,0,255,37,60,98,64,0,144,144,0,0,0,0,0,0,0,0,255,37,64, - 98,64,0,144,144,0,0,0,0,0,0,0,0,255,37,76,98,64,0,144,144,0,0,0,0,0,0,0,0, - 255,37,56,98,64,0,144,144,0,0,0,0,0,0,0,0,255,37,84,98,64,0,144,144,0,0,0,0, - 0,0,0,0,255,37,80,98,64,0,144,144,0,0,0,0,0,0,0,0,255,37,48,98,64,0,144,144, - 0,0,0,0,0,0,0,0,255,37,236,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,188,97,64, - 0,144,144,0,0,0,0,0,0,0,0,255,37,220,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37, - 224,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,212,97,64,0,144,144,0,0,0,0,0,0,0, - 0,255,37,216,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,248,97,64,0,144,144,0,0, - 0,0,0,0,0,0,255,37,192,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,196,97,64,0, - 144,144,0,0,0,0,0,0,0,0,255,37,204,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37, - 164,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,200,97,64,0,144,144,0,0,0,0,0,0,0, - 0,255,37,176,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,168,97,64,0,144,144,0,0, - 0,0,0,0,0,0,255,37,232,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,228,97,64,0, - 144,144,0,0,0,0,0,0,0,0,255,37,244,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37, - 208,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,240,97,64,0,144,144,0,0,0,0,0,0,0, - 0,255,37,184,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,172,97,64,0,144,144,0,0, - 0,0,0,0,0,0,255,37,180,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,100,97,64,0, - 144,144,0,0,0,0,0,0,0,0,255,37,140,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37, - 116,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,144,97,64,0,144,144,0,0,0,0,0,0,0, - 0,255,37,120,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,124,97,64,0,144,144,0,0, - 0,0,0,0,0,0,255,37,112,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,128,97,64,0, - 144,144,0,0,0,0,0,0,0,0,255,37,108,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37, - 136,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,104,97,64,0,144,144,0,0,0,0,0,0,0, - 0,255,37,148,97,64,0,144,144,0,0,0,0,0,0,0,0,255,37,132,97,64,0,144,144,0,0, - 0,0,0,0,0,0,255,37,152,97,64,0,144,144,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0, - 0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,137,229,86,83,49,246,139, + 69,8,49,219,139,0,139,0,61,145,0,0,192,119,59,61,141,0,0,192,114,82,190,1,0, + 0,0,82,82,106,0,106,8,232,130,79,0,0,131,196,16,131,248,1,116,113,133,192, + 116,13,131,236,12,106,8,255,208,131,203,255,131,196,16,141,101,248,137,216, + 91,94,93,194,4,0,61,148,0,0,192,116,202,119,69,61,147,0,0,192,116,188,141, + 101,248,137,216,91,94,93,194,4,0,141,118,0,61,5,0,0,192,116,84,61,29,0,0,192, + 117,201,86,86,106,0,106,4,232,39,79,0,0,131,196,16,131,248,1,116,95,133,192, + 116,178,131,236,12,106,4,235,163,141,116,38,0,61,150,0,0,192,235,213,80,80, + 106,1,106,8,232,254,78,0,0,131,196,16,133,246,117,5,131,203,255,235,137,232, + 205,16,0,0,131,203,255,233,124,255,255,255,80,80,106,0,106,11,232,218,78,0,0, + 131,196,16,131,248,1,116,34,133,192,15,132,97,255,255,255,131,236,12,106,11, + 233,79,255,255,255,81,81,106,1,106,4,232,181,78,0,0,233,65,255,255,255,80,80, + 106,1,106,11,232,165,78,0,0,233,49,255,255,255,85,137,229,83,131,236,32,104, + 0,16,64,0,232,111,79,0,0,131,196,12,232,71,15,0,0,232,98,16,0,0,131,236,12, + 141,69,248,199,69,248,0,0,0,0,80,141,69,244,139,29,48,112,64,0,83,80,104,0, + 144,64,0,104,4,144,64,0,232,138,78,0,0,161,32,144,64,0,131,196,32,133,192, + 116,78,139,21,104,162,64,0,163,64,112,64,0,133,210,15,133,131,0,0,0,131,250, + 224,116,26,80,80,161,32,144,64,0,80,139,66,48,80,232,69,78,0,0,131,196,16, + 139,21,104,162,64,0,131,250,192,116,23,83,83,139,13,32,144,64,0,81,139,66,80, + 80,232,37,78,0,0,131,196,16,102,144,232,11,78,0,0,139,21,64,112,64,0,137,16, + 232,126,14,0,0,131,228,240,232,70,1,0,0,131,236,16,232,206,77,0,0,131,196,12, + 139,0,80,161,0,144,64,0,80,161,4,144,64,0,80,232,103,12,0,0,137,195,232,160, + 77,0,0,137,28,36,232,136,78,0,0,81,81,80,139,66,16,80,232,204,77,0,0,131,196, + 16,139,21,104,162,64,0,233,99,255,255,255,141,180,38,0,0,0,0,141,188,39,0,0, + 0,0,85,137,229,131,236,20,106,1,255,21,96,162,64,0,232,221,254,255,255,141, + 182,0,0,0,0,141,188,39,0,0,0,0,85,137,229,131,236,20,106,2,255,21,96,162,64, + 0,232,189,254,255,255,141,182,0,0,0,0,141,188,39,0,0,0,0,85,139,13,116,162, + 64,0,137,229,93,255,225,141,116,38,0,85,139,13,108,162,64,0,137,229,93,255, + 225,144,144,144,144,85,137,229,131,236,8,161,160,112,64,0,133,192,116,59,131, + 236,12,104,0,128,64,0,232,4,78,0,0,137,194,131,196,12,184,0,0,0,0,133,210, + 116,15,80,80,104,13,128,64,0,82,232,249,77,0,0,90,89,133,192,116,13,131,236, + 12,104,160,112,64,0,255,208,131,196,16,201,195,141,116,38,0,85,137,229,93, + 195,141,116,38,0,141,188,39,0,0,0,0,85,137,229,131,236,8,161,4,112,64,0,139, + 0,133,192,116,21,255,208,161,4,112,64,0,131,192,4,163,4,112,64,0,139,0,133, + 192,117,235,201,195,144,141,180,38,0,0,0,0,85,137,229,86,83,139,13,0,112,64, + 0,133,201,116,7,141,101,248,91,94,93,195,139,29,128,100,64,0,199,5,0,112,64, + 0,1,0,0,0,232,69,255,255,255,131,251,255,116,47,133,219,116,20,141,52,157, + 128,100,64,0,144,141,116,38,0,255,22,131,238,4,75,117,248,131,236,12,104,224, + 18,64,0,232,251,254,255,255,131,196,16,141,101,248,91,94,93,195,49,219,235,2, + 137,195,141,67,1,139,20,133,128,100,64,0,133,210,117,240,235,187,144,144,144, + 144,144,144,144,144,144,144,144,85,137,229,86,83,80,139,93,8,80,106,47,83, + 232,94,76,0,0,139,117,12,131,196,16,133,192,117,17,81,81,106,92,83,232,74,76, + 0,0,131,196,16,133,192,116,9,198,0,0,64,137,94,4,235,9,199,70,4,48,128,64,0, + 137,216,137,6,82,82,106,37,80,232,37,76,0,0,131,196,16,133,192,116,4,198,0,0, + 64,137,70,8,141,101,248,184,1,0,0,0,91,94,93,195,85,137,229,87,86,83,131,236, + 28,199,69,224,0,0,0,0,139,125,16,139,117,12,139,93,8,78,141,71,4,137,69,220, + 235,72,131,236,12,255,117,220,106,0,106,1,83,255,55,232,151,76,0,0,131,196, + 12,133,192,117,12,232,155,76,0,0,61,229,3,0,0,117,38,141,69,240,106,1,80,255, + 117,220,255,55,232,148,76,0,0,133,192,116,18,131,125,240,0,116,12,128,59,10, + 116,7,255,69,224,67,78,121,181,198,3,0,139,69,224,141,101,244,91,94,95,93, + 195,85,137,229,87,86,83,129,236,28,4,0,0,141,69,16,139,93,8,137,69,236,80, + 141,133,236,251,255,255,255,117,12,137,133,220,251,255,255,104,0,4,0,0,141, + 115,4,80,232,109,14,0,0,137,52,36,252,106,0,49,192,131,201,255,139,189,220, + 251,255,255,242,174,247,209,73,141,133,236,251,255,255,81,80,255,51,232,40, + 76,0,0,131,196,12,133,192,117,26,232,252,75,0,0,61,229,3,0,0,117,14,141,69, + 240,106,1,80,86,255,51,232,247,75,0,0,131,236,12,255,51,232,13,76,0,0,139,69, + 240,141,101,244,91,94,95,93,195,85,137,229,87,86,83,131,236,72,104,0,128,0,0, + 232,47,75,0,0,131,196,16,137,195,133,192,117,22,80,80,139,69,8,104,50,128,64, + 0,255,48,232,69,255,255,255,233,231,0,0,0,141,117,208,80,104,0,128,0,0,106,0, + 83,232,239,74,0,0,252,49,192,185,9,0,0,0,137,247,243,171,139,85,8,137,93,212, + 139,2,137,69,208,139,66,4,137,69,240,137,20,36,232,234,74,0,0,131,196,16,80, + 255,117,208,104,0,128,0,0,83,232,125,254,255,255,131,196,16,133,192,126,92, + 190,16,112,64,0,235,41,80,80,87,83,232,145,74,0,0,131,196,16,57,216,117,22, + 252,49,192,131,201,255,242,174,247,209,138,68,11,255,132,192,116,15,60,32, + 116,11,131,198,8,139,62,133,255,117,209,235,19,131,236,12,141,125,208,87,255, + 86,4,131,196,16,133,192,116,19,235,159,80,83,104,96,128,64,0,255,117,208,232, + 151,254,255,255,235,139,139,69,208,131,236,12,255,48,232,24,75,0,0,139,69, + 208,255,48,232,30,75,0,0,139,69,208,255,48,232,36,75,0,0,139,69,208,255,112, + 20,232,25,75,0,0,255,117,208,232,65,74,0,0,137,28,36,232,57,74,0,0,131,196, + 16,141,101,244,91,94,95,93,195,85,137,229,86,83,131,236,16,139,117,8,139,86, + 28,133,210,116,109,80,80,141,69,232,80,82,232,80,253,255,255,131,196,16,133, + 192,117,12,83,83,104,133,128,64,0,233,61,1,0,0,141,70,16,81,81,80,106,0,106, + 2,255,117,240,255,117,236,255,117,232,232,5,76,0,0,91,133,192,90,187,1,0,0,0, + 15,133,34,1,0,0,232,81,74,0,0,48,219,81,81,80,255,117,240,255,117,236,255, + 117,232,104,168,128,64,0,255,54,232,215,253,255,255,131,196,32,233,251,0,0,0, + 131,126,24,0,116,43,232,132,74,0,0,82,141,85,244,82,104,255,0,15,0,80,232, + 196,75,0,0,91,133,192,117,105,232,10,74,0,0,81,80,104,205,128,64,0,233,190,0, + 0,0,139,6,131,236,12,255,48,232,178,75,0,0,131,196,12,133,192,117,17,232,230, + 73,0,0,82,80,104,239,128,64,0,233,154,0,0,0,232,69,74,0,0,141,85,244,82,106, + 0,104,255,0,15,0,80,232,148,75,0,0,133,192,117,26,232,187,73,0,0,83,80,104, + 27,129,64,0,255,54,232,77,253,255,255,49,219,131,196,16,235,75,141,70,16,81, + 81,80,106,1,255,118,20,106,0,104,0,0,0,2,255,117,244,232,108,75,0,0,91,133, + 192,90,187,1,0,0,0,117,24,232,124,73,0,0,48,219,81,80,104,60,129,64,0,255,54, + 232,12,253,255,255,131,196,16,131,236,12,255,117,244,232,174,73,0,0,131,196, + 12,131,126,24,0,117,33,232,64,75,0,0,133,192,117,24,232,71,73,0,0,82,80,104, + 93,129,64,0,255,54,49,219,232,215,252,255,255,131,196,16,141,101,248,137,216, + 91,94,93,195,85,137,229,87,86,83,129,236,132,1,0,0,139,117,8,106,32,255,118, + 4,232,66,72,0,0,131,196,16,137,133,124,254,255,255,133,192,15,132,189,2,0,0, + 131,236,12,86,232,74,254,255,255,131,196,16,133,192,15,132,169,2,0,0,232,104, + 73,0,0,141,189,144,254,255,255,137,195,193,227,16,3,94,32,80,83,104,123,129, + 64,0,87,232,13,72,0,0,106,0,106,0,104,0,1,0,0,104,0,1,0,0,106,1,106,0,106,3, + 87,232,67,73,0,0,137,70,8,131,196,16,64,117,27,232,165,72,0,0,80,87,104,149, + 129,64,0,255,54,232,55,252,255,255,131,196,16,233,61,2,0,0,80,83,104,196,129, + 64,0,87,232,194,71,0,0,106,0,106,0,104,0,1,0,0,104,0,1,0,0,106,1,106,0,106,3, + 87,232,248,72,0,0,137,70,12,131,196,16,64,117,22,80,80,104,223,129,64,0,255, + 54,232,241,251,255,255,131,196,16,233,233,1,0,0,87,83,104,253,129,64,0,255, + 54,232,219,251,255,255,89,91,106,0,255,118,8,232,207,72,0,0,95,133,192,90, + 117,34,232,36,72,0,0,61,23,2,0,0,116,22,83,83,104,14,130,64,0,255,54,232,175, + 251,255,255,131,196,16,233,153,1,0,0,81,81,106,0,255,118,12,232,155,72,0,0, + 95,133,192,90,117,34,232,240,71,0,0,61,23,2,0,0,116,22,83,83,104,43,130,64,0, + 255,54,232,123,251,255,255,131,196,16,233,87,1,0,0,81,106,1,106,1,139,133, + 124,254,255,255,255,118,8,64,141,93,212,137,133,128,254,255,255,232,102,72,0, + 0,137,223,106,1,106,1,255,118,12,232,88,72,0,0,49,192,252,171,171,171,171, + 141,125,144,106,68,106,0,87,232,244,70,0,0,139,70,8,137,69,200,137,69,204, + 139,70,12,199,69,144,68,0,0,0,137,69,208,88,90,83,87,106,0,106,0,106,0,106,1, + 106,0,106,0,255,181,128,254,255,255,129,77,188,0,1,0,0,106,0,232,26,72,0,0, + 90,133,192,89,15,132,171,0,0,0,139,6,131,236,12,139,80,20,139,69,212,137,85, + 228,82,137,69,232,232,9,72,0,0,139,22,141,66,4,80,141,69,243,106,0,106,1,80, + 255,50,232,20,71,0,0,131,196,12,133,192,117,5,232,24,71,0,0,141,69,228,106, + 255,106,0,80,106,2,232,233,71,0,0,137,69,236,133,192,116,16,80,80,141,69,236, + 80,255,117,212,232,228,71,0,0,235,22,80,80,104,52,18,0,0,199,69,236,52,18,0, + 0,255,117,212,232,220,71,0,0,80,255,118,8,232,3,71,0,0,255,118,12,232,251,70, + 0,0,255,117,212,232,19,71,0,0,255,117,216,232,11,71,0,0,80,80,255,117,236, + 104,73,130,64,0,255,54,232,74,250,255,255,131,196,32,235,27,232,160,70,0,0, + 80,255,181,128,254,255,255,104,91,130,64,0,255,54,232,45,250,255,255,131,196, + 16,131,236,12,255,118,12,232,191,70,0,0,131,196,12,131,236,12,255,118,8,232, + 177,70,0,0,131,196,12,131,236,12,255,118,12,232,179,70,0,0,131,196,12,131, + 236,12,255,118,8,232,165,70,0,0,131,196,12,131,236,12,255,118,16,232,151,70, + 0,0,131,196,12,141,101,244,49,192,91,94,95,93,195,85,137,229,87,86,83,131, + 236,20,139,69,8,139,64,4,106,32,137,69,236,80,232,80,69,0,0,131,196,16,137, + 198,49,192,133,246,116,95,161,232,130,64,0,141,94,1,137,69,240,82,82,80,83, + 232,81,69,0,0,131,196,16,57,216,117,44,252,131,201,255,49,192,139,125,240, + 242,174,247,209,128,60,14,0,117,25,80,139,69,8,106,80,104,122,130,64,0,255, + 48,232,117,249,255,255,184,1,0,0,0,235,21,80,139,69,8,255,117,236,104,138, + 130,64,0,255,48,232,91,249,255,255,49,192,131,196,16,141,101,244,91,94,95,93, + 195,85,137,229,87,86,83,131,236,20,139,69,8,139,64,4,106,32,137,69,240,80, + 232,196,68,0,0,131,196,16,49,210,133,192,15,132,215,0,0,0,141,88,1,139,53,16, + 131,64,0,80,80,86,83,232,197,68,0,0,131,196,16,57,216,117,39,252,49,192,131, + 201,255,137,247,242,174,247,209,141,68,11,255,128,56,32,117,18,131,236,12,64, + 80,232,111,68,0,0,139,85,8,137,66,24,235,120,139,53,4,131,64,0,80,80,86,83, + 232,136,68,0,0,131,196,16,57,216,117,39,252,49,192,131,201,255,137,247,242, + 174,247,209,141,68,11,255,128,56,32,117,18,131,236,12,64,80,232,50,68,0,0, + 139,85,8,137,66,20,235,59,139,53,244,130,64,0,87,87,86,83,232,75,68,0,0,131, + 196,16,57,216,117,44,252,49,192,131,201,255,137,247,242,174,247,209,141,68, + 11,255,128,56,32,117,23,131,236,12,64,80,232,165,5,0,0,139,85,8,137,66,28, + 186,1,0,0,0,235,21,81,139,69,8,255,117,240,104,167,130,64,0,255,48,232,85, + 248,255,255,49,210,131,196,16,141,101,244,137,208,91,94,95,93,195,85,137,229, + 83,131,236,56,141,69,248,199,69,248,0,0,0,0,80,141,69,238,106,0,199,69,244,0, + 0,0,0,106,0,198,69,238,0,106,0,198,69,239,0,106,0,198,69,240,0,106,0,198,69, + 241,0,106,0,198,69,242,0,104,32,2,0,0,198,69,243,5,106,32,106,2,80,232,87,70, + 0,0,91,133,192,15,132,147,0,0,0,139,69,248,199,69,204,255,1,31,0,137,69,232, + 141,69,244,80,141,69,204,106,0,199,69,208,2,0,0,0,80,199,69,212,0,0,0,0,199, + 69,224,0,0,0,0,199,69,228,2,0,0,0,106,1,232,36,70,0,0,133,192,117,85,81,81, + 106,20,106,64,232,21,69,0,0,137,195,88,133,219,90,116,66,80,80,106,1,83,232, + 19,70,0,0,90,133,192,89,116,50,106,0,255,117,244,106,1,83,232,16,70,0,0,133, + 192,116,33,184,1,0,0,0,199,5,224,153,64,0,12,0,0,0,137,29,228,153,64,0,199,5, + 232,153,64,0,0,0,0,0,235,2,49,192,139,93,252,201,195,85,137,229,87,86,83,131, + 236,28,232,0,255,255,255,131,202,255,133,192,15,132,14,1,0,0,131,236,12,106, + 24,232,1,67,0,0,252,141,112,4,137,195,137,247,49,192,171,171,171,171,171,106, + 0,106,1,106,1,106,0,232,149,68,0,0,137,67,20,106,0,106,0,104,0,1,0,0,104,0,1, + 0,0,104,255,0,0,0,106,0,104,3,0,0,64,104,194,130,64,0,232,222,67,0,0,131,196, + 16,137,3,131,248,255,117,27,131,236,12,255,115,20,232,137,67,0,0,83,232,179, + 66,0,0,49,210,131,196,16,233,156,0,0,0,81,81,86,80,232,192,67,0,0,95,133,192, + 90,117,109,232,21,67,0,0,61,23,2,0,0,116,25,61,229,3,0,0,117,90,141,69,240, + 106,1,80,86,255,51,232,9,67,0,0,133,192,116,72,131,236,12,106,8,232,91,66,0, + 0,139,21,16,144,64,0,66,137,24,137,21,16,144,64,0,137,80,4,90,89,106,0,106,0, + 80,104,254,20,64,0,106,0,106,0,232,244,67,0,0,94,133,192,95,116,17,131,236, + 12,80,232,5,67,0,0,131,196,12,233,18,255,255,255,131,236,12,255,51,232,243, + 66,0,0,255,115,20,232,235,66,0,0,83,232,21,66,0,0,131,196,16,233,242,254,255, + 255,141,101,244,137,208,91,94,95,93,194,4,0,144,141,76,36,4,131,228,240,255, + 113,252,85,137,229,83,81,131,236,16,141,93,232,232,166,244,255,255,80,106,16, + 104,44,131,64,0,83,232,232,65,0,0,137,28,36,232,144,68,0,0,141,101,248,89,49, + 192,91,93,141,97,252,195,85,137,229,131,236,8,139,69,8,131,248,2,116,10,131, + 248,3,116,17,72,117,66,235,24,199,5,244,153,64,0,7,0,0,0,235,52,199,5,244, + 153,64,0,4,0,0,0,235,40,199,5,252,153,64,0,0,0,0,0,199,5,244,153,64,0,1,0,0, + 0,199,5,4,154,64,0,0,0,0,0,199,5,8,154,64,0,0,0,0,0,80,80,104,240,153,64,0, + 255,53,16,154,64,0,232,42,68,0,0,90,133,192,89,117,5,232,207,65,0,0,201,194, + 4,0,85,137,229,131,236,16,106,0,106,0,106,0,104,28,29,64,0,106,0,106,0,232, + 225,66,0,0,90,133,192,89,186,1,0,0,0,116,14,131,236,12,80,232,237,65,0,0,49, + 210,131,196,12,137,208,201,195,85,137,229,131,236,32,199,5,240,153,64,0,48,0, + 0,0,199,5,244,153,64,0,2,0,0,0,104,140,30,64,0,199,5,248,153,64,0,3,0,0,0, + 199,5,252,153,64,0,0,0,0,0,199,5,0,154,64,0,0,0,0,0,199,5,4,154,64,0,0,0,0,0, + 199,5,8,154,64,0,0,0,0,0,104,32,131,64,0,232,153,67,0,0,90,163,16,154,64,0, + 89,133,192,15,132,147,0,0,0,80,141,69,252,80,255,117,12,255,117,8,232,79,255, + 255,255,131,196,16,133,192,116,65,81,81,104,240,153,64,0,163,252,153,64,0, + 255,53,16,154,64,0,139,69,252,199,5,244,153,64,0,1,0,0,0,199,5,4,154,64,0,0, + 0,0,0,199,5,8,154,64,0,0,0,0,0,163,0,154,64,0,232,38,67,0,0,88,90,235,59,80, + 80,104,240,153,64,0,199,5,244,153,64,0,4,0,0,0,255,53,16,154,64,0,199,5,4, + 154,64,0,0,0,0,0,199,5,8,154,64,0,0,0,0,0,232,242,66,0,0,90,133,192,89,117,5, + 232,151,64,0,0,201,194,8,0,144,144,144,85,185,112,134,64,0,137,229,235,20, + 141,182,0,0,0,0,139,81,4,139,1,131,193,8,1,130,0,0,64,0,129,249,112,134,64,0, + 114,234,93,195,144,144,144,144,144,144,144,144,85,137,229,83,156,156,88,137, + 195,53,0,0,32,0,80,157,156,88,157,49,216,169,0,0,32,0,15,132,216,0,0,0,49, + 192,15,162,133,192,15,132,204,0,0,0,184,1,0,0,0,15,162,246,198,1,15,133,196, + 0,0,0,102,133,210,121,13,161,48,144,64,0,131,200,2,163,48,144,64,0,247,194,0, + 0,128,0,116,13,161,48,144,64,0,131,200,4,163,48,144,64,0,247,194,0,0,0,1,116, + 13,161,48,144,64,0,131,200,8,163,48,144,64,0,247,194,0,0,0,2,116,13,161,48, + 144,64,0,131,200,16,163,48,144,64,0,129,226,0,0,0,4,116,15,139,29,48,144,64, + 0,131,203,32,137,29,48,144,64,0,246,193,1,116,15,139,21,48,144,64,0,131,202, + 64,137,21,48,144,64,0,128,229,32,116,12,161,48,144,64,0,12,128,163,48,144,64, + 0,184,0,0,0,128,15,162,61,0,0,0,128,118,33,184,1,0,0,128,15,162,161,48,144, + 64,0,137,193,128,205,1,129,226,0,0,0,64,116,34,128,204,3,163,48,144,64,0,91, + 93,195,144,141,116,38,0,161,48,144,64,0,131,200,1,163,48,144,64,0,233,42,255, + 255,255,91,137,13,48,144,64,0,93,195,144,144,144,144,144,85,137,229,219,227, + 93,195,144,144,144,144,144,144,144,144,144,255,37,72,162,64,0,144,144,0,0,0, + 0,0,0,0,0,83,131,236,40,219,108,36,48,217,229,155,223,224,219,124,36,16,137, + 195,139,68,36,24,37,255,255,0,0,139,84,36,72,137,193,129,227,255,255,0,0,129, + 225,0,128,0,0,137,10,137,193,102,139,84,36,22,139,68,36,20,37,255,255,0,0, + 129,225,255,127,0,0,193,226,16,9,194,139,68,36,16,137,84,36,12,102,139,84,36, + 18,193,226,16,37,255,255,0,0,9,194,137,84,36,8,246,199,1,116,69,129,227,0,4, + 0,0,131,251,1,25,192,131,240,255,131,192,4,137,68,36,4,139,68,36,76,80,139, + 92,36,72,83,139,84,36,72,82,139,68,36,72,80,141,68,36,20,80,141,68,36,28,80, + 81,104,80,112,64,0,232,247,28,0,0,131,196,72,91,195,102,144,246,199,4,116,27, + 128,231,64,117,38,199,68,36,4,1,0,0,0,129,233,62,64,0,0,235,182,141,182,0,0, + 0,0,199,68,36,4,0,0,0,0,235,166,141,182,0,0,0,0,185,1,0,0,0,199,68,36,4,2,0, + 0,0,235,211,144,85,87,86,83,131,236,12,139,68,36,36,139,124,36,32,139,16,139, + 95,8,129,194,0,1,0,0,139,111,4,137,16,139,55,41,243,129,251,0,1,0,0,119,37, + 133,219,116,17,80,83,85,86,232,136,61,0,0,141,4,30,131,196,16,137,7,131,196, + 12,137,232,91,94,95,93,195,141,182,0,0,0,0,187,0,1,0,0,80,83,85,86,232,98,61, + 0,0,141,4,30,131,196,16,137,7,235,216,144,141,180,38,0,0,0,0,85,87,86,83,129, + 236,204,1,0,0,139,140,36,224,1,0,0,139,180,36,228,1,0,0,133,246,15,148,194, + 133,201,15,148,192,9,208,168,1,116,12,190,1,0,0,0,141,140,36,176,0,0,0,141, + 132,36,176,0,0,0,137,140,36,176,1,0,0,137,132,36,180,1,0,0,139,148,36,232,1, + 0,0,141,68,49,255,139,140,36,236,1,0,0,137,132,36,184,1,0,0,137,84,36,112, + 137,76,36,108,199,68,36,88,0,0,0,0,199,68,36,92,0,0,0,0,199,68,36,80,0,0,0,0, + 199,68,36,84,0,0,0,0,199,68,36,60,0,0,0,0,141,172,36,176,0,0,0,199,132,36, + 140,0,0,0,0,0,0,0,139,92,36,112,15,190,51,67,133,246,137,92,36,112,116,70, + 131,254,37,15,132,154,0,0,0,137,240,141,148,36,176,1,0,0,136,69,0,69,57,213, + 117,214,87,87,141,132,36,148,0,0,0,80,141,140,36,188,1,0,0,81,232,171,254, + 255,255,131,196,16,139,92,36,112,137,197,15,190,51,67,133,246,137,92,36,112, + 117,186,141,148,36,176,0,0,0,137,232,198,69,0,0,41,208,137,132,36,188,1,0,0, + 137,195,139,148,36,176,1,0,0,139,132,36,184,1,0,0,139,188,36,140,0,0,0,41, + 208,139,140,36,188,1,0,0,1,251,57,193,118,9,137,193,137,132,36,188,1,0,0,133, + 201,15,133,224,0,0,0,198,2,0,137,216,129,196,204,1,0,0,91,94,95,93,195,139, + 124,36,112,199,68,36,28,0,0,0,0,199,68,36,32,0,0,0,0,199,68,36,36,0,0,0,0, + 199,68,36,40,0,0,0,0,199,68,36,44,0,0,0,0,199,68,36,48,0,0,0,0,199,68,36,56, + 0,0,0,0,49,201,49,210,138,7,15,190,192,139,92,36,112,137,68,36,52,67,131,232, + 32,137,92,36,112,131,248,88,118,111,198,69,0,37,141,148,36,176,1,0,0,69,57, + 213,15,132,107,1,0,0,59,124,36,112,15,131,213,254,255,255,141,156,36,140,0,0, + 0,138,7,141,180,36,176,1,0,0,136,69,0,69,71,57,245,116,28,59,124,36,112,15, + 131,178,254,255,255,138,7,141,180,36,176,1,0,0,136,69,0,69,71,57,245,117,228, + 85,85,83,141,132,36,188,1,0,0,80,232,124,253,255,255,131,196,16,137,197,235, + 205,144,141,116,38,0,255,36,133,72,131,64,0,86,81,141,140,36,184,0,0,0,81,82, + 232,25,59,0,0,139,140,36,192,1,0,0,139,148,36,204,1,0,0,137,216,1,202,137, + 148,36,192,1,0,0,131,196,16,198,2,0,129,196,204,1,0,0,91,94,95,93,195,199,68, + 36,56,1,0,0,0,186,1,0,0,0,199,68,36,104,100,112,64,0,139,76,36,56,199,68,36, + 32,0,0,0,0,133,201,116,16,139,68,36,52,199,68,36,56,2,0,0,0,137,68,36,32,187, + 16,0,0,0,131,250,1,15,132,173,0,0,0,15,130,167,0,0,0,131,250,2,15,132,41,13, + 0,0,131,250,3,15,133,176,0,0,0,139,68,36,108,139,116,36,108,131,198,8,139,16, + 139,72,4,137,116,36,108,233,143,0,0,0,139,116,36,112,139,92,36,52,131,235,48, + 138,6,15,190,240,131,254,47,126,35,131,254,57,127,30,141,4,155,141,92,70,208, + 139,68,36,112,64,137,68,36,112,139,116,36,112,138,6,15,190,240,131,254,47, + 127,221,133,201,15,132,139,15,0,0,139,116,36,36,137,92,36,40,133,246,15,132, + 116,254,255,255,247,219,137,92,36,40,233,105,254,255,255,80,80,141,132,36, + 148,0,0,0,80,141,140,36,188,1,0,0,81,232,73,252,255,255,131,196,16,137,197, + 233,116,254,255,255,139,68,36,108,139,84,36,108,131,194,4,49,201,137,84,36, + 108,139,16,137,84,36,80,137,76,36,84,139,76,36,84,11,76,36,80,117,16,199,68, + 36,56,0,0,0,0,199,68,36,32,0,0,0,0,139,76,36,84,139,124,36,56,11,76,36,80, + 137,222,15,149,192,37,255,0,0,0,141,148,36,144,0,0,0,247,216,33,199,137,84, + 36,100,193,254,31,137,124,36,56,137,92,36,16,137,116,36,20,141,182,0,0,0,0, + 139,116,36,20,86,139,92,36,20,83,139,76,36,92,81,139,84,36,92,82,232,87,60,0, + 0,131,196,16,137,68,36,8,139,68,36,16,137,84,36,12,139,92,36,104,247,100,36, + 8,139,84,36,80,137,193,41,202,139,116,36,100,138,12,26,136,14,70,139,68,36,8, + 139,84,36,12,137,84,36,84,137,116,36,100,137,68,36,80,9,194,117,166,141,148, + 36,144,0,0,0,139,68,36,40,41,214,41,240,137,68,36,40,139,68,36,56,133,192,15, + 149,194,131,124,36,52,111,15,148,192,37,255,0,0,0,133,194,116,12,139,68,36, + 40,133,192,15,142,116,15,0,0,139,68,36,28,41,240,137,68,36,28,139,68,36,28, + 133,192,126,55,139,68,36,40,133,192,126,14,139,124,36,28,139,76,36,40,41,207, + 137,124,36,28,131,124,36,32,1,131,84,36,28,255,131,124,36,56,2,15,148,192, + 139,116,36,28,37,255,0,0,0,41,198,137,116,36,28,139,92,36,44,133,219,15,132, + 217,0,0,0,131,124,36,56,2,15,132,177,13,0,0,139,84,36,32,133,210,116,23,138, + 68,36,32,141,148,36,176,1,0,0,136,69,0,69,57,213,15,132,95,18,0,0,255,76,36, + 40,120,40,141,156,36,140,0,0,0,144,198,69,0,48,141,180,36,176,1,0,0,69,57, + 245,15,132,106,11,0,0,255,76,36,40,121,230,141,182,0,0,0,0,139,68,36,100,141, + 140,36,176,1,0,0,72,137,68,36,100,139,84,36,100,138,2,136,69,0,69,57,205,15, + 132,1,11,0,0,141,180,36,144,0,0,0,59,116,36,100,114,209,255,76,36,28,15,136, + 107,251,255,255,141,156,36,140,0,0,0,198,69,0,32,141,132,36,176,1,0,0,69,57, + 197,116,26,255,76,36,28,15,136,74,251,255,255,198,69,0,32,141,132,36,176,1,0, + 0,69,57,197,117,230,80,80,83,141,148,36,188,1,0,0,82,232,22,250,255,255,131, + 196,16,137,197,235,207,139,68,36,28,133,192,126,51,139,124,36,48,133,255,15, + 133,105,13,0,0,255,76,36,28,120,33,141,156,36,140,0,0,0,198,69,0,32,141,148, + 36,176,1,0,0,69,57,213,15,132,182,11,0,0,255,76,36,28,121,230,131,124,36,56, + 2,15,132,190,13,0,0,139,68,36,32,133,192,116,23,138,68,36,32,141,148,36,176, + 1,0,0,136,69,0,69,57,213,15,132,141,17,0,0,255,76,36,40,120,47,141,156,36, + 140,0,0,0,198,69,0,48,69,141,180,36,176,1,0,0,235,12,198,69,0,48,141,180,36, + 176,1,0,0,69,57,245,15,132,47,10,0,0,255,76,36,40,121,230,139,68,36,100,141, + 140,36,176,1,0,0,72,137,68,36,100,139,84,36,100,138,2,136,69,0,69,57,205,116, + 54,141,180,38,0,0,0,0,141,180,36,144,0,0,0,59,116,36,100,15,131,83,250,255, + 255,139,68,36,100,141,140,36,176,1,0,0,72,137,68,36,100,139,84,36,100,138,2, + 136,69,0,69,57,205,117,209,87,87,141,132,36,148,0,0,0,80,141,156,36,188,1,0, + 0,83,232,10,249,255,255,131,196,16,137,197,235,179,139,68,36,108,139,92,36, + 108,131,195,4,133,201,137,92,36,108,139,24,15,132,46,13,0,0,137,92,36,40,139, + 92,36,112,138,3,233,228,250,255,255,139,116,36,112,138,6,60,51,15,132,128,14, + 0,0,60,54,15,132,57,9,0,0,186,1,0,0,0,233,196,250,255,255,139,68,36,108,139, + 116,36,108,131,198,4,139,0,137,116,36,108,133,192,117,7,141,132,36,128,0,0,0, + 137,238,141,140,36,176,0,0,0,41,206,139,156,36,140,0,0,0,1,222,131,250,1,15, + 132,178,12,0,0,15,130,172,12,0,0,131,250,2,15,132,192,16,0,0,131,250,3,15, + 133,126,249,255,255,137,243,137,48,193,251,31,137,88,4,233,111,249,255,255, + 139,68,36,108,139,92,36,108,131,195,4,199,68,36,96,0,0,0,0,139,0,137,92,36, + 108,137,68,36,100,133,192,15,132,104,15,0,0,139,68,36,40,139,84,36,40,131, + 240,255,193,248,31,33,194,133,201,137,84,36,40,15,132,246,11,0,0,139,92,36, + 40,49,246,57,92,36,96,125,17,139,68,36,100,128,60,48,0,116,7,70,59,116,36,40, + 124,239,137,116,36,40,139,68,36,28,139,84,36,40,41,208,137,68,36,28,139,68, + 36,44,133,192,117,39,255,76,36,28,120,33,141,156,36,140,0,0,0,198,69,0,32, + 141,140,36,176,1,0,0,69,57,205,15,132,124,12,0,0,255,76,36,28,121,230,255,76, + 36,40,120,43,141,156,36,140,0,0,0,139,84,36,100,141,140,36,176,1,0,0,138,2, + 66,137,84,36,100,136,69,0,69,57,205,15,132,203,10,0,0,255,76,36,40,121,220, + 255,76,36,28,120,33,141,156,36,140,0,0,0,198,69,0,32,141,132,36,176,1,0,0,69, + 57,197,15,132,190,10,0,0,255,76,36,28,121,230,139,116,36,96,133,246,15,132, + 108,248,255,255,131,236,12,139,68,36,108,80,232,123,17,0,0,131,196,16,233,87, + 248,255,255,139,116,36,48,9,206,15,133,124,250,255,255,199,68,36,48,1,0,0,0, + 233,68,254,255,255,133,201,117,8,199,68,36,40,6,0,0,0,139,92,36,60,133,219, + 15,132,141,11,0,0,139,68,36,108,139,76,36,108,131,193,12,219,40,137,76,36, + 108,219,124,36,64,139,68,36,40,139,124,36,40,131,240,255,193,248,31,33,199, + 141,68,36,124,137,124,36,40,80,141,68,36,124,80,141,68,36,124,80,139,116,36, + 52,86,131,124,36,56,1,25,192,131,240,255,131,224,2,80,139,92,36,92,83,139,76, + 36,92,81,139,84,36,92,82,232,195,245,255,255,131,196,32,139,76,36,116,137,68, + 36,96,137,68,36,100,129,249,0,128,255,255,15,132,122,3,0,0,139,116,36,124,41, + 198,139,68,36,40,133,192,117,37,139,68,36,96,137,116,36,40,128,120,1,0,139, + 68,36,56,15,149,194,133,192,15,149,192,9,208,168,1,15,132,146,13,0,0,141,70, + 5,131,249,252,126,8,57,193,15,142,151,13,0,0,139,68,36,52,131,232,2,137,68, + 36,52,139,68,36,56,133,192,15,148,194,57,116,36,40,15,159,192,37,255,0,0,0, + 133,194,116,4,137,116,36,40,139,124,36,40,79,137,124,36,40,139,68,36,120,133, + 192,116,42,217,238,219,108,36,64,218,233,223,224,128,228,69,128,244,64,139, + 124,36,32,15,149,194,133,255,15,149,192,9,208,168,1,116,8,199,68,36,32,45,0, + 0,0,139,68,36,28,139,116,36,40,41,240,141,80,251,137,84,36,28,133,210,126,33, + 139,92,36,32,133,219,116,7,131,232,6,137,68,36,28,139,68,36,40,139,84,36,56, + 9,208,131,248,1,131,84,36,28,255,141,65,255,137,198,137,68,36,116,193,248,31, + 49,198,41,198,131,254,99,126,35,185,103,102,102,102,139,68,36,28,72,137,68, + 36,28,137,240,247,233,193,250,2,137,240,193,248,31,137,214,41,198,131,254,99, + 127,226,139,68,36,28,139,124,36,44,133,192,15,159,194,133,255,15,148,192,37, + 255,0,0,0,133,194,15,132,112,5,0,0,139,116,36,48,141,156,36,140,0,0,0,133, + 246,15,132,56,5,0,0,139,92,36,32,133,219,116,23,138,84,36,32,141,140,36,176, + 1,0,0,136,85,0,69,57,205,15,132,100,14,0,0,141,156,36,140,0,0,0,198,69,0,48, + 141,180,36,176,1,0,0,69,57,245,15,132,76,10,0,0,139,68,36,28,72,137,68,36,28, + 139,68,36,28,133,192,127,219,139,84,36,96,141,140,36,176,1,0,0,138,2,66,137, + 84,36,100,136,69,0,69,57,205,15,132,174,12,0,0,139,116,36,40,11,116,36,56, + 116,47,198,69,0,46,141,132,36,176,1,0,0,69,57,197,117,31,233,81,13,0,0,190, + 48,0,0,0,137,243,141,180,36,176,1,0,0,136,93,0,69,57,245,15,132,169,6,0,0, + 255,76,36,40,15,136,145,5,0,0,139,76,36,100,15,190,49,133,246,116,209,65,137, + 76,36,100,235,207,133,201,15,132,54,9,0,0,199,68,36,36,1,0,0,0,233,156,251, + 255,255,131,250,1,15,132,9,10,0,0,15,130,103,9,0,0,131,250,2,15,132,191,12,0, + 0,131,250,3,15,132,252,12,0,0,139,68,36,92,133,192,15,136,13,11,0,0,139,68, + 36,88,139,84,36,92,187,10,0,0,0,137,68,36,80,137,84,36,84,199,68,36,104,100, + 112,64,0,233,41,248,255,255,139,92,36,52,139,116,36,112,137,92,36,32,138,6, + 233,41,246,255,255,186,2,0,0,0,233,48,251,255,255,139,116,36,112,186,3,0,0,0, + 138,6,60,108,15,133,12,246,255,255,70,137,116,36,112,138,6,233,0,246,255,255, + 185,1,0,0,0,199,68,36,48,0,0,0,0,139,116,36,112,138,6,233,232,245,255,255, + 131,250,1,15,132,164,9,0,0,15,130,164,8,0,0,131,250,2,15,132,236,11,0,0,131, + 250,3,15,132,122,12,0,0,199,68,36,32,0,0,0,0,233,92,255,255,255,133,201,117, + 8,199,68,36,40,6,0,0,0,139,116,36,60,133,246,15,132,42,8,0,0,139,68,36,108, + 139,92,36,108,131,195,12,219,40,137,92,36,108,219,124,36,64,139,68,36,40,139, + 84,36,40,131,240,255,193,248,31,33,194,141,68,36,124,137,84,36,40,80,141,68, + 36,124,80,141,68,36,124,80,139,68,36,52,64,80,131,124,36,56,1,25,192,131,240, + 255,131,224,2,80,139,68,36,92,80,139,68,36,92,80,139,68,36,92,80,232,73,242, + 255,255,131,196,32,139,76,36,116,137,68,36,96,137,68,36,100,129,249,0,128, + 255,255,15,133,247,252,255,255,139,84,36,96,199,68,36,56,0,0,0,0,199,68,36, + 40,0,0,0,0,138,2,60,78,15,148,194,60,73,15,148,192,9,208,168,1,15,133,208,6, + 0,0,131,236,12,139,68,36,108,80,232,183,48,0,0,131,196,16,137,68,36,116,139, + 68,36,120,133,192,116,42,217,238,219,108,36,64,218,233,223,224,128,228,69, + 128,244,64,139,124,36,32,15,149,194,133,255,15,149,192,9,208,168,1,116,8,199, + 68,36,32,45,0,0,0,139,116,36,40,133,246,126,14,139,92,36,28,139,68,36,40,41, + 195,137,92,36,28,139,76,36,28,133,201,126,77,131,124,36,32,1,131,84,36,28, + 255,139,76,36,116,133,201,15,142,129,9,0,0,139,84,36,96,59,84,36,124,15,132, + 218,9,0,0,139,68,36,28,41,200,137,68,36,28,139,68,36,40,133,192,139,68,36,56, + 15,159,194,133,192,15,149,192,9,208,131,224,1,131,248,1,131,84,36,28,255,139, + 68,36,28,139,124,36,44,133,192,15,159,194,133,255,15,148,192,37,255,0,0,0, + 133,194,15,132,205,0,0,0,139,116,36,48,141,156,36,140,0,0,0,133,246,15,132, + 149,0,0,0,139,92,36,32,133,219,116,23,138,76,36,32,141,156,36,176,1,0,0,136, + 77,0,69,57,221,15,132,65,11,0,0,141,156,36,140,0,0,0,198,69,0,48,141,132,36, + 176,1,0,0,69,57,197,15,132,117,8,0,0,139,68,36,28,72,137,68,36,28,139,68,36, + 28,133,192,127,219,139,124,36,116,133,255,127,48,233,193,7,0,0,190,48,0,0,0, + 137,242,141,140,36,176,1,0,0,136,85,0,69,57,205,15,132,184,4,0,0,139,68,36, + 116,72,137,68,36,116,133,192,15,142,165,3,0,0,139,68,36,100,15,190,48,133, + 246,116,202,64,137,68,36,100,235,200,198,69,0,32,141,140,36,176,1,0,0,69,57, + 205,15,132,86,7,0,0,139,68,36,28,72,137,68,36,28,139,68,36,28,133,192,127, + 219,139,68,36,32,133,192,116,137,138,68,36,32,141,148,36,176,1,0,0,136,69,0, + 69,57,213,15,133,114,255,255,255,85,85,141,132,36,148,0,0,0,80,141,140,36, + 188,1,0,0,81,232,33,241,255,255,131,196,16,137,197,233,81,255,255,255,141, + 180,38,0,0,0,0,133,201,117,8,199,68,36,40,6,0,0,0,139,92,36,60,133,219,15, + 132,93,5,0,0,139,68,36,108,139,76,36,108,131,193,12,219,40,137,76,36,108,219, + 124,36,64,141,68,36,124,80,141,68,36,124,80,141,68,36,124,80,139,68,36,52,80, + 106,3,139,68,36,92,80,139,68,36,92,80,139,68,36,92,80,232,201,239,255,255, + 131,196,32,137,68,36,96,137,68,36,100,129,124,36,116,0,128,255,255,15,133, + 192,253,255,255,233,125,253,255,255,187,8,0,0,0,199,68,36,104,100,112,64,0, + 233,148,243,255,255,199,68,36,104,117,112,64,0,233,98,243,255,255,139,68,36, + 108,139,84,36,108,131,194,4,139,48,137,84,36,108,233,147,241,255,255,139,116, + 36,60,70,137,116,36,60,233,114,247,255,255,199,68,36,56,1,0,0,0,233,101,247, + 255,255,138,92,36,52,141,180,36,176,1,0,0,136,93,0,69,57,245,15,133,72,241, + 255,255,86,86,141,132,36,148,0,0,0,80,141,132,36,188,1,0,0,80,233,109,241, + 255,255,198,69,0,32,141,148,36,176,1,0,0,69,57,213,15,132,32,5,0,0,139,68,36, + 28,72,137,68,36,28,139,68,36,28,133,192,127,219,139,68,36,32,133,192,15,132, + 226,250,255,255,138,92,36,32,141,180,36,176,1,0,0,136,93,0,69,57,245,15,133, + 203,250,255,255,85,85,141,132,36,148,0,0,0,80,141,132,36,188,1,0,0,80,232, + 190,239,255,255,131,196,16,137,197,233,170,250,255,255,139,68,36,108,139,124, + 36,108,131,199,4,199,68,36,84,0,0,0,0,102,139,0,137,124,36,108,37,255,255,0, + 0,137,68,36,80,233,104,243,255,255,139,84,36,112,128,122,1,52,15,133,185,246, + 255,255,131,194,2,137,84,36,112,186,3,0,0,0,233,135,246,255,255,80,80,141, + 132,36,148,0,0,0,80,141,156,36,188,1,0,0,83,232,86,239,255,255,131,196,16, + 137,197,233,222,244,255,255,80,80,83,141,132,36,188,1,0,0,80,232,60,239,255, + 255,131,196,16,137,197,233,183,245,255,255,80,80,83,141,132,36,188,1,0,0,80, + 232,34,239,255,255,131,196,16,137,197,233,124,244,255,255,138,84,36,52,141, + 140,36,176,1,0,0,136,85,0,69,57,205,15,132,129,6,0,0,139,84,36,116,133,210, + 15,136,64,4,0,0,198,69,0,43,141,148,36,176,1,0,0,69,57,213,15,132,229,6,0,0, + 139,76,36,116,190,2,0,0,0,187,10,0,0,0,131,249,99,126,38,141,4,155,70,141,28, + 0,141,4,195,1,192,57,200,126,240,235,20,15,175,251,139,84,36,116,41,250,141, + 20,146,1,210,137,84,36,116,137,209,137,202,137,200,193,250,31,247,251,137, + 199,141,148,36,176,1,0,0,141,64,48,136,69,0,69,57,213,116,73,78,133,246,127, + 202,255,76,36,28,15,136,36,247,255,255,141,156,36,140,0,0,0,235,10,255,76,36, + 28,15,136,17,247,255,255,198,69,0,32,141,180,36,176,1,0,0,69,57,245,117,230, + 80,80,83,141,132,36,188,1,0,0,80,232,73,238,255,255,131,196,16,137,197,235, + 207,80,80,141,132,36,148,0,0,0,80,141,140,36,188,1,0,0,81,232,43,238,255,255, + 131,196,16,137,197,235,153,80,80,83,141,140,36,188,1,0,0,81,232,20,238,255, + 255,131,196,16,137,197,233,48,244,255,255,83,83,141,132,36,148,0,0,0,80,141, + 132,36,188,1,0,0,80,232,243,237,255,255,131,196,16,137,197,233,54,249,255, + 255,139,68,36,40,133,192,139,68,36,56,15,159,194,133,192,15,149,192,9,208, + 168,1,116,43,198,69,0,46,141,180,36,176,1,0,0,69,57,245,117,27,233,145,6,0,0, + 190,48,0,0,0,137,241,141,156,36,176,1,0,0,136,77,0,69,57,221,116,92,255,76, + 36,40,120,18,139,84,36,100,15,190,50,133,246,116,217,66,137,84,36,100,235, + 215,255,76,36,28,15,136,44,246,255,255,141,156,36,140,0,0,0,235,10,255,76,36, + 28,15,136,25,246,255,255,198,69,0,32,141,132,36,176,1,0,0,69,57,197,117,230, + 86,86,83,141,148,36,188,1,0,0,82,232,81,237,255,255,131,196,16,137,197,235, + 207,87,87,141,132,36,148,0,0,0,80,141,180,36,188,1,0,0,86,232,51,237,255,255, + 131,196,16,137,197,235,134,198,69,0,48,141,156,36,176,1,0,0,69,57,221,15,133, + 59,242,255,255,81,81,141,132,36,148,0,0,0,80,141,180,36,188,1,0,0,86,232,1, + 237,255,255,131,196,16,137,197,233,26,242,255,255,141,180,38,0,0,0,0,137,92, + 36,28,233,240,238,255,255,80,80,141,132,36,148,0,0,0,80,141,156,36,188,1,0,0, + 83,232,208,236,255,255,131,196,16,137,197,233,39,251,255,255,85,85,83,141, + 180,36,188,1,0,0,86,232,182,236,255,255,131,196,16,137,197,233,27,245,255, + 255,87,87,83,141,148,36,188,1,0,0,82,232,156,236,255,255,131,196,16,137,197, + 233,40,245,255,255,131,124,36,56,2,15,132,89,3,0,0,139,92,36,32,133,219,116, + 23,138,68,36,32,141,148,36,176,1,0,0,136,69,0,69,57,213,15,132,84,5,0,0,255, + 76,36,28,15,136,180,242,255,255,141,156,36,140,0,0,0,235,10,255,76,36,28,15, + 136,161,242,255,255,198,69,0,48,141,180,36,176,1,0,0,69,57,245,117,230,82,82, + 83,141,132,36,188,1,0,0,80,232,43,236,255,255,131,196,16,137,197,235,207,131, + 236,12,139,68,36,112,80,232,231,41,0,0,131,196,16,137,68,36,40,233,18,244, + 255,255,198,69,0,48,141,156,36,176,1,0,0,69,57,221,15,133,46,242,255,255,80, + 80,141,132,36,148,0,0,0,80,141,180,36,188,1,0,0,86,232,224,235,255,255,131, + 196,16,137,197,233,13,242,255,255,141,182,0,0,0,0,137,48,233,221,236,255,255, + 199,68,36,40,1,0,0,0,233,127,240,255,255,133,219,120,13,137,92,36,28,139,116, + 36,112,233,197,247,255,255,247,219,199,68,36,32,45,0,0,0,137,92,36,28,235, + 231,139,68,36,108,139,84,36,108,131,194,8,221,0,137,84,36,108,233,158,250, + 255,255,139,68,36,108,139,84,36,108,131,194,8,221,0,137,84,36,108,233,110, + 244,255,255,139,68,36,108,139,76,36,108,131,193,8,221,0,137,76,36,108,233, + 209,247,255,255,139,116,36,112,199,68,36,44,1,0,0,0,138,6,233,79,237,255,255, + 80,80,83,141,180,36,188,1,0,0,86,232,54,235,255,255,131,196,16,137,197,233, + 106,243,255,255,139,68,36,108,139,92,36,108,131,195,4,49,201,137,92,36,108, + 139,16,137,84,36,88,137,76,36,92,233,78,247,255,255,139,68,36,108,139,116,36, + 108,131,198,4,139,24,137,116,36,108,137,217,137,92,36,88,193,249,31,137,76, + 36,92,233,136,246,255,255,80,80,83,141,140,36,188,1,0,0,81,232,217,234,255, + 255,131,196,16,137,197,233,198,250,255,255,82,82,83,141,132,36,188,1,0,0,80, + 232,191,234,255,255,131,196,16,137,197,233,154,245,255,255,198,69,0,45,141, + 180,36,176,1,0,0,69,57,245,116,9,247,92,36,116,233,187,251,255,255,80,80,141, + 132,36,148,0,0,0,80,141,132,36,188,1,0,0,80,232,133,234,255,255,131,196,16, + 137,197,247,92,36,116,233,150,251,255,255,141,180,38,0,0,0,0,139,68,36,108, + 139,92,36,108,131,195,4,137,92,36,108,139,24,137,222,137,92,36,88,193,254,31, + 137,116,36,92,233,236,245,255,255,128,126,1,50,15,133,126,241,255,255,131, + 198,2,186,1,0,0,0,137,116,36,112,233,52,246,255,255,139,68,36,108,139,76,36, + 108,131,193,4,49,219,137,76,36,108,139,8,137,76,36,88,137,92,36,92,233,84, + 246,255,255,80,80,83,141,180,36,188,1,0,0,86,232,2,234,255,255,131,196,16, + 137,197,233,144,248,255,255,198,69,0,48,141,156,36,176,1,0,0,69,57,221,15, + 132,241,2,0,0,139,92,36,40,139,76,36,56,133,219,15,159,194,133,201,15,149, + 192,9,208,168,1,116,20,198,69,0,46,141,132,36,176,1,0,0,69,57,197,15,132,40, + 3,0,0,139,68,36,116,133,192,15,137,6,252,255,255,235,26,139,68,36,40,72,137, + 68,36,40,139,68,36,116,64,137,68,36,116,133,192,15,137,234,251,255,255,198, + 69,0,48,141,140,36,176,1,0,0,69,57,205,117,214,80,80,141,132,36,148,0,0,0,80, + 141,156,36,188,1,0,0,83,232,105,233,255,255,131,196,16,137,197,235,184,82,82, + 83,141,148,36,188,1,0,0,82,232,82,233,255,255,131,196,16,137,197,233,113,247, + 255,255,247,92,36,88,131,84,36,92,0,199,68,36,32,45,0,0,0,247,92,36,92,233, + 217,244,255,255,198,69,0,48,141,140,36,176,1,0,0,69,57,205,15,133,147,252, + 255,255,86,86,141,132,36,148,0,0,0,80,141,156,36,188,1,0,0,83,232,3,233,255, + 255,131,196,16,137,197,233,114,252,255,255,139,84,36,28,139,68,36,40,74,133, + 192,137,84,36,28,15,142,161,246,255,255,139,68,36,28,72,137,68,36,28,233,147, + 246,255,255,141,70,4,233,105,242,255,255,199,68,36,100,64,131,64,0,233,139, + 240,255,255,139,68,36,56,133,192,15,132,46,1,0,0,139,68,36,40,41,200,137,68, + 36,40,139,68,36,40,133,192,15,137,191,245,255,255,199,68,36,40,0,0,0,0,233, + 178,245,255,255,185,1,0,0,0,199,68,36,116,1,0,0,0,233,20,246,255,255,81,81, + 141,132,36,148,0,0,0,80,141,156,36,188,1,0,0,83,232,105,232,255,255,131,196, + 16,137,197,233,94,249,255,255,80,80,141,132,36,148,0,0,0,80,141,140,36,188,1, + 0,0,81,232,72,232,255,255,131,196,16,137,197,233,128,237,255,255,87,87,141, + 132,36,148,0,0,0,80,141,156,36,188,1,0,0,83,232,39,232,255,255,131,196,16, + 137,197,233,49,243,255,255,80,80,141,132,36,148,0,0,0,80,141,140,36,188,1,0, + 0,81,232,6,232,255,255,131,196,16,137,197,233,82,238,255,255,80,80,141,132, + 36,148,0,0,0,80,141,140,36,188,1,0,0,81,232,229,231,255,255,131,196,16,137, + 197,233,250,248,255,255,139,68,36,108,139,84,36,108,131,194,4,199,68,36,92,0, + 0,0,0,102,139,0,137,84,36,108,37,255,255,0,0,137,68,36,88,233,245,243,255, + 255,102,137,48,233,65,239,255,255,139,68,36,108,139,76,36,108,131,193,4,15, + 191,0,137,194,137,76,36,108,193,250,31,137,68,36,88,137,84,36,92,233,38,243, + 255,255,41,206,137,116,36,40,233,209,254,255,255,86,86,141,132,36,148,0,0,0, + 80,141,148,36,188,1,0,0,82,233,109,249,255,255,139,68,36,108,139,84,36,108, + 131,194,8,137,84,36,108,139,72,4,139,16,137,76,36,92,137,84,36,88,233,227, + 242,255,255,139,68,36,108,139,124,36,108,131,199,8,139,16,139,72,4,137,124, + 36,108,233,18,252,255,255,85,85,141,132,36,148,0,0,0,80,141,132,36,188,1,0,0, + 80,233,220,249,255,255,81,81,141,132,36,148,0,0,0,80,141,140,36,188,1,0,0,81, + 232,253,230,255,255,131,196,16,137,197,233,139,250,255,255,86,86,141,132,36, + 148,0,0,0,80,141,180,36,188,1,0,0,86,232,220,230,255,255,131,196,16,137,197, + 233,238,252,255,255,81,81,141,132,36,148,0,0,0,80,141,156,... [truncated message content] |
From: <sv...@ze...> - 2008-05-21 20:52:23
|
Author: abray Date: 2008-05-21 16:52:21 -0400 (Wed, 21 May 2008) New Revision: 9325 Added: trunk/zendocs/DevGuide/devguide/out/ch03s02.html trunk/zendocs/DevGuide/devguide/out/ch05s02.html trunk/zendocs/DevGuide/devguide/out/ch05s03.html trunk/zendocs/DevGuide/devguide/out/ch05s04.html trunk/zendocs/DevGuide/devguide/out/ch05s05.html trunk/zendocs/DevGuide/devguide/out/ch07s01.html trunk/zendocs/DevGuide/devguide/out/ch07s02.html trunk/zendocs/DevGuide/devguide/out/ch07s03.html trunk/zendocs/DevGuide/devguide/out/ch07s04.html trunk/zendocs/DevGuide/devguide/out/ch07s05.html trunk/zendocs/DevGuide/devguide/out/ch07s06.html trunk/zendocs/DevGuide/devguide/out/ch07s07.html trunk/zendocs/DevGuide/devguide/out/ch07s08.html trunk/zendocs/DevGuide/devguide/out/ch07s09.html trunk/zendocs/DevGuide/devguide/out/ch07s10.html trunk/zendocs/DevGuide/devguide/out/ch07s11.html trunk/zendocs/DevGuide/devguide/out/ch07s12.html trunk/zendocs/DevGuide/devguide/out/ch07s13.html trunk/zendocs/DevGuide/devguide/out/ch07s14.html trunk/zendocs/DevGuide/devguide/out/ch07s15.html trunk/zendocs/DevGuide/devguide/out/ch09s03.html trunk/zendocs/DevGuide/devguide/out/ch09s04.html trunk/zendocs/DevGuide/devguide/out/ch11s02.html trunk/zendocs/DevGuide/devguide/out/ch11s03.html trunk/zendocs/DevGuide/devguide/out/ch11s04.html trunk/zendocs/DevGuide/devguide/out/ch11s05.html trunk/zendocs/DevGuide/devguide/out/ch13s03.html trunk/zendocs/DevGuide/devguide/out/ch13s04.html trunk/zendocs/DevGuide/devguide/out/ch13s05.html trunk/zendocs/DevGuide/devguide/out/ch13s06.html trunk/zendocs/DevGuide/devguide/out/ch13s07.html trunk/zendocs/DevGuide/devguide/out/ch13s08.html trunk/zendocs/DevGuide/devguide/out/ch13s09.html trunk/zendocs/DevGuide/devguide/out/ch15s03.html trunk/zendocs/DevGuide/devguide/out/ch16.html trunk/zendocs/DevGuide/devguide/out/ch16s01.html trunk/zendocs/DevGuide/devguide/out/ch16s02.html Log: Checking in more devguide HTML Added: trunk/zendocs/DevGuide/devguide/out/ch03s02.html Added: trunk/zendocs/DevGuide/devguide/out/ch05s02.html Added: trunk/zendocs/DevGuide/devguide/out/ch05s03.html Added: trunk/zendocs/DevGuide/devguide/out/ch05s04.html Added: trunk/zendocs/DevGuide/devguide/out/ch05s05.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s01.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s02.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s03.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s04.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s05.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s06.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s07.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s08.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s09.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s10.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s11.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s12.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s13.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s14.html Added: trunk/zendocs/DevGuide/devguide/out/ch07s15.html Added: trunk/zendocs/DevGuide/devguide/out/ch09s03.html Added: trunk/zendocs/DevGuide/devguide/out/ch09s04.html Added: trunk/zendocs/DevGuide/devguide/out/ch11s02.html Added: trunk/zendocs/DevGuide/devguide/out/ch11s03.html Added: trunk/zendocs/DevGuide/devguide/out/ch11s04.html Added: trunk/zendocs/DevGuide/devguide/out/ch11s05.html Added: trunk/zendocs/DevGuide/devguide/out/ch13s03.html Added: trunk/zendocs/DevGuide/devguide/out/ch13s04.html Added: trunk/zendocs/DevGuide/devguide/out/ch13s05.html Added: trunk/zendocs/DevGuide/devguide/out/ch13s06.html Added: trunk/zendocs/DevGuide/devguide/out/ch13s07.html Added: trunk/zendocs/DevGuide/devguide/out/ch13s08.html Added: trunk/zendocs/DevGuide/devguide/out/ch13s09.html Added: trunk/zendocs/DevGuide/devguide/out/ch15s03.html Added: trunk/zendocs/DevGuide/devguide/out/ch16.html Added: trunk/zendocs/DevGuide/devguide/out/ch16s01.html Added: trunk/zendocs/DevGuide/devguide/out/ch16s02.html |
From: <sv...@ze...> - 2008-05-21 20:49:43
|
Author: abray Date: 2008-05-21 16:49:47 -0400 (Wed, 21 May 2008) New Revision: 9324 Modified: trunk/zendocs/DevGuide/devguide/out/apa.html trunk/zendocs/DevGuide/devguide/out/ch01s05.html trunk/zendocs/DevGuide/devguide/out/ch02.html trunk/zendocs/DevGuide/devguide/out/ch02s01.html trunk/zendocs/DevGuide/devguide/out/ch03.html trunk/zendocs/DevGuide/devguide/out/ch03s01.html trunk/zendocs/DevGuide/devguide/out/ch04.html trunk/zendocs/DevGuide/devguide/out/ch04s01.html trunk/zendocs/DevGuide/devguide/out/ch05.html trunk/zendocs/DevGuide/devguide/out/ch05s01.html trunk/zendocs/DevGuide/devguide/out/ch06.html trunk/zendocs/DevGuide/devguide/out/ch06s01.html trunk/zendocs/DevGuide/devguide/out/ch07.html trunk/zendocs/DevGuide/devguide/out/ch08.html trunk/zendocs/DevGuide/devguide/out/ch09.html trunk/zendocs/DevGuide/devguide/out/ch09s01.html trunk/zendocs/DevGuide/devguide/out/ch09s02.html trunk/zendocs/DevGuide/devguide/out/ch10.html trunk/zendocs/DevGuide/devguide/out/ch10s01.html trunk/zendocs/DevGuide/devguide/out/ch10s02.html trunk/zendocs/DevGuide/devguide/out/ch11.html trunk/zendocs/DevGuide/devguide/out/ch11s01.html trunk/zendocs/DevGuide/devguide/out/ch12.html trunk/zendocs/DevGuide/devguide/out/ch12s01.html trunk/zendocs/DevGuide/devguide/out/ch13.html trunk/zendocs/DevGuide/devguide/out/ch13s01.html trunk/zendocs/DevGuide/devguide/out/ch13s02.html trunk/zendocs/DevGuide/devguide/out/ch14.html trunk/zendocs/DevGuide/devguide/out/ch14s01.html trunk/zendocs/DevGuide/devguide/out/ch14s02.html trunk/zendocs/DevGuide/devguide/out/ch15.html trunk/zendocs/DevGuide/devguide/out/ch15s01.html trunk/zendocs/DevGuide/devguide/out/ch15s02.html trunk/zendocs/DevGuide/devguide/out/index.html Log: Checking in HTML of devguide 22 Modified: trunk/zendocs/DevGuide/devguide/out/apa.html =================================================================== --- trunk/zendocs/DevGuide/devguide/out/apa.html 2008-05-21 19:56:09 UTC (rev 9323) +++ trunk/zendocs/DevGuide/devguide/out/apa.html 2008-05-21 20:49:47 UTC (rev 9324) @@ -1,3 +1,3 @@ <html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> - <title>Appendix A. Event Database Dictionary</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="index.html" title="Zenoss Developer's Guide"><link rel="prev" href="ch15s02.html" title="2. Functional User Interface Testing"><link rel="next" href="apb.html" title="Appendix B. TALES Expressions"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. Event Database Dictionary</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch15s02.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="apb.html">Next</a></td></tr></table><hr></div><div clas! s="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="event_db_dictionary"></a>Appendix A. Event Database Dictionary</h2></div></div></div><div class="informaltable"><table border="1"><colgroup><col width="50%"><col width="50%"></colgroup><thead><tr><th align="center">Event Field</th><th align="center">Description </th></tr></thead><tbody><tr><td>dedupid</td><td>events will deduplicate based on the value of this field. by default: device, component, eventClass, eventKey, severity</td></tr><tr><td>device</td><td>name of device</td></tr><tr><td>component</td><td>name of component (like eth0, httpd, etc)</td></tr><tr><td>eclass</td><td>eventClass (if not specified maybe added by rule process if this fails will be /Unknown)</td></tr><tr><td>eventKey</td><td>if a component needs further deduplication specification this field maybe used</td></tr><tr><td>summary</td><td>message text truncated at 150 characters</td></tr><tr><td>message</t! d><td>full message text</td></tr><tr><td>severity</td><td>numb! er from 0 to 5</td></tr><tr><td>eventState</td><td>state of event 0 = new, 1 = acknowledged, 2 = suppressed</td></tr><tr><td>eventClassKey</td><td>key by which rules processing begins. Often equal to component.</td></tr><tr><td>eventGroup</td><td>logical group of event source (syslog, ping, nteventlog etc)</td></tr><tr><td>stateChange</td><td>last time event changed automatically updated</td></tr><tr><td>firstTime</td><td>unix timestamp when event is received.</td></tr><tr><td>lastTime</td><td>last time an event was received</td></tr><tr><td>count</td><td>number of times an event has repeated</td></tr><tr><td>prodState</td><td>prodState of the device context</td></tr><tr><td>suppid</td><td>id of event that suppressed this event</td></tr><tr><td>manager</td><td>fqdn of the collector from which this event came</td></tr><tr><td>agent</td><td>collector name from which event came (zensyslog, zentrap, etc)</td></tr><tr><td>DeviceClass</td><td>device class from device context</td></tr><tr>! <td>Location</td><td>device location from device context</td></tr><tr><td>Systems</td><td>device systems from device context separated by |</td></tr><tr><td>DeviceGroups</td><td>device systems from device context separated by |</td></tr><tr><td>ipAddress</td><td>ip from which event came</td></tr><tr><td>facility</td><td>syslog facility of this is syslog event</td></tr><tr><td>priority</td><td>syslog priority of this is syslog event</td></tr><tr><td>ntevid</td><td>nt event id if this is nt eventlog event.</td></tr></tbody></table></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch15s02.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="apb.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">2. Functional User Interface Testing </td><td width="20%" align="center"><a accesskey="h" hr! ef="index.html">Home</a></td><td width="40%" align="right" val! ign="top "> Appendix B. TALES Expressions</td></tr></table></div></body></html> \ No newline at end of file + <title>Appendix A. Event Database Dictionary</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="index.html" title="Zenoss Developer's Guide"><link rel="prev" href="ch16s02.html" title="2. Functional User Interface Testing"><link rel="next" href="apb.html" title="Appendix B. TALES Expressions"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. Event Database Dictionary</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch16s02.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="apb.html">Next</a></td></tr></table><hr></div><div clas! s="appendix" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="event_db_dictionary"></a>Appendix A. Event Database Dictionary</h2></div></div></div><div class="informaltable"><table border="1"><colgroup><col width="50%"><col width="50%"></colgroup><thead><tr><th align="center">Event Field</th><th align="center">Description </th></tr></thead><tbody><tr><td>dedupid</td><td>events will deduplicate based on the value of this field. by default: device, component, eventClass, eventKey, severity</td></tr><tr><td>device</td><td>name of device</td></tr><tr><td>component</td><td>name of component (like eth0, httpd, etc)</td></tr><tr><td>eclass</td><td>eventClass (if not specified maybe added by rule process if this fails will be /Unknown)</td></tr><tr><td>eventKey</td><td>if a component needs further deduplication specification this field maybe used</td></tr><tr><td>summary</td><td>message text truncated at 150 characters</td></tr><tr><td>message</t! d><td>full message text</td></tr><tr><td>severity</td><td>numb! er from 0 to 5</td></tr><tr><td>eventState</td><td>state of event 0 = new, 1 = acknowledged, 2 = suppressed</td></tr><tr><td>eventClassKey</td><td>key by which rules processing begins. Often equal to component.</td></tr><tr><td>eventGroup</td><td>logical group of event source (syslog, ping, nteventlog etc)</td></tr><tr><td>stateChange</td><td>last time event changed automatically updated</td></tr><tr><td>firstTime</td><td>unix timestamp when event is received.</td></tr><tr><td>lastTime</td><td>last time an event was received</td></tr><tr><td>count</td><td>number of times an event has repeated</td></tr><tr><td>prodState</td><td>prodState of the device context</td></tr><tr><td>suppid</td><td>id of event that suppressed this event</td></tr><tr><td>manager</td><td>fqdn of the collector from which this event came</td></tr><tr><td>agent</td><td>collector name from which event came (zensyslog, zentrap, etc)</td></tr><tr><td>DeviceClass</td><td>device class from device context</td></tr><tr>! <td>Location</td><td>device location from device context</td></tr><tr><td>Systems</td><td>device systems from device context separated by |</td></tr><tr><td>DeviceGroups</td><td>device systems from device context separated by |</td></tr><tr><td>ipAddress</td><td>ip from which event came</td></tr><tr><td>facility</td><td>syslog facility of this is syslog event</td></tr><tr><td>priority</td><td>syslog priority of this is syslog event</td></tr><tr><td>ntevid</td><td>nt event id if this is nt eventlog event.</td></tr></tbody></table></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch16s02.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="apb.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">2. Functional User Interface Testing </td><td width="20%" align="center"><a accesskey="h" hr! ef="index.html">Home</a></td><td width="40%" align="right" val! ign="top "> Appendix B. TALES Expressions</td></tr></table></div></body></html> \ No newline at end of file Modified: trunk/zendocs/DevGuide/devguide/out/ch01s05.html =================================================================== --- trunk/zendocs/DevGuide/devguide/out/ch01s05.html 2008-05-21 19:56:09 UTC (rev 9323) +++ trunk/zendocs/DevGuide/devguide/out/ch01s05.html 2008-05-21 20:49:47 UTC (rev 9324) @@ -1,3 +1,3 @@ <html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> - <title>5. Performance</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="ch01.html" title="Chapter 1. Introduction"><link rel="prev" href="ch01s04.html" title="4. Events"><link rel="next" href="ch02.html" title="Chapter 2. Coding Guidelines"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">5. Performance</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01s04.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Introduction</th><td width="20%" align="right"> <a accesskey="n" href="ch02.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><d! iv><div><h2 class="title" style="clear: both"><a name="intro_performance"></a>5. Performance</h2></div></div></div><p>The Zenoss Performance Management System tracks important IT resource information as it changes over time. It is critical to know how much disk space is available, what the CPU load is and how long a web page takes to download. This system can collect information though SNMP, custom scripts (ZenCommands) or XML-RPC. Performance information is integrated with the Zenoss Model so that resource usage is shown in the context of other Zenoss information.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch01.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">4. Events </td><td! width="20%" align="center"><a accesskey="h" href="index.html"! >Home</a ></td><td width="40%" align="right" valign="top"> Chapter 2. Coding Guidelines</td></tr></table></div></body></html> \ No newline at end of file + <title>5. Performance</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="ch01.html" title="Chapter 1. Introduction"><link rel="prev" href="ch01s04.html" title="4. Events"><link rel="next" href="ch02.html" title="Chapter 2. Zenoss Code and Function Documentation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">5. Performance</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01s04.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Introduction</th><td width="20%" align="right"> <a accesskey="n" href="ch02.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div! class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="intro_performance"></a>5. Performance</h2></div></div></div><p>The Zenoss Performance Management System tracks important IT resource information as it changes over time. It is critical to know how much disk space is available, what the CPU load is and how long a web page takes to download. This system can collect information though SNMP, custom scripts (ZenCommands) or XML-RPC. Performance information is integrated with the Zenoss Model so that resource usage is shown in the context of other Zenoss information.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch01.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">4. ! ;Events </td><td width="20%" align="center"><a accesskey=! "h" href ="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Zenoss Code and Function Documentation</td></tr></table></div></body></html> \ No newline at end of file Modified: trunk/zendocs/DevGuide/devguide/out/ch02.html =================================================================== --- trunk/zendocs/DevGuide/devguide/out/ch02.html 2008-05-21 19:56:09 UTC (rev 9323) +++ trunk/zendocs/DevGuide/devguide/out/ch02.html 2008-05-21 20:49:47 UTC (rev 9324) @@ -1,3 +1,3 @@ <html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> - <title>Chapter 2. Coding Guidelines</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="index.html" title="Zenoss Developer's Guide"><link rel="prev" href="ch01s05.html" title="5. Performance"><link rel="next" href="ch02s01.html" title="1. Style Guidelines"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Coding Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01s05.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch02s01.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="titlepage"><d! iv><div><h2 class="title"><a name="codingguidelines"></a>Chapter 2. Coding Guidelines</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch02s01.html">1. Style Guidelines</a></span></dt><dt><span class="section"><a href="ch02s02.html">2. Docstrings</a></span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01s05.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch02s01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">5. Performance </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 1. Style Guidelines</td></tr></table></div></body></html> \ No newline at end of file + <title>Chapter 2. Zenoss Code and Function Documentation</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="index.html" title="Zenoss Developer's Guide"><link rel="prev" href="ch01s05.html" title="5. Performance"><link rel="next" href="ch02s01.html" title="1. Where it is Available"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Zenoss Code and Function Documentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01s05.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch02s01.html">Next</a></td></tr></table><hr></div><div clas! s="chapter" lang="en"><div class="titlepage"><div><div><h2 class="title"><a name="codedocs"></a>Chapter 2. Zenoss Code and Function Documentation</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch02s01.html">1. Where it is Available</a></span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01s05.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch02s01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">5. Performance </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 1. Where it is Available</td></tr></table></div></body></html> \ No newline at end of file Modified: trunk/zendocs/DevGuide/devguide/out/ch02s01.html =================================================================== --- trunk/zendocs/DevGuide/devguide/out/ch02s01.html 2008-05-21 19:56:09 UTC (rev 9323) +++ trunk/zendocs/DevGuide/devguide/out/ch02s01.html 2008-05-21 20:49:47 UTC (rev 9324) @@ -1,3 +1,3 @@ <html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> - <title>1. Style Guidelines</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="ch02.html" title="Chapter 2. Coding Guidelines"><link rel="prev" href="ch02.html" title="Chapter 2. Coding Guidelines"><link rel="next" href="ch02s02.html" title="2. Docstrings"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">1. Style Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Coding Guidelines</th><td width="20%" align="right"> <a accesskey="n" href="ch02s02.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><! div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e56"></a>1. Style Guidelines</h2></div></div></div><p>These guidelines are mostly targeted at Python files. HTML files, zpt files, shell scripts, etc should adhere to these as much as is reasonable and conventional in those languages.</p><div class="itemizedlist"><ul type="disc"><li><p><span class="bold"><strong>Indentation</strong></span> - Each level of indentation in Python files is 4 spaces. Tab characters are strictly verboten, their use will bring shame and ridicule upon the perpetrator.</p><p></p></li><li><p><span class="bold"><strong>File Header</strong></span> - Most files should contain a standard Zenoss header at or near the top which contains copyright and licensing notices. This header may be different depending on whether the file is part of Core, Enterprise or a ZenPack. Headers are not currently used for most html, zpt and dtml files.</p><p></p></li><li><p><span class="bold! "><strong>Vertical Spacing</strong></span> - Every method, fun! ction an d class definition should be preceded by two blank lines. Small functions defined within another function or method are excepted from this.</p><p></p></li><li><p><span class="bold"><strong>Identifiers</strong></span> - Most identifier names should usually be CamelCase. Constants are ALL_CAPS_WITH_UNDERSCORES as needed. ClassNames and FunctionNames begin with a capital. methodNames and variableNames begin lower case. Choose significant names as identifiers without creating ridiculously long names for us all to type repeatedly.</p></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Coding Guidelines </td><td width! ="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 2. Docstrings</td></tr></table></div></body></html> \ No newline at end of file + <title>1. Where it is Available</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="ch02.html" title="Chapter 2. Zenoss Code and Function Documentation"><link rel="prev" href="ch02.html" title="Chapter 2. Zenoss Code and Function Documentation"><link rel="next" href="ch03.html" title="Chapter 3. Coding Guidelines"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">1. Where it is Available</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Zenoss Code and Function Documentation</th><td width="20%" align="right"> <a accesskey="n! " href="ch03.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e56"></a>1. Where it is Available</h2></div></div></div><p>Where can you get the actual documentation for all of the function in the code?</p><p>There are a few places:</p><div class="orderedlist"><ol type="1"><li><p>The first place is actually in the code base.</p><p>Zenoss includes the code documentation in the actual product. To create and build an HTML site that will display the documentation:</p><p>From your Zenoss instance, while logged in as the zenoss user, run the command</p><pre class="programlisting">zendoc</pre><p>This creates a $ZENHOME/zendocs directory and builds all of the docstrings into an HTML file system that allows you to access the zenoss code documentation in HTML format. Just click on the index.html file</p></li><li><p>The complete documentation is also available on the zenoss web! site from:</p><p>http://www.zenoss.com/community/docs/zenoss-a! pi-docs/ </p></li></ol></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Zenoss Code and Function Documentation </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Coding Guidelines</td></tr></table></div></body></html> \ No newline at end of file Modified: trunk/zendocs/DevGuide/devguide/out/ch03.html =================================================================== --- trunk/zendocs/DevGuide/devguide/out/ch03.html 2008-05-21 19:56:09 UTC (rev 9323) +++ trunk/zendocs/DevGuide/devguide/out/ch03.html 2008-05-21 20:49:47 UTC (rev 9324) @@ -1,3 +1,3 @@ <html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> - <title>Chapter 3. Programming Techniques</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="index.html" title="Zenoss Developer's Guide"><link rel="prev" href="ch02s02.html" title="2. Docstrings"><link rel="next" href="ch03s01.html" title="1. Calling Methods Using Rest"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Programming Techniques</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s02.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch03s01.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div c! lass="titlepage"><div><div><h2 class="title"><a name="techniques"></a>Chapter 3. Programming Techniques</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch03s01.html">1. Calling Methods Using Rest</a></span></dt><dd><dl><dt><span class="section"><a href="ch03s01.html#technique_how_to_use_rest">1.1. How To Call Methods Using Rest</a></span></dt><dt><span class="section"><a href="ch03s01.html#technique_sending_an_event">1.2. Sending an Event</a></span></dt><dd><dl><dt><span class="section"><a href="ch03s01.html#technique_using_rest_call">1.2.1. Using a REST Call</a></span></dt><dt><span class="section"><a href="ch03s01.html#d0e195">1.2.2. How to Call Methods Using REST</a></span></dt><dt><span class="section"><a href="ch03s01.html#technique_using_xml_rpc">1.2.3. Using XML-RPC</a></span></dt><dt><span class="section"><a href="ch03s01.html#technique_sending_an_event_other_languages">1.2.4. Example Usage in Ot! her Languages</a></span></dt></dl></dd></dl></dd></dl></div></! div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s02.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch03s01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">2. Docstrings </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 1. Calling Methods Using Rest</td></tr></table></div></body></html> \ No newline at end of file + <title>Chapter 3. Coding Guidelines</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="index.html" title="Zenoss Developer's Guide"><link rel="prev" href="ch02s01.html" title="1. Where it is Available"><link rel="next" href="ch03s01.html" title="1. Style Guidelines"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Coding Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch03s01.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div class="tit! lepage"><div><div><h2 class="title"><a name="codingguidelines"></a>Chapter 3. Coding Guidelines</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch03s01.html">1. Style Guidelines</a></span></dt><dt><span class="section"><a href="ch03s02.html">2. Docstrings</a></span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s01.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch03s01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">1. Where it is Available </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 1. Style Guidelines</td></tr></table></div></body></html> \ No newline at end of file Modified: trunk/zendocs/DevGuide/devguide/out/ch03s01.html =================================================================== --- trunk/zendocs/DevGuide/devguide/out/ch03s01.html 2008-05-21 19:56:09 UTC (rev 9323) +++ trunk/zendocs/DevGuide/devguide/out/ch03s01.html 2008-05-21 20:49:47 UTC (rev 9324) @@ -1,19 +1,3 @@ <html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> - <title>1. Calling Methods Using Rest</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="ch03.html" title="Chapter 3. Programming Techniques"><link rel="prev" href="ch03.html" title="Chapter 3. Programming Techniques"><link rel="next" href="ch04.html" title="Chapter 4. Device Management"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">1. Calling Methods Using Rest</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Programming Techniques</th><td width="20%" align="right"> <a accesskey="n" href="ch04.html">Next</a></td></tr><! /table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="technique_using_rest"></a>1. Calling Methods Using Rest</h2></div></div></div><p>This section describes some more advanced Zenoss concepts that we have encountered as the product has rolled out. Some may be appropriate for your environment. Usually they require at least a little coding experience, but they are really not that hard.</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="technique_how_to_use_rest"></a>1.1. How To Call Methods Using Rest</h3></div></div></div><p>Zenoss's web interface will let you run any method of any object using a simple URL. Calls will be in the following format:</p><p>http://USERNAME:PASSWORD@MY_ZENOSS_HOST:8080/PATH_TO_OBJECT/METHOD_NAME?ARG=VAL</p><p></p><div class="orderedlist"><ol type="1"><li><p>USERNAME is the user with the rights to view this information.</p! ></li><li><p>PASSWORD is the user's password</p></li><li><p>MY! _ZENOSS_ HOST is the hostname or IP of your instance of Zenoss</p></li><li><p>PATH_TO_OBJECT is the full path to the object you wish to access</p></li><li><p>METHOD_NAME is the object's method you wish to run</p></li><li><p>ARG is a method's parameter name</p></li><li><p>VAL is a methods's parameter value</p></li></ol></div><p>Another example:</p><p>This example will give the most recent load average of a Linux server:</p><p>http://USERNAME:PASSWORD@MY_ZENOSS_HOST:8080/zport/dmd/Devices/Server/Linux/devices/angel/getRRDValue?dsname=laLoadInt5_laLoadInt5</p><p>Notice the following things about this URL:</p><div class="orderedlist"><ol type="1"><li><p>/zport/dmd/Devices/Server/Linux/devices/angel is the full path to our object you want to access</p></li><li><p>getRRDValue is the method in the Device object we wish to run</p></li><li><p>dsname is a parameter to the getRRDValue method.</p></li><li><p>laLoadInt5_laLoadInt5 is the value of dsname which is the name of the data source we are! interested in.</p></li></ol></div><p>Watching the URLs as you browse the web interface can give you a place to start searching.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="technique_sending_an_event"></a>1.2. Sending an Event</h3></div></div></div><p>This section describes some more advanced Zenoss concepts that we have encountered as the product has rolled out. Some may be appropriate for your environment. Usually they require at least a little coding experience, but they are really not that hard.</p><p>Events can be sent to Zenoss through the UI but also through a programmatic interface. This how to will describe adding a device using that interface.</p><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="technique_using_rest_call"></a>1.2.1. Using a REST Call</h4></div></div></div><p>Sending an event through a rest call can be done by a simple web get. In this example! we will use wget to send an event. If you use wget don't for ! get to e scape the "&" or wrap the URL in single quotes.</p><p>[zenos@zenoss $] wget 'http://admin:zenoss@MYHOST:8080/zport/dmd/ZenEventManager/manage_addEvent?device=MYDEVICE&component=MYCOMPONENT&summary=MYSUMMARY&severity=4&eventclass=EVENTCLASS'</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e195"></a>1.2.2. How to Call Methods Using REST</h4></div></div></div><p>Zenoss's web interface will let you run any method of any object using a simple URL. Calls will be in the following format:</p><p>http://USERNAME:PASSWORD@MY_ZENOSS_HOST:8080/PATH_TO_OBJECT/METHOD_NAME?ARG=VAL</p><p></p><div class="orderedlist"><ol type="1"><li><p>USERNAME is the user with the rights to view this information.</p><p></p></li><li><p>PASSWORD is the user's password</p></li><li><p>MY_ZENOSS_HOST is the hostname or IP of your instance of Zenoss</p></li><li><p>PATH_TO_OBJECT is the full path to the object you wish to access</p></li! ><li><p>METHOD_NAME is the object's method you wish to run</p></li><li><p>ARG is a method's parameter name</p></li><li><p>VAL is a methods's parameter value</p></li></ol></div><p>The following example thanks to Chet Luther:</p><p>This example will give the most recent load average of a Linux server:</p><p>http://USERNAME:PASSWORD@MY_ZENOSS_HOST:8080/zport/dmd/Devices/Server/Linux/devices/angel/getRRDValue?dsname=laLoadInt5_laLoadInt5</p><p>Notice the following things about this URL:</p><div class="orderedlist"><ol type="1"><li><p>/zport/dmd/Devices/Server/Linux/devices/angel is the full path to our object you want to access</p></li><li><p>getRRDValue is the method in the Device object we wish to run</p></li><li><p>dsname is a parameter to the getRRDValue method.</p></li><li><p>laLoadInt5_laLoadInt5 is the value of dsname which is the name of the data source we are interested in.</p></li></ol></div><p>Watching the URLs as you browse the web interface can give you a place to ! start searching.</p></div><div class="section" lang="en"><div ! class="t itlepage"><div><div><h4 class="title"><a name="technique_using_xml_rpc"></a>1.2.3. Using XML-RPC</h4></div></div></div><p>To send an event to zenoss using XML-RPC you will first need to create a dictionary (in perl a hash) that will represent the event. Zenoss will need at a minimum the following fields:</p><p>* device - the name of the device from which this event originates</p><p>* component - the sub-component of the device (for instance eth0, http, etc)</p><p>* summary - the text message of the event</p><p>* severity - an integer between 0 and 5 with higher numbers being higher severity. Zero is clear.</p><p>You can send an event to Zenoss via an interactive session with the python interpreter as follows:</p><pre class="programlisting">>>> from xmlrpclib import ServerProxy ->>> serv = ServerProxy('http://admin:zenoss@MYHOST:8080/zport/dmd/ZenEventManager') ->>> evt = {'device':'mydevice', 'component':'eth0', 'summary':'eth0 is down','severity':4, 'eventClass':'/Net'} ->>> serv.sendEvent(evt)</pre><p>See below for examples in other languages.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="technique_sending_an_event_other_languages"></a>1.2.4. Example Usage in Other Languages</h4></div></div></div><p>Please note that we are a python shop and may not be able to answer specific questions about XML-RPC clients written in other languages.</p><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="technique_sending_an_event_other_languages_perl"></a>1.2.4.1. Perl</h5></div></div></div><p>Send an event via perl using RPC::XML::Client</p><pre class="programlisting"> -require RPC::XML; -require RPC::XML::Client; - -$serv = RPC::XML::Client->new('http://YOURZENOSS:8081/'); -%evt = ('device' => 'mydevice2', 'component' => 'eth1', 'summary' => 'eth1 is down', 'severity' => 4); -$args = RPC::XML::struct->new(%evt); -$serv->simple_request('sendEvent', $args); -</pre></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="d0e280"></a>1.2.4.2. Ruby</h5></div></div></div><p>This is an example of an Interactive Ruby (IRB) session (the returns have been omitted for the sake of clarity). Note, however, that the Ruby standard library is under active development in general, and specifically, the XML-RPC lib in Ruby is not stable. As of Feb 2007, there is a great deal of on-going discussion regarding XML-RPC in Ruby by Ruby developers and contributors. The following is known to work in previous versions of Ruby:</p><pre class="programlisting"> -irb(main):001:0> require "xmlrpc/client" -irb(main):002:0> server = XMLRPC::Client.new2('user:pass@http://YOURZENOSS:8080/zport/dmd/DeviceLoader') -irb(main):003:0> evt = {'device' => 'mydevice3', 'component' => 'eth2', 'summary' => 'eth2 is down', 'severity' => 4} -irb(main):004:0> server.call('sendEvent', evt) -</pre><p></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h5 class="title"><a name="d0e289"></a>1.2.4.3. Java</h5></div></div></div><p>I spent too much time trying to get a Java example running (using the lastest 3.x XML-RPC libs from Apache). Using their example as well as many I found on the net, I consistently got lots of errors, only some of which I was able to fix. I tried with Java 1.3, 1.4.2, and 1.5 -- all returned nearly identical results.</p><p>If someone can provide a modern, working example, we will post it here. But we don't have to time to figure this one out right now.</p></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch03.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04.html">Next</a></td></tr><tr><td width=! "40%" align="left" valign="top">Chapter 3. Programming Techniques </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 4. Device Management</td></tr></table></div></body></html> \ No newline at end of file + <title>1. Style Guidelines</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="ch03.html" title="Chapter 3. Coding Guidelines"><link rel="prev" href="ch03.html" title="Chapter 3. Coding Guidelines"><link rel="next" href="ch03s02.html" title="2. Docstrings"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">1. Style Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Coding Guidelines</th><td width="20%" align="right"> <a accesskey="n" href="ch03s02.html">Next</a></td></tr></table><hr></div><div class="section" lang="en"><! div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e83"></a>1. Style Guidelines</h2></div></div></div><p>These following guidelines are targeted at Python files. HTML files, zpt files, shell scripts, etc should adhere to these as much as is reasonable and conventional in those languages. Currently, we follow Guido's "Style Guide for Python Code" which is detailed in PEP 8 (Python Enhancement Proposals)</p><p>http://www.python.org/dev/peps/pep-0008/</p><p>Any style conventions that stray from PEP-8 should be annotated in this document.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch03.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch03s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 3. Coding G! uidelines </td><td width="20%" align="center"><a accesske! y="h" hr ef="index.html">Home</a></td><td width="40%" align="right" valign="top"> 2. Docstrings</td></tr></table></div></body></html> \ No newline at end of file Modified: trunk/zendocs/DevGuide/devguide/out/ch04.html =================================================================== --- trunk/zendocs/DevGuide/devguide/out/ch04.html 2008-05-21 19:56:09 UTC (rev 9323) +++ trunk/zendocs/DevGuide/devguide/out/ch04.html 2008-05-21 20:49:47 UTC (rev 9324) @@ -1,3 +1,3 @@ <html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> - <title>Chapter 4. Device Management</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="index.html" title="Zenoss Developer's Guide"><link rel="prev" href="ch03s01.html" title="1. Calling Methods Using Rest"><link rel="next" href="ch04s01.html" title="1. Adding Devices Programatically"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. Device Management</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s01.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch04s01.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="! en"><div class="titlepage"><div><div><h2 class="title"><a name="device_management"></a>Chapter 4. Device Management</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch04s01.html">1. Adding Devices Programatically</a></span></dt><dd><dl><dt><span class="section"><a href="ch04s01.html#devmgmt_programmatically_adding_rest">1.1. Using a REST call</a></span></dt><dt><span class="section"><a href="ch04s01.html#devmgmt_programmatically_adding_python">1.2. Using an XML-RPC Call from Python</a></span></dt><dt><span class="section"><a href="ch04s01.html#d0e325">1.3. XML-RPC Attributes</a></span></dt></dl></dd><dt><span class="section"><a href="ch04s02.html">2. Editing Device Information</a></span></dt><dd><dl><dt><span class="section"><a href="ch04s02.html#devmgmt_programmatically_editing_rest">2.1. Using a REST call</a></span></dt><dt><span class="section"><a href="ch04s02.html#devmgmt_programmatically_editing_pyt! hon">2.2. Using an XML-RPC Call from Python</a></span></dt></d! l></dd>< dt><span class="section"><a href="ch04s03.html">3. Deleting A Device</a></span></dt><dd><dl><dt><span class="section"><a href="ch04s03.html#devmgmt_programmatically_deleting_rest">3.1. Using a REST call</a></span></dt><dt><span class="section"><a href="ch04s03.html#devmgmt_programmatically_deleting_python">3.2. Using an XML-RPC Call from Python</a></span></dt></dl></dd><dt><span class="section"><a href="ch04s04.html">4. Checking If A Device Exists</a></span></dt><dd><dl><dt><span class="section"><a href="ch04s04.html#devmgmt_programmatically_existance_rest">4.1. Using a REST call</a></span></dt><dt><span class="section"><a href="ch04s04.html#devmgmt_programmatically_existance_python">4.2. Using an XML-RPC Call from Python</a></span></dt></dl></dd><dt><span class="section"><a href="ch04s05.html">5. Exporting a Device List</a></span></dt></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p"! href="ch03s01.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch04s01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">1. Calling Methods Using Rest </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 1. Adding Devices Programatically</td></tr></table></div></body></html> \ No newline at end of file + <title>Chapter 4. Programming Techniques</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="index.html" title="Zenoss Developer's Guide"><link rel="prev" href="ch03s02.html" title="2. Docstrings"><link rel="next" href="ch04s01.html" title="1. Calling Methods Using Rest"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. Programming Techniques</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s02.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch04s01.html">Next</a></td></tr></table><hr></div><div class="chapter" lang="en"><div c! lass="titlepage"><div><div><h2 class="title"><a name="techniques"></a>Chapter 4. Programming Techniques</h2></div></div></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="ch04s01.html">1. Calling Methods Using Rest</a></span></dt><dd><dl><dt><span class="section"><a href="ch04s01.html#technique_how_to_use_rest">1.1. How To Call Methods Using Rest</a></span></dt><dt><span class="section"><a href="ch04s01.html#technique_sending_an_event">1.2. Sending an Event</a></span></dt><dd><dl><dt><span class="section"><a href="ch04s01.html#technique_using_rest_call">1.2.1. Using a REST Call</a></span></dt><dt><span class="section"><a href="ch04s01.html#d0e224">1.2.2. How to Call Methods Using REST</a></span></dt><dt><span class="section"><a href="ch04s01.html#technique_using_xml_rpc">1.2.3. Using XML-RPC</a></span></dt><dt><span class="section"><a href="ch04s01.html#technique_sending_an_event_other_languages">1.2.4. Example Usage in Ot! her Languages</a></span></dt></dl></dd></dl></dd></dl></div></! div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s02.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch04s01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">2. Docstrings </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> 1. Calling Methods Using Rest</td></tr></table></div></body></html> \ No newline at end of file Modified: trunk/zendocs/DevGuide/devguide/out/ch04s01.html =================================================================== --- trunk/zendocs/DevGuide/devguide/out/ch04s01.html 2008-05-21 19:56:09 UTC (rev 9323) +++ trunk/zendocs/DevGuide/devguide/out/ch04s01.html 2008-05-21 20:49:47 UTC (rev 9324) @@ -1,8 +1,19 @@ <html><head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> - <title>1. Adding Devices Programatically</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="ch04.html" title="Chapter 4. Device Management"><link rel="prev" href="ch04.html" title="Chapter 4. Device Management"><link rel="next" href="ch04s02.html" title="2. Editing Device Information"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">1. Adding Devices Programatically</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Device Management</th><td width="20%" align="right"> <a accesskey="n" href="ch04s02.html">Next</a></td></tr></tabl! e><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devmgmt_programmatically_adding"></a>1. Adding Devices Programatically</h2></div></div></div><p>Devices can be added to Zenoss through the UI but also through a programmatic interface. This how to will describe adding a device using that interface.</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="devmgmt_programmatically_adding_rest"></a>1.1. Using a REST call</h3></div></div></div><p>Adding a device through a rest call can be done by a simple web get. In this example we will use wget to add a device. If you use wget don't for get to escape the "&" or wrap the URL in single quotes.</p><p>[zenos@zenoss $] wget 'http://admin:zenoss@MYHOST:8080/zport/dmd/DeviceLoader/loadDevice?deviceName=NEWDEVICE&devicePath=/Server/Linux'</p><p>The result of this command will be the log of auto-discovery and ! you can look for the string "NEWDEVICE loaded!" to see if it w! as succe ssful. Possible failure messages are: "NEWDEVICE exists" and "no snmp found"</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="devmgmt_programmatically_adding_python"></a>1.2. Using an XML-RPC Call from Python</h3></div></div></div><p>This is an example of how to add a device using python. Because XML-RPC can be used from any language feel free to use your favorite. What is important here is the base URL in ServerProxy, passing named parameters, and calling "loadDevice" on your proxy object.</p><pre class="programlisting">>>> from xmlrpclib import ServerProxy ->>> serv = ServerProxy('http://admin:zenoss@MYHOST:8080/zport/dmd/DeviceLoader') ->>> dev = {'deviceName':'NEWDEVICE', 'devicePath':'/Server/Linux'} ->>> serv.loadDevice(dev)</pre><p>You can check on the device with another XML-RPC call:</p><pre class="programlisting">>>> from xmlrpclib import ServerProxy ->>> serv = ServerProxy('http://admin:zenoss@MYHOST:8080/zport/dmd/Devices/Server/Linux/devices/NEWDEVICE') ->>> print serv.getManageIp()</pre></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e325"></a>1.3. XML-RPC Attributes</h3></div></div></div><div class="informaltable"><table border="1"><colgroup><col width="50%"><col width="50%"></colgroup><thead><tr><th align="center"> XML-RPC Attributes</th><th align="center">Description</th></tr></thead><tbody><tr><td>deviceName</td><td>the name or IP of the device. If it's a name it must resolve in DNS</td></tr><tr><td>devicePath</td><td>the device class where the first "/" starts at "/Devices" like "/Server/Linux" the default is "/Discovered"</td></tr><tr><td>tag</td><td>the tag of the device</td></tr><tr><td>serialNumber</td><td>the serial number of the device</td></tr><tr><td>zSnmpCommunity</td><td>snmp community to use during auto-discovery if none is given the list zSnmpCommunities will be used</td></tr><tr><td>zSnmpPort</td><td>snmp port to use default is 161</td>! </tr><tr><td>zSnmpVer</td><td>snmp version to use default v1 other valid values are v2</td></tr><tr><td>rackSlot</td><td>the rack slot of the device.</td></tr><tr><td>productionState</td><td>production state of the device default is 1000 (Production)</td></tr><tr><td>comments</td><td>any comments about the device</td></tr><tr><td>hwManufacturer</td><td>hardware manufacturer this must exist in the database before the device is added</td></tr><tr><td>hwProductName</td><td>hardware product this must exist in the manufacturer object specified</td></tr><tr><td>osManufacturer</td><td>OS manufacturer this must exist in the database before the device is added</td></tr><tr><td>osProductName</td><td>OS product this must exist in the manufacturer object specified</td></tr><tr><td>locationPath</td><td>path to the location of this device like "/Building/Floor" must exist before device is added</td></tr><tr><td>groupPaths</td><td>list of groups for this device multiple groups can be spec! ified by repeating the attribute in the url</td></tr><tr><td>s! ystemPat hs</td><td>list of systems for this device multiple groups can be specified by repeating the attribute in the url</td></tr><tr><td>statusMonitors</td><td>list of status monitors (zenping) for this device default is "localhost"</td></tr><tr><td>performanceMonitor</td><td>performance monitor to use default is "localhost"</td></tr><tr><td>discoverProto</td><td>discovery protocol default is "snmp" other possible value is "none"</td></tr></tbody></table></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 4. Device Management </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" ! align="right" valign="top"> 2. Editing Device Information</td></tr></table></div></body></html> \ No newline at end of file + <title>1. Calling Methods Using Rest</title><link rel="stylesheet" href="html.css" type="text/css"><meta name="generator" content="DocBook XSL-NS Stylesheets V1.73.1"><link rel="start" href="index.html" title="Zenoss Developer's Guide"><link rel="up" href="ch04.html" title="Chapter 4. Programming Techniques"><link rel="prev" href="ch04.html" title="Chapter 4. Programming Techniques"><link rel="next" href="ch05.html" title="Chapter 5. Device Management"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">1. Calling Methods Using Rest</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04.html">Prev</a> </td><th width="60%" align="center">Chapter 4. Programming Techniques</th><td width="20%" align="right"> <a accesskey="n" href="ch05.html">Next</a></td></tr><! /table><hr></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="technique_using_rest"></a>1. Calling Methods Using Rest</h2></div></div></div><p>This section describes some more advanced Zenoss concepts that we have encountered as the product has rolled out. Some may be appropriate for your environment. Usually they require at least a little coding experience, but they are really not that hard.</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="technique_how_to_use_rest"></a>1.1. How To Call Methods Using Rest</h3></div></div></div><p>Zenoss's web interface will let you run any method of any object using a simple URL. Calls will be in the following format:</p><p>http://USERNAME:PASSWORD@MY_ZENOSS_HOST:8080/PATH_TO_OBJECT/METHOD_NAME?ARG=VAL</p><p></p><div class="orderedlist"><ol type="1"><li><p>USERNAME is the user with the rights to view this information.</p! ></li><li><p>PASSWORD is the user's password</p></li><li><p>MY! _ZENOSS_ HOST is the hostname or IP of your instance of Zenoss</p></li><li><p>PATH_TO_OBJECT is the full path to the object you wish to access</p></li><li><p>METHOD_NAME is the object's method you wish to run</p></li><li><p>ARG is a method's parameter name</p></li><li><p>VAL is a methods's parameter value</p></li></ol></div><p>Another example:</p><p>This example will give the most recent load average of a Linux server:</p><p>http://USERNAME:PASSWORD@MY_ZENOSS_HOST:8080/zport/dmd/Devices/Server/Linux/devices/angel/getRRDValue?dsname=laLoadInt5_laLoadInt5</p><p>Notice the following things about this URL:</p><div class="orderedlist"><ol type="1"><li><p>/zport/dmd/Devices/Server/Linux/devices/angel is the full path to our object you want to access</p></li><li><p>getRRDValue is the method in the Device object we wish to run</p></li><li><p>dsname is a parameter to the getRRDValue metho... [truncated message content] |
From: <sv...@ze...> - 2008-05-21 20:09:51
|
Author: cgibbons Date: 2008-05-21 15:56:09 -0400 (Wed, 21 May 2008) New Revision: 9323 Modified: trunk/Products/ZenModel/Device.py trunk/Products/ZenModel/tests/testDevice.py Log: * refs #3209 * support setting the hardware asset tag from a collector plugin Modified: trunk/Products/ZenModel/Device.py =================================================================== --- trunk/Products/ZenModel/Device.py 2008-05-21 18:19:05 UTC (rev 9322) +++ trunk/Products/ZenModel/Device.py 2008-05-21 19:56:09 UTC (rev 9323) @@ -684,6 +684,23 @@ self.os.setProductKey(prodKey) + def getHWTag(self): + """ + DEPRECATED - Return the tag of the device HW. + + @rtype: string + @todo: remove this method and remove the call from testDevice.py + """ + return self.hw.tag + + + def setHWTag(self, assettag): + """ + Set the asset tag of the device hardware. + """ + self.hw.tag = assettag + + def setHWProductKey(self, prodKey): """ Set the productKey of the device hardware. Modified: trunk/Products/ZenModel/tests/testDevice.py =================================================================== --- trunk/Products/ZenModel/tests/testDevice.py 2008-05-21 18:19:05 UTC (rev 9322) +++ trunk/Products/ZenModel/tests/testDevice.py 2008-05-21 19:56:09 UTC (rev 9323) @@ -67,6 +67,11 @@ self.assert_('/Test/Loc' in self.dmd.Locations.getOrganizerNames()) + def testSetHWTag(self): + self.dev.setHWTag('my test asset tag') + self.assert_(self.dev.getHWTag() == 'my test asset tag') + + def testSetHWSerialNumber(self): self.dev.setHWSerialNumber('testSWKey') self.assert_(self.dev.getHWSerialNumber() == 'testSWKey') |
From: <sv...@ze...> - 2008-05-21 18:18:59
|
Author: jplouis Date: 2008-05-21 14:19:05 -0400 (Wed, 21 May 2008) New Revision: 9322 Modified: trunk/Products/ZenModel/PerformanceConf.py Log: fix to delegate zendisc execution to _executeZenDiscCommand method Modified: trunk/Products/ZenModel/PerformanceConf.py =================================================================== --- trunk/Products/ZenModel/PerformanceConf.py 2008-05-21 13:08:22 UTC (rev 9321) +++ trunk/Products/ZenModel/PerformanceConf.py 2008-05-21 18:19:05 UTC (rev 9322) @@ -443,18 +443,18 @@ """ Actual implementation for creating/adding a device to the system. """ - zm = zenPath('bin', 'zendisc') - zendiscCmd = [zm, 'run', '--now','-d', deviceName, + zendiscCmd = ['run', '--now','-d', deviceName, '--monitor', performanceMonitor, '--deviceclass', devicePath, '--snmp-port', str(zSnmpPort) ] + if zSnmpCommunity != "": zendiscCmd.extend(["--snmp-community", zSnmpCommunity]) if REQUEST: zendiscCmd.append("--weblog") - result = executeCommand(zendiscCmd, REQUEST) + result = self._executeZenDiscCommand(zendiscCmd, REQUEST) if result == 3: raise DeviceExistsError("ZenDisc found existing Device" ) log.info("zendisc result : %s" % result) @@ -464,10 +464,13 @@ raise Exception("ZenDisc did not create device %s" % deviceName) return device - def _executeZenDiscCommand(self, zendiscCmd, REQUEST=None): + def _executeZenDiscCommand(self, zendiscOptions, REQUEST=None): """ - execute a the given zendisc command and return result + execute zendisc given zendisc options and return result """ + zm = zenPath('bin', 'zendisc') + zendiscCmd = [zm] + zendiscCmd.extend(zendiscOptions) result = executeCommand(zendiscCmd, REQUEST) return result |
From: <sv...@ze...> - 2008-05-21 13:08:15
|
Author: abray Date: 2008-05-21 09:08:22 -0400 (Wed, 21 May 2008) New Revision: 9321 Added: trunk/zendocs/DevGuide/devguide/pdf/ trunk/zendocs/DevGuide/devguide/pdf/ZenossDevelopersGuide22.pdf Log: checking in pdf of dev guide 22 Added: trunk/zendocs/DevGuide/devguide/pdf/ZenossDevelopersGuide22.pdf Property changes on: trunk/zendocs/DevGuide/devguide/pdf/ZenossDevelopersGuide22.pdf ___________________________________________________________________ Name: svn:mime-type + application/octet-stream |
From: <sv...@ze...> - 2008-05-21 13:05:56
|
Author: abray Date: 2008-05-21 09:06:03 -0400 (Wed, 21 May 2008) New Revision: 9320 Removed: trunk/zendocs/DevGuide/devguide/ZenossDevelopersGuide.pdf Log: Removing old pdf file of devguide Deleted: trunk/zendocs/DevGuide/devguide/ZenossDevelopersGuide.pdf |
From: <sv...@ze...> - 2008-05-21 12:59:58
|
Author: abray Date: 2008-05-21 08:56:57 -0400 (Wed, 21 May 2008) New Revision: 9319 Added: trunk/zendocs/AdminGuide/docbook/pdf/ZenossAdminGuide220.pdf Log: check in of admin guide 22 pdf file Added: trunk/zendocs/AdminGuide/docbook/pdf/ZenossAdminGuide220.pdf |
From: <sv...@ze...> - 2008-05-21 12:32:11
|
Author: abray Date: 2008-05-21 08:17:17 -0400 (Wed, 21 May 2008) New Revision: 9318 Added: trunk/zendocs/DevGuide/devguide/ZenossDevelopersGuide.pdf Log: checking in pdf of Developersguide version 22 Added: trunk/zendocs/DevGuide/devguide/ZenossDevelopersGuide.pdf Property changes on: trunk/zendocs/DevGuide/devguide/ZenossDevelopersGuide.pdf ___________________________________________________________________ Name: svn:mime-type + application/octet-stream |
From: <sv...@ze...> - 2008-05-20 21:06:37
|
Author: abray Date: 2008-05-20 17:06:42 -0400 (Tue, 20 May 2008) New Revision: 9317 Added: trunk/zendocs/DevGuide/devguide/xmlschema.xml Log: Checking in new xml schema file for dev guide Added: trunk/zendocs/DevGuide/devguide/xmlschema.xml |
From: <sv...@ze...> - 2008-05-20 21:06:03
|
Author: abray Date: 2008-05-20 17:06:03 -0400 (Tue, 20 May 2008) New Revision: 9316 Modified: trunk/zendocs/DevGuide/devguide/model.xml Log: checking in model.xml for dev guide Modified: trunk/zendocs/DevGuide/devguide/model.xml =================================================================== --- trunk/zendocs/DevGuide/devguide/model.xml 2008-05-20 20:36:15 UTC (rev 9315) +++ trunk/zendocs/DevGuide/devguide/model.xml 2008-05-20 21:06:03 UTC (rev 9316) @@ -395,12 +395,14 @@ </section> </section> + <xi:include href="xmlschema.xml" xpointer="xmlschema" /> + <section> <title>Zenoss Permissions</title> <para>In this example we'll be adding a new permission named "Example - Permission", assigning it to a method, then checking for that permission. - </para> + Permission", assigning it to a method, then checking for that + permission.</para> <section> <title>Adding New Permissions</title> |
From: <sv...@ze...> - 2008-05-20 20:36:09
|
Author: cgibbons Date: 2008-05-20 16:36:15 -0400 (Tue, 20 May 2008) New Revision: 9315 Modified: trunk/Products/ZenModel/DeviceComponent.py Log: * refs #623 * create default perfmonInstance attribute on device components Modified: trunk/Products/ZenModel/DeviceComponent.py =================================================================== --- trunk/Products/ZenModel/DeviceComponent.py 2008-05-20 20:01:10 UTC (rev 9314) +++ trunk/Products/ZenModel/DeviceComponent.py 2008-05-20 20:36:15 UTC (rev 9315) @@ -38,6 +38,7 @@ security = ClassSecurityInfo() + perfmonInstance = None def getParentDeviceName(self): """ |