diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2011-08-11 00:50:13 +0200 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2011-08-11 00:50:13 +0200 | 
| commit | 731a744d34b0ce1f670524a1b08d8d71c44288c7 (patch) | |
| tree | 9b9f8359391ecebbf677afedb776ff7fc9b4cd02 | |
| parent | 143f5a78ab14c8c2c648e69d02845deefe62a399 (diff) | |
cgi: First try at caching
Uses Cache::File, serializes the ->results because the DE::DeutscheBahn object
itself uses XML::LibXML, which fails to serialize.
| -rw-r--r-- | cgi/index.pl | 24 | 
1 files changed, 22 insertions, 2 deletions
| diff --git a/cgi/index.pl b/cgi/index.pl index 11f69a5..3051f94 100644 --- a/cgi/index.pl +++ b/cgi/index.pl @@ -1,9 +1,30 @@  #!/usr/bin/env perl  use Mojolicious::Lite; +use Cache::File;  use File::ShareDir qw(dist_file);  use HTML::Template;  use Travel::Status::DE::DeutscheBahn; +sub get_results_for { +	my ($station) = @_; + +	my $cache = Cache::File->new( +		cache_root => '/tmp/db-fake', +		default_expires => '900 sec' +	); + +	my $results = $cache->thaw($station); + +	if (not $results) { +		my $status = Travel::Status::DE::DeutscheBahn->new( station => $station +		); +		$results = [$status->results]; +		$cache->freeze($station, $results); +	} + +	return @{ $results }; +} +  get '/' => sub {  	my $self    = shift;  	my $station = $self->param('station'); @@ -18,13 +39,12 @@ get '/multi/:station' => sub {  	my $station = $self->stash('station');  	my @params; -	my $status = Travel::Status::DE::DeutscheBahn->new( station => $station );  	my $template = HTML::Template->new(  		filename          => dist_file( 'db-fakedisplay', 'multi-lcd.html' ),  		loop_context_vars => 1,  	); -	for my $result ( $status->results ) { +	for my $result ( get_results_for($station) ) {  		push(  			@params,  			{ | 
