diff --git a/config/install/monitoring.sensor_config.user_failed_logins.yml b/config/install/monitoring.sensor_config.user_failed_logins.yml index 51dc3d3..e3ab638 100644 --- a/config/install/monitoring.sensor_config.user_failed_logins.yml +++ b/config/install/monitoring.sensor_config.user_failed_logins.yml @@ -16,7 +16,7 @@ settings: - field: 'message' value: 'Login attempt failed for %user.' - keys: + verbose_fields: - 'wid' - 'message' - 'variables' diff --git a/config/install/monitoring.sensor_config.user_sessions_all.yml b/config/install/monitoring.sensor_config.user_sessions_all.yml index 840892a..8834619 100644 --- a/config/install/monitoring.sensor_config.user_sessions_all.yml +++ b/config/install/monitoring.sensor_config.user_sessions_all.yml @@ -15,7 +15,7 @@ settings: field: 'uid' value: '0' operator: '!=' - keys: + verbose_fields: - 'uid' - 'hostname' - 'timestamp' diff --git a/config/install/monitoring.sensor_config.user_sessions_authenticated.yml b/config/install/monitoring.sensor_config.user_sessions_authenticated.yml index 81e7e76..3729c20 100644 --- a/config/install/monitoring.sensor_config.user_sessions_authenticated.yml +++ b/config/install/monitoring.sensor_config.user_sessions_authenticated.yml @@ -15,7 +15,7 @@ settings: field: 'uid' value: '0' operator: '!=' - keys: + verbose_fields: - 'uid' - 'hostname' - 'timestamp' diff --git a/config/install/monitoring.sensor_config.user_sessions_logouts.yml b/config/install/monitoring.sensor_config.user_sessions_logouts.yml index 7141ca3..c3bbe23 100644 --- a/config/install/monitoring.sensor_config.user_sessions_logouts.yml +++ b/config/install/monitoring.sensor_config.user_sessions_logouts.yml @@ -16,7 +16,7 @@ settings: - field: 'message' value: 'Session closed for %name.' - keys: + verbose_fields: - 'message' - 'wid' - 'variables' diff --git a/config/install/monitoring.sensor_config.user_successful_logins.yml b/config/install/monitoring.sensor_config.user_successful_logins.yml index 7fa49b3..5983ef9 100644 --- a/config/install/monitoring.sensor_config.user_successful_logins.yml +++ b/config/install/monitoring.sensor_config.user_successful_logins.yml @@ -16,7 +16,7 @@ settings: - field: 'message' value: 'Session opened for %name.' - keys: + verbose_fields: - 'wid' - 'message' - 'variables' diff --git a/config/optional/monitoring.sensor_config.captcha_failed_count.yml b/config/optional/monitoring.sensor_config.captcha_failed_count.yml index cc42243..2ea4672 100644 --- a/config/optional/monitoring.sensor_config.captcha_failed_count.yml +++ b/config/optional/monitoring.sensor_config.captcha_failed_count.yml @@ -17,7 +17,7 @@ settings: field: 'attempts' value: '0' operator: '>' - keys: + verbose_fields: - 'uid' - 'form_id' - 'attempts' diff --git a/config/optional/monitoring.sensor_config.dblog_404.yml b/config/optional/monitoring.sensor_config.dblog_404.yml index ded9ebb..205c697 100644 --- a/config/optional/monitoring.sensor_config.dblog_404.yml +++ b/config/optional/monitoring.sensor_config.dblog_404.yml @@ -18,7 +18,7 @@ settings: - field: type value: 'page not found' - keys: + verbose_fields: - 'wid' - 'location' - 'referer' diff --git a/config/optional/monitoring.sensor_config.dblog_event_severity_alert.yml b/config/optional/monitoring.sensor_config.dblog_event_severity_alert.yml index b859479..0034df5 100644 --- a/config/optional/monitoring.sensor_config.dblog_event_severity_alert.yml +++ b/config/optional/monitoring.sensor_config.dblog_event_severity_alert.yml @@ -18,7 +18,7 @@ settings: - field: severity value: '1' - keys: + verbose_fields: - 'wid' - 'message' - 'variables' diff --git a/config/optional/monitoring.sensor_config.dblog_event_severity_critical.yml b/config/optional/monitoring.sensor_config.dblog_event_severity_critical.yml index e8e7c12..0791f9c 100644 --- a/config/optional/monitoring.sensor_config.dblog_event_severity_critical.yml +++ b/config/optional/monitoring.sensor_config.dblog_event_severity_critical.yml @@ -18,7 +18,7 @@ settings: - field: severity value: '2' - keys: + verbose_fields: - 'wid' - 'message' - 'variables' diff --git a/config/optional/monitoring.sensor_config.dblog_event_severity_debug.yml b/config/optional/monitoring.sensor_config.dblog_event_severity_debug.yml index ddd18a6..525c625 100644 --- a/config/optional/monitoring.sensor_config.dblog_event_severity_debug.yml +++ b/config/optional/monitoring.sensor_config.dblog_event_severity_debug.yml @@ -18,7 +18,7 @@ settings: - field: severity value: '7' - keys: + verbose_fields: - 'wid' - 'message' - 'variables' diff --git a/config/optional/monitoring.sensor_config.dblog_event_severity_emergency.yml b/config/optional/monitoring.sensor_config.dblog_event_severity_emergency.yml index 54e3229..9126a1c 100644 --- a/config/optional/monitoring.sensor_config.dblog_event_severity_emergency.yml +++ b/config/optional/monitoring.sensor_config.dblog_event_severity_emergency.yml @@ -18,7 +18,7 @@ settings: - field: severity value: '0' - keys: + verbose_fields: - 'wid' - 'message' - 'variables' diff --git a/config/optional/monitoring.sensor_config.dblog_event_severity_error.yml b/config/optional/monitoring.sensor_config.dblog_event_severity_error.yml index 7a034b7..1e6cbd4 100644 --- a/config/optional/monitoring.sensor_config.dblog_event_severity_error.yml +++ b/config/optional/monitoring.sensor_config.dblog_event_severity_error.yml @@ -18,7 +18,7 @@ settings: - field: severity value: '3' - keys: + verbose_fields: - 'wid' - 'message' - 'variables' diff --git a/config/optional/monitoring.sensor_config.dblog_event_severity_info.yml b/config/optional/monitoring.sensor_config.dblog_event_severity_info.yml index eb134c3..c98c6c5 100644 --- a/config/optional/monitoring.sensor_config.dblog_event_severity_info.yml +++ b/config/optional/monitoring.sensor_config.dblog_event_severity_info.yml @@ -18,7 +18,7 @@ settings: - field: severity value: '6' - keys: + verbose_fields: - 'wid' - 'message' - 'variables' diff --git a/config/optional/monitoring.sensor_config.dblog_event_severity_notice.yml b/config/optional/monitoring.sensor_config.dblog_event_severity_notice.yml index c62e079..ffa9e51 100644 --- a/config/optional/monitoring.sensor_config.dblog_event_severity_notice.yml +++ b/config/optional/monitoring.sensor_config.dblog_event_severity_notice.yml @@ -18,7 +18,7 @@ settings: - field: severity value: '5' - keys: + verbose_fields: - 'wid' - 'message' - 'variables' diff --git a/config/optional/monitoring.sensor_config.dblog_event_severity_warning.yml b/config/optional/monitoring.sensor_config.dblog_event_severity_warning.yml index 21b35df..74a13b6 100644 --- a/config/optional/monitoring.sensor_config.dblog_event_severity_warning.yml +++ b/config/optional/monitoring.sensor_config.dblog_event_severity_warning.yml @@ -18,7 +18,7 @@ settings: - field: severity value: '4' - keys: + verbose_fields: - 'wid' - 'message' - 'variables' diff --git a/config/optional/monitoring.sensor_config.dblog_image_missing_style.yml b/config/optional/monitoring.sensor_config.dblog_image_missing_style.yml index 55a9eb3..360e710 100644 --- a/config/optional/monitoring.sensor_config.dblog_image_missing_style.yml +++ b/config/optional/monitoring.sensor_config.dblog_image_missing_style.yml @@ -22,7 +22,7 @@ settings: - field: message value: 'Source image at %source_image_path not found while trying to generate derivative image at %derivative_path.' - keys: + verbose_fields: - 'wid' - 'message' - 'variables' diff --git a/config/optional/monitoring.sensor_config.maillog_records_count.yml b/config/optional/monitoring.sensor_config.maillog_records_count.yml index 28a9b92..4863d0f 100644 --- a/config/optional/monitoring.sensor_config.maillog_records_count.yml +++ b/config/optional/monitoring.sensor_config.maillog_records_count.yml @@ -9,7 +9,7 @@ settings: table: 'maillog' time_interval_field: 'sent_date' time_interval_value: '86400' - keys: + verbose_fields: - 'idmaillog' - 'message_id' - 'subject' diff --git a/config/optional/monitoring.sensor_config.past_form.yml b/config/optional/monitoring.sensor_config.past_form.yml index e3fd98b..93b2046 100644 --- a/config/optional/monitoring.sensor_config.past_form.yml +++ b/config/optional/monitoring.sensor_config.past_form.yml @@ -13,7 +13,7 @@ settings: - field: 'module' value: 'past_form' - keys: + verbose_fields: - 'event_id' - 'type' - 'module' diff --git a/config/schema/monitoring.schema.yml b/config/schema/monitoring.schema.yml index 7398eef..a5153de 100644 --- a/config/schema/monitoring.schema.yml +++ b/config/schema/monitoring.schema.yml @@ -101,12 +101,12 @@ monitoring.settings.aggregator_base: type: string operator: type: string - keys: + verbose_fields: type: sequence - label: Keys + label: Verbose fields sequence: type: string - label: 'Key' + label: 'Field' monitoring.settings.database_aggregator: type: monitoring.settings.aggregator_base diff --git a/src/Plugin/monitoring/SensorPlugin/DatabaseAggregatorSensorPlugin.php b/src/Plugin/monitoring/SensorPlugin/DatabaseAggregatorSensorPlugin.php index b1c35ee..6995507 100644 --- a/src/Plugin/monitoring/SensorPlugin/DatabaseAggregatorSensorPlugin.php +++ b/src/Plugin/monitoring/SensorPlugin/DatabaseAggregatorSensorPlugin.php @@ -120,10 +120,10 @@ class DatabaseAggregatorSensorPlugin extends DatabaseAggregatorSensorPluginBase } // Add key fields. - $keys = $this->sensorConfig->getSetting('keys'); - if (!empty($keys)) { - foreach ($this->sensorConfig->getSetting('keys') as $key) { - $query->addField($this->sensorConfig->getSetting('table'), $key); + $fields = $this->sensorConfig->getSetting('verbose_fields'); + if (!empty($fields)) { + foreach ($this->sensorConfig->getSetting('verbose_fields') as $field) { + $query->addField($this->sensorConfig->getSetting('table'), $field); } } @@ -319,54 +319,54 @@ class DatabaseAggregatorSensorPlugin extends DatabaseAggregatorSensorPluginBase '#submit' => array(array($this, 'addConditionSubmit')), ); - // Add a fieldset to filter verbose output by keys. + // Add a fieldset to filter verbose output by fields. $form['output_table'] = array( '#type' => 'fieldset', - '#title' => t('Keys'), + '#title' => t('Verbose Fields'), '#prefix' => '
', '#suffix' => '
', '#tree' => FALSE, ); - // Add a table for the keys. - $form['output_table']['keys'] = array( + // Add a table for the fields. + $form['output_table']['verbose_fields'] = array( '#type' => 'table', '#tree' => TRUE, '#header' => array( - 'field' => t('Configure verbose output'), + 'field' => t('Configure verbose fields'), ), - '#title' => t('Keys'), + '#title' => t('Verbose fields'), '#empty' => t( 'Add keys to display in the verbose output.' ), ); - // Fill the keys table with keys from the settings. - $keys = $settings['keys']; + // Fill the fields table with verbose fields to filter the output. + $fields = $settings['verbose_fields']; - if (!$form_state->has('keys_rows')) { - $form_state->set('keys_rows', count($keys) + 1); + if (!$form_state->has('fields_rows')) { + $form_state->set('fields_rows', count($fields) + 1); } - for ($i = 0; $i < $form_state->get('keys_rows'); $i++) { - $form['output_table']['keys'][$i] = array( - 'key' => array( + for ($i = 0; $i < $form_state->get('fields_rows'); $i++) { + $form['output_table']['verbose_fields'][$i] = array( + 'field' => array( '#type' => 'textfield', - '#default_value' => isset($keys[$i]) ? $keys[$i] : '', - '#title' => t('Key'), + '#default_value' => isset($fields[$i]) ? $fields[$i] : '', + '#title' => t('Field'), '#title_display' => 'invisible', '#size' => 20, ), ); } // Select element for available fields. - $form['output_table']['keys_add_button'] = array( + $form['output_table']['fields_add_button'] = array( '#type' => 'submit', - '#value' => t('Add another key'), + '#value' => t('Add another field'), '#ajax' => array( 'wrapper' => 'selected-output', - 'callback' => array($this, 'keysReplace'), + 'callback' => array($this, 'fieldsReplace'), 'method' => 'replace', ), - '#submit' => array(array($this, 'addKeySubmit')), + '#submit' => array(array($this, 'addFieldSubmit')), ); return $form; @@ -419,10 +419,10 @@ class DatabaseAggregatorSensorPlugin extends DatabaseAggregatorSensorPluginBase $settings['conditions'][] = $condition; } } - $settings['keys'] = []; - foreach ($form_state->getValue('keys') as $delta => $key) { - if (!empty($key)) { - $settings['keys'][] = $key; + $settings['verbose_fields'] = []; + foreach ($form_state->getValue('verbose_fields') as $delta => $field) { + if (!empty($field)) { + $settings['verbose_fields'][] = $field; } } $this->sensorConfig->set('settings', $settings); @@ -470,7 +470,7 @@ class DatabaseAggregatorSensorPlugin extends DatabaseAggregatorSensorPluginBase * @return array * The updated form component for the selected fields. */ - public function keysReplace(array $form, FormStateInterface $form_state) { + public function fieldsReplace(array $form, FormStateInterface $form_state) { return $form['plugin_container']['settings']['output_table']; } @@ -482,10 +482,10 @@ class DatabaseAggregatorSensorPlugin extends DatabaseAggregatorSensorPluginBase * @param FormStateInterface $form_state * The form state structure. */ - public function addKeySubmit(array $form, FormStateInterface $form_state) { + public function addFieldSubmit(array $form, FormStateInterface $form_state) { $form_state->setRebuild(); - $form_state->set('keys_rows', $form_state->get('keys_rows') + 1); + $form_state->set('fields_rows', $form_state->get('fields_rows') + 1); drupal_set_message(t('Field added.'), 'status'); } @@ -514,18 +514,26 @@ class DatabaseAggregatorSensorPlugin extends DatabaseAggregatorSensorPluginBase t('The specified time interval field %name does not exist in table %table.', array('%name' => $field_name, $table))); } } - $keys = $form_state->getValue('keys'); - $new_keys = []; - foreach ($keys as $delta => $key) { - $key_name = $key['key']; - if (!empty($key_name)) { - if (!$database->schema()->fieldExists($table, $key_name)) { - $form_state->setErrorByName('keys][' . $delta . '][key', t('The specified key %name does not exist in table %table.', ['%name' => $key_name, '%table' => $table])); + $fields = $form_state->getValue('verbose_fields'); + $new_fields = []; + foreach ($fields as $key => $field) { + $field_name = $field['field']; + if (!empty($field_name)) { + if (!$database->schema()->fieldExists($table, $field_name)) { + $query = $database->select($table); + $query->addField($table, $field_name); + try{ + $query->range(0, 1)->execute(); + } + catch (\Exception $e) { + $form_state->setErrorByName('verbose_fields][' . $key . '][field', t('The specified field "%name" does not exist in table "%table".', ['%name' => $field_name, '%table' => $table])); + continue; + } } - $new_keys[] = (array_pop($keys[$delta])); + $new_fields[] = (array_pop($fields[$key])); } } - $form_state->setValue('keys', $new_keys); + $form_state->setValue('verbose_fields', $new_fields); } }