summaryrefslogtreecommitdiff
path: root/lib/Travelynx
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2019-11-24 20:29:52 +0100
committerDaniel Friesel <derf@finalrewind.org>2019-11-24 20:29:52 +0100
commitb3b0a055b9b4c3ab332f75070ce1fa80a3638105 (patch)
tree789528522c157ca719c5b68dfe4af756305fa188 /lib/Travelynx
parent9782cee53d51dbb65c9b27828f3c28e401849399 (diff)
improve get_user_travels performance, most notably when rendering map1.10.3
only create DateTime objects when needed
Diffstat (limited to 'lib/Travelynx')
-rw-r--r--lib/Travelynx/Controller/Passengerrights.pm34
-rwxr-xr-xlib/Travelynx/Controller/Traveling.pm45
2 files changed, 43 insertions, 36 deletions
diff --git a/lib/Travelynx/Controller/Passengerrights.pm b/lib/Travelynx/Controller/Passengerrights.pm
index 0170ed5..d6ed39c 100644
--- a/lib/Travelynx/Controller/Passengerrights.pm
+++ b/lib/Travelynx/Controller/Passengerrights.pm
@@ -53,6 +53,7 @@ sub mark_substitute_connection {
my @substitute_candidates = reverse $self->get_user_travels(
after => $journey->{sched_departure}->clone->subtract( hours => 1 ),
before => $journey->{sched_departure}->clone->add( hours => 12 ),
+ with_datetime => 1,
);
my ( $first_substitute, $last_substitute );
@@ -76,8 +77,7 @@ sub mark_substitute_connection {
$journey->{from_substitute} = $first_substitute;
$journey->{to_substitute} = $last_substitute;
$journey->{substitute_delay}
- = ( $last_substitute->{rt_arrival}->epoch
- - $journey->{sched_arrival}->epoch ) / 60;
+ = ( $last_substitute->{rt_arr_ts} - $journey->{sched_ar_ts} ) / 60;
}
}
@@ -88,8 +88,9 @@ sub list_candidates {
my $range_start = $now->clone->subtract( months => 6 );
my @journeys = $self->get_user_travels(
- after => $range_start,
- before => $now
+ after => $range_start,
+ before => $now,
+ with_datetime => 1,
);
@journeys = grep { $_->{sched_arrival}->epoch and $_->{rt_arrival}->epoch }
@journeys;
@@ -112,9 +113,10 @@ sub list_candidates {
@journeys = grep { $_->{delay} >= 60 or $_->{connection_missed} } @journeys;
my @cancelled = $self->get_user_travels(
- after => $range_start,
- before => $now,
- cancelled => 1
+ after => $range_start,
+ before => $now,
+ cancelled => 1,
+ with_datetime => 1,
);
for my $journey (@cancelled) {
@@ -126,8 +128,8 @@ sub list_candidates {
$self->mark_substitute_connection($journey);
if ( not $journey->{has_substitute}
- or $journey->{to_substitute}->{rt_arrival}->epoch
- - $journey->{sched_arrival}->epoch >= 3600 )
+ or $journey->{to_substitute}->{rt_arr_ts} - $journey->{sched_arr_ts}
+ >= 3600 )
{
push( @journeys, $journey );
}
@@ -162,9 +164,10 @@ sub generate {
}
my $journey = $self->get_journey(
- uid => $uid,
- journey_id => $journey_id,
- verbose => 1,
+ uid => $uid,
+ journey_id => $journey_id,
+ verbose => 1,
+ with_datetime => 1,
);
if ( not $journey ) {
@@ -185,9 +188,10 @@ sub generate {
}
elsif ( $journey->{delay} < 120 ) {
my @connections = $self->get_user_travels(
- uid => $uid,
- after => $journey->{rt_arrival},
- before => $journey->{rt_arrival}->clone->add( hours => 2 )
+ uid => $uid,
+ after => $journey->{rt_arrival},
+ before => $journey->{rt_arrival}->clone->add( hours => 2 ),
+ with_datetime => 1,
);
if (@connections) {
$self->mark_if_missed_connection( $journey, $connections[-1] );
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm
index c05586a..56de0fb 100755
--- a/lib/Travelynx/Controller/Traveling.pm
+++ b/lib/Travelynx/Controller/Traveling.pm
@@ -397,7 +397,10 @@ sub redirect_to_station {
sub cancelled {
my ($self) = @_;
- my @journeys = $self->get_user_travels( cancelled => 1 );
+ my @journeys = $self->get_user_travels(
+ cancelled => 1,
+ with_datetime => 1
+ );
$self->respond_to(
json => { json => [@journeys] },
@@ -419,7 +422,6 @@ sub map_history {
my $location = $self->app->coordinates_by_station;
-# TODO create map-specific get_user_travels function returning EVA/DS100 station codes?
my @journeys = $self->get_user_travels;
if ( not @journeys ) {
@@ -428,8 +430,6 @@ sub map_history {
with_map => 1,
station_coordinates => [],
station_pairs => [],
- range_from => 0,
- range_to => 0,
);
return;
}
@@ -494,8 +494,6 @@ sub map_history {
with_map => 1,
station_coordinates => \@station_coordinates,
station_pairs => \@station_pairs,
- range_from => $first_departure,
- range_to => $last_departure,
);
}
@@ -515,7 +513,7 @@ sub yearly_history {
# -> Limit time range to avoid accidental DoS.
if ( not( $year =~ m{ ^ [0-9]{4} $ }x and $year > 1990 and $year < 2100 ) )
{
- @journeys = $self->get_user_travels;
+ @journeys = $self->get_user_travels( with_datetime => 1 );
}
else {
my $interval_start = DateTime->new(
@@ -529,8 +527,9 @@ sub yearly_history {
);
my $interval_end = $interval_start->clone->add( years => 1 );
@journeys = $self->get_user_travels(
- after => $interval_start,
- before => $interval_end
+ after => $interval_start,
+ before => $interval_end,
+ with_datetime => 1
);
$stats = $self->get_journey_stats( year => $year );
}
@@ -572,7 +571,7 @@ sub monthly_history {
and $month < 13 )
)
{
- @journeys = $self->get_user_travels;
+ @journeys = $self->get_user_travels( with_datetime => 1 );
}
else {
my $interval_start = DateTime->new(
@@ -586,8 +585,9 @@ sub monthly_history {
);
my $interval_end = $interval_start->clone->add( months => 1 );
@journeys = $self->get_user_travels(
- after => $interval_start,
- before => $interval_end
+ after => $interval_start,
+ before => $interval_end,
+ with_datetime => 1
);
$stats = $self->get_journey_stats(
year => $year,
@@ -632,9 +632,10 @@ sub journey_details {
}
my $journey = $self->get_journey(
- uid => $uid,
- journey_id => $journey_id,
- verbose => 1,
+ uid => $uid,
+ journey_id => $journey_id,
+ verbose => 1,
+ with_datetime => 1,
);
if ($journey) {
@@ -669,8 +670,9 @@ sub edit_journey {
}
my $journey = $self->get_journey(
- uid => $uid,
- journey_id => $journey_id
+ uid => $uid,
+ journey_id => $journey_id,
+ with_datetime => 1,
);
if ( not $journey ) {
@@ -732,10 +734,11 @@ sub edit_journey {
if ( not $error ) {
$journey = $self->get_journey(
- uid => $uid,
- db => $db,
- journey_id => $journey_id,
- verbose => 1
+ uid => $uid,
+ db => $db,
+ journey_id => $journey_id,
+ verbose => 1,
+ with_datetime => 1,
);
$error = $self->journey_sanity_check($journey);
}