From 21efdbaedf60d11ab577ed43288ef4408be978aa Mon Sep 17 00:00:00 2001 From: "Th.L" <thl-cmk@outlook.com> Date: Tue, 15 Jun 2021 10:42:43 +0200 Subject: [PATCH] update project --- agent_ssllabs.mkp | Bin 7339 -> 6986 bytes lib/check_mk/special_agent/agent_ssllabs.py | 67 ++++---------------- 2 files changed, 13 insertions(+), 54 deletions(-) diff --git a/agent_ssllabs.mkp b/agent_ssllabs.mkp index 8c0e9d0c4171153e6c1fdf91d3e07cbd29bc98f7..eadc333bcafc203183b78d15dee5c9f2b2fbf0f1 100644 GIT binary patch literal 6986 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 literal 7339 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 diff --git a/lib/check_mk/special_agent/agent_ssllabs.py b/lib/check_mk/special_agent/agent_ssllabs.py index 726bc38..a9bee53 100755 --- a/lib/check_mk/special_agent/agent_ssllabs.py +++ b/lib/check_mk/special_agent/agent_ssllabs.py @@ -30,8 +30,6 @@ from typing import Optional, Sequence from cmk.utils.paths import tmp_dir -# import datetime as datetime - def parse_arguments(argv: Sequence[str]) -> argparse.Namespace: ''''Parse arguments needed to construct an URL and for connection conditions''' parser = argparse.ArgumentParser() @@ -44,18 +42,11 @@ def parse_arguments(argv: Sequence[str]) -> argparse.Namespace: return parser.parse_args(argv) -def print_check_header(): - print('<<<ssllabs_grade:sep(0)>>>') - - -def connect_ssllabs_api(ssl_host_address: str, host_cache: str, - host_state_cache: str, grade_cache: str, args: argparse.Namespace, ): +def connect_ssllabs_api(ssl_host_address: str, host_cache: str, args: argparse.Namespace, ): server = 'api.ssllabs.com' uri = 'api/v3/analyze' maxAge = args.maxage # default 167 (1 week minus 1 hour) publish = args.publish # default off - all = 'done' - startNew = 'off' fromCache = 'on' now = time.time() @@ -66,7 +57,6 @@ def connect_ssllabs_api(ssl_host_address: str, host_cache: str, proxies = {'https': args.proxy.split('/')[-1]} # remove 'https://' from proxy string try: - response = requests.get( url=url, timeout=args.timeout, @@ -77,49 +67,32 @@ def connect_ssllabs_api(ssl_host_address: str, host_cache: str, except Exception as err: sys.stdout.write(f'{ssl_host_address} Connection error: {err} on {url}') - print(f'{ssl_host_address};{err};{now};2') + # print(f'{ssl_host_address};{err};{now};2') return + print(response.text) + try: - starttime = jsonData.get('startTime') - statusmessage = jsonData.get('statusMessage') if jsonData['status'] == 'READY': - grade = jsonData['endpoints'][0]['grade'] - testtime = jsonData['testTime'] - print(f'{ssl_host_address};{grade};{testtime};0;{grade}') # if test finish and json data ok --> write data in cache file with open(host_cache, 'w') as outfile: json.dump(jsonData, outfile) - with open(host_state_cache, 'w') as f: - f.write(grade) - elif jsonData['status'] == 'ERROR': - print(f'{ssl_host_address};{statusmessage};{starttime};2;{grade_cache}') - elif jsonData['status'] == 'IN_PROGRESS': - statusdetails = jsonData['endpoints'][0]['statusDetails'] - print(f'{ssl_host_address};Testing, step: {statusdetails};{starttime};1;{grade_cache}') - elif jsonData['status'] == 'DNS': - print(f'{ssl_host_address};{statusmessage};{starttime};1;{grade_cache}') - else: - print(f'{ssl_host_address};status unknown;{now};3;{grade_cache}') except (ValueError, KeyError, TypeError): - print(f'{ssl_host_address};request JSON format error;{now};2;{grade_cache}') + print(f'{ssl_host_address};request JSON format error;{now};2') # ;{grade_cache} -def read_cache(ssl_host_address, host_cache, grade_cache): - now = time.time() - +def read_cache(host_cache: str): # read cache file with open(host_cache) as json_file: # check if cache file contains valid json data try: jsonData = json.load(json_file) if jsonData['status'] == 'READY': - grade = jsonData['endpoints'][0]['grade'] - testtime = jsonData['testTime'] - print(f'{ssl_host_address};{grade};{testtime};0;{grade}') + print(json.dumps(jsonData)) except (ValueError, KeyError, TypeError): - print(f'{ssl_host_address};cache JSON format error;{now};2;{grade_cache}') + # print(f'{ssl_host_address};cache JSON format error;{now};2;{grade_cache}') + return def main(argv: Optional[Sequence[str]] = None) -> None: @@ -135,50 +108,36 @@ def main(argv: Optional[Sequence[str]] = None) -> None: sys.stdout.write('<<<check_mk>>>\n') sys.stdout.write('Version: %s\n' % VERSION) sys.stdout.write('AgentOS: linux\n') - # sys.stdout.write('<<<systemtime>>>\n') - # sys.stdout.write(time.strftime('%s\n')) # create cache directory, if not exists if not os.path.exists(cache_dir): os.makedirs(cache_dir) - print_check_header() + print('<<<ssllabs_grade:sep(0)>>>') for ssl_host_address in ssl_hosts: # changed cache file form host_address to ssl_host_address host_cache = '%s/%s' % (cache_dir, ssl_host_address) - host_state_cache = '%s/%s_state' % (cache_dir, ssl_host_address) - - # state cache form cache file - if os.path.exists(host_state_cache): - with open(host_state_cache) as cache_file: - grade_cache = cache_file.read() - else: - grade_cache = 'A' # check if cache file exists and is not older as cache_age if not os.path.exists(host_cache): connect_ssllabs_api( ssl_host_address=ssl_host_address, host_cache=host_cache, - host_state_cache=host_state_cache, - grade_cache=grade_cache, args=args) else: json_cache_file_age = os.path.getmtime(host_cache) cache_age_sec = now - json_cache_file_age if cache_age_sec < cache_age: read_cache( - ssl_host_address=ssl_host_address, host_cache=host_cache, - grade_cache=grade_cache) + ) else: connect_ssllabs_api( ssl_host_address=ssl_host_address, host_cache=host_cache, - host_state_cache=host_state_cache, - grade_cache=grade_cache, - args=args) + args=args + ) if __name__ == '__main__': -- GitLab