<?xml version="1.0" encoding="windows-1251"?>
<document type="SelFTrendxTest" version="0.0" xmlns:m="xTest">
     <xTest type="USER_SCRIPT" alias="Node Availability WAN" 
            TitleRus="Тест доступности устройств в сетях WAN" 
            TitleRootRus="Тесты доступности ресурсов (только для WinXP и выше)" 
            TitleEng="Availability Test for WAN" 
            TitleRootEng="Availability Tests (for WinXP and above)" 
            TrafficLightsName="Availability Test for WAN"
            Version="2.1">
	<Files>
		<File type="conf" name="VB.NodeAvailabilityWAN.xTest.xml"/>
		<File type="help" name="VB.NodeAvailabilityLAN.xTest.chm::/VB.NodeAvailabilityLAN.xTest.html"/>
		<File type="dll" name="ST_SCTest.dll"/>
	</Files>
       
  <Keywords>
   <Keyword>Ping</Keyword>
   <Keyword>Доступность</Keyword>
   <Keyword>WAN</Keyword>
  </Keywords>

  <xTestProps>
        <log_level_def>0</log_level_def>
        <truncate_log>1</truncate_log>
        <AverInervDuration>40</AverInervDuration>
	    <discovery_func>OnDiscovery</discovery_func>
	    <work_func>OnDataReceived</work_func>
	</xTestProps>

    <parameters TitleRus="Список сетевых устройств:" TitleEng="Network Devices:">
        <resources>
           <resource_id TitleRus="Имя или IP-адрес устройства" TitleEng="Name or IP-address"></resource_id>
        </resources>
        
        <resource_attribs TitleRus="Список параметров:" TitleEng="Parameters List:" SubTitleRus="Параметр" SubTitleEng="Parameter" >
        </resource_attribs>
    </parameters>

    <popupdisplay>
	    <description ru="Тест ICMP-доступности" en="Test ICMP-Availability"></description>
        <display_item ru="Худшая доступность (%)" en="Worst Availability (%)" alias="WorstAvailability" sign="&lt;">1 61 84 100</display_item>
    </popupdisplay>

<Script language="VBScript">
<!--

Sub OnDiscovery(ByRef ResSet)

	On Error Resume Next
	Err.Clear
	
	ResSet.LogMsg("*** Start Sub OnDiscovery ***")
    ResSet.SendProgressMessage("Start Script")
	ResCount=ResSet.Count
	Unid = ResSet.UnidBase

	Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}//./root/cimv2")
	Set cPingResults = objWMI.ExecQuery("Select * FROM Win32_PingStatus WHERE Address = 'localhost'")

	For Each oPingResult In cPingResults
		If Err.Number <> 0 Then
        	ResSet.ScriptError = -1
   			ResSet.ScriptErrorInfo = "Ошибка при запуске теста. Подробности в файле: xfiles_log.txt"
   			ResSet.LogMsg ("*** Start Description Error ***")
   			ResSet.LogMsg ("Error number: " & Err.Number)
   			ResSet.LogMsg ("Error Description: " & Err.Description)
   			ResSet.LogMsg ("*** End Description Error ***")
   			Exit Sub
   		End If
	Next

	strWhere = ""

	For i=0 To ResCount - 1
		ICMPDeviceName = ResSet.Resource(i).Name
		If strWhere = "" Then
			strWhere = "Address='" & ICMPDeviceName & "'"
		Else
			strWhere=strWhere + " Or Address='" & ICMPDeviceName & "'"
		End If
	Next
	strSelect="Select * from Win32_PingStatus Where (" & strWhere & "and Timeout=12000)"
	ResSet.LogMsg ("ExecQuery: " & strSelect)
	Set cPingResults = objWMI.ExecQuery(strSelect)
	
	For Each oPingResult In cPingResults
		If Err.Number <> 0 Then
        	ResSet.ScriptError = -1
   			ResSet.ScriptErrorInfo = "Ошибка при запуске теста. Подробности в файле: xfiles_log.txt"
   			ResSet.LogMsg ("*** Start Description Error ***")
   			ResSet.LogMsg ("Error number: " & Err.Number)
   			ResSet.LogMsg ("Error Description: " & Err.Description)
   			ResSet.LogMsg ("*** End Description Error ***")
   			Exit Sub
   		Else
   			SLAEventName = "Availability " & LCase(oPingResult.Address) & " (" & oPingResult.ProtocolAddress & ") (%)"
   			SLAAliasName = oPingResult.Address
   			Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
   			Unid = Unid + 1
   		End If
	Next
	
	Error = ResSet.EventAdd("Worst Availability (%)", "WorstAvailability", Unid)
	ResSet.LogMsg("*** End Sub OnDiscovery ***")
End Sub

Sub OnDataReceived(ByRef ResSet)

	On Error Resume Next
	Err.Clear
	
	ResSet.LogMsg("*** Start Sub OnDataReceived ***")
	ResCount=ResSet.Count

	Set objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}//./root/cimv2")

	strWhere = ""

	For i=0 To ResCount - 1
		ICMPDeviceName = ResSet.Resource(i).Name
		If strWhere = "" Then
			strWhere = "Address='" & ICMPDeviceName & "'"
		Else
			strWhere=strWhere + " Or Address='" & ICMPDeviceName & "'"
		End If
	Next
	strSelect="Select * from Win32_PingStatus Where (" & strWhere & "And Timeout=12000)"

	Do While Not ResSet.StopTest

		WorstAvailability = 100
		Set cPingResults = objWMI.ExecQuery(strSelect)	

		For Each oPingResult In cPingResults
			If Err.Number <> 0 Then
				ResSet.LogMsg("Error number: " & Err.Number)
				ResSet.LogMsg("Error Description: " & Err.Description)
				Err.Clear
				WorstAvailability = 0
				Exit For
			End If
			If oPingResult.StatusCode = 0 Then
				ResSet.Events(oPingResult.Address).Value = 100
			Else
				ResSet.Events(oPingResult.Address).Value = 0
				WorstAvailability = 0
			End If
		Next
		ResSet.Events("WorstAvailability").Value = WorstAvailability
		ResSet.SendSLaEvents()
		If ResSet.StopTest Then Exit Do
    	ResSet.Sleep 6950
    Loop
End Sub

-->
</Script>
    </xTest>
</document>
