diff options
| -rw-r--r-- | index.pl | 86 | 
1 files changed, 50 insertions, 36 deletions
| @@ -33,49 +33,63 @@ sub log_api_access {  sub get_results_for {  	my ( $backend, $station, %opt ) = @_; +	my $data; -	my $cache = Cache::File->new( -		cache_root      => '/tmp/db-fakedisplay', +	my $cache_hafas = Cache::File->new( +		cache_root      => '/tmp/dbf-hafas',  		default_expires => $refresh_interval . ' sec',  		lock_level      => Cache::File::LOCK_LOCAL(),  	); +	my $cache_iris_main = Cache::File->new( +		cache_root      => '/tmp/dbf-iris-main', +		default_expires => '2 hours', +		lock_level      => Cache::File::LOCK_LOCAL(), +	); + +	my $cache_iris_rt = Cache::File->new( +		cache_root      => '/tmp/dbf-iris-realtime', +		default_expires => '50 seconds', +		lock_level      => Cache::File::LOCK_LOCAL(), +	); +  	# Cache::File has UTF-8 problems, so strip it (and any other potentially  	# problematic chars). -	my $cstation = $station; -	$cstation =~ tr{[0-9a-zA-Z -]}{}cd; - -	my $cache_str = "${backend}_${cstation}"; +	my $cache_str = $station; +	$cache_str =~ tr{[0-9a-zA-Z -]}{}cd; -	my $data = $cache->thaw($cache_str); +	if ( $backend eq 'iris' ) { -	if ( not $data ) {  		if ( $ENV{DBFAKEDISPLAY_STATS} ) {  			log_api_access();  		} -		if ( $backend eq 'iris' ) { - -			# requests with DS100 codes should be preferred (they avoid -			# encoding problems on the IRIS server). However, only use them -			# if we have an exact match. Ask the backend otherwise. -			my @station_matches -			  = Travel::Status::DE::IRIS::Stations::get_station($station); -			if ( @station_matches == 1 ) { -				$station = $station_matches[0][0]; -			} -			my $status = Travel::Status::DE::IRIS->new( -				station      => $station, -				serializable => 1, -				%opt -			); -			$data = { -				results => [ $status->results ], -				errstr  => $status->errstr, -			}; -			$cache->freeze( $cache_str, $data ); +		# requests with DS100 codes should be preferred (they avoid +		# encoding problems on the IRIS server). However, only use them +		# if we have an exact match. Ask the backend otherwise. +		my @station_matches +		  = Travel::Status::DE::IRIS::Stations::get_station($station); +		if ( @station_matches == 1 ) { +			$station = $station_matches[0][0];  		} -		elsif ( $backend eq 'ris' ) { + +		my $status = Travel::Status::DE::IRIS->new( +			station        => $station, +			main_cache     => $cache_iris_main, +			realtime_cache => $cache_iris_rt, +			%opt +		); +		$data = { +			results => [ $status->results ], +			errstr  => $status->errstr, +		}; +	} +	elsif ( $backend eq 'ris' ) { +		$data = $cache_hafas->thaw($cache_str); +		if ( not $data ) { +			if ( $ENV{DBFAKEDISPLAY_STATS} ) { +				log_api_access(); +			}  			my $status = Travel::Status::DE::HAFAS->new(  				station       => $station,  				excluded_mots => [qw[bus ferry ondemand tram u]], @@ -85,15 +99,15 @@ sub get_results_for {  				results => [ $status->results ],  				errstr  => $status->errstr,  			}; -			$cache->freeze( $cache_str, $data ); -		} -		else { -			$data = { -				results => [], -				errstr  => "Backend '$backend' not supported", -			}; +			$cache_hafas->freeze( $cache_str, $data );  		}  	} +	else { +		$data = { +			results => [], +			errstr  => "Backend '$backend' not supported", +		}; +	}  	return $data;  } | 
