You are here

public function DatabaseLogger::loadLatestLogEntries in Ultimate Cron 8.2

Load latest log entry for multiple jobs.

This is the fallback method. Loggers should implement an optimized version if possible.

Parameters

array $jobs: Jobs for which the log entries should be loaded.

array $log_types: Type of log messages to load.

Overrides LoggerBase::loadLatestLogEntries

File

src/Plugin/ultimate_cron/Logger/DatabaseLogger.php, line 250

Class

DatabaseLogger
Database logger.

Namespace

Drupal\ultimate_cron\Plugin\ultimate_cron\Logger

Code

public function loadLatestLogEntries(array $jobs, array $log_types) {
  if ($this->connection
    ->databaseType() !== 'mysql') {
    return parent::loadLatestLogEntries($jobs, $log_types);
  }
  $result = $this->connection
    ->query("SELECT l.*\n    FROM {ultimate_cron_log} l\n    JOIN (\n      SELECT l3.name, (\n        SELECT l4.lid\n        FROM {ultimate_cron_log} l4\n        WHERE l4.name = l3.name\n        AND l4.log_type IN (:log_types)\n        ORDER BY l4.name desc, l4.start_time DESC\n        LIMIT 1\n      ) AS lid FROM {ultimate_cron_log} l3\n      GROUP BY l3.name\n    ) l2 on l2.lid = l.lid", array(
    ':log_types' => $log_types,
  ));
  $log_entries = array();
  while ($object = $result
    ->fetchObject()) {
    if (isset($jobs[$object->name])) {
      $log_entries[$object->name] = new LogEntry($object->name, $this);
      $log_entries[$object->name]
        ->setData((array) $object);
    }
  }
  foreach ($jobs as $name => $job) {
    if (!isset($log_entries[$name])) {
      $log_entries[$name] = new LogEntry($name, $this);
    }
  }
  return $log_entries;
}