Loading lib/Travelynx.pm +18 −7 Original line number Diff line number Diff line Loading @@ -1445,8 +1445,9 @@ sub startup { my $interchange_real = 0; my $num_trains = 0; my $num_journeys = 0; my @inconsistencies; my $next_departure = 0; my $next_departure = epoch_to_dt(0); for my $journey (@journeys) { $num_trains++; Loading @@ -1472,18 +1473,27 @@ sub startup { # Note that journeys are sorted from recent to older entries if ( $journey->{rt_arrival} and $next_departure and $next_departure - $journey->{rt_arrival}->epoch and $next_departure->epoch and $next_departure->epoch - $journey->{rt_arrival}->epoch < ( 60 * 60 ) ) { if ( $next_departure->epoch - $journey->{rt_arrival}->epoch < 0 ) { push( @inconsistencies, $next_departure->strftime('%d.%m.%Y %H:%M') ); } else { $interchange_real += ( $next_departure - $journey->{rt_arrival}->epoch ) += ( $next_departure->epoch - $journey->{rt_arrival}->epoch ) / 60; } } else { $num_journeys++; } $next_departure = $journey->{rt_departure}->epoch; $next_departure = $journey->{rt_departure}; } return { km_route => $km_route, Loading @@ -1495,6 +1505,7 @@ sub startup { min_interchange_real => $interchange_real, delay_dep => $delay_dep, delay_arr => $delay_arr, inconsistencies => \@inconsistencies, }; } ); Loading lib/Travelynx/Command/database.pm +13 −0 Original line number Diff line number Diff line Loading @@ -330,6 +330,19 @@ my @migrations = ( } $db->update( 'schema_version', { version => 4 } ); }, # v4 -> v5 # Handle inconsistent data (overlapping journeys) in statistics. Introduces # the "inconsistencies" stats key -> rebuild all stats. sub { my ($db) = @_; $db->query( qq{ truncate journey_stats; update schema_version set version = 5; } ); }, ); sub setup_db { Loading templates/_history_stats.html.ep +23 −0 Original line number Diff line number Diff line % if (@{$stats->{inconsistencies}}) { <div class="row"> <div class="col s12"> <div class="card red darken-4"> <div class="card-content white-text"> <i class="material-icons small right">warning</i> <span class="card-title">Inkonsistente Reisedaten</span> <p> Die folgenden Abfahrtszeiten liegen vor der Ankunftszeit der vorherigen Zugfahrt und wurden bei der Wartezeitberechnung ignoriert. <ul> % for my $date (@{$stats->{inconsistencies}}) { <li><%= $date %></li> % } </ul> </p> </div> </div> </div> </div> % } <div class="row"> <div class="col s12"> <table class="striped"> Loading Loading
lib/Travelynx.pm +18 −7 Original line number Diff line number Diff line Loading @@ -1445,8 +1445,9 @@ sub startup { my $interchange_real = 0; my $num_trains = 0; my $num_journeys = 0; my @inconsistencies; my $next_departure = 0; my $next_departure = epoch_to_dt(0); for my $journey (@journeys) { $num_trains++; Loading @@ -1472,18 +1473,27 @@ sub startup { # Note that journeys are sorted from recent to older entries if ( $journey->{rt_arrival} and $next_departure and $next_departure - $journey->{rt_arrival}->epoch and $next_departure->epoch and $next_departure->epoch - $journey->{rt_arrival}->epoch < ( 60 * 60 ) ) { if ( $next_departure->epoch - $journey->{rt_arrival}->epoch < 0 ) { push( @inconsistencies, $next_departure->strftime('%d.%m.%Y %H:%M') ); } else { $interchange_real += ( $next_departure - $journey->{rt_arrival}->epoch ) += ( $next_departure->epoch - $journey->{rt_arrival}->epoch ) / 60; } } else { $num_journeys++; } $next_departure = $journey->{rt_departure}->epoch; $next_departure = $journey->{rt_departure}; } return { km_route => $km_route, Loading @@ -1495,6 +1505,7 @@ sub startup { min_interchange_real => $interchange_real, delay_dep => $delay_dep, delay_arr => $delay_arr, inconsistencies => \@inconsistencies, }; } ); Loading
lib/Travelynx/Command/database.pm +13 −0 Original line number Diff line number Diff line Loading @@ -330,6 +330,19 @@ my @migrations = ( } $db->update( 'schema_version', { version => 4 } ); }, # v4 -> v5 # Handle inconsistent data (overlapping journeys) in statistics. Introduces # the "inconsistencies" stats key -> rebuild all stats. sub { my ($db) = @_; $db->query( qq{ truncate journey_stats; update schema_version set version = 5; } ); }, ); sub setup_db { Loading
templates/_history_stats.html.ep +23 −0 Original line number Diff line number Diff line % if (@{$stats->{inconsistencies}}) { <div class="row"> <div class="col s12"> <div class="card red darken-4"> <div class="card-content white-text"> <i class="material-icons small right">warning</i> <span class="card-title">Inkonsistente Reisedaten</span> <p> Die folgenden Abfahrtszeiten liegen vor der Ankunftszeit der vorherigen Zugfahrt und wurden bei der Wartezeitberechnung ignoriert. <ul> % for my $date (@{$stats->{inconsistencies}}) { <li><%= $date %></li> % } </ul> </p> </div> </div> </div> </div> % } <div class="row"> <div class="col s12"> <table class="striped"> Loading