<?xml version="1.0" encoding="windows-1251" ?>
<document type="SelFTrendxTest" version="0.0" xmlns:m="xTest">
    <xTest type="USER_SCRIPT" alias="file_operations" 
           TitleRus="Тест интегральной оценки производительности файлового сервиса сети" 
            TitleRootRus="Тесты интегральной оценки производительности файлового сервиса сети" 
            TitleEng="File Service Performance test" 
            TitleRootEng="File Service Performance tests" 
            TrafficLightsName="File Service Performance test"
            Version="1.2">
        <Files>
            <File type="conf" name="VB.FileTest.XFiles.xml" />
            <File type="help" name="VB.FileTest.XFiles.chm::/VB.FileTest.XFiles.html" />
            <File type="dll" name="ST_SCTest.dll" />
        </Files>
        <Keywords>
          <Keyword>Эмуляция транзакций</Keyword>
          <Keyword>Файловый сервис</Keyword>
          <Keyword>Windows</Keyword>
          <Keyword>Linux</Keyword>
        </Keywords>

      <!--     $Id: VB.FileTest.XFiles.xml,v 1.3 2009/10/20 06:13:23 alex_l Exp $


-->
        <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>
        <parameters TitleRus="Список сетевых папок:" TitleEng="Servers Folders List:">
            <resources>
                <resource_id TitleRus="Сетевая папка (UNC путь)" TitleEng="Server Folder (UNC Path)"></resource_id>
            </resources>
            <common_attribs TitleRus="Список параметров (общие):" TitleEng="Parameters List (common):" SubTitleRus="Параметр" SubTitleEng="Parameter">
                <Attrib Type="Double" TitleRus="Предлагаемая нагрузка (KБайт/с)" TitleEng="Suggested Load (KByte/s)" Alias="suggested_load">"20"</Attrib>
                <Attrib Type="Double" TitleRus="Процент операций чтения (%)" TitleEng="Read Operations Percentage (%)" Alias="read_op_perc">"50"</Attrib>
                <Attrib Type="Double" TitleRus="Размер файла (КБайт)" TitleEng="File Size (KByte)" Alias="file_size">"16"</Attrib>
                <Attrib Type="Integer" TitleRus="Размер записи (КБайт)" TitleEng="Record Size (Byte)" Alias="record_size">"2048"</Attrib>
                <Attrib Type="Integer" TitleRus="Длительность генерации (с)" TitleEng="Generation Time (s)" Alias="generation_time">"20"</Attrib>
            </common_attribs>
            <resource_attribs TitleRus="Список параметров:" TitleEng="Parameters List:" SubTitleRus="Параметр" SubTitleEng="Parameter">
                <!-- Type: "String", "Bool", "Integer", "Double", "Enum" -->
                <!--
                    <Attrib Type="String" TitleRus="Сетевая папка (UNC путь)" TitleEng="Server Folder (UNC Path)" Alias="server_folder">"\\server\temp\test"</Attrib>
                -->    
            </resource_attribs>
        </parameters>
        <popupdisplay>
            <!-- Function: "EventCount", "Average", "Maximum", "Minimum" -->
            <description ru="File Service Performance test" en="File Service Performance test"></description>
        </popupdisplay>
        <Script language="VBScript">
            <!--

Const INFINITE_TIMEOUT = -1

g_SNMPGET = 160
g_SNMPSET = 163
g_GETBULK = 165

g_SNMP_SYNTAX_INT = 2
g_SNMP_SYNTAX_OCTETS = 4
g_SNMP_SYNTAX_TIMETICKS = 67


Sub OnDiscovery(ByRef ResSet)

	'stop
	On Error Resume Next
	Err.Clear
	
	ResCount=ResSet.Count
	Unid = 111
    UnidBase = 111
    '// Common properties ///////////////////////////////////////////////////////
    l_lAttrib = ResSet.CommonProp.Attrib("suggested_load").Value
    l_lAttrib = ResSet.CommonProp.Attrib("read_op_perc").Value
    l_lAttrib = ResSet.CommonProp.Attrib("file_size").Value
    l_lAttrib = ResSet.CommonProp.Attrib("record_size").Value
    l_lAttrib = ResSet.CommonProp.Attrib("generation_time").Value    
    '////////////////////////////////////////////////////////////////////////////


    ResSet.SendProgressMessage("VBScript is running")
    ResSet.Sleep(1000)
    
    'ResSet.ScriptError = -1
    'ResSet.ScriptErrorInfo = "Oшибка при запуске теста."
    ' Exit Sub
    
    'stop

	For l_Indx = 0 To ResCount-1
		l_strTestFolder = ResSet.Resource(l_Indx).Name
		l_strEvPrefix = "(" & l_strTestFolder & ")"
		
		l_strEvName = "Write Rate " & l_strEvPrefix & ", KByte/sec"
		l_strAlias = "Write Rate " & l_strEvPrefix & "_" & l_Indx
		Error = ResSet.EventAdd(l_strEvName, l_strAlias, Unid)
	    TLError =  ResSet.AddTrafficLight(l_strAlias, l_strEvName, l_strEvName, "Average", "<", 656, 909, 1329, 2105)	
		Unid = Unid + 1
        ResSet.SendProgressMessage("Event " & l_strEvName & " is added")
		ResSet.Sleep(100)

		l_strEvName = "Read Rate " & l_strEvPrefix & ", KByte/sec"
		l_strAlias = "Read Rate " & l_strEvPrefix & "_" & l_Indx
		Error = ResSet.EventAdd(l_strEvName, l_strAlias, Unid)
	    TLError =  ResSet.AddTrafficLight(l_strAlias, l_strEvName, l_strEvName, "Average", "<", 656, 909, 1329, 2105)	
        Unid = Unid + 1
        ResSet.SendProgressMessage("Event " & l_strEvName & " is added")
		ResSet.Sleep(100)
        
		l_strEvName = "Availability (%) " & l_strEvPrefix
		l_strAlias = "Availability" & l_strEvPrefix & "_" & l_Indx
		Error = ResSet.EventAdd(l_strEvName, l_strAlias, Unid)
	    TLError =  ResSet.AddTrafficLight(l_strAlias, l_strEvName, l_strEvName, "Average", "<", 99.9, 99.9, 99.9, 99.9)	
        ResSet.SendProgressMessage("Event " & l_strEvName & " is added")
		ResSet.Sleep(100)
		
		UnidBase = UnidBase + 10
        Unid = UnidBase
	Next
	
	
	' [\\gnom\temp] Availability (%) file_operations
    ' [\\gnom\temp] Read Rate (%) file_operations	
	' [\\gnom\temp] Write Rate (%) file_operations	
	
End Sub


Sub OnDataReceived(ByRef ResSet)

    'stop
    
    Dim FileTesters()
    Dim l_objLog
    
    ' Получаем объект лога из ResSet
    Set l_objLog = ResSet.Log 

    '// Init hash for quick event search
    ResSet.InitEventsHash
    DtError = ResSet.InternalError
    ResCount = ResSet.Count
    
    Set l_KeepAliveTrapsReceiver = ResSet.KeepAliveTrapsReceiver


    ReDim Preserve FileTesters(ResCount - 1)

    '//Create file Testers
    For l_Indx = 0 To ResCount - 1
        Set FileTesters(l_Indx) = CreateObject("FileTestComponent.FileTest.1")
        FileTesters(l_Indx).SetLog2(l_objLog)
    Next
    
    SetTestParams ResSet, FileTesters

	Do While Not ResSet.StopTest
        l_bNewSLaPeriod = ResSet.IsNewSLaPeriod
        If l_bNewSLaPeriod Then
            GenerateFileTraffic ResSet, FileTesters
        Else
            ResSet.Sleep 1000
        End If                
    Loop
    
    
    '// Wait for File Tests is over
    Do While Not WaitForTestsIsOver(ResSet, FileTesters)
        ResSet.Sleep 100    
    Loop
    
End Sub

Sub SetTestParams(ByRef ResSet, ByRef FileTesters)

    ResCount = ResSet.Count

    For l_Indx = 0 To ResCount - 1
        FileTesters(l_Indx).TestFolder = ResSet.Resource(l_Indx).Name
        FileTesters(l_Indx).OfferedLoad = ResSet.CommonProp.Attrib("suggested_load").Value
        FileTesters(l_Indx).RWOperPercent = ResSet.CommonProp.Attrib("read_op_perc").Value
        FileTesters(l_Indx).FileSize = ResSet.CommonProp.Attrib("file_size").Value
        FileTesters(l_Indx).RecordSize = ResSet.CommonProp.Attrib("record_size").Value
        FileTesters(l_Indx).LoadTime = ResSet.CommonProp.Attrib("generation_time").Value
        FileTesters(l_Indx).WaitForNewSLaPeriod = True
        
        FileTesters(l_Indx).StartTest()
        
    Next
End Sub

Sub GenerateFileTraffic(ByRef ResSet, ByRef FileTesters)

    ResCount = ResSet.Count

    For l_Indx = 0 To ResCount - 1
        FileTesters(l_Indx).BeginNewLoad
    Next
    
    ResSet.Sleep 1000

    Do While Not ResSet.StopTest
        l_bEndLoadTime = WaitForEndLoadTime(ResSet, FileTesters)
        If l_bEndLoadTime Then
            ResSet.SendSLaEvents()
            Exit Do
        End If
        ResSet.Sleep 1000
    Loop
End Sub

Function WaitForEndLoadTime(ByRef ResSet, ByRef FileTesters)

    ResCount = ResSet.Count
    l_bStatSent = True
    l_dAvailability = 0.0
    l_dWrate = -1.0
    l_dRRate = -1.0
    
    For l_Indx = 0 To ResCount - 1
                    
        If Not FileTesters(l_Indx).IsStatSent Then
            l_bStatSent = False
        
            If FileTesters(l_Indx).IsStatReady Then
		        l_strTestFolder = FileTesters(l_Indx).TestFolder
		        l_strEvPrefix = "(" & l_strTestFolder & ")"
                
                
                l_dAvailability = FileTesters(l_Indx).GetStat(l_dWrate, l_dRRate)
                   
                l_strAlias = "Availability" & l_strEvPrefix & "_" & l_Indx
                ResSet.Events(l_strAlias).Value = l_dAvailability
               
                If l_dWrate <> -1.0 Then
		            l_strAlias = "Write Rate " & l_strEvPrefix & "_" & l_Indx
                    ResSet.Events(l_strAlias).Value = l_dWrate
                End If
                       
                If l_dRRate <> -1.0 Then
		            l_strAlias = "Read Rate " & l_strEvPrefix & "_" & l_Indx
                    ResSet.Events(l_strAlias).Value = l_dRRate
                End If
                
            End If
        End If            
    Next

    WaitForEndLoadTime = l_bStatSent

End Function

Function WaitForTestsIsOver(ByRef ResSet, ByRef FileTesters)

    l_bTestIsOver = True
    ResCount=ResSet.Count
    
    For l_Indx = 0 To ResCount - 1
        FileTesters(l_Indx).StopTest()
        l_bTestIsOver = FileTesters(l_Indx).IsTestOver 
        If Not l_bTestIsOver Then 
            l_bTestIsOver = False
            Exit For        
        End If
    Next

    WaitForTestsIsOver = l_bTestIsOver
End Function



--></Script>
    </xTest>
</document>
