<?xml version="1.0" encoding="windows-1251"?>
<document type="SelFTrendxTest" version="1.0" xmlns:m="xTest">
     <xTest type="USER_SCRIPT" alias="IPSLA CALIBRATION" 
            TitleRootRus="Профессиональные тесты IP-канала на основе Cisco IP SLA с оценкой MOS и ICPIF" 
            TitleRootEng="Professional Cisco IP SLA Based Tests with MOS and ICPIF Estimation" 
            TitleRus="Калибровочный IP SLA тест соответствия сети нормам приказа Мининформсвязи №113"
            TitleEng="Calibration IP SLA Test of Network Compliance to Mininformsvyaz order №113"
            TrafficLightsName="Calibration IP SLA Test of Network Compliance to Mininformsvyaz order №113"
            Version="1.2">
	<Files>
		<File type="conf" name="VB.G729Pro.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>Jitter</Keyword>
   <Keyword>Packet Loss</Keyword>
   <Keyword>Delay</Keyword>
   <Keyword>Приказ Мининформсвязи №113</Keyword>
  </Keywords>

       <!--     $Id: VB.G729Calibration.xTest.xml,v 1.2 2012/06/29 14:37:46 bag@prolan.ru Exp $


-->

    <xTestProps>
        <log_level_def>7</log_level_def>
        <truncate_log>1</truncate_log>
        <AverInervDuration>60</AverInervDuration>
        <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="IP Адрес Ответчика" TitleEng="Responder IP Address" VisibleInList="yes" Alias="responder_ip_address" VisualType="InList">""</Attrib>
            
            <Attrib Type="Integer" TitleRus="Admin Timeout" TitleEng="Admin Timeout" Alias="admin_timeout" VisualType="Hidden">5000</Attrib>
            <Attrib Type="Integer" TitleRus="Test Period(sec)" TitleEng="Test Period(sec)" Alias="test_period_sec" VisualType="Hidden">60</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">"MOS G.729"</Attrib>
            <Attrib Type="Bool" TitleRus="Подсоединиться к существующему тесту" TitleEng="Connect to Existing Test" Alias="connect_exist" VisualType="Hidden">No</Attrib>
            <Attrib Type="Integer" TitleRus="TOS (0-255)" TitleEng="TOS (0-255)" Alias="priority" VisualType="Normal">0</Attrib>
            <Attrib Type="Integer" TitleRus="Размер пакета" TitleEng="Packet Size" Alias="packet_size" VisualType="Hidden">20</Attrib>
            <Attrib Type="Integer" TitleRus="Задержка между пакетами" TitleEng="Inter Packets Delay" Alias="inter_packet_delay" VisualType="Hidden">20</Attrib>
            <Attrib Type="Integer" TitleRus="Число пакетов" TitleEng="Number Of Packets" Alias="number_of_packets" VisualType="Hidden">1000</Attrib>
            <Attrib Type="Integer" TitleRus="Пороговое значение временных флуктуаций" TitleEng="Jitter Threshold" Alias="jitter_threshold" VisualType="Hidden">5000</Attrib>
            <Attrib Type="Integer" TitleRus="Тестовый порт" TitleEng="Target Port" Alias="target_port" VisualType="Hidden">18831</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>
            <Attrib Type="Integer" TitleRus="ICPIF Advantage Factor (0-20)" TitleEng="ICPIF Advantage Factor (0-20)" Alias="ICPIFAdvFactor" VisualType="Normal">0</Attrib>
            
            <!--  g711ulaw(1), g711alaw(2), g729a(3) --> 
            <Attrib Type="Integer" TitleRus="Тип кодека (1-3)" TitleEng="Codec Type (1-3)" Alias="Codec_Type" VisualType="Hidden">3</Attrib>
        </resource_attribs>
    </parameters>
    
    
    <popupdisplay>
        <!-- Function: "EventCount", "Average", "Maximum", "Minimum" -->
        <description ru="Калибровочный IP SLA тест соответствия сети нормам приказа Мининформсвязи №113" 
                     en="Calibration IP SLA Test of Network Compliance to Mininformsvyaz order №113"></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_strHostnameSaa, l_strIpAddrSaa, l_strRespHostname, l_strRespIP
    Dim l_strMesg, l_bConnectToExisting, l_lTestID, l_strEventName, l_strAlias, l_strMetricsName
    Dim SLAError, TLError, l_iRespPort, l_strErr
    
    'stop
    'On Error Resume Next
    Err.Clear
	
    Dim l_objLog
  
    ' Получаем объект лога из 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
	    
        '// Resolve saa responder ip address
        l_strRespHostname = ResSet.Resource(l_Indx).Attrib("responder_ip_address").Value
        l_strRespIP = ResSet.GetIPAddressResolve(l_strRespHostname)
        If Len(l_strRespIP) = 0 Then
            ResSet.ScriptError = -1
	          l_strErr = "Неправильно задано имя или IP адрес ответчика для " & l_strHostnameSaa
            ResSet.ScriptErrorInfo = l_strErr
            Exit Sub
        End If
        ResSet.Resource(l_Indx).Attrib("responder_ip_address").Value = l_strRespIP
        l_SnmpRQ.ResponderIP = l_strRespIP
	    
        l_bConnectToExisting = ResSet.Resource(l_Indx).Attrib("connect_exist").Value
	      l_iRespPort = ResSet.Resource(l_Indx).Attrib("target_port").Value
        
        If l_bConnectToExisting = False  Then
	          l_strMesg = l_strHostnameSaa & "-" & Chr(62) & l_strRespHostname & ":" & l_iRespPort & " 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 & "-" & Chr(62) & l_strRespHostname & ":" & l_iRespPort & " 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_strRespHostname & ":" & l_iRespPort & " Create Test OK!"
        Else
            l_strMesg = l_strHostnameSaa & "-" & Chr(62) & l_strRespHostname & ":" & l_iRespPort & " Check Existing Test [" & l_lTestID & "] OK!"
        End If
        ResSet.SendProgressMessage(l_strMesg)
	    
        If l_bConnectToExisting = False Then
            l_strMesg = l_strHostnameSaa & "-" & Chr(62) & l_strRespHostname & ":" & l_iRespPort & " 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_strRespHostname & ":" & l_iRespPort & " 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_strRespHostname)
        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)	

        '// MOS
        l_strEventName = "MOS"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "MOS", "")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
        'TLError =  ResSet.AddTrafficLight(l_strAlias, l_strMetricsName, l_strMetricsName, "Average", "<", 2.6, 3.1, 3.6, 4.07)	

        '// ICPIF
        l_strEventName = "ICPIF"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "ICPIF", "")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
        'TLError =  ResSet.AddTrafficLight(l_strAlias, l_strMetricsName, l_strMetricsName, "Average", ">", 45, 30, 20, 10)	

        '// Link Round-Trip Latency
        l_strEventName = "Delay"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(usec)", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "delay", "(usec)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
        TLError =  ResSet.AddTrafficLight(l_strAlias, l_strMetricsName, l_strMetricsName, "Average", ">", 1000000, 1000000, 400000, 100000)	

        '//PacketLoss
        l_strEventName = "Packet Loss"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(%)", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "packets_loss", "(%)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
        TLError =  ResSet.AddTrafficLight(l_strAlias, l_strMetricsName, l_strMetricsName, "Average", ">", 0.1, 0.1, 0.1, 0.1)	
	    
        '// The Jitter total (synthesized)
        l_strEventName = "Jitter"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(usec)", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "jitter_total", "(usec)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
        TLError =  ResSet.AddTrafficLight(l_strAlias, l_strMetricsName, l_strMetricsName, "Average", ">", 50000, 50000, 50000, 50000)	
	    
        '// The number of RTT's that were successfully measured
        l_strEventName = "The Number of Round Trip Operations"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "nrtts_op", "")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
        TLError =  ResSet.AddTrafficLight(l_strAlias, l_strMetricsName, l_strMetricsName, "Average", "<", 50, 70, 85, 95)	
	    
        '// JitterPositivSD
        l_strEventName = "JitterPositiveSD"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(usec)", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "jitterpositivesd", "(usec)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
    
        '// JitterNegativSD
        l_strEventName = "JitterNegativSD"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(usec)", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "jitternegativesd", "(usec)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
    
        '// JitterPositivDS
        l_strEventName = "JitterPositivDS"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(usec)", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "jitterpositivds", "(usec)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)

        '// JitterNegativDS
        l_strEventName = "JitterNegativDS"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(usec)", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "jitternegativds", "(usec)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)

        '// PacketLossSD
        l_strEventName = "PacketLossSD"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "packetlosssd", "")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)

        '// PacketLossDS
        l_strEventName = "PacketLossDS"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "packetlossds", "")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)

        '// PacketOutOfSequence
        l_strEventName = "PacketOutOfSequence"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "packetoutofsequence", "")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)

        '// PacketMIA
        l_strEventName = "PacketMIA"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "packetmia", "")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)

        '// PacketLateArrival
        l_strEventName = "PacketLateArrival"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "PacketLateArrival", "")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)

        '// NumOfOW
        l_strEventName = "NumOfOW"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "numofow", "")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)

        '// OWlatencySD
        l_strEventName = "OWlatencySD"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(usec)", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "owlatencysd", "(usec)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)

        '// OWlatencyDS
        l_strEventName = "OWlatencyDS"
        l_strMetricsName = GetMetricsName(ResSet, l_Indx, l_strEventName, "(usec)", l_strHostnameSaa, l_strRespHostname)
        l_strAlias = GetEventName(ResSet, l_Indx, l_strEventName, "owlatencyds", "(usec)")
        SLAError = ResSet.EventAdd(l_strMetricsName, l_strAlias, Unid)
	    
    Next	

End Sub

' ==================================================================================

Function GetMetricsName(ByRef ResSet, l_iNum, strEventName, strUnits, strHostnameSaa, strRespHostname)
    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("responder_ip_address").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) & strRespHostname & "] " & 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("responder_ip_address").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)

    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
    
    SnmpRQ.ResponderPort    = ResSet.Resource(l_iNum).Attrib("target_port").Value
    SnmpRQ.TestPeriod       = ResSet.Resource(l_iNum).Attrib("test_period_sec").Value
    SnmpRQ.AdminTimeOut     = ResSet.Resource(l_iNum).Attrib("admin_timeout").Value
    
    '// TOS
    SnmpRQ.TrafficPriority  = ResSet.Resource(l_iNum).Attrib("priority").Value
    
    SnmpRQ.PacketSize       = ResSet.Resource(l_iNum).Attrib("packet_size").Value
    SnmpRQ.InterPacketDelay = ResSet.Resource(l_iNum).Attrib("inter_packet_delay").Value
    SnmpRQ.JitterThreshold  = ResSet.Resource(l_iNum).Attrib("jitter_threshold").Value
    SnmpRQ.PaketsNumber     = ResSet.Resource(l_iNum).Attrib("number_of_packets").Value
    
    SnmpRQ.CodecType        = ResSet.Resource(l_iNum).Attrib("Codec_Type").Value
    SnmpRQ.IcpifAdvFactor   = ResSet.Resource(l_iNum).Attrib("ICPIFAdvFactor").Value
    
    SnmpRQ.SnmpTimeOut      = ResSet.Resource(l_iNum).Attrib("snmp_timeout").Value
    SnmpRQ.SnmpRetryCount   = ResSet.Resource(l_iNum).Attrib("snmp_retry_count").Value

    l_bConnectToExisting    = ResSet.Resource(l_Indx).Attrib("connect_exist").Value
    If lTestID <> 0 Then 
        SnmpRQ.TestID       = lTestID
    End If
          
    SnmpRQ.RttMonAdminTag   = ResSet.Resource(l_iNum).Attrib("saa_admin_tag").Value
    
    'stop
    
    If l_bConnectToExisting = False Then
        CreateSAATest = SnmpRQ.CreateTest()
    Else
        CreateSAATest = SnmpRQ.CheckExitingTest()
        'CreateSAATest = SnmpRQ.CheckExitingTest(l_lOperTime, l_lRttNum)
        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)
    
    '// Init Saa Tests Array
    Dim l_objLog
    
    ' Получаем объект лога из ResSet
    Set l_objLog = ResSet.Log     
    
    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("responder_ip_address").Value
	    
        '// Create Jitter 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), 0)   
                    End If
                    
                    SendSLaEvens ResSet, ResInfo_SaaTests_arr(l_Indx), l_Indx, False
                    
                    SetSnmpAvailability ResSet, l_Indx, 100
                    l_strEventName = "The Number of Round Trip Operations"
                    SendSLaEvent ResSet, l_Indx, l_strEventName, "nrtts_op", 0, True
                    
            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_dMOS
    
    If Not IsStatValid Then
        SetSnmpAvailability ResSet, lIndx, 0    
    Else 
        SetSnmpAvailability ResSet, lIndx, 100
    End If
    
    '// Link Round-Trip Latency
    SendSLaEvent ResSet, lIndx, "Delay", "delay", SnmpObj.Delay, IsStatValid

    '//Packet Loss
    SendSLaEvent ResSet, lIndx, "Packet Loss", "packets_loss", SnmpObj.PacketLoss, IsStatValid

    '// The Jitter total (synthesized)
    l_strEventName = "Jitter"
    SendSLaEvent ResSet, lIndx, "Jitter", "jitter_total", SnmpObj.Jitter, IsStatValid
	
    '// The number of RTT's that were successfully measured
    l_strEventName = "The Number of Round Trip Operations"
    SendSLaEvent ResSet, lIndx, l_strEventName, "nrtts_op", SnmpObj.SAANumRtts, IsStatValid
	
    '// JitterPositivSD
    l_strEventName = "JitterPositiveSD"
    SendSLaEvent ResSet, lIndx, l_strEventName, "jitterpositivesd", SnmpObj.JitterPositivSD, IsStatValid

    '// JitterNegativSD
    l_strEventName = "JitterNegativSD"
    SendSLaEvent ResSet, lIndx, l_strEventName, "jitternegativesd", SnmpObj.JitterNegativSD, IsStatValid

    '// JitterPositivDS
    l_strEventName = "JitterPositivDS"
    SendSLaEvent ResSet, lIndx, l_strEventName, "jitterpositivds", SnmpObj.JitterPositivDS, IsStatValid

    '// JitterNegativDS
    l_strEventName = "JitterNegativDS"
    SendSLaEvent ResSet, lIndx, l_strEventName, "jitternegativds", SnmpObj.JitterNegativDS, IsStatValid

    '// PacketLossSD
    l_strEventName = "PacketLossSD"
    SendSLaEvent ResSet, lIndx, l_strEventName, "packetlosssd", SnmpObj.PacketLossSD, IsStatValid

    '// PacketLossDS
    l_strEventName = "PacketLossDS"
    SendSLaEvent ResSet, lIndx, l_strEventName, "packetlossds", SnmpObj.PacketLossDS, IsStatValid

    '// PacketOutOfSequence
    l_strEventName = "PacketOutOfSequence"
    SendSLaEvent ResSet, lIndx, l_strEventName, "packetoutofsequence", SnmpObj.PacketOutOfSequence, IsStatValid

    '// PacketMIA
    l_strEventName = "PacketMIA"
    SendSLaEvent ResSet, lIndx, l_strEventName, "packetmia", SnmpObj.PacketMIA, IsStatValid

    '// PacketLateArrival
    l_strEventName = "PacketLateArrival"
    SendSLaEvent ResSet, lIndx, l_strEventName, "PacketLateArrival", SnmpObj.PacketLateArrival, IsStatValid

    '// NumOfOW
    l_strEventName = "NumOfOW"
    SendSLaEvent ResSet, lIndx, l_strEventName, "numofow", SnmpObj.NumOfOW, IsStatValid
    
    '// OWlatencySD
    l_strEventName = "OWlatencySD"
    SendSLaEvent ResSet, lIndx, l_strEventName, "owlatencysd", SnmpObj.OWlatencySD, IsStatValid

    '// OWlatencyDS
    l_strEventName = "OWlatencyDS"
    SendSLaEvent ResSet, lIndx, l_strEventName, "owlatencyds", SnmpObj.OWlatencyDS, IsStatValid
    
    '// MOS
    l_dMOS = SnmpObj.MOS    
    If SnmpObj.MOS <> ResSet.BadValue Then
        l_dMOS = SnmpObj.MOS/100.0
    End If
    
    l_strEventName = "MOS (Mean Opinion Scores)"
    SendSLaEvent ResSet, lIndx, l_strEventName, "MOS", l_dMOS, IsStatValid
    
    '// ICPIF
    l_strEventName = "ICPIF"
    SendSLaEvent ResSet, lIndx, l_strEventName, "ICPIF", SnmpObj.ICPIF, 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>
