From 2cd81a74dcf24acf85c86639ad60a140037d4451 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Tue, 7 Jul 2015 16:10:56 +0200 Subject: [PATCH 1/1] simple cache for rendered files --- .gitignore | 1 + data/config.default.php | 1 + src/phorkie/File.php | 18 +------- src/phorkie/Renderer/Cache.php | 84 ++++++++++++++++++++++++++++++++++ src/phorkie/Repository.php | 1 - src/phorkie/SetupCheck.php | 1 + www/setup.php | 1 + 7 files changed, 90 insertions(+), 17 deletions(-) create mode 100644 src/phorkie/Renderer/Cache.php diff --git a/.gitignore b/.gitignore index 6235ed5..f9dbcb1 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ /src/gen-rewritemap.php /www/*.phar /www/*.phar.bz2 +/data/cache/ diff --git a/data/config.default.php b/data/config.default.php index d603622..c062d02 100644 --- a/data/config.default.php +++ b/data/config.default.php @@ -15,6 +15,7 @@ $GLOBALS['phorkie']['cfg'] = array( 'public' => '%BASEURL%' . 'repos/git/', 'private' => null, ), + 'cachedir' => __DIR__ . '/cache/', 'gitdir' => $wwwDir . 'repos/git/', 'workdir' => $wwwDir . 'repos/work/', 'tpl' => __DIR__ . '/templates/', diff --git a/src/phorkie/File.php b/src/phorkie/File.php index 2afda4c..300e810 100644 --- a/src/phorkie/File.php +++ b/src/phorkie/File.php @@ -84,22 +84,8 @@ class File public function getRenderedContent(Tool_Result $res = null) { - $ext = $this->getExt(); - $class = '\\phorkie\\Renderer_Unknown'; - - if (isset($GLOBALS['phorkie']['languages'][$ext]['renderer'])) { - $class = $GLOBALS['phorkie']['languages'][$ext]['renderer']; - } else if ($this->isText()) { - $class = '\\phorkie\\Renderer_Geshi'; - } else if (isset($GLOBALS['phorkie']['languages'][$ext]['mime'])) { - $type = $GLOBALS['phorkie']['languages'][$ext]['mime']; - if (substr($type, 0, 6) == 'image/') { - $class = '\\phorkie\\Renderer_Image'; - } - } - - $rend = new $class(); - return $rend->toHtml($this, $res); + $cache = new Renderer_Cache(); + return $cache->toHtml($this, $res); } /** diff --git a/src/phorkie/Renderer/Cache.php b/src/phorkie/Renderer/Cache.php new file mode 100644 index 0000000..4137b05 --- /dev/null +++ b/src/phorkie/Renderer/Cache.php @@ -0,0 +1,84 @@ +getCacheFile($file); + if ($res === null && $cacheFile !== null) { + $html = $this->loadHtmlFromCache($cacheFile); + } + if ($html === null) { + $html = $this->renderFile($file, $res); + if ($res === null && $cacheFile !== null) { + $this->storeHtmlIntoCache($cacheFile, $html); + } + } + return $html; + } + + protected function renderFile(File $file, Tool_Result $res = null) + { + $ext = $file->getExt(); + $class = '\\phorkie\\Renderer_Unknown'; + + if (isset($GLOBALS['phorkie']['languages'][$ext]['renderer'])) { + $class = $GLOBALS['phorkie']['languages'][$ext]['renderer']; + } else if ($file->isText()) { + $class = '\\phorkie\\Renderer_Geshi'; + } else if (isset($GLOBALS['phorkie']['languages'][$ext]['mime'])) { + $type = $GLOBALS['phorkie']['languages'][$ext]['mime']; + if (substr($type, 0, 6) == 'image/') { + $class = '\\phorkie\\Renderer_Image'; + } + } + + $rend = new $class(); + return $rend->toHtml($file, $res); + } + + /** + * @return null|string NULL when there is no cache, string with HTML + * otherwise + */ + protected function loadHtmlFromCache($cacheFile) + { + if (!file_exists($cacheFile)) { + return null; + } + return file_get_contents($cacheFile); + } + + protected function storeHtmlIntoCache($cacheFile, $html) + { + file_put_contents($cacheFile, $html); + } + + protected function getCacheFile(File $file) + { + if (!$GLOBALS['phorkie']['cfg']['cachedir'] + || !is_dir($GLOBALS['phorkie']['cfg']['cachedir']) + ) { + return null; + } + + return $GLOBALS['phorkie']['cfg']['cachedir'] + . '/' . $file->repo->id + . '-' . $file->repo->hash + . '-' . str_replace('/', '-', $file->getFilename()) + . '.html'; + } +} +?> diff --git a/src/phorkie/Repository.php b/src/phorkie/Repository.php index 8cf5ff6..62a6e38 100644 --- a/src/phorkie/Repository.php +++ b/src/phorkie/Repository.php @@ -96,7 +96,6 @@ class Repository public function loadHash() { - return; if ($this->hash !== null) { return; } diff --git a/src/phorkie/SetupCheck.php b/src/phorkie/SetupCheck.php index 32fb79e..9cae724 100644 --- a/src/phorkie/SetupCheck.php +++ b/src/phorkie/SetupCheck.php @@ -26,6 +26,7 @@ class SetupCheck $this->writableDirs = array( 'gitdir' => Tools::foldPath($cfg['gitdir']), 'workdir' => Tools::foldPath($cfg['workdir']), + 'cachedir' => Tools::foldPath($cfg['cachedir']), ); $this->elasticsearch = $cfg['elasticsearch']; } diff --git a/www/setup.php b/www/setup.php index 485c19f..c7320d8 100644 --- a/www/setup.php +++ b/www/setup.php @@ -36,6 +36,7 @@ $out = << phorkie setup check + -- 2.30.2