Schrift
[thread]8793[/thread]

While Schleife: Durchsuchung mehrere IP Adressen



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
nour
 2007-02-27 14:15
#74625 #74625
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich habe nun Folgende Problem :
Code: (dl )
1
2
3
4
5
6
7
8
ich arbeite an 3 Routers: die die folgenden Daten haben 

R-Id      Name        Ip              Pwd
1          r1      20.100.2.100      router
2          r2      20.100.2.99       router
3          r3      20.100.2.80       router

ich wollte mittela der While schleife aller router durchsuchen und jedesmal die update in meinem unteren code Führen





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
26
27
28
29
#!/usr/bin/perl -w
#DatenbankAbfragen

use strict;
use warnings;
use DBI;
use Net::Telnet::Cisco;
our $dbh;
my $session = Net::Telnet::Cisco-> new (Host  => '10.200.2.105');

While('R-id','Name','ip','pwd'){

sub get Router{

my $name=shift;
my $ip=shift;
my $user=shift;
my $pwd=shift;
my ($query,$sth,$sth1,$execu,$newdata,$ds,$summe);



$query = "UPDATE GATE_STATE SET STATE.Time=NOW() WHERE STATE.Name='$name' ORDER BY STATE.Time DESC LIMIT 1";
         $sth1=$dbh->prepare($query) or die "Querry Error prepare: $DBI::errstr\n";
         $sth1->execute or die "Querry Error execute: $DBI::errstr\n";
         $sth->finish();
}

}


was soll ich ja nun an der While Schleife ändern damit mein code jder Router daten durchläuft.

Danke im Voraus.
renee
 2007-02-27 14:36
#74626 #74626
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ein paar Anmerkungen:

*) "while" schreibt man klein
*) Das wird eine Endlosschleife, da die Bedingung immer wahr ist
*) Warum definierst Du eine Sub innerhalb der Schleife?
*) Wo wird die Verbindung zur Datenbank hergestellt?
*) Du solltest die ?-Schreibweise von CPAN:DBI verwenden (wurde Dir schon 1000x gesagt)
*) Wenn Du eine WHERE-Bedingung setzt, werden zu 90% nicht alle Router durchlaufen (außer alle haben den gleichen Namen)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
vayu
 2007-02-27 14:38
#74627 #74627
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
1. while wird kleingeschrieben
2. die bedingung in deiner while-schleife wird immer auf true ausgewertet werden => endlosschleife
3. "sub get Router" kann so nicht funktionieren => getRouter zusammenschreiben
4. du definierst die sub IN der while schleife, rufst sie aber auch niemals auf
5. wo werden die Daten die du durchsuchen willst gespeichert?

edit: renee war schneller :)\n\n

<!--EDIT|vayu|1172580027-->
nour
 2007-02-27 14:59
#74628 #74628
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Hallo,

die Verbindung zur Datenbank habe ich net geschrieben
hier ist mein Code Neulich mit dem Verbindung und den SQL Statement!

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/perl -w
#DatenbankAbfragen

use strict;
use warnings;
use DBI;
use Net::Telnet::Cisco;
our $dbh;
my $session = Net::Telnet::Cisco-> new (Host  => '10.200.2.105');

####################Verbindung##############
open(DAT, '<','../gate_common/MySQLAccount.txt') or  die"Could not open SQL-Data-file!";
$raw_data=<DAT>;
close(DAT);
chomp $raw_data;

my  ($host,$user,$pass,$db) = split(/:/, $raw_data);
print "host ".$host."\n"."user ".$user."\n"."pass ".$pass."\n"."db   ".$db."\n";

$dbh = DBI->connect("DBI:mysql:".$db.":".$host,$user,$pass) or die "Connect Error: $DBI::errstr()\n";

getRouter ('1','r1','20.100.2.100' ,'router');


$dbh->disconnect;  

##########################################

sub get Router{

my $name=shift;
my $ip=shift;
my $user=shift;
my $pwd=shift;
my ($query,$sth,$sth1,$execu,$newdata,$ds,$summe);



$query = "UPDATE GATE_STATE SET STATE.Time=NOW() WHERE STATE.Name='$name' ORDER BY STATE.Time DESC LIMIT 1";
        $sth1=$dbh->prepare($query) or die "Querry Error prepare: $DBI::errstr\n";
        $sth1->execute or die "Querry Error execute: $DBI::errstr\n";
        $sth->finish();



$query="SELECT Router.ID, Router.Name,Router.TS,Router.State,Router.conf FROM Router WHERE Router.Name=$name ORDER BY  Router.ID DESC LIMIT 1";
     $sth = $dbh->prepare($query) or die "Error in query prepare: $DBI::errstr\n";
     $sth->execute or die "Error executing query: $DBI::errstr\n";
$sth->finish();

}



So sieht mein Skript ohne "while Shliefe".
denkt ihr dass ist unmöglich eine Durchsuchung von eine Reihe von Router daten zu machen !!!

Danke im voraus
renee
 2007-02-27 15:03
#74629 #74629
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Unmöglich ist es nicht...

Um alle Router zu bearbeiten (und die Subroutine so zu lassen wie sie ist):
aus:
Code: (dl )
getRouter ('1','r1','20.100.2.100' ,'router');


das hier machen:
Code: (dl )
1
2
3
for('r1','r2','r3'){
getRouter ('1',$_,'20.100.2.100' ,'router');
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
nour
 2007-02-27 15:19
#74630 #74630
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
ja das stimmt aber du merkst ja dass die Router haben nicht dasselber ID und dasselber IP Adressen !!!
renee
 2007-02-27 15:30
#74631 #74631
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=nour,27.02.2007, 14:19]ja das stimmt aber du merkst ja dass die Router haben nicht dasselber ID und dasselber IP Adressen !!![/quote]
Ja, und was soll mir das jetzt sagen?

Was möchtest Du genau machen? Du hast oben die Beispieltabelle gezeigt. Und wie soll das aktualisiert werden?

Du machst das "UPDATE" auf Grund des Names. Was hat die IP damit zu tun?

Fragen über Fragen... Du solltest mal ganz detailliert beschreiben was Du tun möchtest!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
nour
 2007-02-27 15:42
#74632 #74632
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
bevor dass ich die Update mache will ich zu erst mal in einem Router einloggen : Id, Name , Ip ,Pwd

Und dann mache ich eine Update

Ich wollte ien schleife die mir alle router die ich habe durchsucht und für jeden eine update macht.

mit den for schleife unten wird im fall von der "r2" nicht stimmen da die Daten von der "r2" sind (2,r2,20.100.2.99 ,'router')

Code: (dl )
1
2
3
for('r1','r2','r3'){
getRouter ('1',$_,'20.100.2.100' ,'router');
}

Danke
renee
 2007-02-27 15:52
#74633 #74633
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich kann nicht hellsehen, woher die Daten stammen, die das UPDATE bestimmen... Woher bekommst Du die Adresse von r1?

In Deinem UPDATE berücksichtigst Du die IP-Adresse überhaupt nicht. Wenn das wichtig ist, solltest Du dein SQL-Statement noch anpassen.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
nour
 2007-02-27 16:07
#74634 #74634
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Mein code ist sehr aufwendich aber ich gib dir die statement die ich brauche

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/perl -w
#DatenbankAbfragen

use strict;
use warnings;
use DBI;
use Net::Telnet::Cisco;
our $dbh;

my $session = Net::Telnet::Cisco-> new (Host => '10.200.2.105');

####################Verbindung##############
open(DAT, '<','../gate_common/MySQLAccount.txt') or die"Could not open SQL-Data-file!";
$raw_data=<DAT>;
close(DAT);
chomp $raw_data;

my ($host,$user,$pass,$db) = split(/:/, $raw_data);
print "host ".$host."\n"."user ".$user."\n"."pass ".$pass."\n"."db ".$db."\n";

$dbh = DBI->connect("DBI:mysql:".$db.":".$host,$user,$pass) or die "Connect Error: $DBI::errstr()\n";

getRouter ('1','r1','20.100.2.100' ,'router');


$dbh->disconnect;

##########################################

sub get Router{

my $name=shift;
my $ip=shift;
my $user=shift;
my $pwd=shift;
my @output
my ($query,$sth,$sth1,$execu,$newdata,$ds,$summe);



$query = "UPDATE GATE_STATE SET STATE.Time=NOW() WHERE STATE.Name='$name' AND IP='$ip' ORDER BY STATE.Time DESC LIMIT 1";
$sth1=$dbh->prepare($query) or die "Querry Error prepare: $DBI::errstr\n";
$sth1->execute or die "Querry Error execute: $DBI::errstr\n";
$sth->finish();

$query = "INSERT INTO Router(ID,Name,IP,State,Config) VALUES ('','$name',$ip,'UP','@output')";
$sth1 = $dbh->prepare($query) or die "Error in query prepare: $DBI::errstr\n";
$sth1->execute or die "Error executing query: $DBI::errstr\n";
$sth->finish();


}


Beim Insert brauche ich die daten von den Router an dem ich eingeloggt bin in der Tabelle einzutragen und die Ip wird in der Update auch verlangt


Danke
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2007-02-27 14:15.