From a50bb11e5c907c7ea2bc355c16a54c7c17fe056b Mon Sep 17 00:00:00 2001 From: Erik Amaru Ortiz Date: Wed, 2 Apr 2014 18:08:34 -0400 Subject: [PATCH] Routine to cache api.ini file to .php file to improve the performace to API Responses --- framework/src/Maveriks/WebApplication.php | 31 ++++++++++++++++++----- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/framework/src/Maveriks/WebApplication.php b/framework/src/Maveriks/WebApplication.php index eb95f5e4a..8d645659f 100644 --- a/framework/src/Maveriks/WebApplication.php +++ b/framework/src/Maveriks/WebApplication.php @@ -8,6 +8,8 @@ class WebApplication { protected $rootDir = ""; protected $workflowDir = ""; + protected $workspaceDir = ""; + protected $workspaceCacheDir = ""; protected $requestUri = ""; protected $responseMultipart = array(); @@ -85,7 +87,7 @@ class WebApplication } else { $this->dispatchApiRequest($request["uri"], $request["version"]); } - Util\Logger::log("API::End Dispatching ".$_SERVER["REQUEST_METHOD"]." ".$request["uri"]); + Util\Logger::log("API::End Dispatch"); break; } } @@ -158,9 +160,23 @@ class WebApplication /* * Load Api ini file for Rest Service */ - $apiIniConf = array(); + $config = array(); + if (file_exists($apiIniFile)) { - $apiIniConf = Util\Common::parseIniFile($apiIniFile); + $cachedConfig = $this->workspaceCacheDir . "api-config.php"; + + // verify if config cache file exists, is array and the last modification date is the same when cache was created. + if (! file_exists($cachedConfig) || ! is_array($config = include($cachedConfig)) || $config["_chk"] != filemtime($apiIniFile)) { + $config = Util\Common::parseIniFile($apiIniFile); + $config["_chk"] = filemtime($apiIniFile); + if (! is_dir(dirname($cachedConfig))) { + Util\Common::mk_dir(dirname($cachedConfig)); + } + file_put_contents($cachedConfig, " $aliasData) { + if (array_key_exists('alias', $config)) { + foreach ($config['alias'] as $alias => $aliasData) { if (is_array($aliasData)) { foreach ($aliasData as $label => $namespace) { $namespace = '\\' . ltrim($namespace, '\\'); @@ -373,7 +389,10 @@ class WebApplication require_once (PATH_DB . SYS_SYS . "/db.php"); // defining constant for workspace shared directory - define("PATH_WORKSPACE", PATH_DB . SYS_SYS . PATH_SEP); + $this->workspaceDir = PATH_DB . SYS_SYS . PATH_SEP; + $this->workspaceCacheDir = PATH_DB . SYS_SYS . PATH_SEP . "cache" . PATH_SEP; + + define("PATH_WORKSPACE", $this->workspaceDir); // including workspace shared classes -> particularlly for pmTables set_include_path(get_include_path() . PATH_SEPARATOR . PATH_WORKSPACE);