<?xml version="1.0" encoding="windows-1251"?>
<document type="SelFTrendxTest" version="0.0" xmlns:m="xTest">
    <xTest type="SNMP" alias="cisco_routers" 
           TitleRus="Тест оценки 'здоровья' маршрутизаторов Cisco" 
           TitleEng="Cisco Router Performance Test" 
           TitleRootRus="Тесты оценки «здоровья» оборудования, поддерживающего SNMP" 
           TitleRootEng="SNMP Devices Performance Tests" 
           Version="2.0"
           TrafficLightsName="Cisco Router Performance Test"
           >
	<Files>
		<File type="conf" name="SNMP.CISCO-CPU_MEMORY.xTest.xml"/>
		<File type="help" name="XT.SNMP.CiscoRouter.chm::/XT.SNMP.CiscoRouter.html"/>
		<File type="dll" name="x_snmp.dll"/>
	</Files>

  <Keywords>
    <Keyword>SNMP</Keyword>
    <Keyword>Cisco</Keyword>
    <Keyword>Маршрутизатор</Keyword>
    <Keyword>Коммутатор</Keyword>
  </Keywords>

  <xTestProps>
        <AverInervDuration>60</AverInervDuration>
        <pollinterval>28</pollinterval>
        <snmp_timeout_ms>3000</snmp_timeout_ms>
        <snmp_retry_count>1</snmp_retry_count>
        <log_level_def>0</log_level_def>
        <truncate_log>1</truncate_log>
	</xTestProps>
      
	<VarSet>
<!--
	Value attributes:
		usetype: "hidden" | "pure" | "discovery" | "calculated"
		proctype: "absolute" | "delta"


		OID: for scalar values ("1.3.6.1.2.1.1.1")
		ROOT_OID: for tables  ("1.3.6.1.2.1.2.2.1" - A list of interface entries.)
		COLNUM_OID:  for table values
		alias: short ascii name w/o white spaaces

		discovery_func
		work_func
		tlights_func

-->
		<tlights_func>TLights_Proc</tlights_func>
		<discovery_func>OnDiscovery</discovery_func>
		<work_func>OnDataReceived</work_func>

		<ScalarValues>
			<Value usetype="calculated" proctype="absolute" alias="CPU_Total">
				"CPU busy(%)"
			</Value>
			
            <Value usetype="calculated" proctype="absolute" alias="free_memory_dev">
				"Minimum Free Memory (%)"
			</Value>
			
			<Value usetype="hidden" proctype="absolute" alias="CPU_5s" OID="1.3.6.1.4.1.9.2.1.56.0">
				"Processor Utilization per last 5s"
			</Value>
			<Value usetype="hidden" proctype="absolute" alias="CPU_1m" OID="1.3.6.1.4.1.9.2.1.57.0">
				"Processor Utilization per last 1m"
			</Value>
            
            <Value usetype="calculated" proctype="absolute" alias="ErrorTotal">
				"Data Availability (%)"
			</Value>
			<Value usetype="calculated" proctype="absolute" alias="Availability">
				"Device Availability (%)"
			</Value>
        </ScalarValues>

		<TableValues>                                               
			<Table name="Cisco Memory Pool Objects table" ROOT_OID="1.3.6.1.4.1.9.9.48.1.1.1">

				<Value usetype="hidden" proctype="absolute" COLNUM_OID="5" alias="MemoryPoolUsed">
					"ciscoMemoryPoolUsed"
				</Value>
				<Value usetype="hidden" proctype="absolute" COLNUM_OID="6" alias="MemoryPoolFree">
					"ciscoMemoryPoolFree"
				</Value>

				<Value usetype="discovery" proctype="absolute" COLNUM_OID="2" alias="MemoryPoolName">
					"ciscoMemoryPoolName"
				</Value>
				
				<Value usetype="hidden" proctype="absolute" COLNUM_OID="4" alias="MemoryPoolValid">
					"ciscoMemoryPoolName"
				</Value>
                
                <Value usetype="calculated" proctype="absolute" alias="TotalMemory">
					"TotalMemory(bytes)"
				</Value>
                <Value usetype="calculated" proctype="absolute" alias="FreeMemory_bytes">
					"FreeMemory(bytes)"
				</Value>

                <Value usetype="calculated" proctype="absolute" alias="FreeMemory_percent">
					"FreeMemory(%)"
				</Value>

			</Table>

		</TableValues>
	</VarSet>


	<popupdisplay>
		<description ru="Тест маршрутизаторов Cisco" en="Cisco Routers Теst"></description>
		<display_item ru="Загрузка процессора (%)" en="CPU busy(%)" alias="CPU_Total" sign="&gt;">
			50.0 40.0 20.0 10.0
		</display_item>
		<display_item ru="Свободная память минимум (%)" en="Minimum Free Memory (%)" alias="free_memory_dev" sign="&lt;">
			5.0 10.0 20.0 40.0
		</display_item>
		<display_item ru="Доступность данных (%)" en="Data Availability (%)" alias="ErrorTotal" sign="&lt;">
			100.0 100.0 100.0 100.0
		</display_item>
		<display_item ru="Доступность устройства (%)" en="Device Availability (%)" alias="Availability" sign="&lt;">
			100.0 100.0 100.0 100.0
		</display_item>
	</popupdisplay>



<Script language="VBScript">
<!--
Dim g_dBadValue

g_dBadValue = 1.0e+308



Sub OnDiscovery(ByRef snmpDev)
    Dim portTab, lportTab
    Dim sValue, TabSet, ScalarTab, sifType
    Dim TablesCount, pIndx, tIndx
    Dim logMessage

    'On Error Resume Next

    logMessage = "+=========================================================="
    snmpDev.LogMsg(logMessage)

    logMessage = "VBscrip discovery start, ip: " & snmpDev.IpAddress & " device: " & snmpDev.DeviceName
    snmpDev.LogMsg(logMessage)

    Set ScalarTab = snmpDev.ScalarTable
    Set TabSet = snmpDev.TablesSet
    Set portTab = TabSet.PPortsTableByName("Cisco Memory Pool Objects table")


    If InStr(snmpDev.DeviceName, "Cisco") > 0 Then
        snmpDev.Disable = False
        
        TablesCount = portTab.Count

        If TablesCount > 0 Then
            
            For tIndx = 0 To TablesCount - 1
                
                Set lportTab = portTab.Table(tIndx)
                Set sValue = lportTab.Value("MemoryPoolName")
                
                lportTab.PortDescription = sValue.SValue
                logMessage = "Port[" & tIndx+1 & "]: " & lportTab.PortDescription
                snmpDev.LogMsg(logMessage)
                
            Next
        Else
            snmpDev.Disable = True
        End If
    Else
        snmpDev.Disable = True
    End If

'    logMessage = "VBscrip dump Device Data:"
'    snmpDev.LogMsg(logMessage)


'    snmpDev.Dump()

    logMessage = "+=========================================================="
    snmpDev.LogMsg(logMessage)

    logMessage = "VBscrip discovery end, ip: " & snmpDev.IpAddress & " device: " & snmpDev.DeviceName
    snmpDev.LogMsg(logMessage)

End Sub


Sub OnDataReceived(ByRef snmpDev)
    Dim portTab, TabOnPort
    Dim TabSet, ScalarTab
    
    Dim SC_CPU_Total, SC_freemem_dev, SC_DataAvailability, SC_DevAvailability
    Dim SH_CPU_5s, SH_CPU_1m, SH_CPU_Total, SH_free_memory_dev

    Dim TS_MemoryPoolUsed, TS_MemoryPoolFree, TS_MemoryPoolValid
    Dim TC_TotalMemory, TC_FreeMemory_bytes, TC_FreeMemory_percent

    Dim TablesCount, tIndx, tCount
    Dim logMessage

    logMessage = "+=========================================================="
    snmpDev.LogMsg(logMessage)

    logMessage = "VBscrip OnDataReceived start, ip: " & snmpDev.IpAddress & " device: " & snmpDev.DeviceName
    snmpDev.LogMsg(logMessage)

    Set ScalarTab = snmpDev.ScalarTable
    Set TabSet = snmpDev.TablesSet
    Set portTab = TabSet.PPortsTableByName("Cisco Memory Pool Objects table")
    TablesCount = portTab.Count

    Set SC_CPU_Total = ScalarTab.Value("CPU_Total")
    Set SC_freemem_dev = ScalarTab.Value("free_memory_dev")
    Set SC_DataAvailability = ScalarTab.Value("ErrorTotal")
    Set SC_DevAvailability = ScalarTab.Value("Availability")

    SC_CPU_Total.NumericValue = g_dBadValue
    SC_freemem_dev.NumericValue = 0
    SC_DataAvailability.NumericValue = g_dBadValue 


    Set SH_CPU_5s = ScalarTab.Value("CPU_5s")
    Set SH_CPU_1m = ScalarTab.Value("CPU_1m")

    logMessage = "CPU_5s: " & SH_CPU_5s.NumericValue
    snmpDev.LogMsg(logMessage)
    logMessage = "CPU_1m: " & SH_CPU_1m.NumericValue
    snmpDev.LogMsg(logMessage)

    If  SH_CPU_1m.NumericValue <> g_dBadValue Then
        SC_CPU_Total.NumericValue = SH_CPU_1m.NumericValue
    End If

    SC_freemem_dev.NumericValue = 100.0

    For tIndx = 0 To TablesCount - 1
        Set TabOnPort = portTab.Table(tIndx)

        Set TS_MemoryPoolUsed = TabOnPort.Value("MemoryPoolUsed")
        Set TS_MemoryPoolFree = TabOnPort.Value("MemoryPoolFree")
        Set TS_MemoryPoolValid = TabOnPort.Value("MemoryPoolValid")

        Set TC_TotalMemory = TabOnPort.Value("TotalMemory")
        Set TC_FreeMemory_bytes = TabOnPort.Value("FreeMemory_bytes")
        Set TC_FreeMemory_percent = TabOnPort.Value("FreeMemory_percent")
        
        logMessage = "MemoryPoolUsed[" & tIndx & "]: " & TS_MemoryPoolUsed.NumericValue
        snmpDev.LogMsg(logMessage)
        logMessage = "MemoryPoolFree[" & tIndx & "]: " & TS_MemoryPoolFree.NumericValue
        snmpDev.LogMsg(logMessage)
        logMessage = "MemoryPoolValid[" & tIndx & "]: " & TS_MemoryPoolValid.NumericValue
        snmpDev.LogMsg(logMessage)



        If SC_CPU_Total.NumericValue = g_dBadValue Or TS_MemoryPoolUsed.NumericValue = g_dBadValue Or TS_MemoryPoolValid.NumericValue = g_dBadValue Then
            ' snmp device not responded
            TC_TotalMemory.NumericValue = g_dBadValue
            TC_FreeMemory_bytes.NumericValue = g_dBadValue
            TC_FreeMemory_percent.NumericValue = g_dBadValue
            
            SC_freemem_dev.NumericValue = g_dBadValue
            SC_DataAvailability.NumericValue = g_dBadValue
            SC_DevAvailability.NumericValue = 0.0
            
            logMessage = "Oo-ops... Device not responded"
            snmpDev.LogMsg(logMessage)

        Else
            logMessage = "Device responded Ok!"
            snmpDev.LogMsg(logMessage)

            If TS_MemoryPoolUsed.NumericValue + TS_MemoryPoolFree.NumericValue = 0 Or TS_MemoryPoolValid.NumericValue <> 1.0 Then
                TC_TotalMemory.NumericValue = g_dBadValue
                TC_FreeMemory_bytes.NumericValue = g_dBadValue
                TC_FreeMemory_percent.NumericValue = g_dBadValue
                
                SC_freemem_dev.NumericValue = g_dBadValue
                SC_DataAvailability.NumericValue = 0.0
            Else
                TC_TotalMemory.NumericValue = TS_MemoryPoolUsed.NumericValue + TS_MemoryPoolFree.NumericValue
                TC_FreeMemory_bytes.NumericValue = TS_MemoryPoolFree.NumericValue
                TC_FreeMemory_percent.NumericValue = (TC_FreeMemory_bytes.NumericValue/TC_TotalMemory.NumericValue) * 100.0

                SC_DataAvailability.NumericValue = 100.0


                If TC_FreeMemory_percent.NumericValue < SC_freemem_dev.NumericValue Then
                   SC_freemem_dev.NumericValue = TC_FreeMemory_percent.NumericValue
                End If

            End If

        End If

    Next

    logMessage = "End ports table processing"
    snmpDev.LogMsg(logMessage)


    logMessage = "free_memory_dev: " & SC_freemem_dev.NumericValue
    snmpDev.LogMsg(logMessage)
    logMessage = "DataAvailability: " & SC_DataAvailability.NumericValue
    snmpDev.LogMsg(logMessage)
    logMessage = "DevAvailability: " & SC_DevAvailability.NumericValue
    snmpDev.LogMsg(logMessage)

    logMessage = "+=========================================================="
    snmpDev.LogMsg(logMessage)

    logMessage = "VBscrip OnDataReceived end, ip: " & snmpDev.IpAddress & " device: " & snmpDev.DeviceName
    snmpDev.LogMsg(logMessage)

End Sub

-->
</Script>


     </xTest>
</document>
