diff options
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | conf/general.yml-docker | 6 | ||||
-rw-r--r-- | conf/general.yml-example | 4 | ||||
-rw-r--r-- | docs/customising/config.md | 9 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Reports.pm | 3 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/ResultSet/Problem.pm | 12 |
6 files changed, 30 insertions, 6 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 631dc3097..3d5934f3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,8 @@ - Fix saving of inspect form data offline. - Add CSRF and time to contact form. - Make sure admin metadata dropdown index numbers are updated too. + - Development improvements: + - Make front page cache time configurable. * v2.5 (21st December 2018) - Front end improvements: diff --git a/conf/general.yml-docker b/conf/general.yml-docker index 5a447dbee..fb789daf5 100644 --- a/conf/general.yml-docker +++ b/conf/general.yml-docker @@ -95,7 +95,7 @@ PHOTO_STORAGE_OPTIONS: # it doesn't already exist. Requires the appropriate AWS # permissions. # REGION: 'eu-west-1' # optional, only used if CREATE_BUCKET is set. Controls -# which AWS region the S3 bucket will be created in. + # which AWS region the S3 bucket will be created in. # Location of MapIt, to map points to administrative areas, and what types of # area from it you want to use. If left blank, a default area will be used @@ -225,6 +225,10 @@ GAZE_URL: 'https://gaze.mysociety.org/gaze' # This can be safely left out and will default to '127.0.0.1' even if not present. MEMCACHED_HOST: 'memcached.svc' +# Cache timeout - integer, optional, default 3600s (1 hour) +# Used for cache of front page stats/recent list, and /reports max-age. +CACHE_TIMEOUT: 3600 + # Should problem reports link to the council summary pages? AREA_LINKS_FROM_PROBLEMS: '0' diff --git a/conf/general.yml-example b/conf/general.yml-example index 11902c0b3..8dd4d0a2f 100644 --- a/conf/general.yml-example +++ b/conf/general.yml-example @@ -221,6 +221,10 @@ GAZE_URL: 'https://gaze.mysociety.org/gaze' # This can be safely left out and will default to '127.0.0.1' even if not present. MEMCACHED_HOST: '127.0.0.1' +# Cache timeout - integer, optional, default 3600s (1 hour) +# Used for cache of front page stats/recent list, and /reports max-age. +CACHE_TIMEOUT: 3600 + # Should problem reports link to the council summary pages? AREA_LINKS_FROM_PROBLEMS: '0' diff --git a/docs/customising/config.md b/docs/customising/config.md index f9b2fc213..d83e00472 100644 --- a/docs/customising/config.md +++ b/docs/customising/config.md @@ -50,6 +50,7 @@ The following are all the configuration settings that you can change in `conf/ge * <code><a href="#open311_limit">OPEN311_LIMIT</a></code> * <code><a href="#all_reports_per_page">ALL_REPORTS_PER_PAGE</a></code> * <code><a href="#area_links_from_problems">AREA_LINKS_FROM_PROBLEMS</a></code> +* <code><a href="#cache_timeout">CACHE_TIMEOUT</a></code> ### URLs and directories @@ -1091,6 +1092,14 @@ ALLOWED_COBRANDS: </dd> <dt> + <a name="cache_timeout"><code>CACHE_TIMEOUT</code></a> + </dt> + <dd> + The time, in seconds, that the front page stats/recent list should be cached for. + Also used for the max-age of <code>/reports</code>. Defaults to 3600s (1 hour). + </dd> + + <dt> <a name="gaze_url"><code>GAZE_URL</code></a> </dt> <dd> diff --git a/perllib/FixMyStreet/App/Controller/Reports.pm b/perllib/FixMyStreet/App/Controller/Reports.pm index 42f5ea288..975b2fdd5 100644 --- a/perllib/FixMyStreet/App/Controller/Reports.pm +++ b/perllib/FixMyStreet/App/Controller/Reports.pm @@ -74,7 +74,8 @@ sub index : Path : Args(0) { } # Down here so that error pages aren't cached. - $c->response->header('Cache-Control' => 'max-age=3600'); + my $max_age = FixMyStreet->config('CACHE_TIMEOUT') // 3600; + $c->response->header('Cache-Control' => 'max-age=' . $max_age); } =head2 display_body_stats diff --git a/perllib/FixMyStreet/DB/ResultSet/Problem.pm b/perllib/FixMyStreet/DB/ResultSet/Problem.pm index 676e721c2..37fc34057 100644 --- a/perllib/FixMyStreet/DB/ResultSet/Problem.pm +++ b/perllib/FixMyStreet/DB/ResultSet/Problem.pm @@ -67,6 +67,10 @@ sub to_body { # Front page statistics +sub _cache_timeout { + FixMyStreet->config('CACHE_TIMEOUT') // 3600; +} + sub recent_fixed { my $rs = shift; my $key = "recent_fixed:$site_key"; @@ -76,7 +80,7 @@ sub recent_fixed { state => [ FixMyStreet::DB::Result::Problem->fixed_states() ], lastupdate => { '>', \"current_timestamp-'1 month'::interval" }, } )->count; - Memcached::set($key, $result, 3600); + Memcached::set($key, $result, _cache_timeout()); } return $result; } @@ -90,7 +94,7 @@ sub number_comments { { 'comments.state' => 'confirmed' }, { join => 'comments' } )->count; - Memcached::set($key, $result, 3600); + Memcached::set($key, $result, _cache_timeout()); } return $result; } @@ -105,7 +109,7 @@ sub recent_new { state => [ FixMyStreet::DB::Result::Problem->visible_states() ], confirmed => { '>', \"current_timestamp-'$interval'::interval" }, } )->count; - Memcached::set($key, $result, 3600); + Memcached::set($key, $result, _cache_timeout()); } return $result; } @@ -157,7 +161,7 @@ sub _recent { $probs = [ grep { $_->photo && ! $_->is_hidden } @$probs ]; } else { $probs = [ $rs->search( $query, $attrs )->all ]; - Memcached::set($key, $probs, 3600); + Memcached::set($key, $probs, _cache_timeout()); } } |