コード例 #1
0
 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();
         }
     }
 }
コード例 #2
0
 /**
  * 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;
 }
コード例 #3
0
 /**
  * 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;
 }