From 90963ebff1662c3941caa3c70d7f7f4365bb641f Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Sat, 8 Jun 2024 16:31:27 +0200
Subject: [PATCH] update project

---
 README.md                                       |   2 +-
 mkp/agent_ssllabs-2.0.4-20240604.mkp            | Bin 0 -> 10014 bytes
 source/agent_based/ssllabs_grade.py             |  13 +++++++++++--
 .../python3/cmk/special_agents/agent_ssllabs.py |   9 ++++++---
 source/packages/agent_ssllabs                   |   2 +-
 5 files changed, 19 insertions(+), 7 deletions(-)
 create mode 100644 mkp/agent_ssllabs-2.0.4-20240604.mkp
 mode change 100755 => 100644 source/lib/python3/cmk/special_agents/agent_ssllabs.py

diff --git a/README.md b/README.md
index 2ecf442..71a3cd5 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[PACKAGE]: ../../raw/master/mkp/agent_ssllabs-2.0.3-20240516.mkp "agent_ssllabs-2.0.3-20240516.mkp"
+[PACKAGE]: ../../raw/master/mkp/agent_ssllabs-2.0.4-20240604.mkp "agent_ssllabs-2.0.4-20240604.mkp"
 # Qualys SSL Labs REST API special agent
 
 This Agent uses die Qualys SSL Labs REST API to scan a list of servers for there SSL status. The plugin will check the given server and all end points reported by the SSL Labs scan.
diff --git a/mkp/agent_ssllabs-2.0.4-20240604.mkp b/mkp/agent_ssllabs-2.0.4-20240604.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..fb1e3389aff67027a0c0e6aba197d64f92fa8265
GIT binary patch
literal 10014
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

literal 0
HcmV?d00001

diff --git a/source/agent_based/ssllabs_grade.py b/source/agent_based/ssllabs_grade.py
index 1cc05d2..9dd8d96 100644
--- a/source/agent_based/ssllabs_grade.py
+++ b/source/agent_based/ssllabs_grade.py
@@ -15,6 +15,7 @@
 # 2024-05-06: added pending to ok states for end points
 # 2024-05-07: fixed crash on wrong params int "ERROR" state
 #             changed max CMK version in package info to 2.3.0b1
+# 2024-06-04: added support for API error messages
 
 # sample string_table:
 # [
@@ -163,7 +164,8 @@ class SSLLabsHost:
     status_message: str | None
     cache_expiry_time: int | None
     from_agent_cache: bool | None
-    end_points: Sequence[SSLLabsEndpoint]
+    end_points: Sequence[SSLLabsEndpoint] | None
+    errors: Sequence[str] | None
 
     @classmethod
     def parse(cls, ssl_host):
@@ -180,7 +182,8 @@ class SSLLabsHost:
             status_message=get_str('statusMessage', ssl_host),
             cache_expiry_time=get_int('cacheExpiryTime', ssl_host),
             from_agent_cache=get_bool('from_agent_cache', ssl_host),
-            end_points=[SSLLabsEndpoint.parse(endpoint) for endpoint in ssl_host.get('endpoints', [])]
+            end_points=[SSLLabsEndpoint.parse(endpoint) for endpoint in ssl_host.get('endpoints', [])],
+            errors=[str(error) for error in ssl_host.get('errors', [])] if ssl_host.get('errors') else None,
         )
 
 
@@ -299,6 +302,10 @@ def check_ssllabs_grade(item: str, params: Mapping[str: any], section: SECTION)
         yield Result(state=State.UNKNOWN, summary=f'Item not found in monitoring data. ({str(section)})')
         return None
 
+    if ssl_host.errors:
+        for error in ssl_host.errors:
+            yield Result(state=State.WARN, notice=error)
+
     value_store = get_value_store()
 
     match ssl_host.status:
@@ -343,6 +350,8 @@ def check_ssllabs_grade(item: str, params: Mapping[str: any], section: SECTION)
             yield from check_has_warning(params, ssl_host.end_points)
             yield from check_is_exceptional(params, ssl_host.end_points)
             yield from check_status(params, ssl_host.end_points)
+        case None:
+            pass
         case _:
             yield Result(state=State.UNKNOWN, notice=f'Unknown test status: {ssl_host.status}')
 
diff --git a/source/lib/python3/cmk/special_agents/agent_ssllabs.py b/source/lib/python3/cmk/special_agents/agent_ssllabs.py
old mode 100755
new mode 100644
index b0709eb..432743a
--- a/source/lib/python3/cmk/special_agents/agent_ssllabs.py
+++ b/source/lib/python3/cmk/special_agents/agent_ssllabs.py
@@ -20,6 +20,7 @@
 # 2024-05-01: refactoring
 # 2024-05-16: fixed proxy usage
 #             removed check_mk section -> no way to differentiate from checkmk agent section check_mk
+# 2025-06-04: changed to expose API errors to the check plugin
 
 # sample agent output (formatted)
 # <<<check_mk>>>
@@ -183,18 +184,20 @@ def connect_ssllabs_api(ssl_host_address: str, host_cache: str, args: Args, ) ->
             timeout=args.timeout,
             proxies=proxies,
             headers={
-                'User-Agent': f'CMK SSL Labs special agent {VERSION}',
+                # 'User-Agent': f'CMK SSL Labs special agent {VERSION}',
             },
         )
     except ConnectionError as e:
-        host_data = {'host': ssl_host_address, 'status': 'ConnectionError', 'error': str(e)}
+        host_data = {'host': ssl_host_address, 'errors': ['status: ConnectionError', str(e)]}
     else:
         try:
             host_data = response.json()
         except JSONDecodeError as e:
-            host_data = {'host': ssl_host_address, 'status': 'JSONDecodeError', 'error': str(e)}
+            host_data = {'host': ssl_host_address, 'errors': ['status: JSONDecodeError', str(e)]}
         if host_data.get('status') == 'READY':
             Path(host_cache).write_text(response.text)
+        elif host_data.get('errors'):
+            host_data.update({'host': ssl_host_address})
 
     return host_data
 
diff --git a/source/packages/agent_ssllabs b/source/packages/agent_ssllabs
index 8568e66..1ca90e9 100644
--- a/source/packages/agent_ssllabs
+++ b/source/packages/agent_ssllabs
@@ -15,7 +15,7 @@
            'web': ['plugins/wato/agent_ssllabs.py']},
  'name': 'agent_ssllabs',
  'title': 'ssllabs api check',
- 'version': '2.0.3-20240516',
+ 'version': '2.0.4-20240604',
  'version.min_required': '2.2.0b1',
  'version.packaged': '2.2.0p24',
  'version.usable_until': '2.3.0b1'}
-- 
GitLab