Schrift
[thread]8692[/thread]

ROUTER Configuration: Config-daten in der Tabelle speichern

Leser: 1


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
nour
 2007-01-29 12:35
#73748 #73748
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Hallo leute,

ich habe folgende Code der liefert mir die Configuration meines Router
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
use strict;
use warnings;
use DBI;
use Net::Telnet::Cisco;
use Digest::MD5;

our $dbh;


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

sub Login{


 my @output = $session->cmd('show run');
 my $List = join '',@output;
 my @array = split /interface ATM/,$List;
 shift @array;
 my %hash;
 for my $interface(@array){
 my ($bez) = $interface =~ /^([^\n]+)/;
 my @data = $interface =~ /(data.*?cbr 128)/sg;
 for my $data(@data){
     my ($id,$ip) = $data =~ /(data\s*[\d\/]+).*?protocol ip ((?:\d{1,3}\.){3}\d{1,3})/s;
     push @{$hash{'ATM'.$bez}}, [$id,$ip];
 }

}
 
for my $atm(keys %hash){
 print sprintf("%10s | %10s | %15s\n",$atm,'data','IP');
 print sprintf("%10s | %10s | %15s\n",' ',@$_) for @{$hash{$atm}};
}
}


als ergebnis bekomme ich folgendes:
Code: (dl )
1
2
3
4
           |        data   |              IP
          |     22/180 |    10.200.50.81
          |     22/190 |    10.200.50.83
       


und jetzt ich habe der Folgende SQL Statement


Code: (dl )
1
2
3
4
5
6
7
8
$query= "INSERT INTO RC_CISCO_NB(ID,NEID,TS,VPI,VCI,PCR,data,IP) VALUES(' ','$neid',NOW(),'','','','','')";

$sth = $dbh->prepare($query) or die "Querry Error prepare: $DBI::errstr\n";
         $sth->execute or die "Querry Error execute: $DBI::errstr\n";
         $datarefid = $dbh->{'mysql_insertid'};
         $sth->finish();



der Problem wie bekomme ich die ERgebnisse meines COnfigouration "data" , und " ip" oben in meinem Datenbank , was soll ich in der SQL STATMENT ändern??


Danke im VOraus
renee
 2007-01-29 12:50
#73749 #73749
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
ungetestet:
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
use strict;
use warnings;
use DBI;
use Net::Telnet::Cisco;
use Digest::MD5;

our $dbh = DBI->connect(...) or die $DBI::errstr;

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

sub Login{
my @output = $session->cmd('show run');
my $List = join '',@output;
my @array = split /interface ATM/,$List;
shift @array;
my %hash;
for my $interface(@array){
my ($bez) = $interface =~ /^([^\n]+)/;
my @data = $interface =~ /(data.*?cbr 128)/sg;
for my $data(@data){
my ($id,$ip) = $data =~ /(data\s*[\d\/]+).*?protocol ip ((?:\d{1,3}\.){3}\d{1,3})/s;
push @{$hash{'ATM'.$bez}}, [$id,$ip];
}
}

my $query = "INSERT INTO RC_CISCO_NB(NEID,TS,VPI,VCI,PCR,data,IP) VALUES(?,NOW(),'','','',?,?)";
my $sth = $dbh->prepare($query) or die $dbh->errstr();
for my $atm(keys %hash){
print sprintf("%10s | %10s | %15s\n",$atm,'data','IP');
print sprintf("%10s | %10s | %15s\n",' ',@$_) for @{$hash{$atm}};
$sth->execute($neid,$_,$atm) or die $dbh->errstr() for(@{$hash{$atm}});
}
}


Hier wird allerdings vorausgesetzt, dass Die Spalte ID automatisch incrementiert wird.
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-01-30 13:35
#73750 #73750
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Hallo (Rene) /Leute,

ich habe öfter versucht den eingegeben lösung von "Renne" zu compilieren  aber leider commt immer die Folgende Fehler (Colum Anzahl:
Code: (dl )
1
2
DBD::mysql::st execute failed: called with 3 bind variables when 2 are needed at ./test.pl line 114.
Error during show run command!



kann mich jemand helfen!

danke
nour
 2007-01-30 13:36
#73751 #73751
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Ach ja die line 114 ist damit gemeint :

Code: (dl )
 $sth->execute($neid,$_,$atm) or die $dbh->errstr() for(@{$hash{$atm}});
renee
 2007-01-30 13:53
#73752 #73752
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und wie sieht der Code obendrüber aus? (der SQL-Befehl)
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/
nepos
 2007-01-30 14:20
#73753 #73753
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=nour,30.01.2007, 12:35]Hallo (Rene) /Leute,

ich habe öfter versucht den eingegeben lösung von "Renne" zu compilieren aber leider commt immer die Folgende Fehler (Colum Anzahl:
Code: (dl )
1
2
DBD::mysql::st execute failed: called with 3 bind variables when 2 are needed at ./test.pl line 114.
Error during show run command!



kann mich jemand helfen!

danke[/quote]
Das heißt, dass du execute() mit 3 Werten aufrufst, dein mit prepare() vorbereiteter SQL-Befehl aber nur 2 Werte benötigt.
Wenn du den Fehler selbst nicht findest, dann solltest du mal wie Renee sagt, den SQL-Befehl aus dem prepare() davor posten.
nour
 2007-01-30 15:42
#73754 #73754
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe die Fehler gefunden!!

nun habe ich einen Anderen fehler und zwar
Code: (dl )
1
2
3
4
5
6
7
Use of uninitialized value in string eq at line 145

line 145: if (($newdata->{NEID} eq ($neid))){

}

HINWEIS : Beide $newdata und $neid sind am Anfang der Skript schön deklariert!


ich verstehe nicht woran die Fehler liegt!

Ich weiss dass es dumm vor kommt solche fragen zu stellen aber seit eine stunde Kompeliere ich mein skript und bekomme ich immer dieselber fehler , die habe ich oben erwähnt.


Danke im Voraus
renee
 2007-01-30 15:50
#73755 #73755
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bitte etwas mehr Code! Mit so kleinen Stückchen kann man in 99% der Fälle nicht wirklich weiterhelfen...
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-01-30 16:05
#73756 #73756
User since
2006-11-15
108 Artikel
BenutzerIn
[default_avatar]
der code sieht wie folgend aus
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
sub Rooter{
my $neid = 2923
my ($NB_TS,$NBvpi,$NBvci,$NBpcr,$pvc);
my ($query,$sth,$sth1,$execu,$newdata,$ds,$summe);

$query = "SELECT ID,NEID,VPI,VCI,PCR,PVC,IP FROM NB WHERE NB.NEID='$neid' ORDER BY  RC_CISCO_NB.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";
if($newdata = $sth->fetchrow_hashref){
if (($newdata->{NEID} eq ($neid))&& ($newdata->{TS} eq ($NB_TS)))

{


#NODEB Daten Gleich


print " GLEICHE NB\n";
               $query="UPDATE GATE_STATE SET TS_LastChange=NOW() WHERE NEID='$neid' ORDER BY TS_LastChange DESC LIMIT 1;";
               $sth= $dbh->prepare($query) or die "Querry Error prepare: $DBI::errstr\n";
               $sth->execute or die "Querry Error execute: $DBI::errstr\n";
               $sth->finish()

}
$sth->finish(); &n
bsp;
}
renee
 2007-01-30 16:13
#73757 #73757
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
sub Rooter{
my $neid = 2923
my ($NB_TS,$NBvpi,$NBvci,$NBpcr,$pvc);


Hier fehlt ein Semikolon nach der 2923


Code: (dl )
1
2
3
 $query = "SELECT ID,NEID,VPI,VCI,PCR,PVC,IP FROM NB WHERE NB.NEID='$neid' ORDER BY  RC_CISCO_NB.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";


Hier sollte wieder die ?-Notation von CPAN:DBI verwendet werden:

Code: (dl )
1
2
3
 $query = "SELECT ID,NEID,VPI,VCI,PCR,PVC,IP FROM NB WHERE NB.NEID=? ORDER BY  RC_CISCO_NB.ID DESC LIMIT 1 ";
$sth = $dbh->prepare($query) or die "Error in query prepare: $DBI::errstr\n";
$sth->execute($neid) or die "Error executing query: $DBI::errstr\n";


Code: (dl )
if($newdata = $sth->fetchrow_hashref){


Du willst hier vermutlich keinen Abgleich machen, sondern willst eigentlich die while-Schleife einsetzen:
Code: (dl )
1
2
3
4
5
while($newdata = $sth->fetchrow_hashref){
if (($newdata->{NEID} eq ($neid))&& ($newdata->{TS} eq ($NB_TS)))

{


Code: (dl )
if (($newdata->{NEID} eq ($neid))&& ($newdata->{TS} eq ($NB_TS)))


Du hast uns also eine falsche Zeile gezeigt bei der Fehlermeldung. Denn $NB_TS ist zwar weiter oben deklariert aber nicht initialisiert...\n\n

<!--EDIT|renee|1170166473-->
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/
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2007-01-29 12:35.