our $WS = {}; # websocket connections
our $ld = {};
+our @last10minsr = ();
+our @last5daysh = ();
+our $windmins = 2; # no of minutes of wind data for the windrose
+our $histdays = 5; # no of days of (half)hour data to search for main graph
+our $updatepermin = 60 / 2.5; # no of updates per minute
our $loop_count; # how many LOOPs we have done, used as start indicator
$c->send($ld->{lasthour_h}) if exists $ld->{lasthour_h};
$c->send($ld->{lastmin_h}) if exists $ld->{lastmin_h};
- # send the last 24 hour's worth of data to the graph
- my $lg = SMGLog->new('day');
- my $tnow = time;
- my $dayno = int($tnow/86400);
- send_history($c, $lg, $tnow, $_) for ($dayno-1, $dayno);
-
# disable timeout
$c->inactivity_timeout(3615);
dbg '***';
read_ld();
-
+
+my $tnow = time;
+my $dayno = int ($tnow/86400);
+for (my $i = 0-$histdays; $i < 0; ++$i ) {
+ push @last5daysh, grab_history(SMGLog->new("day"), "h", $tnow-(86400*$histdays), $dayno+$i+1);
+}
+@last10minsr = map {my ($t, $js) = split(/\s/, $_, 2); $js} grab_history(SMGLog->new("debug"), "r", $tnow-(60*$windmins), $dayno);
+dbg sprintf("last5days = %d last10mins = %d", scalar @last5daysh, scalar @last10minsr);
+
our $dlog = SMGLog->new("day");
dbg "before next tick";
Mojo::IOLoop->next_tick(sub { loop() });
dbg "before app start";
+app->secrets([qw(Here's something that's really seakrett)]);
app->start;
dbg "after app start";
@{$ld->{wind_hour}} = ();
@{$ld->{wind_min}} = ();
- output_str($s, 1) if $s;
+ if ($s) {
+ output_str($s, 1);
+ push @last5daysh, $s;
+ shift @last5daysh if @last5daysh > 5*24;
+ }
write_ld();
} elsif ($ts >= $ld->{last_min} + 60) {
} else {
my $o = gen_hash_diff($ld->{last_h}, \%h);
if ($o) {
+ $o->{Dir} ||= $h{Dir};
+ $o->{Wind} ||= $h{Wind};
+ $o->{Dir} += 0;
+ $o->{Wind} += 0;
$s = genstr($ts, 'r', $o);
+ push @last10minsr, $s;
+ shift @last10minsr while @last10minsr > ($windmins * $updatepermin);
}
else {
dbg "loop rec not changed" if isdbg 'chan';
my $h = shift;
my $j = $json->encode($h);
- my $tm = clocktime($ts, $let eq 'r' ? 1 : 0);
+ my $tm = clocktime($ts, 1);
return qq|{"tm":"$tm","t":$ts,"$let":$j}|;
}
copy $datafn, "$datafn.o";
}
-sub send_history
+sub grab_history
{
- my $c = shift;
my $lg = shift;
- my $tnow = shift;
+ my $let = shift;
+ my $start = shift || time - 86400;
my $dayno = shift;
+ my @out;
+
if ($lg->open($dayno, 'r+')) {
while (my $l = $lg->read) {
- next unless $l =~ /,"h":/;
+ next unless $l =~ /,"$let":/;
my ($t) = $l =~ /"t":(\d+)/;
- if ($t && $t >= $tnow-86400) {
- $c->send($l);
-# dbg "sending: $l";
+ if ($t && $t >= $start) {
+ push @out, $l;
}
}
$lg->close;
}
+ return @out;
}