X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=angular-server.pl;h=3a97b73634ab472d5b76248575c4115508d9a51d;hb=9e4fe8f528098a4229950f38b2e41ed2bd976b0f;hp=80d2392e37e30af35febaff0171291215a21f7f4;hpb=494e80b13ba9602af1c51c8508c2b1496ca8ef99;p=angular-drzb diff --git a/angular-server.pl b/angular-server.pl index 80d2392..3a97b73 100755 --- a/angular-server.pl +++ b/angular-server.pl @@ -106,6 +106,12 @@ get '/lang/:lang/.template' => sub { $self->render( $self->stash('template') , lang => $self->stash('lang') ); }; +get '/lang/:lang/template/*template' => sub { # angular-ui templates + my $self = shift; + my $path = '/template/' . $self->stash('template'); + warn "# render_static $path"; + $self->render_static( $path ); +}; get '/data/' => sub { my $self = shift; @@ -210,6 +216,8 @@ any [ 'post' ] => '/data/:database/:entity' => sub { # CouchDB proxy for _design _view +our $view_cache; + get '/:database/_design/:design/_view/:view' => sub { my $self = shift; my $format = $self->param('format'); @@ -217,6 +225,19 @@ get '/:database/_design/:design/_view/:view' => sub { if ( my $param = $self->req->url->query->clone->remove('callback')->remove('format')->to_string ) { $url .= '?' . $param } + + if ( exists $view_cache->{$url}->{time} ) { + if ( time() - $view_cache->{$url}->{time} < 60 ) { + warn "HIT CouchDB cache $url"; + $view_cache->{$url}->{hit}++; + return _render_jsonp( $self, $view_cache->{$url}->{json} ); + } else { + warn "REFRESH CouchDB cache $url"; + $view_cache->{$url}->{refresh}++; + } + } else { + $view_cache->{$url}->{miss}++; + } warn "CouchDB proxy $url"; my $json = _couchdb_get($url); @@ -251,6 +272,12 @@ if ( doc.user.organization != '' ) { if ( $format eq 'key_array' ) { # array of keys sorted by value $json->{rows} = [ map { $_->{key} } sort { $b->{value} <=> $a->{value} } @{ $json->{rows} } ]; } + + $view_cache->{$url}->{time} = time(); + $view_cache->{$url}->{json} = $json; + + warn "# view_cache ",dump($view_cache); + _render_jsonp( $self, $json ); };