From bd8796b824d2e88d91be07bea0284ca25f1d2a45 Mon Sep 17 00:00:00 2001 From: Sebastian Grewe Date: Wed, 18 Sep 2013 13:11:24 +0200 Subject: [PATCH] [FEATURE] Added Ajax JSON Memcache --- public/include/classes/api.class.php | 9 ++++++++- public/include/classes/base.class.php | 3 +++ public/include/config/admin_settings.inc.php | 14 ++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/public/include/classes/api.class.php b/public/include/classes/api.class.php index 26b2a95d..b37cf9b6 100644 --- a/public/include/classes/api.class.php +++ b/public/include/classes/api.class.php @@ -30,13 +30,19 @@ class Api extends Base { * @return string JSON object **/ function get_json($data, $force=false) { - return json_encode( + // Create a request specific memcache key + $sMemcacheKey = @$_REQUEST['page'] . '_' . @$_REQUEST['action'] . '_' . __FUNCTION__ . '_' . @$SESSION['USERDATA']['id'] . '_' . $_SESSION['REMOTE_ADDR']; + if ($this->setting->getValue('statistics_ajax_cache') && $json_data = $this->memcache->get($sMemcacheKey)) return $json_data; + $json_data =json_encode( array( $_REQUEST['action'] => array( 'version' => $this->api_version, 'runtime' => (microtime(true) - $this->dStartTime) * 1000, 'data' => $data )), $force ? JSON_FORCE_OBJECT : 0 ); + if (! $expiration = $this->setting->getValue('statistics_ajax_cache_expiration')) $expiration = 10; + if ($this->setting->getValue('statistics_ajax_cache')) + return $this->memcache->setCache($sMemcacheKey, $json_data, $expiration); } /** @@ -63,4 +69,5 @@ $api = new Api(); $api->setConfig($config); $api->setUser($user); $api->setSetting($setting); +$api->setMemcache($memcache); $api->setStartTime($dStartTime); diff --git a/public/include/classes/base.class.php b/public/include/classes/base.class.php index 2aae51ce..7aed05e3 100644 --- a/public/include/classes/base.class.php +++ b/public/include/classes/base.class.php @@ -37,6 +37,9 @@ class Base { public function setSetting($setting) { $this->setting = $setting; } + public function setMemcache($memcache) { + $this->memcache = $memcache; + } public function setBitcoin($bitcoin) { $this->bitcoin = $bitcoin; } diff --git a/public/include/config/admin_settings.inc.php b/public/include/config/admin_settings.inc.php index 97290903..31cdb2cf 100644 --- a/public/include/config/admin_settings.inc.php +++ b/public/include/config/admin_settings.inc.php @@ -116,6 +116,20 @@ $aSettings['statistics'][] = array( 'name' => 'statistics_ajax_data_interval', 'value' => $setting->getValue('statistics_ajax_data_interval'), 'tooltip' => 'Time in minutes, interval for hashrate and sharerate calculations. Higher intervals allow for better accuracy at a higer server load.' ); +$aSettings['statistics'][] = array( + 'display' => 'Ajax Caching', 'type' => 'select', + 'options' => array('0' => 'No', '1' => 'Yes'), + 'default' => 0, + 'name' => 'statistics_ajax_cache', 'value' => $setting->getValue('statistics_ajax_cache'), + 'tooltip' => 'Enable or disable the Ajax cache for memcache.' +); +$aSettings['statistics'][] = array( + 'display' => 'Ajax Cache Expiration', 'type' => 'select', + 'options' => array('5' => '5', '10' => '10', '20' => '20', '40' => '40', '60' => '60'), + 'default' => 10, + 'name' => 'statistics_ajax_cache_expiration', 'value' => $setting->getValue('statistics_ajax_cache_expiration'), + 'tooltip' => 'Change expiration time for memcache keys.' +); $aSettings['statistics'][] = array( 'display' => 'Block Statistics Count', 'type' => 'text', 'size' => 25,