summaryrefslogtreecommitdiff
path: root/index.pl
diff options
context:
space:
mode:
Diffstat (limited to 'index.pl')
-rw-r--r--index.pl86
1 files changed, 50 insertions, 36 deletions
diff --git a/index.pl b/index.pl
index 4d5a013..bbe07e0 100644
--- a/index.pl
+++ b/index.pl
@@ -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;
}