Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

IP-SLA Enumeration/Monitoring 1.2

git-svn-id: http://zenpacks.zenoss.org/svn/zenpacks@344 db08cffe-75b9-45d1-af1a-46ad9ef135f6
  • Loading branch information...
commit ca7ef11230e1ffddf5cecf6ea55ee147e8a562c6 0 parents
Matt Ray authored
Showing with 2,413 additions and 0 deletions.
  1. +16 −0 COPYRIGHT.txt
  2. +1 −0  MANIFEST.in
  3. +1 −0  ZenPacks/__init__.py
  4. +52 −0 ZenPacks/ipSLA/SLADevice/Collect.pl
  5. +55 −0 ZenPacks/ipSLA/SLADevice/Collect_HTTP.pl
  6. +55 −0 ZenPacks/ipSLA/SLADevice/Collect_VoIP.pl
  7. +29 −0 ZenPacks/ipSLA/SLADevice/SLADevice.py
  8. +255 −0 ZenPacks/ipSLA/SLADevice/SLAS.py
  9. +18 −0 ZenPacks/ipSLA/SLADevice/__init__.py
  10. +2 −0  ZenPacks/ipSLA/SLADevice/datasources/__init__.py
  11. +1 −0  ZenPacks/ipSLA/SLADevice/lib/__init__.py
  12. +1 −0  ZenPacks/ipSLA/SLADevice/migrate/__init__.py
  13. 0  ZenPacks/ipSLA/SLADevice/modeler/__init__.py
  14. +152 −0 ZenPacks/ipSLA/SLADevice/modeler/plugins/SLADevice.py
  15. 0  ZenPacks/ipSLA/SLADevice/modeler/plugins/__init__.py
  16. +1,394 −0 ZenPacks/ipSLA/SLADevice/objects/objects.xml
  17. +60 −0 ZenPacks/ipSLA/SLADevice/skins/ZenPacks.ipSLA.SLADevice/SLAedit.pt
  18. +57 −0 ZenPacks/ipSLA/SLADevice/skins/ZenPacks.ipSLA.SLADevice/ipSLAipSlaDevice.pt
  19. +192 −0 ZenPacks/ipSLA/SLADevice/skins/ZenPacks.ipSLA.SLADevice/ipSLAsPerformance.pt
  20. 0  ZenPacks/ipSLA/SLADevice/skins/ZenPacks.ipSLA.SLADevice/placeholder.txt
  21. +1 −0  ZenPacks/ipSLA/__init__.py
  22. +71 −0 setup.py
16 COPYRIGHT.txt
@@ -0,0 +1,16 @@
+All files in this directory and below are:
+
+Copyright (c) 2009 Zenoss, Inc. All rights reserved.
+
+This program is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 2 as published
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
1  MANIFEST.in
@@ -0,0 +1 @@
+graft ZenPacks
1  ZenPacks/__init__.py
@@ -0,0 +1 @@
+__import__('pkg_resources').declare_namespace(__name__)
52 ZenPacks/ipSLA/SLADevice/Collect.pl
@@ -0,0 +1,52 @@
+#! /usr/bin/perl
+$what = shift(@ARGV);
+$community = shift(@ARGV);
+$verP = shift(@ARGV);
+$host = shift(@ARGV);
+$baseoid = "1.3.6.1.4.1.9.9.42.1.2.10.1";
+$timeout=5;
+
+use threads;
+use threads::shared;
+use Thread::Exit;
+
+my $done;
+
+$child_thread=threads->new(\&Call_Doit);
+$child_thread->detach();
+
+CallTimer();
+
+sub Call_Doit
+{
+
+ $name=`snmpwalk -c$community -$verP $host -O qv 1.3.6.1.4.1.9.9.42.1.2.1.1.3 | grep -m 1 -w '$what'`;
+ $id=`snmpwalk -c$community -$verP $host -O nqa 1.3.6.1.4.1.9.9.42.1.2.1.1.3 | grep -m 1 -w '$what'`;
+ $name=~ s/"//g;
+ $id=~s/"//g;
+ $id=~s/.1.3.6.1.4.1.9.9.42.1.2.1.1.3.//g;
+ $id=~s/$name//g;
+
+ $tmp=`snmpwalk -c$community -$verP $host -O vq $baseoid.1.$id`;
+ $response="rttMonLatestRttOperCompletionTime=$tmp";
+
+ $tmpB=`snmpwalk -c$community -$verP $host -O vq $baseoid.2.$id `;
+ $response="$response rttMonLatestRttOperSense=$tmpB";
+
+ $tmpC=`snmpwalk -c$community -$verP $host -O vq $baseoid.3.$id`;
+ $response=" $response rttMonLatestRttOperApplSpecificSense=$tmpC";
+
+ $tmpD=`snmpwalk -c$community -$verP $host -O vqt $baseoid.5.$id`;
+ $response=" $response rttMonLatestRttOperTime=$tmpD";
+
+ $response=~ s/\n//g;
+ $response=~ s/ //g;
+
+ print "OK| $response\n";
+ exit();
+}
+
+sub CallTimer
+{
+sleep $timeout;
+}
55 ZenPacks/ipSLA/SLADevice/Collect_HTTP.pl
@@ -0,0 +1,55 @@
+#! /usr/bin/perl
+$what = shift(@ARGV);
+$community = shift(@ARGV);
+$verP = shift(@ARGV);
+$host = shift(@ARGV);
+$baseoid = "1.3.6.1.4.1.9.9.42.1.5.1.1";
+$timeout=5;
+
+use threads;
+use threads::shared;
+use Thread::Exit;
+
+my $done;
+
+$child_thread=threads->new(\&Call_Doit);
+$child_thread->detach();
+
+CallTimer();
+
+sub Call_Doit
+{
+
+ $name=`snmpwalk -c$community -$verP $host -O qv 1.3.6.1.4.1.9.9.42.1.2.1.1.3 | grep -m 1 -w '$what'`;
+ $id=`snmpwalk -c$community -$verP $host -O nqa 1.3.6.1.4.1.9.9.42.1.2.1.1.3 | grep -m 1 -w '$what'`;
+ $name=~ s/"//g;
+ $id=~s/"//g;
+ $id=~s/.1.3.6.1.4.1.9.9.42.1.2.1.1.3.//g;
+ $id=~s/$name//g;
+
+ $tmp=`snmpwalk -c$community -$verP $host -O vq $baseoid.1.$id`;
+ $response="rttMonLatestHTTPOperRTT=$tmp";
+
+ $tmpB=`snmpwalk -c$community -$verP $host -O vq $baseoid.2.$id `;
+ $response="$response rttMonLatestHTTPOperDNSRTT=$tmpB";
+
+ $tmpC=`snmpwalk -c$community -$verP $host -O vq $baseoid.3.$id `;
+ $response="$response rttMonLatestHTTPOperTCPConnectRTT=$tmpC";
+
+ $tmpD=`snmpwalk -c$community -$verP $host -O vq $baseoid.4.$id `;
+ $response="$response rttMonLatestHTTPOperTransactionRTT=$tmpD";
+
+ $tmpE=`snmpwalk -c$community -$verP $host -O vq $baseoid.6.$id `;
+ $response="$response rttMonLatestHTTPErrorSenseDescription=$tmpE";
+
+ $response=~ s/\n//g;
+ $response=~ s/ //g;
+
+ print "OK| $response\n";
+ exit();
+}
+
+sub CallTimer
+{
+sleep $timeout;
+}
55 ZenPacks/ipSLA/SLADevice/Collect_VoIP.pl
@@ -0,0 +1,55 @@
+#! /usr/bin/perl
+$what = shift(@ARGV);
+$community = shift(@ARGV);
+$verP = shift(@ARGV);
+$host = shift(@ARGV);
+$baseoid = "1.3.6.1.4.1.9.9.42.1.5.2.1";
+$timeout=5;
+
+use threads;
+use threads::shared;
+use Thread::Exit;
+
+my $done;
+
+$child_thread=threads->new(\&Call_Doit);
+$child_thread->detach();
+
+CallTimer();
+
+sub Call_Doit
+{
+
+ $name=`snmpwalk -c$community -$verP $host -O qv 1.3.6.1.4.1.9.9.42.1.2.1.1.3 | grep -m 1 -w '$what'`;
+ $id=`snmpwalk -c$community -$verP $host -O nqa 1.3.6.1.4.1.9.9.42.1.2.1.1.3 | grep -m 1 -w '$what'`;
+ $name=~ s/"//g;
+ $id=~s/"//g;
+ $id=~s/.1.3.6.1.4.1.9.9.42.1.2.1.1.3.//g;
+ $id=~s/$name//g;
+
+ $tmp=`snmpwalk -c$community -$verP $host -O vq $baseoid.46.$id`;
+ $response="rttMonLatestJitterOperAvgJitter=$tmp";
+
+ $tmpB=`snmpwalk -c$community -$verP $host -O vq $baseoid.42.$id `;
+ $response="$response rttMonLatestJitterOperMOS=$tmpB";
+
+ $tmpC=`snmpwalk -c$community -$verP $host -O vq $baseoid.43.$id `;
+ $response="$response rttMonLatestJitterOperICPIF=$tmpC";
+
+ $tmpD=`snmpwalk -c$community -$verP $host -O vq $baseoid.44.$id `;
+ $response="$response rttMonLatestJitterOperIAJOut=$tmpD";
+
+ $tmpE=`snmpwalk -c$community -$verP $host -O vq $baseoid.45.$id `;
+ $response="$response rttMonLatestJitterOperIAJIn=$tmpE";
+
+ $response=~ s/\n//g;
+ $response=~ s/ //g;
+
+ print "OK| $response\n";
+ exit();
+}
+
+sub CallTimer
+{
+sleep $timeout;
+}
29 ZenPacks/ipSLA/SLADevice/SLADevice.py
@@ -0,0 +1,29 @@
+from Globals import InitializeClass
+from Products.ZenModel.Device import Device
+from Products.ZenModel.ZenossSecurity import ZEN_VIEW, ZEN_CHANGE_SETTINGS
+from Products.ZenRelations.RelSchema import *
+
+import copy
+
+class SLADevice(Device):
+ "Service Level Agreement Panel"
+
+ _relations = Device._relations + (
+ ('ipSLAs', ToManyCont(ToOne,
+ "ZenPacks.ipSLA.SLADevice.SLAS", "host")),
+ )
+
+ factory_type_information = copy.deepcopy(Device.factory_type_information)
+ custom_actions = []
+ custom_actions.extend(factory_type_information[0]['actions'])
+ custom_actions.insert(2,
+ { 'id' : 'SLADevice'
+ , 'name' : 'Service Level Agreement'
+ , 'action' : 'ipSLAipSlaDevice'
+ , 'permissions' : (ZEN_VIEW,) },
+ )
+ factory_type_information[0]['actions'] = custom_actions
+
+ def __init__(self, *args, **kw):
+ Device.__init__(self, *args, **kw)
+ self.buildRelations()
255 ZenPacks/ipSLA/SLADevice/SLAS.py
@@ -0,0 +1,255 @@
+__doc__="""SLAS
+
+SLAS - new device class for IP-SLA tests
+
+$Id: $"""
+
+__version__ = "$Revision: $"[11:-2]
+
+import locale
+
+from Globals import DTMLFile
+from Globals import InitializeClass
+
+from Products.ZenUtils.Utils import convToUnits
+from Products.ZenRelations.RelSchema import *
+from Products.ZenModel.ZenossSecurity import ZEN_VIEW, ZEN_CHANGE_SETTINGS
+from Products.ZenModel.DeviceComponent import DeviceComponent
+from Products.ZenModel.ManagedEntity import ManagedEntity
+from Products.ZenUtils.Utils import prepId
+#from ZenModelRM import ZenModelRM
+
+class SLAS(DeviceComponent, ManagedEntity):
+ """IP-SLA Onject"""
+
+ portal_type = meta_type = 'SLAS'
+ rttMonCtrlAdminOwner = ""
+ rttMonCtrlAdminTag = ""
+ rttMonCtrlAdminRttType = ""
+ rttMonCtrlAdminThreshold = ""
+ rttMonCtrlAdminFrequency = ""
+ rttMonCtrlAdminTimeout = ""
+ rttMonCtrlAdminVerifyData = ""
+ rttMonCtrlAdminStatus = ""
+ rttMonCtrlAdminNvgen = ""
+ rttMonCtrlAdminGroupName = ""
+
+ rttMonEchoAdminProtocol = ""
+ rttMonEchoAdminTargetAddress = ""
+ rttMonEchoAdminPktDataRequestSize = ""
+ rttMonEchoAdminPktDataResponseSize = ""
+ rttMonEchoAdminTargetPort = ""
+ rttMonEchoAdminSourceAddress = ""
+ rttMonEchoAdminSourcePort = ""
+ rttMonEchoAdminControlEnable = ""
+ rttMonEchoAdminTOS = ""
+ rttMonEchoAdminLSREnable = ""
+ rttMonEchoAdminTargetAddressString = ""
+ rttMonEchoAdminNameServer = ""
+ rttMonEchoAdminOperation = ""
+ rttMonEchoAdminHTTPVersion = ""
+ rttMonEchoAdminURL = ""
+ rttMonEchoAdminCache = ""
+ rttMonEchoAdminInterval = ""
+ rttMonEchoAdminNumPackets = ""
+ rttMonEchoAdminProxy = ""
+ rttMonEchoAdminString1 = ""
+ rttMonEchoAdminString2 = ""
+ rttMonEchoAdminString3 = ""
+ rttMonEchoAdminString4 = ""
+ rttMonEchoAdminString5 = ""
+ rttMonEchoAdminMode = ""
+ rttMonEchoAdminVrfName = ""
+ rttMonEchoAdminCodecType = ""
+ rttMonEchoAdminCodecInterval = ""
+ rttMonEchoAdminCodecPayload = ""
+ rttMonEchoAdminCodecNumPackets = ""
+ rttMonEchoAdminICPIFAdvFactor = ""
+ rttMonEchoAdminLSPFECType = ""
+ rttMonEchoAdminLSPSelector = ""
+ rttMonEchoAdminLSPReplyMode = ""
+ rttMonEchoAdminLSPTTL = ""
+ rttMonEchoAdminLSPExp = ""
+ rttMonEchoAdminPrecision = ""
+ rttMonEchoAdminProbePakPriority = ""
+ rttMonEchoAdminOWNTPSyncTolAbs = ""
+ rttMonEchoAdminOWNTPSyncTolPct = ""
+ rttMonEchoAdminOWNTPSyncTolType = ""
+ rttMonEchoAdminCalledNumber = ""
+ rttMonEchoAdminDetectPoint = ""
+ rttMonEchoAdminGKRegistration = ""
+ rttMonEchoAdminSourceVoicePort = ""
+ rttMonEchoAdminCallDuration = ""
+ rttMonEchoAdminLSPReplyDscp = ""
+ rttMonEchoAdminLSPNullShim = ""
+ rttMonEchoAdminTargetMPID = ""
+ rttMonEchoAdminTargetDomainName = ""
+ rttMonEchoAdminTargetVLAN = ""
+ rttMonEchoAdminEthernetCOS = ""
+ rttMonEchoAdminLSPVccvID = ""
+ rttMonEchoAdminTargetEVC = ""
+
+ _properties = (
+ {'id':'rttMonCtrlAdminOwner', 'type':'string', 'mode':''},
+ {'id':'rttMonCtrlAdminTag', 'type':'string', 'mode':''},
+ {'id':'rttMonCtrlAdminRttType', 'type':'string', 'mode':''},
+ {'id':'rttMonCtrlAdminThreshold', 'type':'int', 'mode':''},
+ {'id':'rttMonCtrlAdminFrequency', 'type':'int', 'mode':''},
+ {'id':'rttMonCtrlAdminTimeout', 'type':'int', 'mode':''},
+ {'id':'rttMonCtrlAdminVerifyData', 'type':'int', 'mode':''},
+ {'id':'rttMonCtrlAdminStatus', 'type':'int', 'mode':''},
+ {'id':'rttMonCtrlAdminNvgen', 'type':'float', 'mode':''},
+ {'id':'rttMonCtrlAdminGroupName', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminProtocol', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminTargetAddress', 'type':'int', 'mode':''},
+ {'id':'rttMonEchoAdminPktDataRequestSize', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminPktDataResponseSize', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminTargetPort', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminSourceAddress', 'type':'int', 'mode':''},
+ {'id':'rttMonEchoAdminSourcePort', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminControlEnable', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminTOS', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminLSREnable', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminTargetAddressString', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminNameServer', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminOperation', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminHTTPVersion', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminURL', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminCache', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminInterval', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminNumPackets', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminProxy', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminString1', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminString2', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminString3', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminString4', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminString5', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminMode', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminVrfName', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminCodecType', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminCodecInterval', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminCodecPayload', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminCodecNumPackets', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminICPIFAdvFactor', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminLSPFECType', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminLSPSelector', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminLSPReplyMode', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminLSPTTL', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminLSPExp', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminPrecision', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminProbePakPriority', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminOWNTPSyncTolAbs', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminOWNTPSyncTolPct', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminOWNTPSyncTolType', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminCalledNumber', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminDetectPoint', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminGKRegistration', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminSourceVoicePort', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminCallDuration', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminLSPReplyDscp', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminLSPNullShim', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminTargetMPID', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminTargetDomainName', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminTargetVLAN', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminEthernetCOS', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminLSPVccvID', 'type':'string', 'mode':''},
+ {'id':'rttMonEchoAdminTargetEVC', 'type':'string', 'mode':''},
+ )
+
+ _relations = (
+ ('host', ToOne(ToManyCont,
+ 'ZenPacks.ipSLA.SLADevice.SLAS',
+ 'ipSLAs')
+ ),
+ )
+
+ factory_type_information = (
+ {
+ 'id' : 'SLAS',
+ 'meta_type' : 'SLAS',
+ 'description' : """IP Service Level Agreement Test Object""",
+ 'icon' : 'Device_icon.gif',
+ 'product' : 'SLAS',
+ 'factory' : 'manage_addSLAS',
+ 'immediate_view' : 'ipSLAsPerformance',
+ 'actions' :
+ (
+ { 'id' : 'perf'
+ , 'name' : 'Perf'
+ , 'action' : 'ipSLAsPerformance'
+ , 'permissions' : (ZEN_VIEW, )
+ },
+ { 'id' : 'templates'
+ , 'name' : 'Templates'
+ , 'action' : 'objTemplates'
+ , 'permissions' : (ZEN_CHANGE_SETTINGS, )
+ },
+ { 'id' : 'zProps'
+ , 'name' : 'Properties'
+ , 'action' : 'zPropertyEdit'
+ , 'permissions' : (ZEN_CHANGE_SETTINGS, )
+ },
+ { 'id' : 'SLAedit'
+ , 'name' : 'Edit'
+ , 'action' : 'SLAedit'
+ , 'permissions' : (ZEN_CHANGE_SETTINGS, )
+ },
+
+ )
+ },
+ )
+
+ def viewName(self):
+ return self.rttMonCtrlAdminTag
+ name = primarySortKey = viewName
+
+ def device(self):
+ return self.host()
+
+ def managedDeviceLink(self):
+ from Products.ZenModel.ZenModelRM import ZenModelRM
+ d = self.getDmdRoot("Devices").findDevice(self.rttMonCtrlAdminTag)
+ if d:
+ return ZenModelRM.urlLink(d, 'link')
+ return None
+
+ def manage_editProperties(self, REQUEST):
+ """
+ Override from propertiyManager so we can trap errors
+ """
+ try:
+ return ConfmonPropManager.manage_editProperties(self, REQUEST)
+ except IpAddressError, e:
+ return MessageDialog(
+ title = "Input Error",
+ message = e.args[0],
+ action = "manage_main")
+
+ def getRRDTemplateName(self):
+ """
+ Return the interface type as the target type name.
+ """
+ return self.prepId(self.rttMonCtrlAdminRttType or "Unknown")
+
+
+ def getRRDTemplates(self):
+ """
+ Return a list containing the appropriate RRDTemplate for this SLA.
+ """
+ templateName = self.getRRDTemplateName()
+ default = self.getRRDTemplateByName(templateName)
+
+ if not default:
+ default = self.getRRDTemplateByName("New_SLA")
+
+ if default:
+ return [default]
+ return []
+
+ def device(self):
+ return self.host()
+
+ def getId(self):
+ return self.id
+
+InitializeClass(SLAS)
18 ZenPacks/ipSLA/SLADevice/__init__.py
@@ -0,0 +1,18 @@
+__doc__="ipSLA ZenPack"
+
+import Globals
+import os
+from Products.CMFCore.DirectoryView import registerDirectory
+from Products.ZenModel.ZenPack import ZenPackBase
+
+skinsDir = os.path.join(os.path.dirname(__file__), 'skins')
+if os.path.isdir(skinsDir):
+ registerDirectory(skinsDir, globals())
+
+
+import ZenPacks.ipSLA.SLADevice
+def initialize(registrar):
+ registrar.registerClass(
+ SLAS.SLAS,
+ permission='Add DMD Objects',
+ )
2  ZenPacks/ipSLA/SLADevice/datasources/__init__.py
@@ -0,0 +1,2 @@
+# __init__.py
+
1  ZenPacks/ipSLA/SLADevice/lib/__init__.py
@@ -0,0 +1 @@
+# __init__.py
1  ZenPacks/ipSLA/SLADevice/migrate/__init__.py
@@ -0,0 +1 @@
+# __init__.py
0  ZenPacks/ipSLA/SLADevice/modeler/__init__.py
No changes.
152 ZenPacks/ipSLA/SLADevice/modeler/plugins/SLADevice.py
@@ -0,0 +1,152 @@
+__doc__="""IpSlaMap
+
+IpSlaMap maps SLA tests on a device
+
+"""
+import Globals
+from Products.DataCollector.plugins.CollectorPlugin import SnmpPlugin, GetTableMap
+from Products.DataCollector.plugins.DataMaps import ObjectMap
+from struct import *
+import sys
+import string
+
+class SLADevice(SnmpPlugin):
+
+ maptype = "ipSLAMap"
+
+ relname = "ipSLAs"
+ modname = 'ZenPacks.ipSLA.SLADevice.SLAS'
+
+ cMonOperEntry = {
+ '.1.1.2': 'rttMonCtrlAdminOwner',
+ '.1.1.3': 'rttMonCtrlAdminTag',
+ '.1.1.4': 'rttMonCtrlAdminRttType',
+ '.1.1.5': 'rttMonCtrlAdminThreshold',
+ '.1.1.6': 'rttMonCtrlAdminFrequency',
+ '.1.1.7': 'rttMonCtrlAdminTimeout',
+ '.1.1.8': 'rttMonCtrlAdminVerifyData',
+ '.1.1.9': 'rttMonCtrlAdminStatus',
+ '.1.1.10': 'rttMonCtrlAdminNvgen',
+ '.1.1.11': 'rttMonCtrlAdminGroupName',
+ '.2.1.1': 'rttMonEchoAdminProtocol',
+ '.2.1.2': 'rttMonEchoAdminTargetAddress',
+ '.2.1.3': 'rttMonEchoAdminPktDataRequestSize',
+ '.2.1.4': 'rttMonEchoAdminPktDataResponseSize',
+ '.2.1.5': 'rttMonEchoAdminTargetPort',
+ '.2.1.6': 'rttMonEchoAdminSourceAddress',
+ '.2.1.7': 'rttMonEchoAdminSourcePort',
+ '.2.1.8': 'rttMonEchoAdminControlEnable',
+ '.2.1.9': 'rttMonEchoAdminTOS',
+ '.2.1.10': 'rttMonEchoAdminLSREnable',
+ '.2.1.11': 'rttMonEchoAdminTargetAddressString',
+ '.2.1.12': 'rttMonEchoAdminNameServer',
+ '.2.1.13': 'rttMonEchoAdminOperation',
+ '.2.1.14': 'rttMonEchoAdminHTTPVersion',
+ '.2.1.15': 'rttMonEchoAdminURL',
+ '.2.1.16': 'rttMonEchoAdminCache',
+ '.2.1.17': 'rttMonEchoAdminInterval',
+ '.2.1.18': 'rttMonEchoAdminNumPackets',
+ '.2.1.19': 'rttMonEchoAdminProxy',
+ '.2.1.20': 'rttMonEchoAdminString1',
+ '.2.1.21': 'rttMonEchoAdminString2',
+ '.2.1.22': 'rttMonEchoAdminString3',
+ '.2.1.23': 'rttMonEchoAdminString4',
+ '.2.1.24': 'rttMonEchoAdminString5',
+ '.2.1.25': 'rttMonEchoAdminMode',
+ '.2.1.26': 'rttMonEchoAdminVrfName',
+ '.2.1.27': 'rttMonEchoAdminCodecType',
+ '.2.1.28': 'rttMonEchoAdminCodecInterval',
+ '.2.1.29': 'rttMonEchoAdminCodecPayload',
+ '.2.1.30': 'rttMonEchoAdminCodecNumPackets',
+ '.2.1.31': 'rttMonEchoAdminICPIFAdvFactor',
+ '.2.1.32': 'rttMonEchoAdminLSPFECType',
+ '.2.1.33': 'rttMonEchoAdminLSPSelector',
+ '.2.1.34': 'rttMonEchoAdminLSPReplyMode',
+ '.2.1.35': 'rttMonEchoAdminLSPTTL',
+ '.2.1.36': 'rttMonEchoAdminLSPExp',
+ '.2.1.37': 'rttMonEchoAdminPrecision',
+ '.2.1.38': 'rttMonEchoAdminProbePakPriority',
+ '.2.1.39': 'rttMonEchoAdminOWNTPSyncTolAbs',
+ '.2.1.40': 'rttMonEchoAdminOWNTPSyncTolPct',
+ '.2.1.41': 'rttMonEchoAdminOWNTPSyncTolType',
+ '.2.1.42': 'rttMonEchoAdminCalledNumber',
+ '.2.1.43': 'rttMonEchoAdminDetectPoint',
+ '.2.1.44': 'rttMonEchoAdminGKRegistration',
+ '.2.1.45': 'rttMonEchoAdminSourceVoicePort',
+ '.2.1.46': 'rttMonEchoAdminCallDuration',
+ '.2.1.47': 'rttMonEchoAdminLSPReplyDscp',
+ '.2.1.48': 'rttMonEchoAdminLSPNullShim',
+ '.2.1.49': 'rttMonEchoAdminTargetMPID',
+ '.2.1.50': 'rttMonEchoAdminTargetDomainName',
+ '.2.1.51': 'rttMonEchoAdminTargetVLAN',
+ '.2.1.52': 'rttMonEchoAdminEthernetCOS',
+ '.2.1.53': 'rttMonEchoAdminLSPVccvID',
+ '.2.1.54': 'rttMonEchoAdminTargetEVC',
+ }
+
+ snmpGetTableMaps = (
+ GetTableMap('MonOperEntry', '.1.3.6.1.4.1.9.9.42.1.2', cMonOperEntry),
+ )
+
+
+ def process(self, device, results, log):
+ """
+ collect SLA information from host device
+ """
+
+ log.info('processing %s for device %s', self.name(), device.id)
+ log.info("SLA (entries) results: %r", results)
+ getdata, tabledata = results
+ table = tabledata.get("MonOperEntry")
+
+ rm = self.relMap()
+
+ for info in table.values():
+ omA = self.objectMap(info)
+ omA.id = self.prepId("SLA_" + str(omA.rttMonCtrlAdminTag))
+
+ if omA.rttMonCtrlAdminRttType == 9:
+ omA.rttMonCtrlAdminRttType = "VoIP"
+
+ if omA.rttMonCtrlAdminRttType == 7:
+ omA.rttMonCtrlAdminRttType = "HTTP"
+
+ if omA.rttMonCtrlAdminRttType == 12:
+ omA.rttMonCtrlAdminRttType = "FTP"
+
+ if omA.rttMonCtrlAdminRttType == 11:
+ omA.rttMonCtrlAdminRttType = "Telnet"
+
+ if omA.rttMonCtrlAdminRttType == 8:
+ omA.rttMonCtrlAdminRttType = "DNS"
+
+
+ try:
+ FrttMonEchoAdminNameServer = str(unpack('!4B',omA.rttMonEchoAdminNameServer))
+ FrttMonEchoAdminNameServer = FrttMonEchoAdminNameServer.replace(",", ".")
+ FrttMonEchoAdminNameServer = FrttMonEchoAdminNameServer.replace("(", "")
+ FrttMonEchoAdminNameServer = FrttMonEchoAdminNameServer.replace(")", "")
+ omA.rttMonEchoAdminNameServer = FrttMonEchoAdminNameServer
+ except:
+ log.info("DEBUGGER NS unpack hiccup.")
+
+ try:
+ FrttMonEchoAdminSourceAddress = str(unpack('!4B',omA.rttMonEchoAdminSourceAddress))
+ FrttMonEchoAdminSourceAddress = FrttMonEchoAdminSourceAddress.replace(",", ".")
+ FrttMonEchoAdminSourceAddress = FrttMonEchoAdminSourceAddress.replace("(", "")
+ FrttMonEchoAdminSourceAddress = FrttMonEchoAdminSourceAddress.replace(")", "")
+ omA.rttMonEchoAdminSourceAddress = FrttMonEchoAdminSourceAddress
+ except:
+ log.info("DEBUGGER Source unpack hiccup.")
+
+ try:
+ FrttMonEchoAdminTargetAddress = str(unpack('!4B',omA.rttMonEchoAdminTargetAddress))
+ FrttMonEchoAdminTargetAddress = FrttMonEchoAdminTargetAddress.replace(",", ".")
+ FrttMonEchoAdminTargetAddress = FrttMonEchoAdminTargetAddress.replace("(", "")
+ FrttMonEchoAdminTargetAddress = FrttMonEchoAdminTargetAddress.replace(")", "")
+ omA.rttMonEchoAdminTargetAddress = FrttMonEchoAdminTargetAddress
+ except:
+ log.info("DEBUGGER Target unpack hiccup.")
+
+ rm.append(omA)
+ return [rm]
0  ZenPacks/ipSLA/SLADevice/modeler/plugins/__init__.py
No changes.
1,394 ZenPacks/ipSLA/SLADevice/objects/objects.xml
@@ -0,0 +1,1394 @@
+<?xml version="1.0"?>
+<objects>
+<!-- ('', 'zport', 'dmd', 'Devices', 'Network', 'IPSLA') -->
+<object id='/zport/dmd/Devices/Network/IPSLA' module='Products.ZenModel.DeviceClass' class='DeviceClass'>
+<property visible="True" type="string" id="zPythonClass" >
+ZenPacks.ipSLA.SLADevice.SLADevice
+</property>
+<property visible="True" type="string" id="zSnmpVer" >
+v2c
+</property>
+<tomanycont id='rrdTemplates'>
+<object id='HTTP' module='Products.ZenModel.RRDTemplate' class='RRDTemplate'>
+<property type="text" id="description" mode="w" >
+HTTP SLA Template
+</property>
+<property type="string" id="targetPythonClass" mode="w" >
+ZenPacks.ipSLA.SLADevice.SLADevice
+</property>
+<tomanycont id='datasources'>
+<object id='HTTP_TEST' module='Products.ZenModel.BasicDataSource' class='BasicDataSource'>
+<property select_variable="sourcetypes" type="selection" id="sourcetype" mode="w" >
+COMMAND
+</property>
+<property type="boolean" id="enabled" mode="w" >
+True
+</property>
+<property type="string" id="eventClass" mode="w" >
+/Cmd/Fail
+</property>
+<property type="int" id="severity" mode="w" >
+3
+</property>
+<property type="string" id="commandTemplate" mode="w" >
+/usr/bin/perl $ZENHOME/ZenPacks/ZenPacks.ipSLA.SLADevice-1.2-py2.4.egg/ZenPacks/ipSLA/SLADevice/Collect_HTTP.pl '${here/rttMonCtrlAdminTag}' ${here/zSnmpCommunity} ${here/zSnmpVer} ${here/manageIp}
+</property>
+<property type="int" id="cycletime" mode="w" >
+30
+</property>
+<property type="boolean" id="usessh" mode="w" >
+False
+</property>
+<property type="string" id="parser" mode="w" >
+Auto
+</property>
+<tomanycont id='datapoints'>
+<object id='rttMonLatestHTTPErrorSenseDescription' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestHTTPOperDNSRTT' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestHTTPOperRTT' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestHTTPOperTCPConnectRTT' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestHTTPOperTransactionRTT' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+</tomanycont>
+</object>
+<object id='SLA_HTTP_TEST' module='Products.ZenModel.BasicDataSource' class='BasicDataSource'>
+<property select_variable="sourcetypes" type="selection" id="sourcetype" mode="w" >
+COMMAND
+</property>
+<property type="boolean" id="enabled" mode="w" >
+True
+</property>
+<property type="string" id="eventClass" mode="w" >
+/Cmd/Fail
+</property>
+<property type="int" id="severity" mode="w" >
+3
+</property>
+<property type="string" id="commandTemplate" mode="w" >
+/usr/bin/perl $ZENHOME/ZenPacks/ZenPacks.ipSLA.SLADevice-1.2-py2.4.egg/ZenPacks/ipSLA/SLADevice/Collect.pl '${here/rttMonCtrlAdminTag}' ${here/zSnmpCommunity} ${here/zSnmpVer} ${here/manageIp}
+</property>
+<property type="int" id="cycletime" mode="w" >
+30
+</property>
+<property type="boolean" id="usessh" mode="w" >
+False
+</property>
+<property type="string" id="parser" mode="w" >
+Auto
+</property>
+<tomanycont id='datapoints'>
+<object id='rttMonLatestRttOperApplSpecificSense' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestRttOperCompletionTime' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestRttOperSense' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestRttOperTime' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+</tomanycont>
+</object>
+</tomanycont>
+<tomanycont id='graphDefs'>
+<object id='Round Trip Time' module='Products.ZenModel.GraphDefinition' class='GraphDefinition'>
+<property type="int" id="height" mode="w" >
+100
+</property>
+<property type="int" id="width" mode="w" >
+890
+</property>
+<property type="string" id="units" mode="w" >
+Seconds
+</property>
+<property type="boolean" id="log" mode="w" >
+False
+</property>
+<property type="boolean" id="base" mode="w" >
+False
+</property>
+<property type="int" id="miny" mode="w" >
+0
+</property>
+<property type="int" id="maxy" mode="w" >
+-1
+</property>
+<property type="text" id="custom" mode="w" >
+-P
+-E
+
+LINE2:HTTP_TEST_rttMonLatestRttOperCompletionTime-raw#0000FF:RTT Completion Time
+LINE2:TEST_rttMonLatestHTTPOperDNSRTT-raw#00FFFF:DNS RTT Completion Time
+LINE2:TEST_rttMonLatestHTTPOperTCPConnectRTT-raw#FF00FF:TCP Connection Completion Time
+LINE2:TEST_rttMonLatestHTTPOperTransactionRTT-raw#FF0000:Transaction Completion Time
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Results&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:RTT Completion Time\:
+GPRINT:HTTP_TEST_rttMonLatestRttOperCompletionTime-raw:LAST:%5.2lf seconds
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:DNS RTT Completion Time\:
+GPRINT:TEST_rttMonLatestHTTPOperDNSRTT-raw:LAST:%5.2lf seconds
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:TCP Connection Completion Time\:
+GPRINT:TEST_rttMonLatestHTTPOperTCPConnectRTT-raw:LAST:%5.2lf seconds
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:Transaction Completion Time\:
+GPRINT:TEST_rttMonLatestHTTPOperTransactionRTT-raw:LAST:%5.2lf seconds
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Spikes&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:RTT\:
+GPRINT:HTTP_TEST_rttMonLatestRttOperCompletionTime-raw:MAX:%5.2lf seconds
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:DNS RTT Completion Time\:
+GPRINT:TEST_rttMonLatestHTTPOperDNSRTT-raw:MAX:%5.2lf seconds
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:TCP Connection Completion Time\:
+GPRINT:TEST_rttMonLatestHTTPOperTCPConnectRTT-raw:MAX:%5.2lf seconds
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:Transaction Completion Time\:
+GPRINT:TEST_rttMonLatestHTTPOperTransactionRTT-raw:MAX:%5.2lf seconds
+
+COMMENT:\\s
+COMMENT:\\s
+</property>
+<property type="boolean" id="hasSummary" mode="w" >
+True
+</property>
+<tomanycont id='graphPoints'>
+<object id='HTTP_TEST_rttMonLatestRttOperCompletionTime' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${here/viewName} RTT - ${here/rttMonCtrlAdminRttType} type
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="rpn" mode="w" >
+1000,/
+</property>
+<property type="string" id="dpName" mode="w" >
+SLA_HTTP_TEST_rttMonLatestRttOperCompletionTime
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+<object id='TEST_rttMonLatestHTTPOperDNSRTT' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property type="long" id="sequence" mode="w" >
+1
+</property>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="dpName" mode="w" >
+HTTP_TEST_rttMonLatestHTTPOperDNSRTT
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+<object id='TEST_rttMonLatestHTTPOperTCPConnectRTT' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property type="long" id="sequence" mode="w" >
+2
+</property>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="dpName" mode="w" >
+HTTP_TEST_rttMonLatestHTTPOperTCPConnectRTT
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+<object id='TEST_rttMonLatestHTTPOperTransactionRTT' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property type="long" id="sequence" mode="w" >
+3
+</property>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="dpName" mode="w" >
+HTTP_TEST_rttMonLatestHTTPOperTransactionRTT
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+</tomanycont>
+</object>
+<object id='Sense' module='Products.ZenModel.GraphDefinition' class='GraphDefinition'>
+<property type="int" id="height" mode="w" >
+100
+</property>
+<property type="int" id="width" mode="w" >
+890
+</property>
+<property type="string" id="units" mode="w" >
+Code #
+</property>
+<property type="boolean" id="log" mode="w" >
+False
+</property>
+<property type="boolean" id="base" mode="w" >
+False
+</property>
+<property type="int" id="miny" mode="w" >
+0
+</property>
+<property type="int" id="maxy" mode="w" >
+-1
+</property>
+<property type="text" id="custom" mode="w" >
+-P
+-E
+
+LINE2:HTTP_TEST_rttMonLatestRttOperSense-raw#8888FF:Op Sense
+LINE2:HTTP_TEST_rttMonLatestRttOperApplSpecificSense-raw#88FF88:Specific Op Sense
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Results&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:Op Sense\:
+GPRINT:HTTP_TEST_rttMonLatestRttOperApplSpecificSense-raw:LAST:%5.0lf
+
+COMMENT:Specific Op Sense\:
+GPRINT:HTTP_TEST_rttMonLatestRttOperSense-raw:LAST:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Spikes&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:Op Sense\:
+GPRINT:HTTP_TEST_rttMonLatestRttOperApplSpecificSense-raw:MAX:%5.0lf
+
+COMMENT:Specific Op Sense\:
+GPRINT:HTTP_TEST_rttMonLatestRttOperSense-raw:MAX:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+</property>
+<property type="boolean" id="hasSummary" mode="w" >
+True
+</property>
+<property type="long" id="sequence" mode="w" >
+1
+</property>
+<tomanycont id='graphPoints'>
+<object id='HTTP_TEST_rttMonLatestRttOperApplSpecificSense' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="dpName" mode="w" >
+SLA_HTTP_TEST_rttMonLatestRttOperApplSpecificSense
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+<object id='HTTP_TEST_rttMonLatestRttOperSense' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property type="long" id="sequence" mode="w" >
+1
+</property>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="dpName" mode="w" >
+SLA_HTTP_TEST_rttMonLatestRttOperSense
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+</tomanycont>
+</object>
+</tomanycont>
+</object>
+<object id='New_SLA' module='Products.ZenModel.RRDTemplate' class='RRDTemplate'>
+<property type="string" id="targetPythonClass" mode="w" >
+ZenPacks.ipSLA.SLADevice.SLADevice
+</property>
+<tomanycont id='datasources'>
+<object id='SLA_TEST' module='Products.ZenModel.BasicDataSource' class='BasicDataSource'>
+<property select_variable="sourcetypes" type="selection" id="sourcetype" mode="w" >
+COMMAND
+</property>
+<property type="boolean" id="enabled" mode="w" >
+True
+</property>
+<property type="string" id="eventClass" mode="w" >
+/Cmd/Fail
+</property>
+<property type="int" id="severity" mode="w" >
+3
+</property>
+<property type="string" id="commandTemplate" mode="w" >
+/usr/bin/perl $ZENHOME/ZenPacks/ZenPacks.ipSLA.SLADevice-1.2-py2.4.egg/ZenPacks/ipSLA/SLADevice/Collect.pl '${here/rttMonCtrlAdminTag}' ${here/zSnmpCommunity} ${here/zSnmpVer} ${here/manageIp}
+</property>
+<property type="int" id="cycletime" mode="w" >
+30
+</property>
+<property type="boolean" id="usessh" mode="w" >
+False
+</property>
+<property type="string" id="parser" mode="w" >
+Auto
+</property>
+<tomanycont id='datapoints'>
+<object id='rttMonLatestRttOperApplSpecificSense' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestRttOperCompletionTime' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestRttOperSense' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestRttOperTime' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+</tomanycont>
+</object>
+</tomanycont>
+<tomanycont id='graphDefs'>
+<object id='Round Trip Time' module='Products.ZenModel.GraphDefinition' class='GraphDefinition'>
+<property type="int" id="height" mode="w" >
+100
+</property>
+<property type="int" id="width" mode="w" >
+890
+</property>
+<property type="string" id="units" mode="w" >
+Seconds
+</property>
+<property type="boolean" id="log" mode="w" >
+False
+</property>
+<property type="boolean" id="base" mode="w" >
+False
+</property>
+<property type="int" id="miny" mode="w" >
+0
+</property>
+<property type="int" id="maxy" mode="w" >
+-1
+</property>
+<property type="text" id="custom" mode="w" >
+-P
+-E
+
+LINE2:TEST_rttMonLatestRttOperCompletionTime-raw#0000FF:RTT Completion Time
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Results&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:RTT\:
+GPRINT:TEST_rttMonLatestRttOperCompletionTime-raw:LAST:%5.2lf seconds
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Spikes&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:RTT\:
+GPRINT:TEST_rttMonLatestRttOperCompletionTime-raw:MAX:%5.2lf seconds
+
+COMMENT:\\s
+COMMENT:\\s
+</property>
+<property type="boolean" id="hasSummary" mode="w" >
+True
+</property>
+<tomanycont id='graphPoints'>
+<object id='TEST_rttMonLatestRttOperCompletionTime' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${here/viewName} RTT - ${here/rttMonCtrlAdminRttType} type
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="rpn" mode="w" >
+1000,/
+</property>
+<property type="string" id="dpName" mode="w" >
+SLA_TEST_rttMonLatestRttOperCompletionTime
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+</tomanycont>
+</object>
+<object id='Sense' module='Products.ZenModel.GraphDefinition' class='GraphDefinition'>
+<property type="int" id="height" mode="w" >
+100
+</property>
+<property type="int" id="width" mode="w" >
+890
+</property>
+<property type="string" id="units" mode="w" >
+Code #
+</property>
+<property type="boolean" id="log" mode="w" >
+False
+</property>
+<property type="boolean" id="base" mode="w" >
+False
+</property>
+<property type="int" id="miny" mode="w" >
+0
+</property>
+<property type="int" id="maxy" mode="w" >
+-1
+</property>
+<property type="text" id="custom" mode="w" >
+-P
+-E
+
+LINE2:TEST_rttMonLatestRttOperSense-raw#8888FF:Op Sense
+LINE2:TEST_rttMonLatestRttOperApplSpecificSense-raw#88FF88:Specific Op Sense
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Results&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:Op Sense\:
+GPRINT:TEST_rttMonLatestRttOperApplSpecificSense-raw:LAST:%5.0lf
+
+COMMENT:Specific Op Sense\:
+GPRINT:TEST_rttMonLatestRttOperSense-raw:LAST:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Spikes&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:Op Sense\:
+GPRINT:TEST_rttMonLatestRttOperApplSpecificSense-raw:MAX:%5.0lf
+
+COMMENT:Specific Op Sense\:
+GPRINT:TEST_rttMonLatestRttOperSense-raw:MAX:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+</property>
+<property type="boolean" id="hasSummary" mode="w" >
+True
+</property>
+<property type="long" id="sequence" mode="w" >
+1
+</property>
+<tomanycont id='graphPoints'>
+<object id='TEST_rttMonLatestRttOperApplSpecificSense' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="dpName" mode="w" >
+SLA_TEST_rttMonLatestRttOperApplSpecificSense
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+<object id='TEST_rttMonLatestRttOperSense' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property type="long" id="sequence" mode="w" >
+1
+</property>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="dpName" mode="w" >
+SLA_TEST_rttMonLatestRttOperSense
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+</tomanycont>
+</object>
+</tomanycont>
+</object>
+<object id='VoIP' module='Products.ZenModel.RRDTemplate' class='RRDTemplate'>
+<property type="string" id="targetPythonClass" mode="w" >
+ZenPacks.ipSLA.SLADevice.SLADevice
+</property>
+<tomanycont id='datasources'>
+<object id='SLA_TEST' module='Products.ZenModel.BasicDataSource' class='BasicDataSource'>
+<property select_variable="sourcetypes" type="selection" id="sourcetype" mode="w" >
+COMMAND
+</property>
+<property type="boolean" id="enabled" mode="w" >
+True
+</property>
+<property type="string" id="eventClass" mode="w" >
+/Cmd/Fail
+</property>
+<property type="int" id="severity" mode="w" >
+3
+</property>
+<property type="string" id="commandTemplate" mode="w" >
+/usr/bin/perl $ZENHOME/ZenPacks/ZenPacks.ipSLA.SLADevice-1.2-py2.4.egg/ZenPacks/ipSLA/SLADevice/Collect.pl '${here/rttMonCtrlAdminTag}' ${here/zSnmpCommunity} ${here/zSnmpVer} ${here/manageIp}
+</property>
+<property type="int" id="cycletime" mode="w" >
+30
+</property>
+<property type="boolean" id="usessh" mode="w" >
+False
+</property>
+<property type="string" id="parser" mode="w" >
+Auto
+</property>
+<tomanycont id='datapoints'>
+<object id='rttMonLatestRttOperApplSpecificSense' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestRttOperCompletionTime' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestRttOperSense' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestRttOperTime' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+</tomanycont>
+</object>
+<object id='VoIP_SLA_TEST' module='Products.ZenModel.BasicDataSource' class='BasicDataSource'>
+<property select_variable="sourcetypes" type="selection" id="sourcetype" mode="w" >
+COMMAND
+</property>
+<property type="boolean" id="enabled" mode="w" >
+True
+</property>
+<property type="string" id="eventClass" mode="w" >
+/Cmd/Fail
+</property>
+<property type="int" id="severity" mode="w" >
+3
+</property>
+<property type="string" id="commandTemplate" mode="w" >
+/usr/bin/perl $ZENHOME/ZenPacks/ZenPacks.ipSLA.SLADevice-1.2-py2.4.egg/ZenPacks/ipSLA/SLADevice/Collect_VoIP.pl '${here/rttMonCtrlAdminTag}' ${here/zSnmpCommunity} ${here/zSnmpVer} ${here/manageIp}
+</property>
+<property type="int" id="cycletime" mode="w" >
+30
+</property>
+<property type="boolean" id="usessh" mode="w" >
+False
+</property>
+<property type="string" id="parser" mode="w" >
+Auto
+</property>
+<tomanycont id='datapoints'>
+<object id='rttMonLatestJitterOperAvgJitter' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestJitterOperIAJIn' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestJitterOperIAJOut' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestJitterOperICPIF' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+<object id='rttMonLatestJitterOperMOS' module='Products.ZenModel.RRDDataPoint' class='RRDDataPoint'>
+<property select_variable="rrdtypes" type="selection" id="rrdtype" mode="w" >
+GAUGE
+</property>
+<property type="boolean" id="isrow" mode="w" >
+True
+</property>
+</object>
+</tomanycont>
+</object>
+</tomanycont>
+<tomanycont id='graphDefs'>
+<object id='Jitter' module='Products.ZenModel.GraphDefinition' class='GraphDefinition'>
+<property type="int" id="height" mode="w" >
+100
+</property>
+<property type="int" id="width" mode="w" >
+890
+</property>
+<property type="boolean" id="log" mode="w" >
+False
+</property>
+<property type="boolean" id="base" mode="w" >
+False
+</property>
+<property type="int" id="miny" mode="w" >
+0
+</property>
+<property type="int" id="maxy" mode="w" >
+-1
+</property>
+<property type="text" id="custom" mode="w" >
+-P
+-E
+
+LINE2:SLA_TEST_rttMonLatestJitterOperAvgJitter-raw#0000FF:Average Jitter
+LINE2:SLA_TEST_rttMonLatestJitterOperIAJIn-raw#00FF00:Jitter In
+LINE2:SLA_TEST_rttMonLatestJitterOperIAJOut-raw#FF0000:Jitter Out
+LINE2:SLA_TEST_rttMonLatestJitterOperICPIF-raw#FFFF00:ICPIF
+LINE2:SLA_TEST_rttMonLatestJitterOperMOS#00FFFF:MOS
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Results&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:Average Jitter\:
+GPRINT:SLA_TEST_rttMonLatestJitterOperAvgJitter-raw:LAST:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:Jitter In\:
+GPRINT:SLA_TEST_rttMonLatestJitterOperIAJIn-raw:LAST:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:Jitter Out\:
+GPRINT:SLA_TEST_rttMonLatestJitterOperIAJOut-raw:LAST:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:ICPIF\:
+GPRINT:SLA_TEST_rttMonLatestJitterOperICPIF-raw:LAST:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:MOS\:
+GPRINT:SLA_TEST_rttMonLatestJitterOperMOS:LAST:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Spikes&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:Average Jitter\:
+GPRINT:SLA_TEST_rttMonLatestJitterOperAvgJitter-raw:MAX:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:Jitter In\:
+GPRINT:SLA_TEST_rttMonLatestJitterOperIAJIn-raw:MAX:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:Jitter Out\:
+GPRINT:SLA_TEST_rttMonLatestJitterOperIAJOut-raw:MAX:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:ICPIF\:
+GPRINT:SLA_TEST_rttMonLatestJitterOperICPIF-raw:MAX:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:MOS\:
+GPRINT:SLA_TEST_rttMonLatestJitterOperMOS:MAX:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+</property>
+<property type="boolean" id="hasSummary" mode="w" >
+True
+</property>
+<property type="long" id="sequence" mode="w" >
+2
+</property>
+<tomanycont id='graphPoints'>
+<object id='SLA_TEST_rttMonLatestJitterOperAvgJitter' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="dpName" mode="w" >
+VoIP_SLA_TEST_rttMonLatestJitterOperAvgJitter
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+<object id='SLA_TEST_rttMonLatestJitterOperIAJIn' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property type="long" id="sequence" mode="w" >
+1
+</property>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="dpName" mode="w" >
+VoIP_SLA_TEST_rttMonLatestJitterOperIAJIn
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+<object id='SLA_TEST_rttMonLatestJitterOperIAJOut' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property type="long" id="sequence" mode="w" >
+2
+</property>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="dpName" mode="w" >
+VoIP_SLA_TEST_rttMonLatestJitterOperIAJOut
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+<object id='SLA_TEST_rttMonLatestJitterOperICPIF' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property type="long" id="sequence" mode="w" >
+3
+</property>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="dpName" mode="w" >
+VoIP_SLA_TEST_rttMonLatestJitterOperICPIF
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+<object id='SLA_TEST_rttMonLatestJitterOperMOS' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property type="long" id="sequence" mode="w" >
+4
+</property>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="rpn" mode="w" >
+100,/
+</property>
+<property type="string" id="dpName" mode="w" >
+VoIP_SLA_TEST_rttMonLatestJitterOperMOS
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+</tomanycont>
+</object>
+<object id='Round Trip Time' module='Products.ZenModel.GraphDefinition' class='GraphDefinition'>
+<property type="int" id="height" mode="w" >
+100
+</property>
+<property type="int" id="width" mode="w" >
+890
+</property>
+<property type="string" id="units" mode="w" >
+Seconds
+</property>
+<property type="boolean" id="log" mode="w" >
+False
+</property>
+<property type="boolean" id="base" mode="w" >
+False
+</property>
+<property type="int" id="miny" mode="w" >
+0
+</property>
+<property type="int" id="maxy" mode="w" >
+-1
+</property>
+<property type="text" id="custom" mode="w" >
+-P
+-E
+
+LINE2:TEST_rttMonLatestRttOperCompletionTime-raw#0000FF:RTT Completion Time
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Results&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:RTT\:
+GPRINT:TEST_rttMonLatestRttOperCompletionTime-raw:LAST:%5.2lf seconds
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Spikes&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:RTT\:
+GPRINT:TEST_rttMonLatestRttOperCompletionTime-raw:MAX:%5.2lf seconds
+
+COMMENT:\\s
+COMMENT:\\s
+</property>
+<property type="boolean" id="hasSummary" mode="w" >
+True
+</property>
+<tomanycont id='graphPoints'>
+<object id='TEST_rttMonLatestRttOperCompletionTime' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${here/viewName} RTT - ${here/rttMonCtrlAdminRttType} type
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="rpn" mode="w" >
+1000,/
+</property>
+<property type="string" id="dpName" mode="w" >
+SLA_TEST_rttMonLatestRttOperCompletionTime
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+</tomanycont>
+</object>
+<object id='Sense' module='Products.ZenModel.GraphDefinition' class='GraphDefinition'>
+<property type="int" id="height" mode="w" >
+100
+</property>
+<property type="int" id="width" mode="w" >
+890
+</property>
+<property type="string" id="units" mode="w" >
+Code #
+</property>
+<property type="boolean" id="log" mode="w" >
+False
+</property>
+<property type="boolean" id="base" mode="w" >
+False
+</property>
+<property type="int" id="miny" mode="w" >
+0
+</property>
+<property type="int" id="maxy" mode="w" >
+-1
+</property>
+<property type="text" id="custom" mode="w" >
+-P
+-E
+
+LINE2:TEST_rttMonLatestRttOperSense-raw#8888FF:Op Sense
+LINE2:TEST_rttMonLatestRttOperApplSpecificSense-raw#88FF88:Specific Op Sense
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Results&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:Op Sense\:
+GPRINT:TEST_rttMonLatestRttOperApplSpecificSense-raw:LAST:%5.0lf
+
+COMMENT:Specific Op Sense\:
+GPRINT:TEST_rttMonLatestRttOperSense-raw:LAST:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:\\s
+
+COMMENT:&lt;b&gt;${here/viewName} Spikes&lt;/b&gt;\:
+COMMENT:\\s
+COMMENT:\\s
+COMMENT:Op Sense\:
+GPRINT:TEST_rttMonLatestRttOperApplSpecificSense-raw:MAX:%5.0lf
+
+COMMENT:Specific Op Sense\:
+GPRINT:TEST_rttMonLatestRttOperSense-raw:MAX:%5.0lf
+
+COMMENT:\\s
+COMMENT:\\s
+</property>
+<property type="boolean" id="hasSummary" mode="w" >
+True
+</property>
+<property type="long" id="sequence" mode="w" >
+1
+</property>
+<tomanycont id='graphPoints'>
+<object id='TEST_rttMonLatestRttOperApplSpecificSense' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="dpName" mode="w" >
+SLA_TEST_rttMonLatestRttOperApplSpecificSense
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+<object id='TEST_rttMonLatestRttOperSense' module='Products.ZenModel.DataPointGraphPoint' class='DataPointGraphPoint'>
+<property type="long" id="sequence" mode="w" >
+1
+</property>
+<property select_variable="lineTypes" type="selection" id="lineType" mode="w" >
+DONTDRAW
+</property>
+<property type="long" id="lineWidth" mode="w" >
+1
+</property>
+<property type="boolean" id="stacked" mode="w" >
+False
+</property>
+<property type="string" id="format" mode="w" >
+%5.2lf%s
+</property>
+<property type="string" id="legend" mode="w" >
+${graphPoint/id}
+</property>
+<property type="long" id="limit" mode="w" >
+-1
+</property>
+<property type="string" id="dpName" mode="w" >
+SLA_TEST_rttMonLatestRttOperSense
+</property>
+<property type="string" id="cFunc" mode="w" >
+AVERAGE
+</property>
+</object>
+</tomanycont>
+</object>
+</tomanycont>
+</object>
+</tomanycont>
+</object>
+<!-- ('', 'zport', 'dmd', 'zenMenus', 'More', 'zenMenuItems', 'ipSLAipSlaDevice.pt') -->
+<object id='/zport/dmd/zenMenus/More/zenMenuItems/ipSLAipSlaDevice.pt' module='Products.ZenModel.ZenMenuItem' class='ZenMenuItem'>
+<property type="text" id="description" mode="w" >
+IP SLAs
+</property>
+<property type="text" id="action" mode="w" >
+ipSLAipSlaDevice
+</property>
+<property type="boolean" id="isglobal" mode="w" >
+True
+</property>
+<property type="lines" id="permissions" mode="w" >
+('View',)
+</property>
+<property type="lines" id="allowed_classes" mode="w" >
+['SLADevice']
+</property>
+<property type="boolean" id="isdialog" mode="w" >
+False
+</property>
+<property type="float" id="ordering" mode="w" >
+5.0
+</property>
+</object>
+</objects>
60 ZenPacks/ipSLA/SLADevice/skins/ZenPacks.ipSLA.SLADevice/SLAedit.pt