diff --git a/README.md b/README.md index 56f20cb..e62aedd 100644 --- a/README.md +++ b/README.md @@ -32,3 +32,24 @@ CLI: ![Example CLI](https://raw.githubusercontent.com/TumTum/oxid-sql-logger/master/img/screenshot-cli.png) +## SQL Query Status Monitor + +![Example CLI](https://raw.githubusercontent.com/TumTum/oxid-sql-logger/master/img/sql-query-status-monitor.jpg) + +See how many queries and which types of queries have been added to the database. +To determine the amount. + +#### Switch on + +For this purpose, the parameter `$this->blSQLStatusBox = true;` must be stored in the file `config.ing.php`. +So you can turn it on and off temporarily. + +Unique: Insert, at the end, the Smarty tag: `[{tm_sql_status}]` in the `base.tpl` file. + +####### source/Application/views/flow/tpl/layout/base.tpl + +```html + [{tm_sql_status}] + + +``` diff --git a/img/screenshot-a.jpg b/img/screenshot-a.jpg index da7c347..ff9d8af 100644 Binary files a/img/screenshot-a.jpg and b/img/screenshot-a.jpg differ diff --git a/img/sql-query-status-monitor.jpg b/img/sql-query-status-monitor.jpg new file mode 100644 index 0000000..9a199e6 Binary files /dev/null and b/img/sql-query-status-monitor.jpg differ diff --git a/src/AutoInstallSmaryPlugin.php b/src/AutoInstallSmaryPlugin.php new file mode 100644 index 0000000..d19a782 --- /dev/null +++ b/src/AutoInstallSmaryPlugin.php @@ -0,0 +1,57 @@ + + * Date: 2019-08-20 + * Time: 21:33 + */ + +namespace tm\oxid\sql\logger; + +/** + * Class AutoInstallSmaryPlugin + */ +class AutoInstallSmaryPlugin +{ + public function runInstall() + { + $oxideshop_ce = new \SplFileInfo(__DIR__ . '/../../../oxid-esales/oxideshop-ce/source/Core/Smarty/Plugin'); + $smartyPlugin = new \SplFileInfo(__DIR__ . '/Smarty/function.tm_sql_status.php'); + + if ($oxideshop_ce->isDir()) { + + $target = new \SplFileInfo($oxideshop_ce->getRealPath() . '/' . $smartyPlugin->getBasename()); + + if ($target->isFile() && $this->isSameFile($target, $smartyPlugin)) { + return; + } + + $this->createHardLink($smartyPlugin, $target); + + OxidUtilsView::clearSmarty(); + } + } + + /** + * @param \SplFileInfo $target + * @param \SplFileInfo $ + * @return bool + */ + protected function isSameFile(\SplFileInfo $target, \SplFileInfo $smartyPlugin) + { + return @md5_file($target->getPathname()) == @md5_file($smartyPlugin->getRealPath()); + } + + /** + * @param \SplFileInfo $smarty_func_tm_sql_status + * @param \SplFileInfo $target + */ + protected function createHardLink(\SplFileInfo $smartyPlugin, \SplFileInfo $target) + { + if ($target->isFile()) { + @unlink($target->getPathname()); + } + + link($smartyPlugin->getPathname(), $target->getPathname()); + } +} + diff --git a/src/OxidUtilsView.php b/src/OxidUtilsView.php new file mode 100644 index 0000000..2d50f6e --- /dev/null +++ b/src/OxidUtilsView.php @@ -0,0 +1,24 @@ + + * Date: 2019-08-20 + * Time: 21:33 + */ + +namespace tm\oxid\sql\logger; + +/** + * Class OxidUtilsView + * @package tm\oxid\sql\logger + */ +class OxidUtilsView extends \OxidEsales\Eshop\Core\UtilsView +{ + + /** + * Removes existing Smarty instance + */ + public static function clearSmarty() + { + \OxidEsales\Eshop\Core\UtilsView::$_oSmarty = null; + } +} diff --git a/src/Smarty/function.tm_sql_status.php b/src/Smarty/function.tm_sql_status.php new file mode 100644 index 0000000..433bc98 --- /dev/null +++ b/src/Smarty/function.tm_sql_status.php @@ -0,0 +1,55 @@ +blSQLStatusBox = true +* ------------------------------------------------------------- +*/ +function smarty_function_tm_sql_status($aParams, &$smarty) +{ + $myConfig = \OxidEsales\Eshop\Core\Registry::getConfig(); + + // muss in config.inc.php gesetzt sein + + $box = $myConfig->getConfigParam('blSQLStatusBox'); + + if ($box == false) { + return ''; + } + + $db = \OxidEsales\Eshop\Core\DatabaseProvider::getDb(\OxidEsales\Eshop\Core\DatabaseProvider::FETCH_MODE_ASSOC); + $query = "SHOW STATUS WHERE Variable_name IN ( 'Com_select', 'Com_update', 'Com_insert', 'Com_delete' )"; + + $iSelects = $iDeletes = $iInserts = $iUpdates = 0; + $rows = $db->getAll($query); + foreach ($rows as $row) { + switch ($row['Variable_name']) { + case 'Com_select': + $iSelects = (int)$row['Value']; + break; + case 'Com_update': + $iUpdates = (int)$row['Value']; + break; + case 'Com_insert': + $iInserts = (int)$row['Value']; + break; + case 'Com_delete': + $iDeletes = (int)$row['Value']; + break; + default: + break; + } + } + + $iSum = $iSelects + $iDeletes + $iInserts + $iUpdates; + $sTable = ''; + $sTable .= ''; + $sTable .= ""; + $sTable .= '
All: $iSum SELECT: $iSelects UPDATE: $iUpdates INSERT: $iInserts DELETE: $iDeletes
'; + + return $sTable; +} diff --git a/src/functions.php b/src/functions.php index 5c2dec9..a5b4166 100644 --- a/src/functions.php +++ b/src/functions.php @@ -12,3 +12,5 @@ function StartSQLLog() { function StopSQLLog() { \tm\oxid\sql\logger\OxidEsalesDatabase::disableLogger(); } + +(new tm\oxid\sql\logger\AutoInstallSmaryPlugin())->runInstall();