Implement customizable cache timeout (#641)

* [BridgeAbstract] Implement customizable cache timeout

The customizable cache timeout is used instead of the default cache
timeout (CACHE_TIMEOUT) if specified by the caller.

* [index] Add new global parameter '_cache_timeout'

The _cache_timeout parameter is an optional parameter that can be
used to specify a custom cache timeout. This option is enabled by
default.

It can be disabled using the named constant 'CUSTOM_CACHE_TIMEOUT'
which supports two states:

> true: Enabled (default)
> false: Disabled

* [BridgeAbstract] Change scope of 'getCacheTimeout' to public

* [html] Add cache timeout parameter to all bridges

The timeout parameter only shows if CUSTOM_CACHE_TIMEOUT has been set
to true. The default value is automatically set to the value specified
in the bridge.

* [index] Disable custom cache timeout by default
This commit is contained in:
LogMANOriginal 2018-03-14 18:06:36 +01:00 committed by GitHub
parent cacbe90102
commit 8ba817478b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 81 additions and 2 deletions

View file

@ -19,6 +19,10 @@ define('PROXY_BYBRIDGE', false);
// Comment this line or keep PROXY_NAME empty to display PROXY_URL instead // Comment this line or keep PROXY_NAME empty to display PROXY_URL instead
define('PROXY_NAME', 'Hidden Proxy Name'); define('PROXY_NAME', 'Hidden Proxy Name');
// Allows the operator to specify custom cache timeouts via '&_cache_timeout=3600'
// true: enabled, false: disabled (default)
define('CUSTOM_CACHE_TIMEOUT', false);
date_default_timezone_set('UTC'); date_default_timezone_set('UTC');
error_reporting(0); error_reporting(0);
@ -168,6 +172,16 @@ try {
define('NOPROXY', true); define('NOPROXY', true);
} }
// Custom cache timeout
$cache_timeout = -1;
if(array_key_exists('_cache_timeout', $params)) {
if(!CUSTOM_CACHE_TIMEOUT) {
throw new \HttpException('This server doesn\'t support "_cache_timeout"!');
}
$cache_timeout = filter_var($params['_cache_timeout'], FILTER_VALIDATE_INT);
}
// Initialize cache // Initialize cache
$cache = Cache::create('FileCache'); $cache = Cache::create('FileCache');
$cache->setPath(CACHE_DIR); $cache->setPath(CACHE_DIR);
@ -178,10 +192,12 @@ try {
unset($params['bridge']); unset($params['bridge']);
unset($params['format']); unset($params['format']);
unset($params['_noproxy']); unset($params['_noproxy']);
unset($params['_cache_timeout']);
// Load cache & data // Load cache & data
try { try {
$bridge->setCache($cache); $bridge->setCache($cache);
$bridge->setCacheTimeout($cache_timeout);
$bridge->setDatas($params); $bridge->setDatas($params);
} catch(Exception $e) { } catch(Exception $e) {
http_response_code($e->getCode()); http_response_code($e->getCode());

View file

@ -14,6 +14,7 @@ abstract class BridgeAbstract implements BridgeInterface {
protected $items = array(); protected $items = array();
protected $inputs = array(); protected $inputs = array();
protected $queriedContext = ''; protected $queriedContext = '';
protected $cacheTimeout;
/** /**
* Return cachable datas (extrainfos and items) stored in the bridge * Return cachable datas (extrainfos and items) stored in the bridge
@ -171,7 +172,7 @@ abstract class BridgeAbstract implements BridgeInterface {
if(!is_null($this->cache)) { if(!is_null($this->cache)) {
$time = $this->cache->getTime(); $time = $this->cache->getTime();
if($time !== false if($time !== false
&& (time() - static::CACHE_TIMEOUT < $time) && (time() - $this->getCacheTimeout() < $time)
&& (!defined('DEBUG') || DEBUG !== true)) { && (!defined('DEBUG') || DEBUG !== true)) {
$cached = $this->cache->loadData(); $cached = $this->cache->loadData();
if(isset($cached['items']) && isset($cached['extraInfos'])) { if(isset($cached['items']) && isset($cached['extraInfos'])) {
@ -268,4 +269,17 @@ abstract class BridgeAbstract implements BridgeInterface {
public function setCache(\CacheInterface $cache){ public function setCache(\CacheInterface $cache){
$this->cache = $cache; $this->cache = $cache;
} }
public function setCacheTimeout($timeout){
if(is_numeric($timeout) && ($timeout < 1 || $timeout > 86400)) {
$this->cacheTimeout = static::CACHE_TIMEOUT;
return;
}
$this->cacheTimeout = $timeout;
}
public function getCacheTimeout(){
return isset($this->cacheTimeout) ? $this->cacheTimeout : static::CACHE_TIMEOUT;
}
} }

View file

@ -68,4 +68,20 @@ interface BridgeInterface {
* @param object CacheInterface The cache instance * @param object CacheInterface The cache instance
*/ */
public function setCache(\CacheInterface $cache); public function setCache(\CacheInterface $cache);
/**
* Sets the timeout for clearing the cache files. The timeout must be
* specified between 1..86400 seconds (max. 24 hours). The default timeout
* (specified by the bridge maintainer) applies for invalid values.
*
* @param int $timeout The cache timeout in seconds
*/
public function setCacheTimeout($timeout);
/**
* Returns the cache timeout
*
* @return int Cache timeout
*/
public function getCacheTimeout();
} }

View file

@ -75,8 +75,24 @@ CARD;
. ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL) . ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL)
. ')</label><br />' . ')</label><br />'
. PHP_EOL; . PHP_EOL;
} } if(CUSTOM_CACHE_TIMEOUT) {
$idArg = 'arg-'
. urlencode($bridgeName)
. '-'
. urlencode('_cache_timeout');
$card .= '<label for="'
. $idArg
. '">Cache timeout in seconds : </label>'
. PHP_EOL;
$card .= '<input id="'
. $idArg
. '" type="number" value="'
. $bridge->getCacheTimeout()
. '" name="_cache_timeout" /><br />'
. PHP_EOL;
}
$card .= $getHelperButtonsFormat($formats); $card .= $getHelperButtonsFormat($formats);
} else { } else {
$card .= '<span style="font-weight: bold;">Inactive</span>'; $card .= '<span style="font-weight: bold;">Inactive</span>';
@ -251,6 +267,23 @@ CARD;
. ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL) . ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL)
. ')</label><br />' . ')</label><br />'
. PHP_EOL; . PHP_EOL;
} if(CUSTOM_CACHE_TIMEOUT) {
$idArg = 'arg-'
. urlencode($bridgeName)
. '-'
. urlencode('_cache_timeout');
$card .= '<label for="'
. $idArg
. '">Cache timeout in seconds : </label>'
. PHP_EOL;
$card .= '<input id="'
. $idArg
. '" type="number" value="'
. $bridge->getCacheTimeout()
. '" name="_cache_timeout" /><br />'
. PHP_EOL;
} }
$card .= $getHelperButtonsFormat($formats); $card .= $getHelperButtonsFormat($formats);
} else { } else {