public function content()
 {
     $config = \Drupal::config('nagios.settings');
     // Disable cache
     \Drupal::service('page_cache_kill_switch')->trigger();
     $args = func_get_args();
     // Module to run checks for.
     $module = array_shift($args);
     // ID to run checks for.
     $id = array_shift($args);
     $codes = nagios_status();
     // Check the unique ID string and access permissions first.
     $ua = $config->get('nagios.ua');
     $request_code = $_SERVER['HTTP_USER_AGENT'];
     // Check if HTTP GET variable "unique_id" is used and the usage is allowed.
     if (isset($_GET['unique_id'])) {
         if ($config->get('nagios.statuspage.getparam') == TRUE) {
             $request_code = $_GET['unique_id'];
         }
     }
     if (\Drupal::currentUser()->hasPermission('administer site configuration') || $request_code == $ua) {
         // Authorized so calling other modules
         if ($module) {
             // A specific module has been requested.
             $nagios_data = array();
             $nagios_data[$module] = \Drupal::moduleHandler()->invoke($module, 'nagios', $id);
         } else {
             $nagios_data = nagios_invoke_all('nagios');
         }
     } else {
         // This is not an authorized unique id or uer, so just return this default status.
         $nagios_data = array('nagios' => array('DRUPAL' => array('status' => NAGIOS_STATUS_UNKNOWN, 'type' => 'state', 'text' => t('Unauthorized'))));
     }
     // Find the highest level to be the overall status
     $severity = NAGIOS_STATUS_OK;
     $min_severity = $config->get('nagios.min_report_severity');
     foreach ($nagios_data as $module_name => $module_data) {
         foreach ($module_data as $key => $value) {
             if (is_array($value) && array_key_exists('status', $value) && $value['status'] >= $min_severity) {
                 $severity = max($severity, $value['status']);
             }
         }
     }
     // Identifier that we check on the other side
     $output = "\n" . 'nagios=' . $codes[$severity] . ', ';
     $output_state = array();
     $output_perf = array();
     foreach ($nagios_data as $module_name => $module_data) {
         foreach ($module_data as $key => $value) {
             switch ($value['type']) {
                 case 'state':
                     // If status is larger then minimum severity
                     if ($value['status'] >= $min_severity) {
                         $tmp_state = $key . ':' . $codes[$value['status']];
                     } else {
                         $tmp_state = $key . ':' . $codes[NAGIOS_STATUS_OK];
                     }
                     if (!empty($value['text'])) {
                         $tmp_state .= '=' . $value['text'];
                     }
                     if ($config->get('nagios.show_outdated_names') && $key == 'ADMIN' && $value['text'] == 'Module and theme update status') {
                         $tmp_projects = update_calculate_project_data(update_get_projects());
                         $nagios_ignored_modules = $config->get('nagios.ignored_modules') ?: array();
                         $nagios_ignored_themes = $config->get('nagios.ignored_themes') ?: array();
                         $nagios_ignored_projects = $nagios_ignored_modules + $nagios_ignored_themes;
                         $outdated_count = 0;
                         $tmp_modules = '';
                         foreach ($tmp_projects as $projkey => $projval) {
                             if (!isset($nagios_ignored_projects[$projkey])) {
                                 if ($projval['status'] < UPDATE_CURRENT && $projval['status'] >= UPDATE_NOT_SECURE) {
                                     switch ($projval['status']) {
                                         case UPDATE_NOT_SECURE:
                                             $tmp_projstatus = t('NOT SECURE');
                                             break;
                                         case UPDATE_REVOKED:
                                             $tmp_projstatus = t('REVOKED');
                                             break;
                                         case UPDATE_NOT_SUPPORTED:
                                             $tmp_projstatus = t('NOT SUPPORTED');
                                             break;
                                         case UPDATE_NOT_CURRENT:
                                             $tmp_projstatus = t('NOT CURRENT');
                                             break;
                                         default:
                                             $tmp_projstatus = $projval['status'];
                                     }
                                     $tmp_modules .= ' ' . $projkey . ':' . $tmp_projstatus;
                                     $outdated_count++;
                                 }
                             }
                         }
                         if ($outdated_count > 0) {
                             $tmp_modules = trim($tmp_modules);
                             $tmp_state .= " ({$tmp_modules})";
                         }
                     }
                     $output_state[] = $tmp_state;
                     break;
                 case 'perf':
                     $output_perf[] = $key . '=' . $value['text'];
                     break;
             }
         }
     }
     $output .= implode(', ', $output_state) . ' | ' . implode(';', $output_perf) . "\n";
     $response = new Response($output, Response::HTTP_OK, ['Content-Type' => 'text/plain']);
     // Disable browser cache
     $response->setMaxAge(0);
     $response->setExpires($date);
     return $response;
 }
 /**
  * {@inheritdoc}
  */
 public function submitForm(array &$form, FormStateInterface $form_state)
 {
     $config = $this->config('nagios.settings');
     $config->set('nagios.ua', $form_state->getValue('nagios_ua'));
     $config->set('nagios.show_outdated_names', $form_state->getValue('nagios_show_outdated_names'));
     $config->set('nagios.statuspage.enabled', $form_state->getValue('nagios_enable_status_page'));
     $config->set('nagios.statuspage.path', $form_state->getValue('nagios_page_path'));
     $config->set('nagios.statuspage.controller', $form_state->getValue('nagios_page_controller'));
     $config->set('nagios.statuspage.getparam', $form_state->getValue('nagios_enable_status_page_get'));
     $config->set('nagios.status.ok', $form_state->getValue('nagios_status_ok_value'));
     $config->set('nagios.status.warning', $form_state->getValue('nagios_status_warning_value'));
     $config->set('nagios.status.critical', $form_state->getValue('nagios_status_critical_value'));
     $config->set('nagios.status.unknown', $form_state->getValue('nagios_status_unknown_value'));
     foreach (nagios_invoke_all('nagios_info') as $module => $data) {
         $config->set('nagios.enable.' . $module, $form_state->getValue('nagios_enable_' . $module));
     }
     $config->set('nagios.limit_watchdog.display', $form_state->getValue('limit_watchdog_display'));
     $config->set('nagios.limit_watchdog.results', $form_state->getValue('limit_watchdog_results'));
     foreach (nagios_invoke_all('nagios_settings') as $module => $module_settings) {
         foreach ($module_settings as $element => $data) {
             // save config for first level form elements
             if (isset($data['#configname'])) {
                 $config->set($module . '.' . $data['#configname'], $form_state->getValue($element, $config->get($module . '.' . $data['#configname'])));
             }
             // save config for second level form elements
             if (isset($data['#type']) && $data['#type'] == 'fieldset') {
                 foreach ($data as $fieldsetelement => $fieldsetdata) {
                     if (is_array($fieldsetdata)) {
                         if (!isset($fieldsetdata['#default_value']) && isset($fieldsetdata['#configname'])) {
                             $config->set($module . '.' . $fieldsetdata['#configname'], $form_state->getValue($fieldsetelement, $config->get($module . '.' . $fieldsetdata['#configname'])));
                         }
                     }
                 }
             }
         }
     }
     $config->save();
     parent::submitForm($form, $form_state);
 }