From 02c77e471eb86be9419cc43b6aa386c4f6014a15 Mon Sep 17 00:00:00 2001 From: Junchao-Mellanox Date: Tue, 6 Aug 2024 09:26:26 +0300 Subject: [PATCH] Multi ASIC support --- config/syslog.py | 21 +++++++++++++-------- tests/syslog_multi_asic_test.py | 16 ++++++++++++++++ tests/syslog_test.py | 12 +++--------- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/config/syslog.py b/config/syslog.py index 81b0d08eed..e2179b9553 100644 --- a/config/syslog.py +++ b/config/syslog.py @@ -658,8 +658,11 @@ def disable_rate_limit_feature(db, service_name, namespace): help="Program name to which the SIGHUP is sent (provided with --service)") @click.option("--pid", help="Process ID to which the SIGHUP is sent (provided with --service if PID is from container)") +@click.option('--namespace', '-n', 'namespace', default=None, + type=click.Choice(multi_asic_util.multi_asic_ns_choices()), + show_default=True, help='Namespace name') @clicommon.pass_db -def level(db, component, level, service, program, pid): +def level(db, component, level, service, program, pid, namespace): """ Configure log level """ if program and not service: raise click.UsageError('--program must be specified with --service') @@ -667,18 +670,20 @@ def level(db, component, level, service, program, pid): if service and not program and not pid: raise click.UsageError('--service must be specified with --pid or --program') - if component and level: - output, ret = clicommon.run_command(['swssloglevel', '-c', component, '-l', level], return_cmd=True) - if ret != 0: - raise click.ClickException(f'Failed: {output}') - + if not namespace: + cfg_db = db.cfgdb + else: + asic_id = multi_asic.get_asic_id_from_name(namespace) + service = f'{service}{asic_id}' + cfg_db = db.cfgdb_clients[namespace] + + cfg_db.mod_entry('LOGGER', component, {'LOGLEVEL': level}) if not service and not program and not pid: return - log_config = db.cfgdb.get_entry('LOGGER', component) + log_config = cfg_db.get_entry('LOGGER', component) require_manual_refresh = log_config.get('require_manual_refresh') if not require_manual_refresh: - click.echo(f'Log {component} does not need manual refresh') return if service: diff --git a/tests/syslog_multi_asic_test.py b/tests/syslog_multi_asic_test.py index 7933edcd66..680ee6c129 100644 --- a/tests/syslog_multi_asic_test.py +++ b/tests/syslog_multi_asic_test.py @@ -279,3 +279,19 @@ def test_disable_syslog_rate_limit_feature(self, setup_cmd_module): ['database', '-n', 'asic0'] ) assert result.exit_code == 0 + + @mock.patch('config.syslog.clicommon.run_command') + def test_config_log_level(self, mock_run, setup_cmd_module): + _, config = setup_cmd_module + db = Db() + runner = CliRunner() + + mock_run.return_value = ('something', 0) + result = runner.invoke( + config.config.commands["syslog"].commands["level"], + ['-c', 'component', '-l', 'DEBUG', '-n', 'asic0'], obj=db + ) + assert result.exit_code == 0 + cfg_db = db.cfgdb_clients['asic0'] + data = cfg_db.get_entry('LOGGER', 'component') + assert data.get('LOGLEVEL') == 'DEBUG' diff --git a/tests/syslog_test.py b/tests/syslog_test.py index 4915b9f95c..ac39a901a0 100644 --- a/tests/syslog_test.py +++ b/tests/syslog_test.py @@ -498,6 +498,8 @@ def test_config_log_level(self, mock_run): ['-c', 'component', '-l', 'DEBUG'], obj=db ) assert result.exit_code == SUCCESS + data = db.cfgdb.get_entry('LOGGER', 'component') + assert data.get('LOGLEVEL') == 'DEBUG' result = runner.invoke( config.config.commands["syslog"].commands["level"], @@ -543,17 +545,9 @@ def test_config_log_level_negative(self, mock_run): ) assert result.exit_code == SUCCESS # Verify it does not send signal to orchagent if require_manual_refresh is not true - assert mock_run.call_count == 1 + assert mock_run.call_count == 0 mock_run.return_value = ('something', -1) - result = runner.invoke( - config.config.commands["syslog"].commands["level"], - ['-c', 'log1', '-l', 'DEBUG'], obj=db - ) - - assert result.exit_code != SUCCESS - - mock_run.side_effect = [('something', 0), ('something', -1)] db.cfgdb.set_entry('LOGGER', 'log1', {'require_manual_refresh': 'true'}) result = runner.invoke( config.config.commands["syslog"].commands["level"],