diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/DBInfoscreen.pm | 37 | ||||
| -rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 62 | ||||
| -rw-r--r-- | lib/DBInfoscreen/Controller/Wagenreihung.pm | 1 | 
3 files changed, 56 insertions, 44 deletions
| diff --git a/lib/DBInfoscreen.pm b/lib/DBInfoscreen.pm index 548fce2..d83f58f 100644 --- a/lib/DBInfoscreen.pm +++ b/lib/DBInfoscreen.pm @@ -4,6 +4,7 @@ use Mojo::Base 'Mojolicious';  # Copyright (C) 2011-2019 Daniel Friesel <derf+dbf@finalrewind.org>  # License: 2-Clause BSD +use Cache::File;  use Travel::Status::DE::HAFAS;  use Travel::Status::DE::HAFAS::StopFinder;  use Travel::Status::DE::IRIS::Stations; @@ -23,6 +24,42 @@ my %default = (  sub startup {  	my ($self) = @_; +	$self->attr( +		cache_hafas => sub { +			my ($self) = @_; +			return Cache::File->new( +				cache_root => $ENV{DBFAKEDISPLAY_HAFAS_CACHE} +				  // '/tmp/dbf-hafas', +				default_expires => '180 seconds', +				lock_level      => Cache::File::LOCK_LOCAL(), +			); +		} +	); + +	$self->attr( +		cache_iris_main => sub { +			my ($self) = @_; +			return Cache::File->new( +				cache_root => $ENV{DBFAKEDISPLAY_IRIS_CACHE} +				  // '/tmp/dbf-iris-main', +				default_expires => '6 hours', +				lock_level      => Cache::File::LOCK_LOCAL(), +			); +		} +	); + +	$self->attr( +		cache_iris_rt => sub { +			my ($self) = @_; +			return Cache::File->new( +				cache_root => $ENV{DBFAKEDISPLAY_IRISRT_CACHE} +				  // '/tmp/dbf-iris-realtime', +				default_expires => '70 seconds', +				lock_level      => Cache::File::LOCK_LOCAL(), +			); +		} +	); +  	$self->helper(  		'handle_no_results' => sub {  			my ( $self, $backend, $station, $errstr ) = @_; diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm index 7657a85..449d340 100644 --- a/lib/DBInfoscreen/Controller/Stationboard.pm +++ b/lib/DBInfoscreen/Controller/Stationboard.pm @@ -4,7 +4,6 @@ use Mojo::Base 'Mojolicious::Controller';  # Copyright (C) 2011-2019 Daniel Friesel <derf+dbf@finalrewind.org>  # License: 2-Clause BSD -use Cache::File;  use DateTime;  use DateTime::Format::Strptime;  use Encode qw(decode encode); @@ -195,20 +194,7 @@ sub hafas_xml_req {  # quick&dirty, will be cleaned up later  sub get_route_timestamps { -	my ( $ua, $train ) = @_; - -	my $cache_iris_main = Cache::File->new( -		cache_root => $ENV{DBFAKEDISPLAY_IRIS_CACHE} // '/tmp/dbf-iris-main', -		default_expires => '6 hours', -		lock_level      => Cache::File::LOCK_LOCAL(), -	); - -	my $cache_iris_rt = Cache::File->new( -		cache_root => $ENV{DBFAKEDISPLAY_IRISRT_CACHE} -		  // '/tmp/dbf-iris-realtime', -		default_expires => '70 seconds', -		lock_level      => Cache::File::LOCK_LOCAL(), -	); +	my ( $ua, $cache_main, $cache_rt, $train ) = @_;  	$ua->request_timeout(3); @@ -218,7 +204,7 @@ sub get_route_timestamps {  	my $date_yyyy = $train->start->strftime('%d.%m.%Y');  	my $train_no  = $train->type . ' ' . $train->train_no; -	my $trainsearch = hafas_json_req( $ua, $cache_iris_main, +	my $trainsearch = hafas_json_req( $ua, $cache_main,  		"${base}&date=${date_yy}&trainname=${train_no}" );  	if ( not $trainsearch ) { @@ -246,14 +232,14 @@ sub get_route_timestamps {  	$base = 'https://reiseauskunft.bahn.de/bin/traininfo.exe/dn'; -	my $traininfo = hafas_json_req( $ua, $cache_iris_main, +	my $traininfo = hafas_json_req( $ua, $cache_main,  		"${base}/${trainlink}?rt=1&date=${date_yy}&L=vs_json" );  	if ( not $traininfo or $traininfo->{error} ) {  		return;  	} -	my $traindelay = hafas_xml_req( $ua, $cache_iris_rt, +	my $traindelay = hafas_xml_req( $ua, $cache_rt,  		"${base}/${trainlink}?rt=1&date=${date_yy}&L=vs_java3" );  	my $ret = {}; @@ -297,25 +283,6 @@ sub get_results_for {  	my ( $backend, $station, %opt ) = @_;  	my $data; -	my $cache_hafas = Cache::File->new( -		cache_root      => $ENV{DBFAKEDISPLAY_HAFAS_CACHE} // '/tmp/dbf-hafas', -		default_expires => '180 seconds', -		lock_level      => Cache::File::LOCK_LOCAL(), -	); - -	my $cache_iris_main = Cache::File->new( -		cache_root => $ENV{DBFAKEDISPLAY_IRIS_CACHE} // '/tmp/dbf-iris-main', -		default_expires => '6 hours', -		lock_level      => Cache::File::LOCK_LOCAL(), -	); - -	my $cache_iris_rt = Cache::File->new( -		cache_root => $ENV{DBFAKEDISPLAY_IRISRT_CACHE} -		  // '/tmp/dbf-iris-realtime', -		default_expires => '70 seconds', -		lock_level      => Cache::File::LOCK_LOCAL(), -	); -  	# Cache::File has UTF-8 problems, so strip it (and any other potentially  	# problematic chars).  	my $cache_str = $station; @@ -336,8 +303,8 @@ sub get_results_for {  			$station = $station_matches[0][0];  			my $status = Travel::Status::DE::IRIS->new(  				station        => $station, -				main_cache     => $cache_iris_main, -				realtime_cache => $cache_iris_rt, +				main_cache     => $opt{cache_iris_main}, +				realtime_cache => $opt{cache_iris_rt},  				log_dir        => $ENV{DBFAKEDISPLAY_XMLDUMP_DIR},  				lookbehind     => 20,  				lwp_options    => { @@ -367,7 +334,7 @@ sub get_results_for {  		}  	}  	elsif ( $backend eq 'ris' ) { -		$data = $cache_hafas->thaw($cache_str); +		$data = $opt{cache_hafas}->thaw($cache_str);  		if ( not $data ) {  			if ( $ENV{DBFAKEDISPLAY_STATS} ) {  				log_api_access(); @@ -385,7 +352,7 @@ sub get_results_for {  				results => [ $status->results ],  				errstr  => $status->errstr,  			}; -			$cache_hafas->freeze( $cache_str, $data ); +			$opt{cache_hafas}->freeze( $cache_str, $data );  		}  	}  	else { @@ -419,7 +386,11 @@ sub handle_request {  	my $save_defaults  = $self->param('save_defaults') // 0;  	my $limit          = $self->param('limit') // 0;  	my @train_types    = split( /,/, $self->param('train_types') // q{} ); -	my %opt; +	my %opt            = ( +		cache_hafas     => $self->app->cache_hafas, +		cache_iris_main => $self->app->cache_iris_main, +		cache_iris_rt   => $self->app->cache_iris_rt, +	);  	my $api_version  	  = $backend eq 'iris' @@ -943,8 +914,11 @@ sub handle_request {  						[ $result->sched_route_post ]  					)  				]; -				my ( $route_ts, $him ) -				  = get_route_timestamps( $self->ua, $result ); +				my ( $route_ts, $him ) = get_route_timestamps( +					$self->ua, +					$self->app->cache_iris_main, +					$self->app->cache_iris_rt, $result +				);  				if ($route_ts) {  					for my $elem (  						@{ $departures[-1]{route_pre_diff} }, diff --git a/lib/DBInfoscreen/Controller/Wagenreihung.pm b/lib/DBInfoscreen/Controller/Wagenreihung.pm index 986019b..fa501a8 100644 --- a/lib/DBInfoscreen/Controller/Wagenreihung.pm +++ b/lib/DBInfoscreen/Controller/Wagenreihung.pm @@ -12,6 +12,7 @@ sub wagenreihung {  	my $departure = $self->stash('departure');  	my $wr = Travel::Status::DE::DBWagenreihung->new( +		cache        => $self->app->cache_iris_rt,  		departure    => $departure,  		train_number => $train,  	); | 
