. * * @category Cache * @package StatusNet * @author Evan Prodromou * @copyright 2009 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ if (!defined('STATUSNET')) { // This check helps protect against security problems; // your code file can't be executed directly from the web. exit(1); } /** * Log cache access * * Note that since most caching plugins return false for StartCache* * methods, you should add this plugin before them, i.e. * * addPlugin('CacheLog'); * addPlugin('XCache'); * * @category Cache * @package StatusNet * @author Evan Prodromou * @copyright 2009 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ class CacheLogPlugin extends Plugin { const PLUGIN_VERSION = '2.0.0'; function onStartCacheGet(&$key, &$value) { $this->log(LOG_INFO, "Fetching key '$key'"); return true; } function onEndCacheGet($key, &$value) { if ($value === false) { $this->log(LOG_INFO, sprintf('Cache MISS for key "%s"', $key)); } else { $this->log(LOG_INFO, sprintf('Cache HIT for key "%s": %s', $key, self::showValue($value))); } return true; } function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success) { $this->log(LOG_INFO, "Begin setting cache value for key '$key'"); return true; } function onEndCacheSet($key, $value, $flag, $expiry) { $this->log(LOG_INFO, sprintf('Set cache value %s for key "%s" (flags: %d, expiry %d)', self::showValue($value), $key, $flag, $expiry)); return true; } function onStartCacheDelete(&$key, &$success) { $this->log(LOG_INFO, "Deleting cache value for key '$key'"); return true; } function onEndCacheDelete($key) { $this->log(LOG_INFO, "Done deleting cache value for key '$key'"); return true; } public function onPluginVersion(array &$versions): bool { $versions[] = array('name' => 'CacheLog', 'version' => self::PLUGIN_VERSION, 'author' => 'Evan Prodromou', 'homepage' => GNUSOCIAL_ENGINE_REPO_URL . 'tree/master/plugins/CacheLog', 'description' => // TRANS: Plugin description. _m('Log reads and writes to the cache.')); return true; } static function showValue($value) { if (is_object($value)) { return sprintf('object of class %s', get_class($value)); } else if (is_array($value)) { return sprintf('array of length %d', count($value)); } else if (is_string($value)) { return sprintf('string "%s"', $value); } else if (is_integer($value)) { return sprintf('integer %d', $value); } else if (is_null($value)) { return 'null'; } else { return 'unknown'; } } }