You are here

public function RequestSubscriber::collectDatabaseLog in Raven: Sentry Integration 3.x

If database was initialized, create a span for each logged query.

1 call to RequestSubscriber::collectDatabaseLog()
RequestSubscriber::onTerminate in src/EventSubscriber/RequestSubscriber.php
Performance tracing.

File

src/EventSubscriber/RequestSubscriber.php, line 131

Class

RequestSubscriber
Initializes Raven logger so Sentry functions can be called.

Namespace

Drupal\raven\EventSubscriber

Code

public function collectDatabaseLog() {
  if (!$this->transaction || !$this->container || !$this->container
    ->initialized('database')) {
    return;
  }
  $connections = [];
  foreach (Database::getAllConnectionInfo() as $key => $info) {
    try {
      $database = Database::getConnection('default', $key);
      if ($logger = $database
        ->getLogger()) {
        $connections[$key] = $logger
          ->get('raven');
      }
    } catch (\Exception $e) {

      // Could not connect.
    }
  }
  foreach ($connections as $key => $queries) {
    foreach ($queries as $query) {
      if (empty($query['start'])) {

        // Older versions of Drupal do not record query start time.
        return;
      }
      $context = new SpanContext();
      $context
        ->setOp('sql.query');
      $context
        ->setDescription($query['query']);
      $context
        ->setTags([
        'database' => $key,
      ]);
      $context
        ->setStartTimestamp($query['start']);
      $context
        ->setEndTimestamp($query['start'] + $query['time']);
      $this->transaction
        ->startChild($context);
    }
  }
}