From 69c74620ed9af288024032ea5b90a0ac3a40a661 Mon Sep 17 00:00:00 2001 From: Thomas Steur Date: Thu, 19 Sep 2013 23:59:04 +0000 Subject: [PATCH] refs #4053 cache requests to marketplace in filesystem --- plugins/CorePluginsAdmin/Marketplace.php | 25 --------- .../CorePluginsAdmin/MarketplaceApiClient.php | 51 ++++++++++++++----- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/plugins/CorePluginsAdmin/Marketplace.php b/plugins/CorePluginsAdmin/Marketplace.php index 7b2f99f796d..6eb812a75bb 100644 --- a/plugins/CorePluginsAdmin/Marketplace.php +++ b/plugins/CorePluginsAdmin/Marketplace.php @@ -24,8 +24,6 @@ class Marketplace * @var MarketplaceApiClient */ private $client; - private static $pluginUpdates = null; - private static $themeUpdates = null; public function __construct() { @@ -73,29 +71,6 @@ private function hasPluginUpdate($plugin) * @return array */ public function getPluginsHavingUpdate($themesOnly) - { - if ($themesOnly && !is_null(static::$themeUpdates)) { - return static::$themeUpdates; - } else if (!$themesOnly && !is_null(static::$pluginUpdates)) { - return static::$pluginUpdates; - } - - $pluginsHavingUpdate = $this->fetchPluginsHavingUpdate($themesOnly); - - if ($themesOnly) { - static::$themeUpdates = $pluginsHavingUpdate; - } else { - static::$pluginUpdates = $pluginsHavingUpdate; - } - - return $pluginsHavingUpdate; - } - - /** - * @param $themesOnly - * @return array - */ - public function fetchPluginsHavingUpdate($themesOnly) { $pluginManager = PluginsManager::getInstance(); $loadedPlugins = $pluginManager->getLoadedPlugins(); diff --git a/plugins/CorePluginsAdmin/MarketplaceApiClient.php b/plugins/CorePluginsAdmin/MarketplaceApiClient.php index bf2de856993..4c9de800fee 100644 --- a/plugins/CorePluginsAdmin/MarketplaceApiClient.php +++ b/plugins/CorePluginsAdmin/MarketplaceApiClient.php @@ -9,7 +9,9 @@ * @package CorePluginsAdmin */ namespace Piwik\Plugins\CorePluginsAdmin; +use Piwik\CacheFile; use Piwik\Http; +use Piwik\Tracker\Cache; /** * @@ -20,18 +22,27 @@ class MarketplaceApiClient private $domain = 'http://plugins.piwik.org/'; /** - * @var array array(pluginName => stdClass pluginInfo) + * @var CacheFile */ - private static $pluginCache = array(); + private $cache = null; - private function fetch($action, $params) + public function __construct() { - $endpoint = $this->domain . '/api/1.0/'; - $query = http_build_query($params); + $this->cache = new CacheFile('marketplace', 7200); + } - $url = sprintf('%s%s?%s', $endpoint, $action, $query); + private function fetch($action, $params) + { + $query = http_build_query($params); + $result = $this->getCachedResult($action, $query); + + if (false === $result) { + $endpoint = $this->domain . '/api/1.0/'; + $url = sprintf('%s%s?%s', $endpoint, $action, $query); + $result = Http::sendHttpRequest($url, 5); + $this->cacheResult($action, $query, $result); + } - $result = Http::sendHttpRequest($url, 5); $result = json_decode($result); if (!empty($result->error)) { @@ -42,16 +53,30 @@ private function fetch($action, $params) return $result; } - public function getPluginInfo($name) + private function getCachedResult($action, $query) { - if (array_key_exists($name, static::$pluginCache)) { - return static::$pluginCache[$name]; - } + $cacheKey = $this->getCacheKey($action, $query); + + return $this->cache->get($cacheKey); + } + private function cacheResult($action, $query, $result) + { + $cacheKey = $this->getCacheKey($action, $query); + + $this->cache->set($cacheKey, $result); + } + + private function getCacheKey($action, $query) + { + return sprintf('api.1.0.%s.%s', str_replace('/', '.', $action), md5($query)); + } + + public function getPluginInfo($name) + { $action = sprintf('plugins/%s/info', $name); - static::$pluginCache[$name] = $this->fetch($action, array()); - return static::$pluginCache[$name]; + return $this->fetch($action, array()); } public function download($pluginOrThemeName, $target)