Commit 2e474e5b authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Use new IRIS cache features. Decrease IRIS realtime cache time from 180 to 50 seconds.

parent 9adb14d0
Loading
Loading
Loading
Loading
+50 −36
Original line number Diff line number Diff line
@@ -33,27 +33,36 @@ 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 = $station;
	$cache_str =~ tr{[0-9a-zA-Z -]}{}cd;

	my $cache_str = "${backend}_${cstation}";

	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
@@ -66,16 +75,21 @@ sub get_results_for {

		my $status = Travel::Status::DE::IRIS->new(
			station        => $station,
				serializable => 1,
			main_cache     => $cache_iris_main,
			realtime_cache => $cache_iris_rt,
			%opt
		);
		$data = {
			results => [ $status->results ],
			errstr  => $status->errstr,
		};
			$cache->freeze( $cache_str, $data );
	}
	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,7 +99,8 @@ sub get_results_for {
				results => [ $status->results ],
				errstr  => $status->errstr,
			};
			$cache->freeze( $cache_str, $data );
			$cache_hafas->freeze( $cache_str, $data );
		}
	}
	else {
		$data = {
@@ -93,7 +108,6 @@ sub get_results_for {
			errstr  => "Backend '$backend' not supported",
		};
	}
	}

	return $data;
}