From 538aec2e1bdb69cc6abbd78d739aa3f78c484de5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Piotrowski?= Date: Mon, 11 Feb 2019 14:29:32 +0100 Subject: [PATCH] Update log level classification info It is possible monasca-setup configuration process informs user about errors related to setting up other services, but system is working correctly. It is expected to change some log level classification for INFO or WARNING depends on type of message. Story: 2004970 Task: 29425 Change-Id: Idb8101fea6e7c5c357d72d77b3b264db4cce8527 --- monasca_setup/detection/plugins/apache.py | 9 ++- .../detection/plugins/influxdb_relay.py | 6 +- monasca_setup/detection/plugins/kibana.py | 6 +- monasca_setup/detection/plugins/mon.py | 59 ++++++++++--------- monasca_setup/detection/plugins/mysql.py | 17 +++--- monasca_setup/detection/plugins/ovs.py | 12 ++-- monasca_setup/detection/plugins/postfix.py | 2 +- .../detection/plugins/supervisord.py | 9 ++- monasca_setup/detection/plugins/vcenter.py | 9 ++- monasca_setup/detection/plugins/zookeeper.py | 9 ++- tests/detection/test_kibana.py | 20 +++---- tests/detection/test_ovs.py | 4 +- 12 files changed, 80 insertions(+), 82 deletions(-) diff --git a/monasca_setup/detection/plugins/apache.py b/monasca_setup/detection/plugins/apache.py index b118aaff..d602f79f 100644 --- a/monasca_setup/detection/plugins/apache.py +++ b/monasca_setup/detection/plugins/apache.py @@ -35,7 +35,6 @@ CONFIG_ARG_KEYS = set(["url", "user", "password", "use_server_status_metrics"]) class Apache(monasca_setup.detection.Plugin): - """Detect Apache web server daemons and setup configuration to monitor apache. This plugin will by default setup process check metrics for the apache process, @@ -70,11 +69,11 @@ class Apache(monasca_setup.detection.Plugin): self.available = process_exists and has_args_or_config_file if not self.available: if not process_exists: - log.error('Apache process does not exist.') + log.info('Apache process does not exist.') elif not has_args_or_config_file: - log.error(('Apache process exists but ' - 'configuration file was not found and ' - 'no arguments were given.')) + log.warning(('Apache process exists but ' + 'configuration file was not found and ' + 'no arguments were given.')) def _read_apache_config(self, config_location): # Read the apache config file to extract the needed variables. diff --git a/monasca_setup/detection/plugins/influxdb_relay.py b/monasca_setup/detection/plugins/influxdb_relay.py index 20d69346..e829ee6d 100644 --- a/monasca_setup/detection/plugins/influxdb_relay.py +++ b/monasca_setup/detection/plugins/influxdb_relay.py @@ -67,9 +67,9 @@ class InfluxDBRelay(detection.Plugin): elif not dependencies_installed: err_chunks.append('\tinfluxdb-relay plugin requires "toml" ' 'to be installed') - LOG.error('Plugin for influxdb-relay will not be configured.\n' - 'Following issue have to be resolved: %s' % - '\n'.join(err_chunks)) + LOG.warning('Plugin for influxdb-relay will not be configured.\n' + 'Following issue have to be resolved: %s' % + '\n'.join(err_chunks)) else: self._config = self._load_config(config_file) diff --git a/monasca_setup/detection/plugins/kibana.py b/monasca_setup/detection/plugins/kibana.py index 67e0d59c..835365b3 100644 --- a/monasca_setup/detection/plugins/kibana.py +++ b/monasca_setup/detection/plugins/kibana.py @@ -70,14 +70,14 @@ class Kibana(detection.Plugin): if not self.available: err_str = 'Plugin for Kibana will not be configured.' if not process_found: - LOG.error('Kibana process has not been found. %s' % err_str) + LOG.info('Kibana process has not been found. %s' % err_str) elif not has_deps: LOG.error('Kibana plugin dependencies are not satisfied. ' 'Module "pyaml" not found. %s' % err_str) elif not has_config_file: - LOG.error('Kibana plugin cannot find configuration file %s. %s' - % (cfg_file, err_str)) + LOG.warning('Kibana plugin cannot find configuration file %s. %s' + % (cfg_file, err_str)) def build_config(self): kibana_config = self._get_config_file() diff --git a/monasca_setup/detection/plugins/mon.py b/monasca_setup/detection/plugins/mon.py index 35d1d252..34bb26b7 100644 --- a/monasca_setup/detection/plugins/mon.py +++ b/monasca_setup/detection/plugins/mon.py @@ -71,6 +71,7 @@ def _get_impl_lang(process): class MonAgent(monasca_setup.detection.Plugin): """Detect the Monsaca agent engine and setup some simple checks.""" + def _detect(self): """Run detection, set self.available True if the service is detected.""" self.available = True @@ -158,8 +159,8 @@ class MonAPI(monasca_setup.detection.Plugin): self.available = port_taken self._impl_helper = impl_helper else: - log.error('monasca-api process has not been found. %s' - % self.PARTIAL_ERR_MSG) + log.warning('monasca-api process has not been found. %s' + % self.PARTIAL_ERR_MSG) def build_config(self): """Build the config as a Plugins object and return.""" @@ -198,6 +199,7 @@ class MonAPI(monasca_setup.detection.Plugin): class MonNotification(monasca_setup.detection.Plugin): """Detect the Monsaca notification engine and setup some simple checks.""" + def _detect(self): """Run detection, set self.available True if the service is detected.""" if find_process_cmdline('monasca-notification') is not None: @@ -246,8 +248,8 @@ class MonPersister(monasca_setup.detection.Plugin): log.info('\tmonasca-persister implementation is %s', impl_lang) else: - log.error('monasca-persister process has not been found. %s' - % self.PARTIAL_ERR_MSG) + log.info('monasca-persister process has not been found. %s' + % self.PARTIAL_ERR_MSG) def build_config(self): """Build the config as a Plugins object and return.""" @@ -292,6 +294,7 @@ class MonPersister(monasca_setup.detection.Plugin): class MonThresh(monasca_setup.detection.Plugin): """Detect the running mon-thresh and monitor.""" + def _detect(self): """Run detection, set self.available True if the service is detected.""" # The node will be running either nimbus or supervisor or both @@ -511,30 +514,30 @@ class _MonPersisterJavaHelper(_DropwizardJavaHelper): "path": "meters/monasca.persister.repository.vertica.VerticaMetricRepo." "definition-cache-miss-meter/count", "type": "rate"}, - {"name": "monasca.persister.repository.vertica.VerticaMetricRepo." - "definition-dimension-cache-hit-meter", - "path": "meters/monasca.persister.repository.vertica.VerticaMetricRepo." - "definition-dimension-cache-hit-meter/count", - "type": "rate"}, - {"name": "monasca.persister.repository.vertica.VerticaMetricRepo." - "definition-dimension-cache-miss-meter", - "path": "meters/monasca.persister.repository.vertica.VerticaMetricRepo." - "definition-dimension-cache-miss-meter/count", - "type": "rate"}, - {"name": "monasca.persister.repository.vertica.VerticaMetricRepo." - "dimension-cache-hit-meter", - "path": "meters/monasca.persister.repository.vertica.VerticaMetricRepo." - "dimension-cache-hit-meter/count", - "type": "rate"}, - {"name": "monasca.persister.repository.vertica.VerticaMetricRepo." - "dimension-cache-miss-meter", - "path": "meters/monasca.persister.repository.vertica.VerticaMetricRepo." - "dimension-cache-miss-meter/count", - "type": "rate"}, - {"name": "monasca.persister.repository.vertica.VerticaMetricRepo.measurement-meter", - "path": "meters/monasca.persister.repository.vertica.VerticaMetricRepo." - "measurement-meter/count", - "type": "rate"}]) + {"name": "monasca.persister.repository.vertica.VerticaMetricRepo." + "definition-dimension-cache-hit-meter", + "path": "meters/monasca.persister.repository.vertica.VerticaMetricRepo." + "definition-dimension-cache-hit-meter/count", + "type": "rate"}, + {"name": "monasca.persister.repository.vertica.VerticaMetricRepo." + "definition-dimension-cache-miss-meter", + "path": "meters/monasca.persister.repository.vertica.VerticaMetricRepo." + "definition-dimension-cache-miss-meter/count", + "type": "rate"}, + {"name": "monasca.persister.repository.vertica.VerticaMetricRepo." + "dimension-cache-hit-meter", + "path": "meters/monasca.persister.repository.vertica.VerticaMetricRepo." + "dimension-cache-hit-meter/count", + "type": "rate"}, + {"name": "monasca.persister.repository.vertica.VerticaMetricRepo." + "dimension-cache-miss-meter", + "path": "meters/monasca.persister.repository.vertica.VerticaMetricRepo." + "dimension-cache-miss-meter/count", + "type": "rate"}, + {"name": "monasca.persister.repository.vertica.VerticaMetricRepo.measurement-meter", + "path": "meters/monasca.persister.repository.vertica.VerticaMetricRepo." + "measurement-meter/count", + "type": "rate"}]) def _monitor_endpoints(self, config, metrics): admin_connector = self._cfg['server']['adminConnectors'][0] diff --git a/monasca_setup/detection/plugins/mysql.py b/monasca_setup/detection/plugins/mysql.py index 54b800c5..e5bb2564 100644 --- a/monasca_setup/detection/plugins/mysql.py +++ b/monasca_setup/detection/plugins/mysql.py @@ -28,7 +28,6 @@ SOCKET = '/var/run/mysqld/mysqld.sock' class MySQL(monasca_setup.detection.Plugin): - """Detect MySQL daemons and setup configuration to monitor them. This plugin needs user/password info for mysql setup. @@ -58,11 +57,11 @@ class MySQL(monasca_setup.detection.Plugin): has_dependencies) if not self.available: if not process_exist: - log.error('MySQL process does not exist.') + log.info('MySQL process does not exist.') elif not has_args_or_config_file: - log.error(('MySQL process exists but ' - 'configuration file was not found and ' - 'no arguments were given.')) + log.warning(('MySQL process exists but ' + 'configuration file was not found and ' + 'no arguments were given.')) elif not has_dependencies: log.error(('MySQL process exists but required dependence ' 'PyMySQL is not installed.')) @@ -138,10 +137,10 @@ class MySQL(monasca_setup.detection.Plugin): log.info("\tConnection test success.") config['mysql'] = { 'init_config': None, 'instances': - [{'name': self.host, 'server': self.host, 'port': self.port, - 'user': self.user, 'pass': self.password, - 'sock': self.socket, 'ssl_ca': self.ssl_ca, - 'ssl_key': self.ssl_key, 'ssl_cert': self.ssl_cert}]} + [{'name': self.host, 'server': self.host, 'port': self.port, + 'user': self.user, 'pass': self.password, + 'sock': self.socket, 'ssl_ca': self.ssl_ca, + 'ssl_key': self.ssl_key, 'ssl_cert': self.ssl_cert}]} except ImportError as e: exception_msg = ('The mysql dependency PyMySQL is not ' 'installed. {}'.format(e)) diff --git a/monasca_setup/detection/plugins/ovs.py b/monasca_setup/detection/plugins/ovs.py index 57c13216..7f198b88 100644 --- a/monasca_setup/detection/plugins/ovs.py +++ b/monasca_setup/detection/plugins/ovs.py @@ -82,13 +82,13 @@ class Ovs(detection.Plugin): if not self.available: if not process_exist: - log.error('OVS daemon process [%s] does not exist.', - Ovs.PROC_NAME) + log.info('OVS daemon process [%s] does not exist.', + Ovs.PROC_NAME) elif not neutron_conf_exists: - log.error(('OVS daemon process exists but configuration ' - 'file was not found. Path to file does not exist ' - 'as a process parameter or was not ' - 'passed via args.')) + log.warning(('OVS daemon process exists but configuration ' + 'file was not found. Path to file does not exist ' + 'as a process parameter or was not ' + 'passed via args.')) elif not neutron_conf_valid: log.error(('OVS daemon process exists, configuration file was ' 'found but it looks like it does not contain ' diff --git a/monasca_setup/detection/plugins/postfix.py b/monasca_setup/detection/plugins/postfix.py index df96723e..979b744e 100644 --- a/monasca_setup/detection/plugins/postfix.py +++ b/monasca_setup/detection/plugins/postfix.py @@ -69,7 +69,7 @@ class Postfix(plugin.Plugin): '\n Refer to postfix plugin documentation ' 'for more details.' % (agent_user, _POSTFIX_DIRECTORY)) - log.error('%s\n%s' % (detailed_msg, self.ERROR_MSG)) + log.warning('%s\n%s' % (detailed_msg, self.ERROR_MSG)) def build_config(self): """Build the config as a Plugins object and return. diff --git a/monasca_setup/detection/plugins/supervisord.py b/monasca_setup/detection/plugins/supervisord.py index 5ea0442f..80766440 100644 --- a/monasca_setup/detection/plugins/supervisord.py +++ b/monasca_setup/detection/plugins/supervisord.py @@ -18,7 +18,6 @@ import os import monasca_setup.agent_config import monasca_setup.detection - log = logging.getLogger(__name__) # Defaults @@ -59,11 +58,11 @@ class Supervisord(monasca_setup.detection.Plugin): self.available = found_process is not None and has_args_or_conf_file if not self.available: if not found_process: - log.error('Supervisord process does not exist.') + log.info('Supervisord process does not exist.') elif not has_args_or_conf_file: - log.error(('Supervisord process exists but ' - 'configuration file was not found and ' - 'no arguments were given.')) + log.warning(('Supervisord process exists but ' + 'configuration file was not found and ' + 'no arguments were given.')) def _get_config(self): """Set the configuration to be used for connecting to supervisord diff --git a/monasca_setup/detection/plugins/vcenter.py b/monasca_setup/detection/plugins/vcenter.py index 337a9f9e..79f2f215 100644 --- a/monasca_setup/detection/plugins/vcenter.py +++ b/monasca_setup/detection/plugins/vcenter.py @@ -20,7 +20,6 @@ import monasca_setup.agent_config from monasca_setup.detection import Plugin from monasca_setup.detection.utils import find_process_name - log = logging.getLogger(__name__) @@ -43,11 +42,11 @@ class VCenter(Plugin): self.available = process_exist and has_config_file_or_args if not self.available: if not process_exist: - log.error('Nova-compute process does not exist.') + log.info('Nova-compute process does not exist.') elif not has_config_file_or_args: - log.error(('Nova-compute process exists but ' - 'the configuration file was not detected and no ' - 'arguments were given.')) + log.warning(('Nova-compute process exists but ' + 'the configuration file was not detected and no ' + 'arguments were given.')) def get_nova_config_file(self): nova_conf = None diff --git a/monasca_setup/detection/plugins/zookeeper.py b/monasca_setup/detection/plugins/zookeeper.py index 8d5e4ab4..b82f626a 100644 --- a/monasca_setup/detection/plugins/zookeeper.py +++ b/monasca_setup/detection/plugins/zookeeper.py @@ -28,7 +28,6 @@ _ZOOKEEPER_DEFAULT_PORT = 2181 class Zookeeper(monasca_setup.detection.Plugin): - """Detect Zookeeper daemons and setup configuration to monitor them. """ @@ -46,10 +45,10 @@ class Zookeeper(monasca_setup.detection.Plugin): if not self.available: err_str = 'Plugin for Zookeeper will not be configured.' if not process_found: - log.error('Zookeeper process has not been found: {0}'.format(err_str)) + log.info('Zookeeper process has not been found: {0}'.format(err_str)) elif not has_config_file: - log.error('Zookeeper plugin cannot find configuration ' - 'file: {0}. {1}'.format(self._cfg_file, err_str)) + log.warning('Zookeeper plugin cannot find configuration ' + 'file: {0}. {1}'.format(self._cfg_file, err_str)) def build_config(self): """Build the config as a Plugins object and return. @@ -68,7 +67,7 @@ class Zookeeper(monasca_setup.detection.Plugin): log.info("\tEnabling the zookeeper plugin") config['zk'] = { 'init_config': None, 'instances': - [{'name': host, 'host': host, 'port': port, 'timeout': 3}] + [{'name': host, 'host': host, 'port': port, 'timeout': 3}] } return config diff --git a/tests/detection/test_kibana.py b/tests/detection/test_kibana.py index c3b1c398..8db0981d 100644 --- a/tests/detection/test_kibana.py +++ b/tests/detection/test_kibana.py @@ -113,13 +113,13 @@ class KibanaDetectionTest(unittest.TestCase): self.assertEqual(kibana_user, instance['username']) def test_no_detect_no_process(self): - with mock.patch.object(LOG, 'error') as mock_log_error: + with mock.patch.object(LOG, 'info') as mock_log_info: PSUtilGetProc.cmdLine = [] self._detect(self.kibana_plugin) self.assertFalse(self.kibana_plugin.available) - self.assertEqual(mock_log_error.call_count, 1) - self.assertEqual(mock_log_error.call_args[0][0], + self.assertEqual(mock_log_info.call_count, 1) + self.assertEqual(mock_log_info.call_args[0][0], 'Kibana process has not been found. ' 'Plugin for Kibana will not be configured.') @@ -135,12 +135,12 @@ class KibanaDetectionTest(unittest.TestCase): 'Plugin for Kibana will not be configured.') def test_no_detect_no_default_config_file(self): - with mock.patch.object(LOG, 'error') as mock_log_error: + with mock.patch.object(LOG, 'warning') as mock_log_warning: self._detect(self.kibana_plugin, config_is_file=False) self.assertFalse(self.kibana_plugin.available) - self.assertEqual(mock_log_error.call_count, 1) - self.assertEqual(mock_log_error.call_args[0][0], + self.assertEqual(mock_log_warning.call_count, 1) + self.assertEqual(mock_log_warning.call_args[0][0], 'Kibana plugin cannot find configuration ' 'file /opt/kibana/config/kibana.yml. ' 'Plugin for Kibana will not be configured.') @@ -148,16 +148,16 @@ class KibanaDetectionTest(unittest.TestCase): def test_no_detect_no_args_config_file(self): config_file = '/fake/config' - patch_log_error = mock.patch.object(LOG, 'error') + patch_log_warning = mock.patch.object(LOG, 'warning') - with patch_log_error as mock_log_error: + with patch_log_warning as mock_log_warning: self.kibana_plugin.args = {'kibana-config': config_file} self._detect(self.kibana_plugin, config_is_file=False) self.assertFalse(self.kibana_plugin.available) - self.assertEqual(mock_log_error.call_count, 1) - self.assertEqual(mock_log_error.call_args[0][0], + self.assertEqual(mock_log_warning.call_count, 1) + self.assertEqual(mock_log_warning.call_args[0][0], 'Kibana plugin cannot find configuration ' 'file %s. ' 'Plugin for Kibana will not be configured.' diff --git a/tests/detection/test_ovs.py b/tests/detection/test_ovs.py index 063a743a..a722cc37 100644 --- a/tests/detection/test_ovs.py +++ b/tests/detection/test_ovs.py @@ -169,8 +169,8 @@ class TestOvs(unittest.TestCase): self.assertTrue(self.ovs_obj.available) self.assertEqual(self.ovs_obj.neutron_conf, '/opt/stack/neutron.conf') - def test_detect_warning(self): - with patch.object(LOG, 'error') as mock_log_warn: + def test_detect_info(self): + with patch.object(LOG, 'info') as mock_log_warn: ps_util_get_proc.detect_warning = True self._detect(self.ovs_obj) self.assertFalse(self.ovs_obj.available)