<?xml version="1.0" encoding="windows-1251"?>
<document type="SelFTrendxTest">
  <xTest type="USER_SCRIPT" 
            alias="Computers Performance" 
            TitleRus="Тест оценки 'здоровья' сервера MS Windows" 
            TitleRootRus="Тесты оценки 'здоровья' серверов MS Windows WMI" 
            TitleEng="MS Windows Server Performance Test" 
            TitleRootEng="MS Windows Servers Performance Tests WMI" 
            Version="1.13">
    <Files>
		  <File type="conf" name="VB.WP.Computerperformance.XFiles.xml"/>
  		<File type="help" name="SLA-ONProbeHelp.html"/>
	  	<File type="dll" name="ST_SCTest.dll"/>
    </Files>
<!--
    $Id: VB.WP.ComputerPerformance.XFiles.xml,v 1.6 2009/04/27 06:36:43 alex_l Exp $            
    $ v 1.12 2009/04/21 bag PLSWbemRefresherComponent used $
-->
    <xTestProps>
      <log_level_def>5</log_level_def>
      <truncate_log>0</truncate_log>
      <AverInervDuration>60</AverInervDuration>
      <discovery_func>OnDiscovery</discovery_func>
      <work_func>OnDataReceived</work_func>
    </xTestProps>

    <Keywords>
      <Keyword>WMI</Keyword>
      <Keyword>Windows</Keyword>
      <Keyword>Мониторинг серверов</Keyword>      
    </Keywords>

    <parameters TitleRus="Список контролируемых ресурсов:" TitleEng="Servers List:">
      <resources>
        <resource_id TitleRus="Имя Windows компьютера" TitleEng="Name"></resource_id>
      </resources>
        
      <common_attribs TitleRus="Список параметров (общие):" TitleEng="Parameters List (common):" SubTitleRus="Параметр" SubTitleEng="Parameter">            
            <!-- Type: "String", "Bool", "Integer", "Double" -->
        <Attrib Type="String" TitleRus="Пороговые значения метрики 'Объем оперативной памяти (bytes)' (через ;)" TitleEng="Memory Available Bytes' (; separated)" Alias="RAM">"4000000;16000000;32000000;64000000"</Attrib>
        <Attrib Type="String" TitleRus="Пороговые значения метрики 'Среднее число страниц памяти в сек. ' (через ;)" TitleEng="Memory\Pages/sec' (; separated)" Alias="MPages">"120;90;60;40"</Attrib>
        <Attrib Type="String" TitleRus="Пороговые значения метрики 'Использование файла подкачки (%)' (через ;)" TitleEng="Paging File(_Total)\% Usage' (; separated)" Alias="PagingF">"90;80;70;60"</Attrib>
        <Attrib Type="String" TitleRus="Пороговые значения метрики 'Время выполнения процессором полезной работы (%)' (через ;)" TitleEng="Processor(‘instances’)\% Processor Time' (; separated)" Alias="PTime">"85;70;45;30"</Attrib>
        <Attrib Type="String" TitleRus="Пороговые значения метрики 'Запрос данных, находящихся в кэш-памяти (%)' (через ;)" TitleEng="Cache\Data Map Hits %' (; separated)" Alias="DMAp">"20;40;60;80"</Attrib>
        <Attrib Type="String" TitleRus="Пороговые значения метрики 'Время чтение данных дисковым устройством (%)' (через ;)" TitleEng="\PhysicalDisk(‘instances’)\% Disk Read Time' (; separated)" Alias="DiskRead">"25;15;10;5"</Attrib>
        <Attrib Type="String" TitleRus="Пороговые значения метрики 'Время записи данных дисковым устройством (%)' (через ;)" TitleEng="PhysicalDisk(‘instances’)\% Disk Write Time' (; separated)" Alias="DiskWrite">"50;40;30;20"</Attrib>
        <Attrib Type="String" TitleRus="Пороговые значения метрики 'Длина очереди на чтение к диску' (через ;)" TitleEng="\PhysicalDisk(‘instances’)\Avg . Disk Read Queue Length' (; separated)" Alias="DiskReadQ">"20;15;10;5"</Attrib>
        <Attrib Type="String" TitleRus="Пороговые значения метрики 'Длина очереди на запись к диску (через ;)" TitleEng="\PhysicalDisk(‘instances’)\Avg . Disk Write Queue Length' (; separated)" Alias="DiskWriteQ">"20;15;10;5"</Attrib>
      </common_attribs>
		
      <resource_attribs TitleRus="Список параметров:" TitleEng="Parameters List:" SubTitleRus="Параметр" SubTitleEng="Parameter" >
        <Attrib Type="Enum" TitleRus="Тип аутентификации" TitleEng="Type of authentication" Alias="Auth">
          <Attrib_enum TitleRus="Использовать встроенную систему безопасности Windows NT" TitleEng="Use Windows NT Integrated security" Selected="Yes">"1"</Attrib_enum>
          <Attrib_enum TitleRus="Использовать заданные имя пользователя и пароль" TitleEng="Use a specific user name and password" Selected="No">"2"</Attrib_enum>
        </Attrib>
        <Attrib Type="String" TitleRus="Имя пользователя" TitleEng="Username" Alias="User">user</Attrib>
        <Attrib Type="SecureString" TitleRus="Пароль" TitleEng="Password" Alias="Pass">pass</Attrib>
      </resource_attribs>
    </parameters>

    <popupdisplay>
      <description ru="Тест оценки 'здоровья' сервера MS Windows" en="MS Windows Server Performance Test"></description>
      <popupdisplay>
        <!-- function: "EventCount", "Average", "Maximum", "Minimum" -->
      </popupdisplay>
    </popupdisplay>

<Script language="VBScript">
<!--
Option Explicit

Sub OnDiscovery(ByRef ResSet)
    'stop
	
    On Error Resume Next
    Err.Clear
	
    Dim l_strMsg, WMI_Ojects, objRefresher, objMemory, objPagingFile, objPhysicalDisk, objCache, objProcessor
    Dim objWMIService, objItem, CompName, SLAEventName ,SLAAliasName, Auth, User, Pass
    Dim l_strTLName_en, l_strTLName_ru, RAM, MPages, PagingF, PTime, DMAp, DiskRead, DiskWrite, DiskReadQ, DiskWriteQ, Unid, i, ResCount, Error, TLError 
	
    'Ведение лога
    ResSet.LogMsg("*** Start Sub OnDiscovery ***")  
    ResSet.SendProgressMessage("Start Discovery...")
    'количество ресурсов
    ResCount=ResSet.Count     
    Unid = ResSet.UnidBase
    ResSet.LogMsg("ResSet.Count: " & ResSet.Count & " ResSet.UnidBase: " & ResSet.UnidBase)
	
    Set WMI_Ojects = CreateObject("DataTransfer.StorageCollection")
	
    'переменные(массив) характеристик
    RAM = GetThresholdForTL (ResSet.CommonProp.Attrib("RAM").Value)
    MPages = GetThresholdForTL (ResSet.CommonProp.Attrib("MPages").Value)
    PagingF = GetThresholdForTL (ResSet.CommonProp.Attrib("PagingF").Value)
    PTime = GetThresholdForTL (ResSet.CommonProp.Attrib("PTime").Value)
    DMAp = GetThresholdForTL (ResSet.CommonProp.Attrib("DMAp").Value)
    DiskRead = GetThresholdForTL (ResSet.CommonProp.Attrib("DiskRead").Value)
    DiskWrite = GetThresholdForTL (ResSet.CommonProp.Attrib("DiskWrite").Value)
    DiskReadQ = GetThresholdForTL (ResSet.CommonProp.Attrib("DiskReadQ").Value)
    DiskWriteQ = GetThresholdForTL (ResSet.CommonProp.Attrib("DiskWriteQ").Value)

    For i=0 To ResCount - 1
        'имя компьютера
        CompName=ResSet.Resource(i).Name   
        ResSet.SendProgressMessage("Check: " & CompName & ". Just a second, please")	
        Auth = ResSet.Resource(i).Attrib("Auth").Value
        User = ResSet.Resource(i).Attrib("User").Value
        Pass = ResSet.Resource(i).Attrib("Pass").Value

        Set objRefresher = CreateObject("PLSWbemRefresherComponent.PLSWbemRefresher")
		
        If auth = "1" Then
            Set objWMIService = objRefresher.GetObject(CompName,"root\CIMV2",vbNull,vbNull,vbNull,vbNull,0,vbNull)
        Else
            Set objWMIService = objRefresher.GetObject(CompName,"root\CIMV2",User,Pass,vbNull,vbNull,0,vbNull)
        End If
		
        'Обработка исключений	
        If Err.Number<>0 Then      
            ResSet.ScriptError = -1
            ResSet.ScriptErrorInfo = Err.Description & "Ошибка при запуске теста. Нет возможности работать с устройством: '" & CompName
            ResSet.LogMsg ("*** Start Description Error ***")
            ResSet.LogMsg ("Computer name: " & CompName)
            ResSet.LogMsg ("Error number: " & Err.Number)
            ResSet.LogMsg ("Error Description: " & Err.Description)
            ResSet.LogMsg ("*** End Description Error ***")
            Exit Sub
        End If
		
        Set objMemory = objRefresher.Add (objWMIService, "Win32_PerfFormattedData_PerfOS_Memory=@").Object
        Set objPagingFile = objRefresher.Add (objWMIService, "Win32_PerfFormattedData_PerfOS_PagingFile.Name='_Total'").Object
        Set objPhysicalDisk = objRefresher.AddEnum (objWMIService, "Win32_PerfFormattedData_PerfDisk_PhysicalDisk").ObjectSet
        Set objCache = objRefresher.Add (objWMIService, "Win32_PerfFormattedData_PerfOS_Cache=@").Object
        Set objProcessor = objRefresher.AddEnum (objWMIService, "Win32_PerfFormattedData_PerfOS_Processor").ObjectSet
		
        objRefresher.Refresh
        ResSet.Sleep 1000
        objRefresher.Refresh

        l_strMsg = "Vbs: " & CompName & " Memory.AvailableBytes: " & objMemory.AvailableBytes
        ResSet.LogMsg (l_strMsg)
		
        l_strMsg = "Vbs: " & CompName & " Memory.PagesPersec: " & objMemory.PagesPersec
        ResSet.LogMsg (l_strMsg)
			
        l_strMsg = "Vbs: " & CompName & " PagingFile.PercentUsage: " & objPagingFile.PercentUsage
        ResSet.LogMsg (l_strMsg)
		
        l_strMsg = "Vbs: " & CompName & " Cache.DataMapHitsPercent: " & objCache.DataMapHitsPercent
        ResSet.LogMsg (l_strMsg)
			
        If Err.Number<>0 Then
            ResSet.ScriptError = -1
            ResSet.ScriptErrorInfo = Err.Description & "2. Ошибка при запуске теста. Нет возможности работать с устройством: '" & CompName & "'. Подробности в файле: xfiles_log.txt"
            ResSet.LogMsg ("*** Start Description Error ***")
            ResSet.LogMsg ("Computer name: " & CompName)
            ResSet.LogMsg ("Error number: " & Err.Number)
            ResSet.LogMsg ("Error Description: " & Err.Description)
            ResSet.LogMsg ("*** End Description Error ***")
            Exit Sub
        End If

        'Availability(%)
        SLAEventName = "[" & UCase(CompName) & "] Availability(%)"
        SLAAliasName = "Availability_" &  UCase(CompName)
        Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
        l_strTLName_ru = SLAEventName
        l_strTLName_en = SLAEventName
        TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", "<", 50, 70, 80, 99)
        Unid = Unid + 1

        'Available Bytes
        SLAEventName = "[" & UCase(CompName) & "] Memory\Available Bytes"
        SLAAliasName = "Size_of_RAM_" &  UCase(CompName)
        Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
        l_strTLName_ru = SLAEventName
        l_strTLName_en = SLAEventName
        TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", "<", RAM(0), RAM(1), RAM(2), RAM(3))
        Unid = Unid + 1

        'Pages Per Second
        SLAEventName = "[" & UCase(CompName) & "] Memory\Pages/sec"
        SLAAliasName = "Pages_per_Sec_" &  UCase(CompName)
        Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
        l_strTLName_ru = SLAEventName
        l_strTLName_en = SLAEventName
        TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", MPages(0), MPages(1), MPages(2), MPages(3))
        Unid = Unid + 1
	
        'PagingFile
        SLAEventName = "[" & UCase(CompName) & "] Paging File(_Total)\% Usage"
        SLAAliasName = "Paging_file_Usage_" &  UCase(CompName)
        Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
        l_strTLName_ru = SLAEventName
        l_strTLName_en = SLAEventName
        TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", PagingF(0), PagingF(1), PagingF(2), PagingF(3))
        Unid = Unid + 1
		
        'Cache 
        SLAEventName = "[" & UCase(CompName) & "] Cache\Data Map Hits %"
        SLAAliasName = "DataMap_Hits_" &  UCase(CompName)
        Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid)
        l_strTLName_ru = SLAEventName 
        l_strTLName_en = SLAEventName 
        TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", "<", DMaP(0), DMaP(1), DMaP(2), DMaP(3))
        Unid = Unid + 1
		
        'Processor
        For Each objItem in objProcessor
            l_strMsg = "Vbs: " & CompName & " Processor(" & objItem.Name & ") time%: " & objItem.PercentProcessorTime
            ResSet.LogMsg (l_strMsg)

            If Err.Number<>0 Then
                ResSet.ScriptError = -1
                ResSet.ScriptErrorInfo = Err.Description & "Ошибка при запуске теста. Нет возможности работать с устройством: '" & CompName & "'. Подробности в файле: xfiles_log.txt"
                ResSet.LogMsg ("*** Start Description Error ***")
                ResSet.LogMsg ("Computer name: " & CompName)
                ResSet.LogMsg ("Error number: " & Err.Number)
                ResSet.LogMsg ("Error Description: " & Err.Description)
                ResSet.LogMsg ("*** End Description Error ***")
                Exit Sub
            End If
			
            If objItem.Name <> "_Total" Then
                'Percent Processor Time			
                SLAEventName = "[" & UCase(CompName) & "] Processor(" & objItem.Name & ")" & "\% Processor Time"
                SLAAliasName = "Processor_Time_" &  UCase(CompName) & "_Processor" & objItem.Name
                Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid) 
                l_strTLName_ru = SLAEventName
                l_strTLName_en = SLAEventName
                TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", PTime(0), PTime(1), PTime(2), PTime(3))
                Unid = Unid + 1
            End If
        Next
        'Processor end
	
        'PhysicalDisk
        For Each objItem in objPhysicalDisk
            l_strMsg = "Vbs: " & CompName & " PhysicalDisk(" & objItem.Name & ") PercentDiskReadTime%: " & objItem.PercentDiskReadTime
            ResSet.LogMsg (l_strMsg)

            l_strMsg = "Vbs: " & CompName & " PhysicalDisk(" & objItem.Name & ") AvgDiskReadQueueLength: " & objItem.AvgDiskReadQueueLength
            ResSet.LogMsg (l_strMsg)

            l_strMsg = "Vbs: " & CompName & " PhysicalDisk(" & objItem.Name & ") PercentDiskWriteTime%: " & objItem.PercentDiskWriteTime
            ResSet.LogMsg (l_strMsg)

            l_strMsg = "Vbs: " & CompName & " PhysicalDisk(" & objItem.Name & ") AvgDiskWriteQueueLength: " & objItem.AvgDiskWriteQueueLength
            ResSet.LogMsg (l_strMsg)

            If Err.Number<>0 Then
                ResSet.ScriptError = -1
                ResSet.ScriptErrorInfo = Err.Description & "Ошибка при запуске теста. Нет возможности работать с устройством: '" & CompName & "'. Подробности в файле: xfiles_log.txt"
                ResSet.LogMsg ("*** Start Description Error ***")
                ResSet.LogMsg ("Computer name: " & CompName)
                ResSet.LogMsg ("Error number: " & Err.Number)
                ResSet.LogMsg ("Error Description: " & Err.Description)
                ResSet.LogMsg ("*** End Description Error ***")
                Exit Sub
            End If
			
            If objItem.Name <> "_Total" Then
                'Percent Disk Read Time
                SLAEventName = "[" & UCase(CompName) & "] PhysicalDisk(‘" & objItem.Name & "’)\% Disk Read Time"
                SLAAliasName = "PercentDiskReadTime_" &  UCase(CompName) & "_" & objItem.Name
                Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid) 
                l_strTLName_ru = SLAEventName
                l_strTLName_en = SLAEventName
                TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", DiskRead(0), DiskRead(1), DiskRead(2), DiskRead(3))
                Unid = Unid + 1
				
                'Disk Read Queue Length
                SLAEventName = "[" & UCase(CompName) & "] PhysicalDisk(‘" & objItem.Name & "’)\Avg . Disk Read Queue Length"
                SLAAliasName = "AvgDiskReadQueueLength_" &  UCase(CompName) & "_" & objItem.Name
                Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid) 
                l_strTLName_ru = SLAEventName
                l_strTLName_en = SLAEventName
                TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", DiskReadQ(0), DiskReadQ(1), DiskReadQ(2), DiskReadQ(3))
                Unid = Unid + 1

                'Percent Disk Write Time
                SLAEventName = "[" & UCase(CompName) & "] PhysicalDisk(‘" & objItem.Name & "’)\% Disk Write Time"
                SLAAliasName = "PercentDiskWriteTime_" &  UCase(CompName) & "_" & objItem.Name
                Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid) 
                l_strTLName_ru = SLAEventName
                l_strTLName_en = SLAEventName
                TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", DiskWrite(0), DiskWrite(1), DiskWrite(2), DiskWrite(3))
                Unid = Unid + 1
				
                'Disk Write Queue Length
                SLAEventName = "[" & UCase(CompName) & "] PhysicalDisk(‘" & objItem.Name & "’)\Avg . Disk Write Queue Length"
                SLAAliasName = "AvgDiskWriteQueueLength_" &  UCase(CompName) & "_" & objItem.Name
                Error = ResSet.EventAdd(SLAEventName, SLAAliasName, Unid) 
                l_strTLName_ru = SLAEventName
                l_strTLName_en = SLAEventName
                TLError = ResSet.AddTrafficLight(SLAAliasName, l_strTLName_ru, l_strTLName_en, "Average", ">", DiskWriteQ(0), DiskWriteQ(1), DiskWriteQ(2), DiskWriteQ(3))
                Unid = Unid + 1
				
            End If
        Next
        'PhysicalDisk  end
	
    Next
    ResSet.LogMsg("*** End Sub OnDiscovery ***")
End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub OnDataReceived(ByRef ResSet)

'    stop
    On Error Resume Next
    Err.Clear

    Dim CompName, SLAEventName ,SLAAliasName, Auth, User, Pass, i, ResCount
    Dim ObjWMIService, ObjLocator, period
    Dim l_ObjConnectorsCollection, l_bConnect, l_strConnectorAlias, l_objRefresher, l_strSLAAliasName
    Dim l_strLogMsg, l_objItem, l_objMemory, l_objPagingFile, l_objCache, l_objProcessor, l_objPhysicalDisk
    Dim l_dAllCount
    Dim l_bSucceededToPing, l_objWMI, l_objPingResults, l_oPingResult

    ResSet.LogMsg ( Timer & ": " & "*** Start Sub OnDataReceived ***")
    ResCount=ResSet.Count
	
    Set l_ObjConnectorsCollection = CreateObject("DataTransfer.StorageCollection")
    Init ResSet, l_ObjConnectorsCollection
	
    ResSet.Sleep(1000)
	
    'Пока не будет произведена остановка теста
    Do While Not ResSet.StopTest        
        If ResSet.IsNewSLaPeriod Then
            period = period + 1
            ResSet.LogMsg ( Timer & ": " & "Start While Loop")

            ResetEvents ResSet
                            			
            For i=0 To ResCount - 1
                Err.Clear
                l_bConnect = True
                
                CompName=ResSet.Resource(i).Name
                
                l_strConnectorAlias = "objRefresher_" & CompName
                Set l_objRefresher = l_ObjConnectorsCollection.Get(l_strConnectorAlias)
                
                'Пингуем компьютер для уменьшения возможного тайм-аута
                l_bSucceededToPing = False
                
                Set l_objWMI = GetObject("winmgmts:{impersonationLevel=impersonate}//./root/cimv2")
                Set l_objPingResults = l_objWMI.ExecQuery("Select * FROM Win32_PingStatus WHERE Address = '" & CompName & "'")
                
                For Each l_oPingResult In l_objPingResults
                    If l_oPingResult.StatusCode = 0 Then
                        l_bSucceededToPing = True
                        Exit For
                    End If
                Next

                If l_bSucceededToPing <> True Then
                    ResSet.LogMsg("Failed to ping: " & CompName)  
                    Err.Raise vbObjectError 
                End If
                
                If Err.Number = 0 Then
                    l_objRefresher.Refresh
                End If
                
                If Err.Number <> 0 Then
                    '//Availability 
                    l_strSLAAliasName = "Availability_" &  UCase(CompName)
                    ResSet.Events(l_strSLAAliasName).Value = 0
                    l_strLogMsg = "OnDataReceived: " & CompName  & " Error: " &  Err.Description & "(" & Err.Number & ")"
                    ResSet.LogMsg(l_strLogMsg)
                    l_bConnect = False
                Else
                    '// Memory
                    l_strConnectorAlias = "objMemory_" & CompName
                    Set l_objMemory = l_ObjConnectorsCollection.Get(l_strConnectorAlias) 
                    l_strSLAAliasName = "Size_of_RAM_" &  UCase(CompName)
                    ResSet.Events(l_strSLAAliasName).Value = l_objMemory.AvailableBytes
                    
                    l_strSLAAliasName = "Pages_per_Sec_" &  UCase(CompName)
                    ResSet.Events(l_strSLAAliasName).Value = l_objMemory.PagesPersec
                    
                    '// PagingFile
                    l_strConnectorAlias = "objPagingFile_" & CompName
                    Set l_objPagingFile = l_ObjConnectorsCollection.Get(l_strConnectorAlias) 
                    l_strSLAAliasName = "Paging_file_Usage_" &  UCase(CompName)                
                    ResSet.Events(l_strSLAAliasName).Value = l_objPagingFile.PercentUsage
                    
                    '// Cache
                    l_strConnectorAlias = "objCache_" & CompName
                    Set l_objCache = l_ObjConnectorsCollection.Get(l_strConnectorAlias) 
                    l_strSLAAliasName = "DataMap_Hits_" &  UCase(CompName)
                    ResSet.Events(l_strSLAAliasName).Value = l_objCache.DataMapHitsPercent

                    '// Processor
                    l_strConnectorAlias = "objProcessor_" & CompName
                    Set l_objProcessor = l_ObjConnectorsCollection.Get(l_strConnectorAlias) 
                    For Each l_objItem in l_objProcessor
                        If Err.Number = 0 Then
                            If l_objItem.Name <> "_Total" Then
                                l_strSLAAliasName = "Processor_Time_" &  UCase(CompName) & "_Processor" & l_objItem.Name
                                ResSet.Events(l_strSLAAliasName).Value = l_objItem.PercentProcessorTime
                            End If
                        Else
                            Exit For   
                        End If
                    Next

                    '// PhysicalDisk  PercentDiskReadTime
                    l_strConnectorAlias = "objPhysicalDisk_" & CompName
                    Set l_objPhysicalDisk = l_ObjConnectorsCollection.Get(l_strConnectorAlias) 
                    For Each l_objItem in l_objPhysicalDisk
                        If Err.Number = 0 Then
                            If l_objItem.Name <> "_Total" Then
                                l_strSLAAliasName = "PercentDiskReadTime_" &  UCase(CompName) & "_" & l_objItem.Name
                                ResSet.Events(l_strSLAAliasName).Value = l_objItem.PercentDiskReadTime
                                l_dAllCount = l_dAllCount + 1.0
                            End If
                        Else
                            Exit For   
                        End If
                    Next
                    
                    '// PhysicalDisk  AvgDiskReadQueueLength
                    For Each l_objItem in l_objPhysicalDisk
                        If Err.Number = 0 Then
                            If l_objItem.Name <> "_Total" Then
                                l_strSLAAliasName = "AvgDiskReadQueueLength_" &  UCase(CompName) & "_" & l_objItem.Name
                                ResSet.Events(l_strSLAAliasName).Value = l_objItem.AvgDiskReadQueueLength
                                l_dAllCount = l_dAllCount + 1.0
                            End If
                        Else
                            Exit For   
                        End If
                    Next
                 
                    '// PhysicalDisk  PercentDiskWriteTime
                    For Each l_objItem in l_objPhysicalDisk
                        If Err.Number = 0 Then
                            If l_objItem.Name <> "_Total" Then
                                l_strSLAAliasName = "PercentDiskWriteTime_" &  UCase(CompName) & "_" & l_objItem.Name
                                ResSet.Events(l_strSLAAliasName).Value = l_objItem.PercentDiskWriteTime
                            End If
                        Else
                            Exit For   
                        End If
                    Next
                 
                    '// PhysicalDisk  AvgDiskWriteQueueLength
                    For Each l_objItem in l_objPhysicalDisk
                        If Err.Number = 0 Then
                            If l_objItem.Name <> "_Total" Then
                                l_strSLAAliasName = "AvgDiskWriteQueueLength_" &  UCase(CompName) & "_" & l_objItem.Name
                                ResSet.Events(l_strSLAAliasName).Value = l_objItem.AvgDiskWriteQueueLength
                            End If
                        Else
                            Exit For   
                        End If
                    Next
                  
                    l_strSLAAliasName = "Availability_" &  UCase(CompName)              
                    ResSet.Events(l_strSLAAliasName).Value = 100.0               
                End If
                
                Set l_objRefresher = Nothing
                Set l_objMemory = Nothing
                Set l_objPagingFile = Nothing
                Set l_objCache = Nothing
                Set l_objProcessor = Nothing
                Set l_objPhysicalDisk = Nothing

'                If Not l_bConnect Then
                    ReinitInitComp ResSet, i, l_ObjConnectorsCollection
'                End If               
                
            Next

            ResSet.SendSLaEvents()
        End if
	    
        ResSet.Sleep(1000)
    Loop
End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Формирование массива из элемента строки,разделенного запятой
Function GetThresholdForTL(l_ThresholdString)       
    Dim arrTL, i

    arrTL = Split(l_ThresholdString, ";")
    If UBound(arrTL) <> 3 Then 
        GetThresholdForTL = "Данные не верны, проверьте правильность введенных пороговых значений в настройках теста - 1"
        Exit Function
    End If
	
    For i = LBound(arrTL) To UBound(arrTL)
        If Not IsNumeric (Trim(arrTL(i))) Then
            GetThresholdForTL = "Данные не верны, проверьте правильность введенных пороговых значений в настройках теста - 2"
            Exit Function
        End If
    Next
	
    GetThresholdForTL = arrTL
End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub ReinitInitComp(ByRef ResSet, l_iIndx, ByRef ref_ObjConnectorsCollection)
    Dim CompName, l_strProcAlias, l_strConnectorAlias, l_objRefresher, Auth, User, Pass
    Dim l_strLogMsg, l_ObjWMIService, l_ObjLocator, l_objMemory, l_objPagingFile, l_objPhysicalDisk, l_objCache, l_objProcessor
    
'    stop
    On Error Resume Next
    Err.Clear

    CompName=ResSet.Resource(l_iIndx).Name

    l_strProcAlias = "objProcess_" & CompName
    ref_ObjConnectorsCollection.Remove(l_strProcAlias)

    l_strConnectorAlias = "objMemory_" & CompName
    ref_ObjConnectorsCollection.Remove(l_strConnectorAlias)
            
    l_strConnectorAlias = "objPagingFile_" & CompName
    ref_ObjConnectorsCollection.Remove(l_strConnectorAlias)

    l_strConnectorAlias = "objCache_" & CompName
    ref_ObjConnectorsCollection.Remove(l_strConnectorAlias)

    l_strConnectorAlias = "objProcessor_" & CompName
    ref_ObjConnectorsCollection.Remove(l_strConnectorAlias)

    l_strConnectorAlias = "objPhysicalDisk_" & CompName
    ref_ObjConnectorsCollection.Remove(l_strConnectorAlias)

    l_strConnectorAlias = "objRefresher_" & CompName
    ref_ObjConnectorsCollection.Remove(l_strConnectorAlias)
    
    Err.Clear

    Auth = Cint(ResSet.Resource(l_iIndx).Attrib("Auth").Value)
    User = ResSet.Resource(l_iIndx).Attrib("User").Value
    Pass = ResSet.Resource(l_iIndx).Attrib("Pass").Value

    l_strLogMsg = "ReinitInitComp: Try To Create connector to Server: " & CompName
    ResSet.LogMsg(l_strLogMsg)

    Set l_objRefresher = CreateObject("PLSWbemRefresherComponent.PLSWbemRefresher")

    If Auth = 1 then
	      Set l_ObjWMIService = l_objRefresher.GetObject(CompName,"root\CIMV2",vbNull,vbNull,vbNull,vbNull,0,vbNull)
    Else
	      Set l_ObjWMIService = l_objRefresher.GetObject(CompName,"root\CIMV2",User,Pass,vbNull,vbNull,0,vbNull)
    End If

    If Err.Number <> 0 Then 
        l_strLogMsg = "ReinitInitComp: " & CompName  & " Error: " &  Err.Description & "(" & Err.Number & ")"
        ResSet.LogMsg(l_strLogMsg)
        Exit Sub
    End If
    l_strLogMsg = "ReinitInitComp: Ok!Try to get perf counters from Server: " & CompName
    ResSet.LogMsg(l_strLogMsg)

    Set l_objMemory = l_objRefresher.Add (l_ObjWMIService, "Win32_PerfFormattedData_PerfOS_Memory=@").Object
    Set l_objPagingFile = l_objRefresher.Add (l_ObjWMIService, "Win32_PerfFormattedData_PerfOS_PagingFile.Name='_Total'").Object
    Set l_objPhysicalDisk = l_objRefresher.AddEnum (l_ObjWMIService, "Win32_PerfFormattedData_PerfDisk_PhysicalDisk").ObjectSet
    Set l_objCache = l_objRefresher.Add (l_ObjWMIService, "Win32_PerfFormattedData_PerfOS_Cache=@").Object
    Set l_objProcessor = l_objRefresher.AddEnum (l_ObjWMIService, "Win32_PerfFormattedData_PerfOS_Processor").ObjectSet

    If Err.Number <> 0 Then 
        l_strLogMsg = "ReinitInitComp: " & CompName  & " Error: " &  Err.Description & "(" & Err.Number & ")"
        ResSet.LogMsg(l_strLogMsg)
        Exit Sub
    End If
    
    l_objRefresher.AutoReconnect = False

    l_strConnectorAlias = "objRefresher_" & CompName
    ref_ObjConnectorsCollection.Add l_strConnectorAlias, l_objRefresher
    
    l_strConnectorAlias = "objMemory_" & CompName
    ref_ObjConnectorsCollection.Add l_strConnectorAlias, l_objMemory
            
    l_strConnectorAlias = "objPagingFile_" & CompName
    ref_ObjConnectorsCollection.Add l_strConnectorAlias, l_objPagingFile

    l_strConnectorAlias = "objCache_" & CompName
    ref_ObjConnectorsCollection.Add l_strConnectorAlias, l_objCache

    l_strConnectorAlias = "objProcessor_" & CompName
    ref_ObjConnectorsCollection.Add l_strConnectorAlias, l_objProcessor

    l_strConnectorAlias = "objPhysicalDisk_" & CompName
    ref_ObjConnectorsCollection.Add l_strConnectorAlias, l_objPhysicalDisk

    l_objRefresher.Refresh
    
    l_strLogMsg = "ReinitInitComp: Ok! " & CompName
    ResSet.LogMsg(l_strLogMsg)

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub Init(ByRef ResSet, ByRef ref_ObjConnectorsCollection)
    Dim ResCount, i, CompName, Auth, User, Pass, l_strLogMsg, l_ObjWMIService, l_objRefresher
    Dim l_objMemory, l_objPagingFile, l_objPhysicalDisk, l_objCache, l_objProcessor, l_strConnectorAlias
    
    'Stop
    ResSet.LogMsg("Init: ***Start***")
    ResCount = ResSet.Count
    
    For i=0 To ResCount - 1
        CompName=ResSet.Resource(i).Name
        Auth = Cint(ResSet.Resource(i).Attrib("Auth").Value)
        User = ResSet.Resource(i).Attrib("User").Value
        Pass = ResSet.Resource(i).Attrib("Pass").Value

        l_strLogMsg = "Init Try To Create connector to Server: " & CompName
        ResSet.LogMsg(l_strLogMsg)

        Set l_objRefresher = CreateObject("PLSWbemRefresherComponent.PLSWbemRefresher")

        If auth = 1 then
            Set l_ObjWMIService = l_objRefresher.GetObject(CompName,"root\CIMV2",vbNull,vbNull,vbNull,vbNull,0,vbNull)
        Else
            Set l_ObjWMIService = l_objRefresher.GetObject(CompName,"root\CIMV2",User,Pass,vbNull,vbNull,0,vbNull)
        End If
        
        l_objRefresher.AutoReconnect = False
        
        If Err.Number <> 0 Then 
            l_strLogMsg = "Init Server: " & CompName  & "Error: " &  Err.Description & "(" & Err.Number & ")"
            ResSet.LogMsg(l_strLogMsg)
        Else
            l_strLogMsg = "Init: Ok! " & CompName
            ResSet.LogMsg(l_strLogMsg)

            l_strLogMsg = "Init: Ok!Try to get perf counters from Server: " & CompName
            ResSet.LogMsg(l_strLogMsg)

            Set l_objMemory = l_objRefresher.Add (l_ObjWMIService, "Win32_PerfFormattedData_PerfOS_Memory=@").Object
            Set l_objPagingFile = l_objRefresher.Add (l_ObjWMIService, "Win32_PerfFormattedData_PerfOS_PagingFile.Name='_Total'").Object
            Set l_objPhysicalDisk = l_objRefresher.AddEnum (l_ObjWMIService, "Win32_PerfFormattedData_PerfDisk_PhysicalDisk").ObjectSet
            Set l_objCache = l_objRefresher.Add (l_ObjWMIService, "Win32_PerfFormattedData_PerfOS_Cache=@").Object
            Set l_objProcessor = l_objRefresher.AddEnum (l_ObjWMIService, "Win32_PerfFormattedData_PerfOS_Processor").ObjectSet
            
            l_objRefresher.Refresh
                    
            If Err.Number <> 0 Then 
                l_strLogMsg = "Init Server: " & CompName  & "Error: " &  Err.Description & "(" & Err.Number & ")"
                ResSet.LogMsg(l_strLogMsg)
            Else
                l_strLogMsg = "Init: Ok! " & CompName
                ResSet.LogMsg(l_strLogMsg)
            
                l_strConnectorAlias = "objRefresher_" & CompName
                ref_ObjConnectorsCollection.Add l_strConnectorAlias, l_objRefresher
                
                l_strConnectorAlias = "objMemory_" & CompName
                ref_ObjConnectorsCollection.Add l_strConnectorAlias, l_objMemory
                     
                l_strConnectorAlias = "objPagingFile_" & CompName
                ref_ObjConnectorsCollection.Add l_strConnectorAlias, l_objPagingFile

                l_strConnectorAlias = "objCache_" & CompName
                ref_ObjConnectorsCollection.Add l_strConnectorAlias, l_objCache

                l_strConnectorAlias = "objProcessor_" & CompName
                ref_ObjConnectorsCollection.Add l_strConnectorAlias, l_objProcessor

                l_strConnectorAlias = "objPhysicalDisk_" & CompName
                ref_ObjConnectorsCollection.Add l_strConnectorAlias, l_objPhysicalDisk

            End If
        End If

    Next

    ResSet.LogMsg("Init: ***End***")
End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub ResetEvents(ByRef ResSet)
    Dim l_iIndx
    
    For l_iIndx=0 To ResSet.EventsCount - 1
        ResSet.Events(l_iIndx).Value = ResSet.BadValue
    Next
End Sub



-->
</Script>
  </xTest>
</document>