Thread Auslesen von Hash-Keys und selbstaufrufende Funktion (3 answers)
Opened by reen_sc at 2011-09-15 15:21

reen_sc
 2011-09-15 15:21
#152449 #152449
User since
2011-09-15
2 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

da ich nicht wirklich ein Programmierer bin, ich aber etwas codingtechnisch umsetzen muss, brauche ich mal etwas Unterstützung von euch. Hintergrund ist, div. Daten per SNMP und Perl von Netzwerkdevices abzufragen. Das klappt auch schon ganz gut :-) Jetzt möchte ich aber eine Funktion schreiben, welche mir die Forwarding-Database für jedes VLAN von einem Switch abfragt. Auch das funktioniert bereits ohne Probleme, aber ich bin etwas skeptisch, wenn ich 200 SNMP Anfragen (für jedes VLAN) an das Device zur gleichen Zeit stelle (funktioniert zwar, aber irgendwann wird damit wohl schluss sein und das Device könnte abstürtzen).

Meine Überlegung ist, nur 10 oder 20 VLAN-Anfragen pro Device parallel zu stellen.

Grob gesagt sieht meine Struktur wie folgt aus. Quasi ein Hash of Hashes. Der Key im Unterhash ist immer das entsprechende VLAN (der Value ist nur als Platzhalter hier eingetragen)

Code: (dl )
1
2
3
4
5
6
7
8
%hash = ( "DEVICE_1" => { "1" => "VLAN_1",
"2" => "VLAN_2"},
"DEVICE_2" => { "1" => "VLAN_1",
"2" => "VLAN_2",
...
"100" => "VLAN_100",
},
);


Die Funktion die ich schreiben möchte, soll dabei immer den kompletten Hash (also alle DEVICE_x) durchlaufen und aus den Unterhashes stets nur 10 oder 20 keys holen und zwar solange, bis keine Daten mehr in den Unterhashes für jedes Device vorhanden sind.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sub BUILD_REQUESTS {
foreach my $device (keys %hash) {
foreach my $vlan (keys %{$hash{$device}}) {
=> durchlaufe es genau 10x

=> übergebe $device und $vlan an eine Subroutine,
welche die SNMP Objekte erstellt

=> entferne $vlan key aus Hash, damit diese nicht wieder
aufgerufen werden können ???
}
}

snmp_dispatcher(); => damit werden die SNMP Abfragen an die Devices
durchgeführt (aus den zuvor erstellten SNMP
Objekten)

! danach müsste nach meinem Verständis geprüft werden, ob sich noch
VLANs Keys in den Unterhashes befinden...richtig???

! wenn JA, dann müsste sich ja die komplette Funktion "sub
BUILD_REQUESTS" noch mal aufrufen und zwar solange, bis es nichts mehr
gibt!? Oder wie würde das ein Perl Profi machen? Mit Rekursion in den
Schleifen schon???
}


Kann man das so machen? Wenn ja, wie mache ich den Absprung aus der Schleife nach 10x durchlaufen bzw. wenn z.B. nach 5 Durchläufen keine Elemente im Hash sind? Und kann man das auch mit dem Aufruf der Funktion aus der gleichen Funktion so anstellen???

Fragen über Fragen. Hoffe ich habe es nicht zu verwirrend dargestellt ;-)

Vielen Dank im Voraus.


mfg
Reen
Last edited: 2011-09-15 15:24:22 +0200 (CEST)

View full thread Auslesen von Hash-Keys und selbstaufrufende Funktion