diff --git a/check_docker/check_docker.py b/check_docker/check_docker.py index 73fb2d0..33d7619 100755 --- a/check_docker/check_docker.py +++ b/check_docker/check_docker.py @@ -952,17 +952,25 @@ def socketfile_permissions_failure(parsed_args): return False +def sort_by_severity(messages): + severities = ('CRITICAL: ', 'WARNING: ', 'UNKNOWN: ', 'OK: ') + rank = lambda message: next((index for index, severity in enumerate(severities) + if message.startswith(severity)), len(severities)) + return sorted(messages, key=rank) + + def print_results(): + # Nagios notifications only carry the first line of the plugin output if no_ok: # Remove all the "OK"s filtered_messages = [message for message in messages if not message.startswith('OK: ')] if len(filtered_messages) == 0: messages_concat = 'OK' else: - messages_concat = '\n'.join(filtered_messages) + messages_concat = ', '.join(sort_by_severity(filtered_messages)) else: - messages_concat = '\n'.join(messages) + messages_concat = ', '.join(sort_by_severity(messages)) if no_performance or len(performance_data) == 0: print(messages_concat) diff --git a/check_docker/check_swarm.py b/check_docker/check_swarm.py index 6b75987..6de5619 100755 --- a/check_docker/check_swarm.py +++ b/check_docker/check_swarm.py @@ -360,8 +360,16 @@ def socketfile_permissions_failure(parsed_args): return False +def sort_by_severity(messages): + severities = ('CRITICAL: ', 'WARNING: ', 'UNKNOWN: ', 'OK: ') + rank = lambda message: next((index for index, severity in enumerate(severities) + if message.startswith(severity)), len(severities)) + return sorted(messages, key=rank) + + def print_results(): - print('\n'.join(messages)) + # Nagios notifications only carry the first line of the plugin output + print(', '.join(sort_by_severity(messages))) def perform_checks(raw_args): diff --git a/tests/test_check_docker.py b/tests/test_check_docker.py index 2eea30a..4803dd7 100644 --- a/tests/test_check_docker.py +++ b/tests/test_check_docker.py @@ -709,8 +709,11 @@ def test_perform(check_docker, fs, args, called): @pytest.mark.parametrize("messages, perf_data, expected", ( (['TEST'], [], 'TEST'), - (['FOO', 'BAR'], [], 'FOO\nBAR'), - (['FOO', 'BAR'], ['1;2;3;4;'], 'FOO\nBAR|1;2;3;4;') + (['FOO', 'BAR'], [], 'FOO, BAR'), + (['FOO', 'BAR'], ['1;2;3;4;'], 'FOO, BAR|1;2;3;4;'), + (['OK: FOO', 'WARNING: BAR', 'CRITICAL: BAZ', 'UNKNOWN: QUX'], [], + 'CRITICAL: BAZ, WARNING: BAR, UNKNOWN: QUX, OK: FOO'), + (['WARNING: FOO', 'WARNING: BAR'], [], 'WARNING: FOO, WARNING: BAR') )) def test_print_results(check_docker, capsys, messages, perf_data, expected): # These sometimes get set to true when using random-order plugin, for example --random-order-seed=620808 @@ -726,12 +729,13 @@ def test_print_results(check_docker, capsys, messages, perf_data, expected): @pytest.mark.parametrize("messages, perf_data, no_ok, no_performance, expected", ( ([], [], False, False, ''), (['TEST'], [], False, False, 'TEST'), - (['FOO', 'BAR'], [], False, False, 'FOO\nBAR'), - (['FOO', 'BAR'], ['1;2;3;4;'], False, False, 'FOO\nBAR|1;2;3;4;'), + (['FOO', 'BAR'], [], False, False, 'FOO, BAR'), + (['FOO', 'BAR'], ['1;2;3;4;'], False, False, 'FOO, BAR|1;2;3;4;'), ([], [], True, False, 'OK'), (['OK: TEST'], [], True, False, 'OK'), (['OK: FOO', 'OK: BAR'], [], True, False, 'OK'), (['OK: FOO', 'BAR'], ['1;2;3;4;'], True, False, 'BAR|1;2;3;4;'), + (['OK: FOO', 'WARNING: BAR', 'CRITICAL: BAZ'], [], True, False, 'CRITICAL: BAZ, WARNING: BAR'), ([], [], False, True, ''), (['OK: TEST'], [], False, True, 'OK: TEST'), (['OK: TEST'], ['1;2;3;4;'], False, True, 'OK: TEST'), diff --git a/tests/test_check_swarm.py b/tests/test_check_swarm.py index 4df8d22..37e3685 100644 --- a/tests/test_check_swarm.py +++ b/tests/test_check_swarm.py @@ -391,7 +391,9 @@ def test_check_not_swarm_service(check_swarm, fs): @pytest.mark.parametrize("messages, perf_data, expected", ( ([], [], ''), (['TEST'], [], 'TEST'), - (['FOO', 'BAR'], [], 'FOO\nBAR'), + (['FOO', 'BAR'], [], 'FOO, BAR'), + (['OK: FOO', 'WARNING: BAR', 'CRITICAL: BAZ', 'UNKNOWN: QUX'], [], + 'CRITICAL: BAZ, WARNING: BAR, UNKNOWN: QUX, OK: FOO'), )) def test_print_results(check_swarm, capsys, messages, perf_data, expected): check_swarm.messages = messages