You are here

public function DatabaseFragmentation::calculateScore in Site Audit 8.3

.

Overrides SiteAuditCheckBase::calculateScore

File

src/Plugin/SiteAuditCheck/DatabaseFragmentation.php, line 70

Class

DatabaseFragmentation
Provides the CronLast Check.

Namespace

Drupal\site_audit\Plugin\SiteAuditCheck

Code

public function calculateScore() {
  $connection = Database::getConnection();
  $query = \Drupal::database()
    ->select('information_schema.TABLES', 'ist');
  $query
    ->fields('ist', [
    'TABLE_NAME',
  ]);
  $query
    ->addExpression('ROUND(DATA_LENGTH / 1024 / 1024)', 'data_length');
  $query
    ->addExpression('ROUND(INDEX_LENGTH / 1024 / 1024)', 'index_length');
  $query
    ->addExpression('ROUND(DATA_FREE / 1024 / 1024)', 'data_free');
  $query
    ->condition('ist.DATA_FREE', 0, '>');
  $query
    ->condition('ist.table_schema', $connection
    ->getConnectionOptions()['database']);
  $result = $query
    ->execute();
  while ($row = $result
    ->fetchAssoc()) {
    $data = $row['data_length'] + $row['index_length'];
    if ($data != 0) {
      $free = $row['data_free'];
      $fragmentation_ratio = $free / $data;
      if ($fragmentation_ratio > 0.05) {
        $this->registry->database_fragmentation[$row['TABLE_NAME']] = $fragmentation_ratio;
      }
    }
  }
  if (empty($this->registry->database_fragmentation)) {
    return SiteAuditCheckBase::AUDIT_CHECK_SCORE_PASS;
  }
  return SiteAuditCheckBase::AUDIT_CHECK_SCORE_WARN;
}