| <?php |
|
|
| |
| |
| |
| |
| |
| |
|
|
| namespace Piwik\Plugins\DBStats; |
|
|
| use Piwik\Common; |
| use Piwik\DataTable; |
| use Piwik\Piwik; |
|
|
| |
| |
| |
| |
| |
| class API extends \Piwik\Plugin\API |
| { |
| |
| |
| |
| private $metadataProvider; |
|
|
| public function __construct(MySQLMetadataProvider $metadataProvider) |
| { |
| $this->metadataProvider = $metadataProvider; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function getGeneralInformation(): array |
| { |
| Piwik::checkUserHasSuperUserAccess(); |
| |
| $totalSpaceUsed = 0; |
| foreach ($this->metadataProvider->getAllTablesStatus() as $status) { |
| $totalSpaceUsed += $status['Data_length'] + $status['Index_length']; |
| } |
|
|
| $siteTableStatus = $this->metadataProvider->getTableStatus('site'); |
| $userTableStatus = $this->metadataProvider->getTableStatus('user'); |
|
|
| $siteCount = $siteTableStatus['Rows']; |
| $userCount = $userTableStatus['Rows']; |
|
|
| return array($siteCount, $userCount, $totalSpaceUsed); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| public function getDBStatus(): array |
| { |
| Piwik::checkUserHasSuperUserAccess(); |
| return $this->metadataProvider->getDBStatus(); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public function getDatabaseUsageSummary(): DataTable |
| { |
| Piwik::checkUserHasSuperUserAccess(); |
|
|
| $emptyRow = array('data_size' => 0, 'index_size' => 0, 'row_count' => 0); |
| $rows = array( |
| 'tracker_data' => $emptyRow, |
| 'metric_data' => $emptyRow, |
| 'report_data' => $emptyRow, |
| 'other_data' => $emptyRow, |
| ); |
|
|
| foreach ($this->metadataProvider->getAllTablesStatus() as $status) { |
| if ($this->isNumericArchiveTable($status['Name'])) { |
| $rowToAddTo = & $rows['metric_data']; |
| } elseif ($this->isBlobArchiveTable($status['Name'])) { |
| $rowToAddTo = & $rows['report_data']; |
| } elseif ($this->isTrackerTable($status['Name'])) { |
| $rowToAddTo = & $rows['tracker_data']; |
| } else { |
| $rowToAddTo = & $rows['other_data']; |
| } |
|
|
| $rowToAddTo['data_size'] += $status['Data_length']; |
| $rowToAddTo['index_size'] += $status['Index_length']; |
| $rowToAddTo['row_count'] += $status['Rows']; |
| } |
|
|
| return DataTable::makeFromIndexedArray($rows); |
| } |
|
|
| |
| |
| |
| |
| |
| public function getTrackerDataSummary(): DataTable |
| { |
| Piwik::checkUserHasSuperUserAccess(); |
| return $this->getTablesSummary($this->metadataProvider->getAllLogTableStatus()); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function getMetricDataSummary(): DataTable |
| { |
| Piwik::checkUserHasSuperUserAccess(); |
| return $this->getTablesSummary($this->metadataProvider->getAllNumericArchiveStatus()); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function getMetricDataSummaryByYear(): DataTable |
| { |
| Piwik::checkUserHasSuperUserAccess(); |
|
|
| $dataTable = $this->getMetricDataSummary(); |
|
|
| $dataTable->filter('GroupBy', array( |
| 'label', |
| function ($tableName) { |
| return $this->getArchiveTableYear($tableName); |
| }, |
| )); |
|
|
| return $dataTable; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function getReportDataSummary(): DataTable |
| { |
| Piwik::checkUserHasSuperUserAccess(); |
| return $this->getTablesSummary($this->metadataProvider->getAllBlobArchiveStatus()); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public function getReportDataSummaryByYear(): DataTable |
| { |
| Piwik::checkUserHasSuperUserAccess(); |
|
|
| $dataTable = $this->getReportDataSummary(); |
|
|
| $dataTable->filter('GroupBy', array( |
| 'label', |
| function ($tableName) { |
| return $this->getArchiveTableYear($tableName); |
| }, |
| )); |
|
|
| return $dataTable; |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| public function getAdminDataSummary(): DataTable |
| { |
| Piwik::checkUserHasSuperUserAccess(); |
| return $this->getTablesSummary($this->metadataProvider->getAllAdminTableStatus()); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function getIndividualReportsSummary(bool $forceCache = false): DataTable |
| { |
| Piwik::checkUserHasSuperUserAccess(); |
| return $this->metadataProvider->getRowCountsAndSizeByBlobName($forceCache); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| public function getIndividualMetricsSummary(bool $forceCache = false): DataTable |
| { |
| Piwik::checkUserHasSuperUserAccess(); |
| return $this->metadataProvider->getRowCountsAndSizeByMetricName($forceCache); |
| } |
|
|
| |
| |
| |
| private function getTablesSummary($statuses): DataTable |
| { |
| $dataTable = new DataTable(); |
| foreach ($statuses as $status) { |
| $dataTable->addRowFromSimpleArray(array( |
| 'label' => $status['Name'], |
| 'data_size' => $status['Data_length'], |
| 'index_size' => $status['Index_length'], |
| 'row_count' => $status['Rows'], |
| )); |
| } |
| return $dataTable; |
| } |
|
|
| private function isNumericArchiveTable(string $name): bool |
| { |
| return strpos($name, Common::prefixTable('archive_numeric_')) === 0; |
| } |
|
|
| private function isBlobArchiveTable(string $name): bool |
| { |
| return strpos($name, Common::prefixTable('archive_blob_')) === 0; |
| } |
|
|
| private function isTrackerTable(string $name): bool |
| { |
| return strpos($name, Common::prefixTable('log_')) === 0; |
| } |
|
|
| |
| |
| |
| private function getArchiveTableYear(string $tableName): string |
| { |
| preg_match("/archive_(?:numeric|blob)_([0-9]+)_/", $tableName, $matches); |
| return $matches[1] ?? ''; |
| } |
| } |
|
|