<?xml version="1.0" encoding="windows-1251"?>
<document type="SelFTrendxTest" version="1.0" xmlns:m="xTest">
     <xTest type="USER_SCRIPT" alias="IP SLA HTTP" 
            TitleRootRus="Профессиональные тесты IP-канала на основе Cisco IP SLA с оценкой MOS и ICPIF" 
            TitleRootEng="Professional Cisco IP SLA Based Tests with MOS and ICPIF Estimation" 
            TitleRus="Профессиональный тест сервиса HTTP на основе Cisco IP SLA" 
            TitleEng="Professional Cisco IP SLA Based Test for HTTP"
            TrafficLightsName="Professional Cisco IP SLA Based Test for HTTP"
            Version="1.4">
	<Files>
		<File type="conf" name="VB.G711aPro.xTest.xml"/>
		<File type="help" name="XT.IPQoSPro.what.html"/>
		<File type="dll" name="ST_SCTest.dll"/>
	</Files>
  <Keywords>
   <Keyword>SNMP</Keyword>
   <Keyword>Cisco</Keyword>
   <Keyword>IP SLA</Keyword>
   <Keyword>HTTP</Keyword>
   <Keyword>Эмуляция транзакций</Keyword>
  </Keywords>

       <!--     $Id: VB.HTTPSaa.xTest.xml,v 1.4 2012/06/29 19:01:25 bag@prolan.ru Exp $


-->

    <xTestProps>
        <log_level_def>7</log_level_def>
        <truncate_log>1</truncate_log>
        <aver_interval_duration_sec>60</aver_interval_duration_sec>
        <discovery_func>OnDiscovery</discovery_func>
        <work_func>OnDataReceived</work_func>
    </xTestProps>

    <parameters TitleRus="Список тестируемых каналов связи:" TitleEng="Communication Channel List:">
        <resources unique="No">
            <resource_id TitleRus="IP Адрес SAA Агента:" TitleEng="SAA Agent IP Address:"></resource_id>
        </resources>
        
        <common_attribs TitleRus="Список параметров (общие):" TitleEng="Parameters List (common):" SubTitleRus="Параметр" SubTitleEng="Parameter">
            <Attrib Type="Bool" TitleRus="Добавить SAA Test ID в название характеристик" TitleEng="Add Test Instance to Event Name" Alias="add_test_instance">"no"</Attrib> 
            <Attrib Type="Bool" TitleRus="Добавить SAA Админ тег в название характеристик" TitleEng="Add SAA Admin tag to Event Name" Alias="add_saa_admin_tag">"no"</Attrib>
            <Attrib Type="Bool" TitleRus="Использовать имя устройства в названии характеристик" TitleEng="Use hostname instead IP-adress into Event Name" Alias="use_hostname">"no"</Attrib>
        </common_attribs>
        
        <resource_attribs TitleRus="Список параметров:" TitleEng="Parameters List:" SubTitleRus="Параметр" SubTitleEng="Parameter">
            <!-- Type: "String", "Bool", "Integer", "Double", "Enum" -->
            <!-- VisualType: "Hidden", "Normal" (def), "InList" -->
            <Attrib Type="String" TitleRus="Строка доступа на чтение" TitleEng="Read Community String" Alias="community_string_read">"public"</Attrib>
            <Attrib Type="String" TitleRus="Строка доступа на запись" TitleEng="Write Community String" Alias="community_string_write">"private"</Attrib>
            <Attrib Type="String" TitleRus="URL" TitleEng="URL" VisibleInList="yes" Alias="http_url" VisualType="InList">""</Attrib>
			      <Attrib Type="Enum" TitleRus="Версия HTTP" TitleEng="HTTP Version" Alias="http_version">
					          <Attrib_enum TitleRus="1.0" TitleEng="1.0">"1.0"</Attrib_enum>
                    <Attrib_enum TitleRus="1.1" TitleEng="1.1">"1.1"</Attrib_enum>
            </Attrib>                    
            <Attrib Type="Integer" TitleRus="Admin Timeout" TitleEng="Admin Timeout" Alias="admin_timeout" VisualType="Hidden">30000</Attrib>
            <Attrib Type="Integer" TitleRus="Test Period(sec)" TitleEng="Test Period(sec)" Alias="test_period_sec" VisualType="Hidden">30</Attrib>
            <Attrib Type="String" TitleRus="SAA Test ID" TitleEng="SAA Test ID" Alias="saa_test_id" VisualType="Normal">""</Attrib>
            <Attrib Type="String" TitleRus="SAA Админ тег" TitleEng="SAA Admin tag" Alias="saa_admin_tag" VisualType="Normal">"HTTP"</Attrib>
            <Attrib Type="Bool" TitleRus="Подсоединиться к существующему тесту" TitleEng="Connect to Existing Test" Alias="connect_exist" VisualType="Hidden">No</Attrib>
            <Attrib Type="Integer" TitleRus="Пороговое значение временных флуктуаций" TitleEng="Jitter Threshold" Alias="response_time_threshold" VisualType="Hidden">5000</Attrib>
            <Attrib Type="Integer" TitleRus="Snmp TimeOut (ms)" TitleEng="Snmp TimeOut (ms)" Alias="snmp_timeout" VisualType="Hidden">1000</Attrib>
            <Attrib Type="Integer" TitleRus="Число переповторов Snmp" TitleEng="Snmp Retry Count" Alias="snmp_retry_count" VisualType="Hidden">3</Attrib>
            
        </resource_attribs>
    </parameters>
    
    
    <popupdisplay>
        <!-- Function: "EventCount", "Average", "Maximum", "Minimum" -->
        <description ru="HTTP Cisco IP SLA Based Test" 
                     en="HTTP Cisco IP SLA Based Test"></description>
    </popupdisplay>

<Script language="VBScript">
<!--
Option Explicit

Const g_SNMPGET = 160
Const g_SNMPSET = 163
Const g_GETBULK = 165

Const g_SNMP_SYNTAX_INT = 2
Const g_SNMP_SYNTAX_OCTETS = 4
Const g_SNMP_SYNTAX_TIMETICKS = 67

Const SNMP_FAILED = -1, SNMP_OK = 0, TIME_NOT_BEGIN = 1, NO_TEST_POINT = 2, NO_SUCH_TESTID = 3

Sub OnDiscovery(ByRef ResSet)
    Dim ResCount, Unid, l_Indx, l_SnmpRQ, l_lErrorCode, l_strIpAddrSaa, l_strHostnameSaa, l_strURL 
    Dim l_strMesg, l_bConnectToExisting, l_lTestID, l_strEventName, l_strAlias, l_strMetricsName
    Dim SLAError, TLError, l_strErr
    
    Dim l_objLog
    
    'stop
    'On Error Resume Next
    Err.Clear
	
    ' Получаем объект лога из ResSet
    Set l_objLog = ResSet.Log 
  	
    ResCount=ResSet.Count
    Unid = ResSet.UnidBase
	
    For l_Indx = 0 To ResCount - 1
        Set l_SnmpRQ = CreateObject("SAAEngineComponent.SAARequestor.1")
        l_lErrorCode = l_SnmpRQ.Init2(l_objLog)
	    
        '// Resolve saa agent ip address
        l_strHostnameSaa = ResSet.Resource(l_Indx).Name
        l_strIpAddrSaa = ResSet.GetIPAddressResolve(l_strHostnameSaa)
        If Len(l_strIpAddrSaa) = 0 Then
            ResSet.ScriptError = -1
            l_strErr = "Неправильно задано имя или IP адрес устройства: " & l_strHostnameSaa
            ResSet.ScriptErrorInfo = l_strErr
            Exit Sub
        End If 
        ResSet.Resource(l_Indx).Name = l_strIpAddrSaa
        l_SnmpRQ.IpAddress = l_strIpAddrSaa

        l_strURL = ResSet.Resource(l_Indx).Attrib("http_url").Value
        If Len(l_strURL) = 0 Then
            ResSet.ScriptError = -1
            l_strErr = "Неправильно задан URL для " & l_strHostnameSaa
            ResSet.ScriptErrorInfo = l_strErr
            Exit Sub
        ElseIf Left(l_strURL, 7) <> "http://" Then
            ResSet.Resource(l_Indx).Attrib("http_url").Value = "http://" & l_strURL
        End If 
	    
        l_bConnectToExisting = ResSet.Resource(l_Indx).Attrib("connect_exist").Value
        If l_bConnectToExisting = False  Then
            l_strMesg = l_strHostnameSaa & "-" & Chr(62) & l_strURL & " Try to Create Test"
            ResSet.SendProgressMessage(l_strMesg)

            l_lTestID = ResSet.Resource(l_Indx).Attrib("saa_test_id").Value
            If Len(l_lTestID) > 0 And IsNumeric(l_lTestID) Then
                l_lTestID = CLng(ResSet.Resource(l_Indx).Attrib("saa_test_id").Value)
            Else
                l_lTestID = l_SnmpRQ.CreateTestID()                
            End If   
	        
            ResSet.Resource(l_Indx).Attrib("saa_test_id").Value = CStr(l_lTestID)
        Else
            l_lTestID = CLng(ResSet.Resource(l_Indx).Attrib("saa_test_id").Value)
            l_strMesg = l_strHostnameSaa & " Check Existing Test" & " [" & l_lTestID & "]"
            ResSet.SendProgressMessage(l_strMesg)
        End If
           
        l_lErrorCode = CreateSAATest(ResSet, l_Indx, l_SnmpRQ, l_lTestID)
        
        If( l_lErrorCode <> 0 ) Then
            If ResSet.ScriptError <> -1 Then
                ResSet.ScriptError = -1
   			        ResSet.ScriptErrorInfo = l_SnmpRQ.ErrorInfo()
   			    End If
            Exit Sub
        End If

        If l_bConnectToExisting = False  Then
            l_strMesg = l_strHostnameSaa & "-" & Chr(62) & l_strURL & " Create Test OK!"
        Else
            l_strMesg = l_strHostnameSaa & " Check Existing Test [" & l_lTestID & "] OK!"
        End If
        ResSet.SendProgressMessage(l_strMesg)
	    
        If l_bConnectToExisting = False Then
            l_strMesg = l_strHostnameSaa & "-" & Chr(62) & l_strURL & " Destroy Test"
            ResSet.SendProgressMessage(l_strMesg)

            l_lErrorCode = l_SnmpRQ.DestroyTest()
            If( l_lErrorCode <> 0 ) Then
                ResSet.ScriptError = -1
                ResSet.ScriptErrorInfo = l_SnmpRQ.ErrorInfo()
                Exit Sub
            End If
            l_strMesg = l_strHostnameSaa & "-" & Chr(62) & l_strURL & " Destroy Test OK!"
            ResSet.SendProgressMessage(l_strMesg)
        End If
	    
        '// Add SLA Events and Traffic Lights
        '//
        
        '// SAA Agent availability
        Unid = Unid + 1
        l_strEventName = "SNMP Device Availability"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(%)", l_strHostnameSaa)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "saa_agent_availabity", "(%)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
        TLError =  ResSet.AddTrafficLight(l_strAlias, l_strMetricsName, l_strMetricsName, "Average", "<", 90, 94, 96, 99)	

        '// Time HTTP Operation
        l_strEventName = "Time HTTP Operation"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(usec)", l_strHostnameSaa)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "time_http_operation", "(usec)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
        TLError =  ResSet.AddTrafficLight(l_strAlias, l_strMetricsName, l_strMetricsName, "Average", ">", 20000000, 15000000, 8000000, 5000000)	

        '// Round Trip Time taken to perform DNS query within the 	HTTP operation
        l_strEventName = "DNS Resolve Time"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(usec)", l_strHostnameSaa)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "dns_resolve_time", "(usec)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
        TLError =  ResSet.AddTrafficLight(l_strAlias, l_strMetricsName, l_strMetricsName, "Average", ">", 140000, 200000, 1000000, 4000000)	

        '// Round Trip Time taken to connect to the HTTP server
        l_strEventName = "Time To Connect To The HTTP Server"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(usec)", l_strHostnameSaa)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "connect_time", "(usec)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
        TLError =  ResSet.AddTrafficLight(l_strAlias, l_strMetricsName, l_strMetricsName, "Average", ">", 100000, 50000, 20000, 10000)	

        '// Round Trip Time taken to download the object specified by the URL
        l_strEventName = "Time To Download The Object Specified By The URL"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(usec)", l_strHostnameSaa)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "download_time", "(usec)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
        TLError =  ResSet.AddTrafficLight(l_strAlias, l_strMetricsName, l_strMetricsName, "Average", ">", 16000000, 8000000, 4000000, 2000000)	

        '// Failed Operations
        l_strEventName = "Failed Operations"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(%)", l_strHostnameSaa)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "failed_operations", "(%)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
        TLError =  ResSet.AddTrafficLight(l_strAlias, l_strMetricsName, l_strMetricsName, "Average", ">", 10, 6, 3, 1)	
	    
    Next	

End Sub


' ==================================================================================

Function GetMetricsName(ByRef ResSet, l_iNum, strEventName, strUnits, strHostnameSaa)
    Dim l_strIpAddrSaa, l_strRespIP, l_strInstance, l_strTag
    Dim l_strPrefix, l_strEventName
    Dim l_bAddTag, l_bAddInst, l_bUseHostname
        
    l_strIpAddrSaa = ResSet.Resource(l_iNum).Name
    l_strRespIP = ResSet.Resource(l_iNum).Attrib("http_url").Value
    
    l_bUseHostname = CBool(ResSet.CommonProp.Attrib("use_hostname").Value)
    l_bAddInst = CBool(ResSet.CommonProp.Attrib("add_test_instance").Value)
    l_bAddTag = CBool(ResSet.CommonProp.Attrib("add_saa_admin_tag").Value)
    
    l_strInstance = ResSet.Resource(l_iNum).Attrib("saa_test_id").Value

    l_strTag = ""
    
    If l_bAddTag Then
        l_strTag = ResSet.Resource(l_iNum).Attrib("saa_admin_tag").Value
    End If
    
    If l_bAddInst Then
        l_strTag = l_strTag & "(" & l_strInstance &")"
    End If

    If l_bUseHostname Then
        l_strPrefix = "[" & strHostnameSaa & "-" & Chr(62) & l_strRespIP & "] " & l_strTag
    Else
        l_strPrefix = "[" & l_strIpAddrSaa & "-" & Chr(62) & l_strRespIP & "] " & l_strTag
    End If
    l_strEventName = l_strPrefix & " " & strEventName & " " & strUnits
    GetMetricsName = l_strEventName

End Function

'====================================================================================

Function GetEventName(ByRef ResSet, l_iNum, ByRef strEventName, strAlias, strUnits)
    Dim l_strIpAddrSaa, l_strRespIP, l_strInstance, l_strTag
    Dim l_strPrefix, l_strAlias
    Dim l_bAddTag, l_bAddInst
        
    l_strIpAddrSaa = ResSet.Resource(l_iNum).Name
    l_strRespIP = ResSet.Resource(l_iNum).Attrib("http_url").Value
    
    l_bAddInst = CBool(ResSet.CommonProp.Attrib("add_test_instance").Value)
    l_bAddTag = CBool(ResSet.CommonProp.Attrib("add_saa_admin_tag").Value)
    
    l_strInstance = ResSet.Resource(l_iNum).Attrib("saa_test_id").Value

    l_strTag = ""
    
    If l_bAddTag Then
        l_strTag = ResSet.Resource(l_iNum).Attrib("saa_admin_tag").Value
    End If
    
    If l_bAddInst Then
        l_strTag = l_strTag & "(" & l_strInstance &")"
    End If

    l_strPrefix = "[" & l_strIpAddrSaa & "-" & Chr(62) & l_strRespIP & "] " & l_strTag
    l_strAlias = strAlias & "_" & l_strPrefix
    strEventName = l_strPrefix & " " & strEventName & " " & strUnits
    GetEventName = l_strAlias

End Function

'====================================================================================

Function CreateSAATest(ResSet, l_iNum, ByRef SnmpRQ, lTestID)
    Dim l_iTimeOut, l_iTestPeriod

    On Error Resume Next

    SnmpRQ.WriteCommunity   = ResSet.Resource(l_iNum).Attrib("community_string_write").Value
    SnmpRQ.ReadCommunity    = ResSet.Resource(l_iNum).Attrib("community_string_read").Value
    
    l_iTestPeriod           =  1000*ResSet.Resource(l_iNum).Attrib("test_period_sec").Value
    l_iTimeOut              =  ResSet.Resource(l_iNum).Attrib("admin_timeout").Value
    If l_iTimeOut > l_iTestPeriod Then
        ResSet.Resource(l_iNum).Attrib("admin_timeout").Value = l_iTestPeriod - 1000
    End If
    
    SnmpRQ.TestPeriod       = ResSet.Resource(l_iNum).Attrib("test_period_sec").Value
    SnmpRQ.AdminTimeOut     = ResSet.Resource(l_iNum).Attrib("admin_timeout").Value
    
    SnmpRQ.PaketsNumber     = ResSet.Resource(l_iNum).Attrib("number_of_packets").Value
    
    SnmpRQ.SnmpTimeOut      = ResSet.Resource(l_iNum).Attrib("snmp_timeout").Value
    SnmpRQ.SnmpRetryCount   = ResSet.Resource(l_iNum).Attrib("snmp_retry_count").Value
    
    '// HTTP rttMonCtrlAdminRttType - 7, rttMonEchoAdminProtocol - 26
    SnmpRQ.RttMonRttType    = 7
    SnmpRQ.HTTPVersion      = ResSet.Resource(l_iNum).Attrib("http_version").Value
    SnmpRQ.URL              = ResSet.Resource(l_iNum).Attrib("http_url").Value
    
    l_bConnectToExisting    = ResSet.Resource(l_Indx).Attrib("connect_exist").Value
    If lTestID <> 0 Then 
        SnmpRQ.TestID           = lTestID
    End If
          
    SnmpRQ.SaaAdminOwner    = "SLA-ON Probe HTTP Test " & lTestID
    SnmpRQ.SaaAdminTag      = ResSet.Resource(l_iNum).Attrib("saa_admin_tag").Value
    
    'stop
    
    If l_bConnectToExisting = False Then
        CreateSAATest = SnmpRQ.CreateTest()
    Else
        CreateSAATest = SnmpRQ.CheckExitingTest()
        If CreateSAATest = NO_SUCH_TESTID Then 
            ResSet.ScriptError = -1
   			ResSet.ScriptErrorInfo = "Теста " & Chr(34) & lTestID & Chr(34) & " не существует"
        End If
        
    End If
    
End Function

'====================================================================================

Sub OnDataReceived(ByRef ResSet)

    'stop
    Dim ResInfo_SaaTests_arr()
    Dim l_lErrorCode, l_Indx, ResCount, l_lTestID, l_bConnectToExisting
    Dim l_strEventName
    
    '// Init hash for quick event search
    ResSet.InitEventsHash
    l_lErrorCode = ResSet.InternalError
    
    ResCount=ResSet.Count
    ResSet.LogMsg("*** Start Sub OnDataReceived ***")
    
    ReDim ResInfo_SaaTests_arr(ResCount - 1)
    
    Dim l_objLog
    
    ' Получаем объект лога из ResSet
    Set l_objLog = ResSet.Log 
    
    '// Init Saa Tests Array
    
    For l_Indx = 0 To ResCount - 1
        Set ResInfo_SaaTests_arr(l_Indx) = CreateObject("SAAEngineComponent.SAARequestor.1")
	    
        l_lErrorCode = ResInfo_SaaTests_arr(l_Indx).Init2(l_objLog)
	    
        l_lTestID = ResSet.Resource(l_Indx).Attrib("saa_test_id").Value
        ResInfo_SaaTests_arr(l_Indx).IpAddress = ResSet.Resource(l_Indx).Name
        ResInfo_SaaTests_arr(l_Indx).ResponderIP = ResSet.Resource(l_Indx).Attrib("http_url").Value
	    
        '// Create HTTP test
        l_lErrorCode = CreateSAATest(ResSet, l_Indx, ResInfo_SaaTests_arr(l_Indx), l_lTestID)
	    
    Next	

    '// Test As Is
    Do While Not ResSet.StopTest
       
        For l_Indx = 0 To ResCount - 1
            l_lErrorCode = ResInfo_SaaTests_arr(l_Indx).GetStat()
            
            Select Case l_lErrorCode
                Case SNMP_FAILED
                    SendSLaEvens ResSet, ResInfo_SaaTests_arr(l_Indx), l_Indx, False
                Case SNMP_OK
                    SendSLaEvens ResSet, ResInfo_SaaTests_arr(l_Indx), l_Indx, True     
                Case NO_SUCH_TESTID
                    l_bConnectToExisting = ResSet.Resource(l_Indx).Attrib("connect_exist").Value
                    If l_bConnectToExisting = False Then
                        l_lErrorCode = CreateSAATest(ResSet, l_Indx, ResInfo_SaaTests_arr(l_Indx), l_lTestID)   
                    End If
                    
                    SendSLaEvens ResSet, ResInfo_SaaTests_arr(l_Indx), l_Indx, False
                    
                    SetSnmpAvailability ResSet, l_Indx, 100
            End Select
            
            If l_lErrorCode <> TIME_NOT_BEGIN Then
                ResSet.SendSLaEvents()
                ResetEvents ResSet                
            End If                      
        Next
        
        ResSet.Sleep 1000            
    Loop

   	'// Destroy Test
   	For l_Indx = 0 To ResCount - 1
	    l_bConnectToExisting = ResSet.Resource(l_Indx).Attrib("connect_exist").Value
	    If l_bConnectToExisting = False Then
	        l_lErrorCode = ResInfo_SaaTests_arr(l_Indx).DestroyTest()
	    End If
    Next	

    ResSet.LogMsg("*** Exit from Sub OnDataReceived ***")

End Sub

'====================================================================================

Sub SetSnmpAvailability(ByRef ResSet, lIndx, NumVal)
    Dim l_strAlias, l_Availability, l_strEventName 

    l_strAlias = GetEventName(ResSet, lIndx, l_strEventName, "saa_agent_availabity", "(%)")
    Set l_Availability = ResSet.Events(l_strAlias)
    l_Availability.Value = NumVal
End Sub

'====================================================================================

Sub SendSLaEvent(ByRef ResSet, lIndx, l_strEventName, Alias, SnmpVal, IsStatValid)
    Dim l_strAlias, l_Event 

    l_strAlias = GetEventName(ResSet, lIndx, l_strEventName, Alias, "")
    Set l_Event = ResSet.Events(l_strAlias)
    If  IsStatValid Then
        l_Event.Value = SnmpVal
    Else
        l_Event.Value = ResSet.BadValue    
    End If

End Sub

'====================================================================================

Sub SendSLaEvens(ByRef ResSet, ByRef SnmpObj, lIndx, IsStatValid)
 
    Dim  l_strEventName, l_dFailedOper
    
    If Not IsStatValid Then
        SetSnmpAvailability ResSet, lIndx, 0    
    Else 
        SetSnmpAvailability ResSet, lIndx, 100
    End If
    
    '// Time HTTP Operation
    SendSLaEvent ResSet, lIndx, "Time HTTP Operation", "time_http_operation", SnmpObj.LatestHTTPOperRTT, IsStatValid

    '// DNS Resolve Time
    SendSLaEvent ResSet, lIndx, "DNS Resolve Time", "dns_resolve_time", SnmpObj.LatestHTTPOperDNSRTT, IsStatValid

    '// Time To Connect To The HTTP Server
    SendSLaEvent ResSet, lIndx, "Time To Connect To The HTTP Server", "connect_time", SnmpObj.LatestHTTPOperTCPConnectRTT, IsStatValid

    '// Time To Download The Object Specified By The URL
    SendSLaEvent ResSet, lIndx, "Time To Download The Object Specified By The URL", "download_time", SnmpObj.LatestHTTPOperTransactionRTT, IsStatValid

    '//Failed Operations
    l_dFailedOper = ResSet.BadValue
    If SnmpObj.LatestRttOperSense > 0 Then
        If SnmpObj.LatestRttOperSense = 1 Then
            l_dFailedOper = 0
        Else
            l_dFailedOper = 100    
        End If
    End If 
    
    '// Failed Operations
    SendSLaEvent ResSet, lIndx, "Failed Operations", "failed_operations", l_dFailedOper, IsStatValid
    
End Sub

'====================================================================================

Sub ResetEvents(ByRef ResSet)
    Dim l_iEvCount, l_Indx

    l_iEvCount = ResSet.EventsCount
    
    For l_Indx = 0 To l_iEvCount - 1
        ResSet.Events(l_Indx).Value = ResSet.BadValue
    Next    

End Sub

-->
</Script>
    </xTest>
</document>
