|
|
cgi skript umschreiben: Kann kein CGI nutzen.
[thread]665[/thread]
hide all
open all
|
Earl_Mobilee
|
2006-02-02 12:36 |
|
User since 2006-02-02
10
articles
|
Hallo allerseits,
ich bin neu hier und neu im Umgang mit Perl/CGI.
Ich will mailgraph nutzen. Ein Programm zum erstellen von Grafiken
mit dem eMail-Traffic. Das Programm laeuft super. Es gibt eine
mailgraph.pl Datei und eine mailgraph.cgi Datei.
Die .pl Datei erstellt die RRA und sammelt die Daten.
Die.cgi erstellt die Grafiken. Allerdings muss es dazu in einem
cgi-bin Verzeichnis liegen. Ich kann aber kein webserver auf dem
Rechner gebrauchen. Also muss ich die Grafiken irgendwie
anders erstellen. Nur weiss ich nicht wie.
Wenn ich das cgi auf der Konsole aufrufe bekomme ich den html
code angezeigt. Es werden aber nicht die Grafiken erstellt die ich
benoetige. Die werden nur temporaer erstellt wenn ich mit Mozilla
auf die Site gehe. Sie werden auch NICHT erstellt wenn ich z.B. mit
lynx oder wget die Seite lade.
Ich probiere schon so einige Sachen in dem Skript zu aendern, allerdings ohne Erfolg. send_image
Ich schick mal etwas Code mit. Vielleicht weiss ja jemand ne Loesung.
| Code: |
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 |
sub send_image($) { my ($file)= @_;
-r $file or do { print "Content-type: text/plain\n\nERROR: can't find $file\n"; exit 1; };
print "Content-type: image/png\n"; print "Content-length: ".((stat($file))[7])."\n"; print "\n"; open(IMG, $file) or die; my $data; print $data while read(IMG, $data, 16384)>0; }
sub main() { my $uri = $ENV{REQUEST_URI} || ''; $uri =~ s/\/[^\/]+$//; $uri =~ s/\//,/g; $uri =~ s/(\~|\%7E)/tilde,/g; mkdir $tmp_dir, 0777 unless -d $tmp_dir; mkdir "$tmp_dir/$uri", 0777 unless -d "$tmp_dir/$uri";
my $img = $ENV{QUERY_STRING}; if(defined $img and $img =~ /\S/) { if($img =~ /^(\d+)-n$/) { my $file = "$tmp_dir/$uri/mailgraph_$1.png"; graph($graphs[$1]{seconds}, $file); send_image($file); } elsif($img =~ /^(\d+)-e$/) { my $file = "$tmp_dir/$uri/mailgraph_$1_err.png"; graph_err($graphs[$1]{seconds}, $file); send_image($file); } else { die "ERROR: invalid argument\n"; } } else { print_html; } }
|
MfG Torsten\n\n
<!--EDIT|renee|1138877886-->
|
|
|
|
|
renee
|
2006-02-02 12:43 |
|
User since 2003-08-04
12979
articles
|
|
Du muesstest den Code, der die Grafiken generiert einfach in ein eigenes Skript stecken. Mit dem oben geposteten Code kann man nicht wirklich viel anfangen...
|
|
|
|
|
|
|
Earl_Mobilee
|
2006-02-02 12:50 |
|
User since 2006-02-02
10
articles
|
Ja da hapert es aber schon. Vielleicht kannst Du mir erklaeren
was hier passiert. Ich denke das ist der wichtige Teil in dem Skript.
Denn das tmp_dir habe ich als Variable definiert. Das kann ich schon. und die png's beginnen auch mit mailgraph.
| Code: |
|
my $img = $ENV{QUERY_STRING}; if(defined $img and $img =~ /\S/) { if($img =~ /^(\d+)-n$/) { my $file = "$tmp_dir/$uri/mailgraph_$1.png"; graph($graphs[$1]{seconds}, $file); send_image($file); } elsif($img =~ /^(\d+)-e$/) { my $file = "$tmp_dir/$uri/mailgraph_$1_err.png"; graph_err($graphs[$1]{seconds}, $file); send_image($file); } else { die "ERROR: invalid argument\n"; }
|
\n\n
<!--EDIT|renee|1138877918-->
|
|
|
|
|
renee
|
2006-02-02 12:57 |
|
User since 2003-08-04
12979
articles
|
|
Die wichtigen Teile duerfte wohl eher in den Methoden graph und graph_err liegen, denn die werden hier einfach aufgerufen. Also in diesem Code-Ausschnitt wird keine Grafik erstellt...
|
|
|
|
|
|
|
renee
|
2006-02-02 13:02 |
|
User since 2003-08-04
12979
articles
|
Also, als erstes bitte ich Dich, das naechste mal die [code_]-Tags (ohne den Unterstrich) zu verwenden (so wie ich das jetzt nachtraeglich bei Deinen Code-Snippets eingefuegt habe).
Wenn Du das CGI aufrust, wird es wohl so geschehen: www.DeineDomain.tld/cgi-bin/mailgrah.cgi?23847-n
Das Skript parst diese Zahl heraus und je nachdem, ob nach der Zahl ein -n folgt oder ein -e wird die Methode graph oder graph_err aufgerufen. Dort wird dann die Grafik erzeugt...
|
|
|
|
|
|
|
Earl_Mobilee
|
2006-02-02 13:05 |
|
User since 2006-02-02
10
articles
|
Dann sende ich mal ein sub graph.
mir ist es wichtig das ich die Grafiken statisch erstellt werden und ohne
dem Aurfuf des cgi-skripts in einem cgi-bin Verzeichnis.
| Code: |
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 |
sub graph($$) { my ($range, $file) = @_; my $step = $range*$points_per_sample/$xpoints; rrd_graph($range, $file, $ypoints, "DEF:sent=$rrd:sent:AVERAGE", "DEF:msent=$rrd:sent:MAX", "CDEF:rsent=sent,60,*", "CDEF:rmsent=msent,60,*", "CDEF:dsent=sent,UN,0,sent,IF,$step,*", "CDEF:ssent=PREV,UN,dsent,PREV,IF,dsent,+", "AREA:rsent#$color{sent}:Sent ", 'GPRINT:ssent:MAX:total\: %8.0lf msgs', 'GPRINT:rsent:AVERAGE:avg\: %5.2lf msgs/min', 'GPRINT:rmsent:MAX:max\: %4.0lf msgs/min\l',
"DEF:recv=$rrd:recv:AVERAGE", "DEF:mrecv=$rrd:recv:MAX", "CDEF:rrecv=recv,60,*", "CDEF:rmrecv=mrecv,60,*", "CDEF:drecv=recv,UN,0,recv,IF,$step,*", "CDEF:srecv=PREV,UN,drecv,PREV,IF,drecv,+", "LINE2:rrecv#$color{received}:Received", 'GPRINT:srecv:MAX:total\: %8.0lf msgs', 'GPRINT:rrecv:AVERAGE:avg\: %5.2lf msgs/min', 'GPRINT:rmrecv:MAX:max\: %4.0lf msgs/min\l', ); }
|
Kann man hier das gesamte Skript als zip anhaengen?
MfG\n\n
<!--EDIT|renee|1138878694-->
|
|
|
|
|
renee
|
2006-02-02 13:11 |
|
User since 2003-08-04
12979
articles
|
Nee, Anhaenge koennen nur Moderatoren und Admins...
Genau hier wird Dein Graph erzeugt (RRD scheint in letzter Zeit immer mehr in Mode zu kommen ;) )...
Was ist das fuer ein Array mit dem namen @graphs??
Edit:
Damit hast Du schonmal eine Methode von dem Perlskript. Mit graph_err hast Du die zweite Methode.
Du musst Dich noch drum kuemmern, was in dem Array @graphs steht. Und dann steht das Skript schon fast...\n\n
<!--EDIT|renee|1138878886-->
|
|
|
|
|
|
|
Earl_Mobilee
|
2006-02-02 13:14 |
|
User since 2006-02-02
10
articles
|
my @graphs = (
{ title => 'Day Graphs', seconds => 3600*24, },
{ title => 'Week Graphs', seconds => 3600*24*7, },
{ title => 'Month Graphs', seconds => 3600*24*31, },
{ title => 'Year Graphs', seconds => 3600*24*365, },
|
|
|
|
|
renee
|
2006-02-02 13:24 |
|
User since 2003-08-04
12979
articles
|
Ok, das ist dann nicht so schwer...
(ungetestet)
| Code: |
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 53 54 55 56 57 58 59 60 61 62 63 |
#!/usr/bin/perl
use strict; use warnings; use RRDs;
my @graphs = ( { title => 'Day Graphs', seconds => 3600*24, }, { title => 'Week Graphs', seconds => 3600*24*7, }, { title => 'Month Graphs', seconds => 3600*24*31, }, { title => 'Year Graphs', seconds => 3600*24*365, },
my ($number,$option) = $ARGV[0] =~ /^(\d+)-(\w)$/; my $uri = $ARGV[1]; my ($xpoints,$ypoints,$points_per_sample) = (); # werte musst Du noch eintragen
# hier noch variablen wie $rrd, %colors,etc. definieren
die "Falscher Aufruf" unless($number && $option && $uri);
my $path = '/meineBilder/';
my $filepath = $path.$uri.'/mailgraph-'.$number.'.png';
if($option eq 'n'){ my $filepath = $path.$uri.'/mailgraph-'.$number.'.png'; graph($filepath,$graphs[$number]->{seconds}); } elsif($option eq 'e'){ my $filepath = $path.$uri.'/mailgraph-'.$number.'_error.png'; graph_err($filepath,$graphs[$number]->{seconds}); }
#hier die sub graph_err einfuegen
sub graph{ my ($range, $file) = @_; my $step = $range*$points_per_sample/$xpoints; rrd_graph($range, $file, $ypoints, "DEF:sent=$rrd:sent:AVERAGE", "DEF:msent=$rrd:sent:MAX", "CDEF:rsent=sent,60,*", "CDEF:rmsent=msent,60,*", "CDEF:dsent=sent,UN,0,sent,IF,$step,*", "CDEF:ssent=PREV,UN,dsent,PREV,IF,dsent,+", "AREA:rsent#$color{sent}:Sent ", 'GPRINT:ssent:MAX:total\: %8.0lf msgs', 'GPRINT:rsent:AVERAGE:avg\: %5.2lf msgs/min', 'GPRINT:rmsent:MAX:max\: %4.0lf msgs/min\l',
"DEF:recv=$rrd:recv:AVERAGE", "DEF:mrecv=$rrd:recv:MAX", "CDEF:rrecv=recv,60,*", "CDEF:rmrecv=mrecv,60,*", "CDEF:drecv=recv,UN,0,recv,IF,$step,*", "CDEF:srecv=PREV,UN,drecv,PREV,IF,drecv,+", "LINE2:rrecv#$color{received}:Received", 'GPRINT:srecv:MAX:total\: %8.0lf msgs', 'GPRINT:rrecv:AVERAGE:avg\: %5.2lf msgs/min', 'GPRINT:rmrecv:MAX:max\: %4.0lf msgs/min\l', ); }
|
Aufruf waere dann ungefaehr so:
Skript.pl 4-n DasWasInRequestURIStehenWuerde\n\n
<!--EDIT|renee|1138879586-->
|
|
|
|
|
|
|
Earl_Mobilee
|
2006-02-02 13:41 |
|
User since 2006-02-02
10
articles
|
[quote=renee,02.02.2006, 12:24][/quote]
>Ok, das ist dann nicht so schwer...
Naja, ich find schon. Aber schon mal vielen Dank.
Werd mich gleich an die Arbeit machen.
Ich hab mich nie gross mit programmieren befasst,
weil es gibt doch schon fuer alles ein Prog.
Aber jetzt bin ich eines besseren belehrt.
>Skript.pl 4-n DasWasInRequestURIStehenWuerde
Das versteh ich noch nicht ganz.
|
|
|
|
View all threads created 2006-02-02.
|