You are here

function monitoring_mail_monitoring_run_sensors in Monitoring 8

Implements hook_monitoring_run_sensors().

File

modules/monitoring_mail/monitoring_mail.module, line 74
Monitoring Mail bootstrap file.

Code

function monitoring_mail_monitoring_run_sensors(array $results) {

  // Check configured mail recipient.
  $config = \Drupal::config('monitoring_mail.settings');
  $recipient = $config
    ->get('mail');
  $severities = $config
    ->get('severities');

  // Skip if no recipient is defined.
  if (!$recipient) {
    return;
  }

  // Send a mail if a status change has been detected.

  /** @var \Drupal\monitoring\Result\SensorResultInterface $result */
  foreach ($results as $result) {

    // @todo Make mail configurable per sensor.
    // Cached result can not be different that the last result.
    if ($result
      ->isCached()) {
      continue;
    }

    // Try to load the previous log result for this sensor.
    $status_old = SensorResultInterface::STATUS_UNKNOWN;
    if ($previous_result = $result
      ->getPreviousResult()) {
      $status_old = $previous_result
        ->getStatus();
    }
    $status_new = $result
      ->getStatus();
    if (monitoring_mail_needs_mail($result, $severities, $status_old, $status_new)) {

      // Prepare mail contexts.
      $params = [
        'result' => $result,
        'sensor_config' => $result
          ->getSensorConfig(),
        'status_old' => $status_old,
        'status_new' => $status_new,
      ];

      // Trigger result transition mail.
      $mail_manager = \Drupal::service('plugin.manager.mail');
      $mail_manager
        ->mail('monitoring_mail', 'sensor_notification', $recipient, \Drupal::languageManager()
        ->getDefaultLanguage()
        ->getId(), $params);
    }
  }
}