X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=web_ui.pl;h=0331d68db4527ce54fc6591d1e23be4e21be543e;hb=a491d4bc0d4a71afd3c04d7cfbcf9fad45a63833;hp=4fe4b44bf3dd5c2c1c52aef326e52532e74e3583;hpb=2c597b7abd70d80e3aa899494293b64c38e4bf6f;p=APKPM.git diff --git a/web_ui.pl b/web_ui.pl index 4fe4b44..0331d68 100755 --- a/web_ui.pl +++ b/web_ui.pl @@ -80,13 +80,13 @@ get '/_g/status' => sub { }; sub _gearman_redis { - my ( $job, $params ) = @_; + my ( $job, $params, $timeout ) = @_; my $key = $params; $key =~ s/\W+/_/gs; $key =~ s/\s+/_/gs; $key = "sql.$key"; - warn "# _gearman_redis $key"; + warn "# _gearman_redis $key [$timeout s]"; my $redis = Redis->new; my $ret; @@ -94,17 +94,19 @@ sub _gearman_redis { if ( $ret = $redis->get($key) ) { warn "redis hit $key\n"; } else { - $gearman->timeout(15); + $gearman->timeout($timeout); $ret = $gearman->req( 'SUBMIT_JOB', $job, '', $params ); die "no result for $params" unless $ret; - $ret = Mojo::JSON->new->decode( $ret ); - if ( ! exists $ret->{error} && ref $ret->{columns} ne 'ARRAY' ) { - $ret->{error} = 'query run longer than ' . $gearman->timeout . ' s timeout'; - } else { - $redis->set($key => $ret); - $redis->expire($key => 15); - } + $redis->set($key => $ret); + } + + $redis->expire($key => 60); # refresh redis key timeout + + $ret = Mojo::JSON->new->decode( $ret ); + + if ( ! exists $ret->{error} && ref $ret->{columns} ne 'ARRAY' ) { + $ret->{error} = 'query run longer than ' . $gearman->timeout . ' s timeout'; } return $ret; @@ -128,7 +130,7 @@ get '/gnuplot' => sub { $sql =~ s/\s+(from|where|order|limit|join)/\n$1/gs; $self->param( sql => $sql ); - my $ret = _gearman_redis( 'Store_sql' => $sql ); + my $ret = _gearman_redis( 'Store_sql' => $sql, $self->param('timeout') ); return $self->render('gnuplot', sql => $sql, img => '', gnuplot => $ret->{error} ) if exists $ret->{error};