public function storageAction($param, $action = false) { if (isset($this->_engines[$param])) { $title = ucfirst($param); $this->tag->prependTitle($title); // add crumb to chain (name, link) $this->_breadcrumbs->add(self::NAME, $this->url->get('dashboard/cache'))->add($title); try { // call selected storage $class = "\\Libraries\\CacheManagement\\Storages\\" . $title; if (Helpers\Node::isHasConstructor($class) == true) { $storage = new $class($this->_config); } else { $storage = new $class(); } if (isset($action) && !empty($action)) { // do the action if ($storage->{strtolower($action) . 'Data'}($this->request->getQuery())) { return $this->response->redirect($this->request->getHTTPReferer()); } } // setup view to selected class $this->view->setVars(['title' => $title, 'server' => $storage->getServerStatus(), 'pool' => $storage->getPool(200), 'adapter' => $storage->getAdapterConfig()]); $this->view->pick("cache/" . strtolower($title)); } catch (CacheExceptions $e) { echo $e->getMessage(); } } }
/** * Get storage information * @access public * @return array */ public function getStorageStatus() { $result = null; if ($this->_cache === true) { $dbCache = $this->getDI()->get('dbCache'); $key = md5(__METHOD__); $result = $dbCache->get($key); } if ($result === null) { $phql = "SHOW VARIABLES"; $query = new Resultset(null, null, $this->_connection->query($phql), $this->_cache); $result = $query->toArray(); $result = \Helpers\Node::arrayToPair($result); if ($this->_cache === true) { $dbCache->save($key, $result); } } return $result; }
/** * Get storage content * @param int $limit limit of records * @access public * @return array|mixed */ public function getPool($limit = 100) { $list = []; $storage = $this->getStorageStatus(); foreach ($storage['slabs'] as $server => $slabs) { foreach ($slabs as $slabId => $slabMeta) { if ('active_slabs' == $slabId || "total_malloced" == $slabId) { continue; } try { $cdump = $this->_connection->getExtendedStats('cachedump', (int) $slabId, $limit); } catch (Exception $e) { continue; } foreach ($cdump as $server => $entries) { if ($entries) { foreach ($entries as $eName => $eData) { $value = $this->_connection->get($eName); $type = gettype($value); $value = Node::dataUnserialize($value); if (is_object($value) || is_array($value)) { $value = is_object($value) ? json_decode(json_encode($value), true) : $value; $value = Node::arrayMapDeep($value, ['\\Helpers\\Node', 'dataUnserialize']); } if ($eName != '_PHCM') { $list[] = ['key' => $eName, 'value' => $value, 'size' => mb_strlen(serialize($value), '8bit'), 'type' => $type]; } } } } } } ksort($list); return $list; }