Module: check_mk
Branch: master
Commit: cea0cf2da2e6bd26699c3a36a396176710ad54c1
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=cea0cf2da2e6bd…
Author: Konstantin Büttner <kb(a)mathias-kettner.de>
Date: Thu Mar 21 15:46:44 2019 +0100
6988 FIX netstat: Fix crashing check on AIX 7
The netstat command separates the port from the IP address with a dot (.) instead
of a colon (:) on some AIX versions, which the check previously could not parse
correctly. This has been fixed.
Change-Id: I600625b8a5f9d4e7725c646ea082330a93643225
---
.werks/6988 | 13 +++++++++++++
checks/netstat | 12 +++++++++++-
tests/unit/checks/test_netstat_parse.py | 18 ++++++++++++++++++
3 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/.werks/6988 b/.werks/6988
new file mode 100644
index 0000000..3ab1660
--- /dev/null
+++ b/.werks/6988
@@ -0,0 +1,13 @@
+Title: netstat: Fix crashing check on AIX 7
+Level: 1
+Component: checks
+Class: fix
+Compatible: compat
+Edition: cre
+State: unknown
+Version: 1.6.0i1
+Date: 1553179510
+
+The netstat command separates the port from the IP address with a dot (.) instead
+of a colon (:) on some AIX versions, which the check previously could not parse
+correctly. This has been fixed.
diff --git a/checks/netstat b/checks/netstat
index 43e364e..bb1e55a 100644
--- a/checks/netstat
+++ b/checks/netstat
@@ -51,8 +51,18 @@
# udp 0 0 10.1.2.160:137 0.0.0.0:*
# udp 0 0 0.0.0.0:137 0.0.0.0:*
+# Example Output for AIX:
+# tcp4 0 0 127.0.0.1.1234 127.0.0.1.5678 ESTABLISHED
+
def parse_netstat(info):
+
+ def split_ip_address(ip_address):
+ if ":" in ip_address:
+ return ip_address.rsplit(":", 1)
+ else:
+ return ip_address.rsplit(".", 1)
+
connections = []
for line in info:
if len(line) == 6:
@@ -71,7 +81,7 @@ def parse_netstat(info):
proto = "UDP"
connstate = "LISTENING"
- connections.append((proto, local.rsplit(":", 1),
remote.rsplit(":", 1), connstate))
+ connections.append((proto, split_ip_address(local), split_ip_address(remote),
connstate))
return connections
diff --git a/tests/unit/checks/test_netstat_parse.py
b/tests/unit/checks/test_netstat_parse.py
new file mode 100644
index 0000000..c3c9c11
--- /dev/null
+++ b/tests/unit/checks/test_netstat_parse.py
@@ -0,0 +1,18 @@
+import pytest
+
+pytestmark = pytest.mark.checks
+
+
+(a)pytest.mark.parametrize(
+ "info,expected_parsed",
+ [
+ ([], []),
+ ([["tcp", "0", "0", "0.0.0.0:6556",
"0.0.0.0:*", "LISTENING"]],
+ [("TCP", ["0.0.0.0", "6556"],
["0.0.0.0", "*"], "LISTENING")]),
+ # Some AIX systems separate the port with a dot (.) instead of a colon (:)
+ ([["tcp4", "0", "0", "127.0.0.1.1234",
"127.0.0.1.5678", "ESTABLISHED"]],
+ [("TCP", ["127.0.0.1", "1234"],
["127.0.0.1", "5678"], "ESTABLISHED")]),
+ ])
+def test_parse_netstat(check_manager, info, expected_parsed):
+ parsed = check_manager.get_check('netstat').run_parse(info)
+ assert parsed == expected_parsed