Przykłady

Pobieranie/ustawianie zmiennych

Pobierać i ustawiać dane można w sposób asynchroniczny lub synchroniczny.

W przypadku zapytań synchronicznych(przyrostek S) funkcja zawsze zwraca odpowiedź, ale odpowiedź ta czasem nie będzie zawierała danych i posiadała status błędnej z różnych przyczyn (upłynął czas oczekiwania, niepowodzenie podczas uwierzytelnienia, itp.). Odpowiedź zostanie dostarczona w postaci obiektu klasy SnmpResponse, który przy pomocy metod modułu może zostać przekształcony na String albo tablicę. Odpowiedź w postaci tablicy zawiera trzy kolumny, minimum jeden wiersz (postaci: [status, tekstowo status, id żądania]) oraz kolejne zawierające dane, których zapytanie dotyczyło w postaci [oid,wartość,typ], dodatkowych wierszy będzie tyle, ile oidów zwierało zapytanie.

Wykonywanie zapytań asynchronicznych(przyrostek A) zawsze zwraca liczbę, będącą identyfikatorem zapytania - zależnie od sposobu przetwarzania odpowiedzi będzie ją można pobrać na podstawie tego numeru (np z bazy danych, bufora modułu, innego własnego mechanizmu). Tak otrzymaną odpowiedź można wykorzystywać w sposób identyczny jak odpowiedź otrzymaną z zapytania synchronicznego.

$snmp.getS("2c", "192.168.0.150:161", "public", "1.3.6.1.2.1.1.4.0")
$snmp.getA("3", "192.168.0.150:161", "torn", "1.3.6.1.2.1.1.4.0")

Wykonanie obiektu o poniższym kodzie(użytkownik torn, został wcześniej dodany), dla odmiany kod Groovy:

import palio.*
import palio.modules.*

Long requestId = Groovy.module("snmp").getA("3", "192.168.0.150:161", "torn", "1.3.6.1.2.1.1.4.0")
println requestId
palio.modules.snmp.model.SnmpResponse response = Groovy.module("snmp").getS("2c", "192.168.1.196:161", "public", "1.3.6.1.2.1.1.4.0")
println response
println response.toArray()

Będzie mieć taki efekt:

772159757
statusText: Success; status: 0; type: RESPONSE; error index: 0; requestId: 772159758; values: (oid: 1.3.6.1.2.1.1.4.0; value: o2; type: OCTET STRING; typeId: 4)
[[0, Success, 772159758], [1.3.6.1.2.1.1.4.0, OCTET STRING, o2]]

Można podawać także tablice oidów. W przypadku ustawiania zmiennych dodatkowo podaje się wartość i typ, typ jest opcjonalny, ale sprawdzenie typu odbywa się poprzez wykonanie zapytania o typ, nie każdy węzeł musi mieć uprawnienia do odczytu, zatem jeśli tym jest znany, warto go podawać.

$snmp.setA("1", "192.168.0.150:161", "public", "1.3.6.1.2.1.1.4.0", "o2", "OctetString")

Przetwarzanie odpowiedzi

Przetwarzanie odpowiedzi wewnątrz modułu

Odpowiedzi napływają do kolejki modułu, a następnie są przetwarzane przez listenery, moduł zawiera trzy podstawowe:

Należy tu zwrócić uwagę, iż nie są to listenery o których jest mowa w nasłuchiwaniu modułu na pakiety - są to listenery nasłuchujące na gotowe odpowiedzi klasy SnmpResponse, skądkolwiek one znalazły się w kolejce modułu.

Możliwa jest rejestracja własnego listenera w module, należy jedynie stworzyć klasę implementującą EventListener, a następnie zarejestrować ją przy pomocy metody modułu. Obecnie listenery można dodawać jedynie gdy manager kolejki nie jest uruchomiony, co oznacza, że jeśli instancja miała skonfigurowane i włączone wbudowane listenery oraz zostały one automatycznie uruchomione, poniższy kod nie będzie miał efektu.

EventListener<SnmpResponse> listener = new myListener();
Groovy.module("snmp").registerResponseListener(listener);

Przetwarzanie odpowiedzi poza modułem

W przypadku implementacji snmp zawartej bezpośrednio w module lub zawartej w listenerze instancji odpowiedzi są przekazywane bezpośrednio do kolejki modułu i przetwarzane w sposób opisany w poprzednim punkcie.

W przypadku przetwarzania przez listener serwerowy, wszystkie odpowiedzi, oraz nadchodzące zgłoszenia (np. trapy) są rozsyłane do wszystkich instancji, oznacza to, że każda instancja zna odpowiedzi innych instancji.

MibParser

Parser dopasowuje oid na podstawie zapisanych plików, pliki będą pamiętane w bazie, pogrupowane w rozłączne konteksty. Plik może należeć tylko do jednego kontekstu, aby użyć go w wielu kontekstach, należy dodać go do każdego z osobna.

Polecenie będzie tłumaczone w ramach podanego kontekstu, ze wszystkich plików w nim zawartych podjęta zostanie próba zbudowania drzewa poleceń i wartości. Użycie różnych kontekstów może być przydatne podczas komunikacji z urządzeniami, których pliki mib są niekompatybilne/sprzeczne.

Przykład, dodanie 2 plików, próba uzyskania komendy, oraz usuwanie plików z kontakstu:

$snmp.addMibFile("kontekst1", "nazwa1", "treść 1 miba")
$snmp.addMibFile("kontekst1", "nazwa2", "treść 2 miba")
$snmp.commandToOid("kontekst1","sysDescr")
$snmp.removeMibFile("kontekst1", "nazwa2")
$snmp.isMibContextComplete("kontekst1")
$snmp.removeContextMibFiles("kontekst1")
$snmp.removeAllMibFiles()

W rezultacie snmp.commandToOid otrzymany zostanie (albo nie) oid dla zadanego polecenia. Polecenia umożliwiają tłumaczenie, weryfikację spójności drzewa, dodawanie, usuwanie plików z kontekstów.