diff --git a/rpimonitor/rpimonitord.draft b/rpimonitor/rpimonitord.draft
index b198f18..4f3c929 100755
--- a/rpimonitor/rpimonitord.draft
+++ b/rpimonitor/rpimonitord.draft
@@ -91,7 +91,7 @@ sub Load
$this->{'daemon'}->{'port'} ||= 8888;
$this->{'daemon'}->{'addr'} ||= '0.0.0.0';
$this->{'daemon'}->{'webroot'} ||= "$path/web";
- $this->{'daemon'}->{'status_file'} ||= "$file.json";
+ $this->{'daemon'}->{'status'} ||= "/stat/$file.json";
$this->{'daemon'}->{'delay'} ||= 10;
# Check user and group
@@ -110,8 +110,6 @@ sub Load
-f "$filename" or $this->CreateRRD($filename,$_,$type);
}
}
- #print Data::Dumper->Dump([$this]);
- #exit;
}
sub CreateRRD
@@ -143,6 +141,8 @@ use POSIX;
use IO::Handle;
use HTTP::Daemon;
use HTTP::Status;
+use Data::Dumper;
+use JSON;
sub new
{
@@ -270,18 +270,18 @@ sub DoGET
last;
}
}
- #$isvalid or $connection->send_error(404,"
$path not in
". join ('
',@{$this->{'paths'}} )) and return;
- $isvalid or $connection->send_error(404);
+ $isvalid or $connection->send_error(404,"
$path not in
". join ('
',@{$this->{'paths'}} )) and return;
+ #$isvalid or $connection->send_error(404);
- $path =~ /rpimonitord.json/ and $this->SendStatus() and return;
+ $path =~ /$configuration->{'daemon'}->{'status'}/ and $this->SendStatus() and return;
#The main page (/) is requested
$path =~ /^\/$/ and $path = "/index.html";
#If the file exists we return it
- -f $configuration->{'webroot'}.$path and $this->SendFile($connection, $configuration->{'webroot'}.$path) and return;
+ -f $configuration->{'daemon'}->{'webroot'}.$path and $this->SendFile($connection, $configuration->{'daemon'}->{'webroot'}.$path) and return;
- $this->Debug(2,"Can't find $configuration->{'webroot'}.$path");
+ $this->Debug(2,"Can't find $configuration->{'daemon'}->{'webroot'}.$path");
#Finally send error
$connection->send_error();
@@ -292,13 +292,19 @@ sub Run
my $this = shift;
my $configuration=shift;
$this->Debug(3,"");
-
- unshift(@{$this->{'paths'}}, @{$configuration->{'rrds'}});
-
+ foreach ( @{$configuration->{'rrd'}} ) {
+ foreach my $name ( split (',', $_->{'name'}) ) {
+ unshift(@{$this->{'paths'}}, "/stat/$name.rrd");
+ }
+ }
+ unshift(@{$this->{'paths'}}, $configuration->{'daemon'}->{'status'});
+ #print Data::Dumper->Dump([@{$this->{'paths'}}]);
+
# Create the server
+ #print Data::Dumper->Dump([$configuration->{'daemon'}]);
$this->{'server'} = new HTTP::Daemon ( ReuseAddr => 1,
- LocalAddr => $configuration->{'addr'},
- LocalPort => $configuration->{'port'})
+ LocalAddr => $configuration->{'daemon'}->{'addr'},
+ LocalPort => $configuration->{'daemon'}->{'port'})
or die "Web server not started because or error: $!\n";
$this->Debug(1,"< URL:", $this->{'server'}->url, ">");
@@ -367,17 +373,20 @@ sub Run
$this->Process($configuration->{'dynamic'});
# Store and show extracted data
- #$this->Status($configuration);
+ $this->Status($configuration);
# Check if server is up
- #kill(0,$serverpid) or last;
+ if ( !$configuration->{'daemon'}->{'noserver'}) {
+ kill(0,$serverpid) or last;
+ }
# tempo before next process
$configuration->{'daemon'}->{'delay'} or last;
sleep $configuration->{'daemon'}->{'delay'};
}
- #-f $configuration->{'status_file'} and unlink $configuration->{'status_file'};
- #$this->{'shmid'} and shmctl( $this->{'shmid'}, &IPC_RMID, 0 );
+ -f $configuration->{'daemon'}->{'webroot'}.$configuration->{'daemon'}->{'status'}
+ and unlink $configuration->{'daemon'}->{'webroot'}.$configuration->{'daemon'}->{'status'};
+ $this->{'shmid'} and shmctl( $this->{'shmid'}, &IPC_RMID, 0 );
}
sub Process
@@ -390,8 +399,8 @@ sub Process
my $file = -f $kpi->{'source'} ? $kpi->{'source'} : "$kpi->{'source'} 2>/dev/null|";
open(FEED, $file);
while (){
- @_ = /$kpi->{'regexp'}/;
- $kpi->{'postprocess'} and eval( $kpi->{'postprocess'} );
+ @_ = /$kpi->{'regexp'}/ or next;
+ $kpi->{'postprocess'} and @_=eval( $kpi->{'postprocess'} );
my $i=0;
my @names = split(',',$kpi->{'name'});
foreach ( @_ ) {
@@ -403,90 +412,42 @@ sub Process
}
#print Data::Dumper->Dump([$list]);
- print Data::Dumper->Dump([$this->{'result'}]);
-
-
- exit;
-}
-=cut
-sub Process
-{
- my $this = shift;
- my $list = shift;
-
- #cleanup results
- foreach my $src ( keys (%$list) ){
- foreach my $re ( keys (%{$list->{$src}}) ){
- foreach ( @{$list->{$src}->{$re}} ) {
- $this->{'result'}->{$_} = '';
- }
- }
- }
-
- # for each source, read data and apply all regexp
- foreach my $source ( keys (%$list) ){
- my $file = -f $source ? $source : "$source 2>/dev/null|";
- open(FEED, $file);
- while (){
- foreach my $regexp ( keys (%{$list->{$source}}) ){
- @_ = /$regexp/;
- my $i=0;
- my @names = @{$list->{$source}->{$regexp}};
- foreach ( @_ ) {
- $this->{'result'}->{@names[$i]}=@_[$i];
- $i++;
- }
- }
- }
- close FEED;
- }
+ #print Data::Dumper->Dump([$this->{'result'}]);
}
-=cut
sub Status
{
my $this = shift;
my $configuration = shift;
+ $this->Debug(2,"");
$this->{'result'} or return;
- # construct printable status
- my $status = "";
- my %result = %{$this->{'result'}};
- $status .= "\"$_\":\"$result{$_}\"\n" for (keys %result);
-
- $this->Debug(5,"\n$status");
-
my ($sec,$min,$hour,$mday,$mon,$year) = (localtime)[0,1,2,3,4,5];
- my $localtime=sprintf('"localtime":["%d","%d","%d","%d","%d","%d"]',$year+1900,$mon+1,$mday,$hour,$min,$sec);
+ @{$this->{'result'}->{'localtime'}}=($year+1900,$mon+1,$mday,$hour,$min,$sec);
- chomp($status);
- $status=~s/\n/, /g;
- $status="{ $configuration->{'status'}, $localtime, $status }";
+ my $json=encode_json \%{$this->{'result'}};
+ $this->Debug(4,"\n$json");
# if embeded server is not used, we write the json file else the
# data are transmitted with a shared memory
- if ( $configuration->{'daemon'}->{'noserver'} ){
- open(FILE, "> $configuration->{'webroot'}/stat/$this->{'status_file'}")
+ if ( $configuration->{'daemon'}->{'noserver'} == 1 ){
+ open(FILE, "> $configuration->{'daemon'}->{'webroot'}$configuration->{'daemon'}->{'status'}")
or warn $!;
- print FILE $status ;
+ print FILE $json ;
close(FILE);
}
else{
# write current status (JSON) in shared memory
- shmwrite( $this->{'shmid'}, "$status" . " " x ($shm_size - length($status)), 0, $shm_size );
+ shmwrite( $this->{'shmid'}, "$json" . " " x ($shm_size - length($json)), 0, $shm_size );
}
# add data in round robin database
- my %rrd = %{$configuration->{'section'}};
- for my $section (keys %rrd){
- $section or next;
- my $data="N";
- foreach ( @{$rrd{$section}} ) {
- $data .= ":$this->{'result'}->{$_}";
+ #print Data::Dumper->Dump($configuration->{'rrd'});
+ foreach (@{$configuration->{'rrd'}}){
+ foreach my $name ( split(',',$_->{'name'}) ) {
+ RRDs::update("$configuration->{'daemon'}->{'webroot'}/stat/$name.rrd", "N:".$this->{'result'}->{$name});
}
- $this->Debug(4,"Update $configuration->{'webroot'}/stat/$section.rrd => $data");
- RRDs::update("$configuration->{'webroot'}/stat/$section.rrd", $data);
}
}
diff --git a/rpimonitor/rpimonitord.draft.conf b/rpimonitor/rpimonitord.draft.conf
index dbf0ad3..f702d96 100644
--- a/rpimonitor/rpimonitord.draft.conf
+++ b/rpimonitor/rpimonitord.draft.conf
@@ -14,24 +14,24 @@
# --> Idea: define here the RRD database configuration?
# Define that rpimonitor shouldn't start web server (default:0)
-daemon.noserver=1
+#daemon.noserver=1
# Define the address used by the web server (default:0.0.0.0)
-#server.addr=0.0.0.0
+#daemon.addr=0.0.0.0
# Define port of the web server (default:8888)
-#server.port=8888
+daemon.port=8889
# Define user used to run the server process (default:pi)
# Note: If user is not existing, process will run with uid=1000
-#server.user=pi
+#daemon.user=pi
# Define group used to run the server process (default:pi)
# Note: If group is not existing, process will run with gid=1000
-#server.group=pi
+#daemon.group=pi
# Define the root directory of the web server (Default:./web)
-#server.webroot=
+#daemon.webroot=
########################################################################
@@ -276,7 +276,7 @@ web.status.1.3.line.3.text=Scaling governor: $6
web.status.1.4.name=Temperature
web.status.1.4.icon=temperature.png
web.status.1.4.data.1=soc_temp
-web.status.1.4.line.1.text=Temperature: $1
+web.status.1.4.line.1.text=Temperature: $1 °C
web.status.1.5.name=Memory
web.status.1.5.icon=memory.png