<?xml version="1.0" encoding="windows-1251"?>
<document type="SelFTrendxTest" version="0.0" xmlns:m="xTest">
     <xTest type="SNMP" alias="STP_ring_test_D-Link_3526" TitleRus="Мониторинг 'здоровья' кольцевой STP топологии на основе коммутаторов D-Link 3526" 
	 TitleEng="Health monitoring of stp rings based on switches D-Link 3526" 
	 TitleRootRus="Тесты оценки «здоровья» оборудования, поддерживающего SNMP" 
	 TitleRootEng="SNMP Devices Performance Tests" Version="1.0">
	<Files>
		<File type="conf" name="STP_ring_test_3526.xml"/>
		<File type="help" name="XT.SNMP.what-GetCustomOID.html"/>
		<File type="dll" name="x_snmp.dll"/>
	</Files>

	<xTestProps>
		<AverInervDuration>60</AverInervDuration>
		<pollinterval>60</pollinterval>
        <snmp_timeout_ms>3000</snmp_timeout_ms>
        <snmp_retry_count>2</snmp_retry_count>
        <log_level_def>10</log_level_def>
        <truncate_log>1</truncate_log>
	</xTestProps>
    <Keywords>
      <Keyword>SNMP</Keyword>
      <Keyword>D-Link</Keyword>
	  <Keyword>STP</Keyword>
      <Keyword>Mib2</Keyword>
      <Keyword>Мониторинг коммутаторов</Keyword>
    </Keywords>
	<VarSet>
	    <tlights_func>TLights_Proc</tlights_func>
		<discovery_func>OnDiscovery</discovery_func>
		<work_func>OnDataReceived</work_func>

        <common_attribs TitleRus="Список параметров (общие):" TitleEng="Parameters List (common):" SubTitleRus="Параметр" SubTitleEng="Parameter">
		    <Attrib Type="String" TitleRus="Номер stp instance для тестируемого кольца" TitleEng="Stp instance number for testing ring" Alias="StpInstance">"0"</Attrib>
            <Attrib Type="String" TitleRus="Пороговые значения метрики 'stp состояние порта 25 ' (через ;)" TitleEng="Thresholds 'PORT stp state 25' (; separated)" Alias="Port25ThresholdTL">"2;2;1;1"</Attrib>
			<Attrib Type="String" TitleRus="Пороговые значения метрики 'stp состояние порта 26 ' (через ;)" TitleEng="Thresholds 'PORT stp state 26' (; separated)" Alias="Port26ThresholdTL">"2;2;1;1"</Attrib>
			<Attrib Type="String" TitleRus="Пороговые значения метрики 'Время, прошедшее с последнего изменения STP топологии (мин)' (через ;)" TitleEng="Thresholds 'Time last topology changed (min)' (; separated)" Alias="TimeThresholdTL">"5;10;30;90"</Attrib>
			<Attrib Type="String" TitleRus="Пороговые значения метрики 'Доступность (%)' (через ;)" TitleEng="Thresholds 'Availability (%)' (; separated)" Alias="AvailabilityTL">"90;94;96;99"</Attrib>
        </common_attribs>
		<ScalarValues>
			<Value usetype="calculated" proctype="absolute" alias="Availability"> "Custom SNMP Device Availability (%)"</Value>
        </ScalarValues>

	</VarSet>

	<popupdisplay>
		<description ru="Мониторинг STP топологии на основе коммутаторов D-Link 3526" en="Monitoring of stp rings based on switches D-Link 3526"></description>
	</popupdisplay>
	

<Script language="VBScript">
<!--

Const g_dBadValue = 1.0e+308

Const PORT25OID	= "1.3.6.1.2.1.2.2.1.8.25"
Const PORT26OID	= "1.3.6.1.2.1.2.2.1.8.26"



Sub OnDiscovery(ByRef snmpDev)

 AvailabilityThresholdTL = GetThresholdForTL (snmpDev.ResSet.CommonProp.Attrib("AvailabilityTL").Value)
	If IsArray(AvailabilityThresholdTL) Then
		l_strTLName_ru = "Доступность (%)"
		l_strTLName_en = "Availability (%)"
	    If AddsysDescr Then
			l_strTLName_ru = l_strTLName_ru & " " & snmpDev.DeviceName
			l_strTLName_en = l_strTLName_en & " " & snmpDev.DeviceName
		End If
		l_strAlias = "Availability"
		TLError = snmpDev.ResSet.AddTrafficLight(l_strAlias, l_strTLName_ru, l_strTLName_en, "Average", "<", AvailabilityThresholdTL(0), AvailabilityThresholdTL(1), AvailabilityThresholdTL(2), AvailabilityThresholdTL(3))
	Else
		snmpDev.ScriptError = 3
		snmpDev.ScriptErrorInfo = "Пороговые значения для ДОСТУПНОСТИ в свойствах теста указаны не верно! Проверьте настройки и повторите запуск тестов."
		Exit Sub
	End If
	
	Port25ThresholdTL = GetThresholdForTL (snmpDev.ResSet.CommonProp.Attrib("Port25ThresholdTL").Value)
	If IsArray(Port25ThresholdTL) Then
		l_strTLName = "Stp состояние порта 25"
		l_strAlias = "PORT25State"
		SLAError = snmpDev.ResSet.EventAddEx(l_strTLName, l_strAlias, PORT25OID, "value", -1)
		TLError = snmpDev.ResSet.AddTrafficLight(l_strAlias, l_strTLName, l_strTLName, "Average", ">", Port25ThresholdTL(0), Port25ThresholdTL(1), Port25ThresholdTL(2), Port25ThresholdTL(3))
	Else
		snmpDev.ScriptError = 3
		snmpDev.ScriptErrorInfo = "Пороговые значения для состояния порта 25 в свойствах теста указаны не верно! Проверьте настройки и повторите запуск тестов."
		Exit Sub
	End If
	
	Port26ThresholdTL = GetThresholdForTL (snmpDev.ResSet.CommonProp.Attrib("Port26ThresholdTL").Value)
	If IsArray(Port26ThresholdTL) Then
		l_strTLName = "Stp состояние порта 26"
		l_strAlias = "PORT26State"
		SLAError = snmpDev.ResSet.EventAddEx(l_strTLName, l_strAlias, PORT26OID, "value", -1)
		TLError = snmpDev.ResSet.AddTrafficLight(l_strAlias, l_strTLName, l_strTLName, "Average", ">", Port26ThresholdTL(0), Port26ThresholdTL(1), Port26ThresholdTL(2), Port26ThresholdTL(3))
	Else
		snmpDev.ScriptError = 3
		snmpDev.ScriptErrorInfo = "Пороговые значения для состояния порта 26 в свойствах теста указаны не верно! Проверьте настройки и повторите запуск тестов."
		Exit Sub
	End If
	TimeThresholdTL = GetThresholdForTL (snmpDev.ResSet.CommonProp.Attrib("TimeThresholdTL").Value)
	If IsArray(TimeThresholdTL) Then
		l_strTLName = "Время 'жизни' текущей STP топологии(минуты)"
		l_strAlias = "LastTimeChanged"
		SLAError = snmpDev.ResSet.EventAddEx(l_strEventName, l_strAlias, TempOID, "value", -1)
		TLError = snmpDev.ResSet.AddTrafficLight(l_strAlias, l_strTLName, l_strTLName, "Average", "<", TimeThresholdTL(0), TimeThresholdTL(1), TimeThresholdTL(2), TimeThresholdTL(3))
	Else
		snmpDev.ScriptError = 3
		snmpDev.ScriptErrorInfo = "Пороговые значения для Время 'жизни' текущей STP топологии в свойствах теста указаны не верно! Проверьте настройки и повторите запуск тестов."
		Exit Sub
	End If
	
	
	
End Sub


Sub OnDataReceived(ByRef snmpDev)

	On Error Resume Next
	
	StpInstance = snmpDev.ResSet.CommonProp.Attrib("StpInstance").Value
    TimeOIDinst = "1.3.6.1.4.1.171.12.15.2.3.1.21."&CStr(Trim(StpInstance))
	
	Set PORT25State = snmpDev.ScalarTable.Value("PORT25State")	
	snmpValue25 = snmpDev.SnmpGet (PORT25OID, snmpErr)
	PORT25STPState = GetSTPStatus(snmpDev,25,StpInstance)
	if snmpErr <> 0 Then
		PORT25State.NumericValue = g_dBadValue
	Else
		PORT25State.NumericValue = snmpValue25 + PORT25STPState
	End If
	
	Set PORT26State = snmpDev.ScalarTable.Value("PORT26State")	
	snmpValue26 = snmpDev.SnmpGet (PORT26OID, snmpErr)
	PORT26STPState = GetSTPStatus(snmpDev,26,StpInstance)
	if snmpErr <> 0 Then
		PORT26State.NumericValue = g_dBadValue
	Else
		PORT26State.NumericValue = snmpValue26 + PORT26STPState
	End If
	
	Set LastTimeChanged = snmpDev.ScalarTable.Value("LastTimeChanged")	
	snmpValue = snmpDev.SnmpGet (TimeOIDinst, snmpErr)
	if snmpErr <> 0 Then
		LastTimeChanged.NumericValue = g_dBadValue
	Else
		LastTimeChanged.NumericValue = snmpValue / 60
	End If	
    
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


Function GetSTPStatus(l_snmpDev, l_ifIndex, StpInstance)
On Error Resume Next
	Dim l_snmpValue, snmpErr, oidifStpStatus
	
	GetSTPStatus = ""
	oidifStpStatus = "1.3.6.1.4.1.171.12.15.2.5.1.6." & CStr(Trim(l_ifIndex))&"."& CStr(Trim(StpInstance))
	l_snmpValue = l_snmpDev.SnmpGet(oidifStpStatus, snmpErr)
	If snmpErr <> 0 Then
		logMessage = vbNewLine & "!!!Try Get OID: " & oidifStpStatus & vbNewLine & "!!!Error Description: " & l_snmpDev.GetSnmpErrorText()
		l_snmpDev.LogMsg(logMessage)
		GetSTPStatus = 0
	Else
		If l_snmpValue = 5 or l_snmpValue = 3  Then 
		   GetSTPStatus = 0
        Else
           GetSTPStatus = 1	
		End If  
	End If
End Function
-->
</Script>
     </xTest>
</document>
