From a6990804ed791afb5fae41a0a567090db9434178 Mon Sep 17 00:00:00 2001 From: "th.l" <thl-cmk@outlook.com> Date: Wed, 7 Jun 2023 10:51:59 +0200 Subject: [PATCH] update project --- agent_based/curl.py | 1 + curl-0.1.9-20230607.mkp | Bin 0 -> 26332 bytes curl.mkp | Bin 26529 -> 26332 bytes gui/metrics/curl.py | 210 +++++++ gui/wato/curl.py | 1330 +++++++++++++++++++++++++++++++++++++++ packages/curl | 9 +- 6 files changed, 1545 insertions(+), 5 deletions(-) create mode 100644 curl-0.1.9-20230607.mkp create mode 100644 gui/metrics/curl.py create mode 100644 gui/wato/curl.py diff --git a/agent_based/curl.py b/agent_based/curl.py index d556342..34030d6 100644 --- a/agent_based/curl.py +++ b/agent_based/curl.py @@ -28,6 +28,7 @@ # 2022-04-26: made http(s) URLs clickable # 2022-05-15: added workaround for raise ValueError("Cannot render negative timespan") # 2022-05-17: fixed wrong import path for _TIME_UNITS and _gen_timespan_chunks +# 2023-06-07: moved gui files to ~/local/lib/chek_mk/gui/plugins/... # # Example output from agent: diff --git a/curl-0.1.9-20230607.mkp b/curl-0.1.9-20230607.mkp new file mode 100644 index 0000000000000000000000000000000000000000..554db2d6b2669da4a6a773151f2804ddb3f6d211 GIT binary patch literal 26332 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 Z|6_mtPZX%{4*UsK+xb-qLI)D!e*hfFujBv# literal 0 HcmV?d00001 diff --git a/curl.mkp b/curl.mkp index 8a38d4db2aaadcc599b9392c916fd4727df5c172..554db2d6b2669da4a6a773151f2804ddb3f6d211 100644 GIT binary patch literal 26332 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 Z|6_mtPZX%{4*UsK+xb-qLI)D!e*hfFujBv# literal 26529 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 Y%k%QQJTK47^YqXE53WzgCjeLi0L6&gRsaA1 diff --git a/gui/metrics/curl.py b/gui/metrics/curl.py new file mode 100644 index 0000000..bf186c5 --- /dev/null +++ b/gui/metrics/curl.py @@ -0,0 +1,210 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# License: GNU General Public License v2 +# +# Author: thl-cmk[at]outlook[dot]com +# URL : https://thl-cmk.hopto.org +# Date : 2022-02-15 +# +# Metrics file for the curl plugin +# +# 2022-02-15: rewritten form cmk 2.0, based on the work by doc[at]snowheaven[dot]de +# 2022-02-20: added num_connects, num_redirects, size_download, size_header and speed_download +# 2022-03-13: moved cert time left graph to the end of graphs +# 2022-05-17: added scalars to cert_time_left + +from cmk.gui.i18n import _ + +from cmk.gui.plugins.metrics.utils import ( + metric_info, + graph_info, + perfometer_info, +) + +metric_info['time_namelookup'] = { + 'title': _('Time name lookup'), + 'unit': 's', + 'color': '11/a', +} +metric_info['time_connect'] = { + 'title': _('Time connect'), + 'unit': 's', + 'color': '21/a', +} +metric_info['time_appconnect'] = { + 'title': _('Time app connect'), + 'unit': 's', + 'color': '31/b', +} +metric_info['time_pretransfer'] = { + 'title': _('Time pre transfer'), + 'unit': 's', + 'color': '41/c', +} +metric_info['time_starttransfer'] = { + 'title': _('Time start transfer'), + 'unit': 's', + 'color': '13/b', +} +metric_info['time_total'] = { + 'title': _('Time Total'), + 'unit': 's', + 'color': '25/a', +} +metric_info['time_redirect'] = { + 'title': _('Time redirect'), + 'unit': 's', + 'color': '33/b', +} + +metric_info['num_connects'] = { + 'title': _('# of connects'), + 'unit': 'count', + 'color': '14/a', +} +metric_info['num_redirects'] = { + 'title': _('# of redirects'), + 'unit': 'count', + 'color': '24/b', +} +metric_info['num_headers'] = { + 'title': _('# of headers'), + 'unit': 'count', + 'color': '34/b', +} + +metric_info['size_download'] = { + 'title': _('Size download'), + 'unit': 'bytes', + 'color': '15/b', +} +metric_info['size_upload'] = { + 'title': _('Size upload'), + 'unit': 'bytes', + 'color': '25/b', +} + +metric_info['size_header'] = { + 'title': _('Size header'), + 'unit': 'bytes', + 'color': '35/b', +} +metric_info['size_request'] = { + 'title': _('Size request'), + 'unit': 'bytes', + 'color': '14/b', +} + +metric_info['speed_download'] = { + 'title': _('Speed download'), + 'unit': 'bytes/s', + 'color': '23/a', +} +metric_info['speed_upload'] = { + 'title': _('Speed upload'), + 'unit': 'bytes/s', + 'color': '13/a', +} + +metric_info['cert_time_left'] = { + 'title': _('Certificate Time left'), + 'unit': 's', + 'color': '33/b', +} + +graph_info['curl_times_total'] = { + 'title': _('Times total'), + 'metrics': [ + ('time_total', 'area'), + ], + 'scalars': [ + ('time_total:crit', _('crit')), + ('time_total:warn', _('warn')), + ], +} +graph_info['curl_times'] = { + 'title': _('Times'), + 'metrics': [ + ('time_redirect', 'line'), + ('time_starttransfer', 'line'), + ('time_pretransfer', 'line'), + ('time_appconnect', 'line'), + ('time_connect', 'line'), + ('time_namelookup', 'line'), + ], + 'optional_metrics': [ + 'time_redirect', + 'time_starttransfer', + 'time_pretransfer', + 'time_appconnect', + 'time_connect', + 'time_namelookup', + ], +} +graph_info['curl_speed'] = { + 'title': _('Speed'), + 'metrics': [ + ('speed_upload', '-area'), + ('speed_download', 'area'), + ], + 'optional_metrics': [ + 'speed_download', + 'speed_upload', + ], +} +graph_info['curl_size_download'] = { + 'title': _('Size download/upload'), + 'metrics': [ + ('size_upload', '-area'), + ('size_download', 'area'), + ], + 'optional_metrics': [ + 'size_upload', + 'size_download', + ], +} +graph_info['curl_size_header'] = { + 'title': _('Size header/request'), + 'metrics': [ + ('size_request', '-area'), + ('size_header', 'area'), + ], + 'optional_metrics': [ + 'size_request', + 'size_header', + ], +} +graph_info['curl_counts'] = { + 'title': _('Counts'), + 'metrics': [ + ('num_redirects', '-line'), + ('num_connects', 'line'), + ('num_headers', 'line'), + + ], + 'optional_metrics': [ + 'num_connects', + 'num_redirects', + 'num_headers', + ], +} +graph_info['curl_cert_time'] = { + 'title': _('Certificate time left'), + 'metrics': [ + ('cert_time_left', 'area'), + ], + 'scalars': [ + ('cert_time_left:crit', _('crit')), + ('cert_time_left:warn', _('warn')), + ], +} + +perfometer_info.append( + { + 'type': 'logarithmic', + 'metric': 'time_total', + 'half_value': 5.0, # 5 seconds -> bar half full + 'exponent': 2.0, # every double of 5 == 10% of bar more full + }, +) diff --git a/gui/wato/curl.py b/gui/wato/curl.py new file mode 100644 index 0000000..c55f0a5 --- /dev/null +++ b/gui/wato/curl.py @@ -0,0 +1,1330 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# License: GNU General Public License v2 +# +# Author: thl-cmk[at]outlook[dot]com +# URL : https://thl-cmk.hopto.org +# Date : 2022-02-15 +# +# WATO file for curl plugin (bakery and check) +# +# 2022-02-19: moved global options under "Default settings" +# added per url settings +# added proxy settings (--proxy, --proxy-user, --proxy-digest, --proxy-basic, --proxy-ntlm, --proxy-anyauth) +# added follow redirects (--location) +# added don't verify certificates (--insecure) +# 2022-02-21: added tls/ssl version (--tlsv1.3, --tlsv1.2, --tlsv1.1, --tlsv1.0, --tlsv1, --sslv3, --sslv2) +# added http version (--http2, --http1.1, --http1.0) +# added header only (--head) +# added user authentication (--user, --basic, --digest, --ntlm, --ntlm-wb, --negotiate, --anyauth) +# added to proxy authentication (--proxy-negotiate) +# 2022-02-22: added option for cURL check plugin +# 2022-02-24: changed forbidden_chars from '<>| ' to '"<>#%{}|\^~[]` ' + "'" +# 2022-02-25: added plugin interval and timeout options +# added noproxy option to default settings +# 2022-02-26: added proxy protocol (--socks4, --socks4a, --socks4a, --socks5-hostname) +# 2022-02-27: added expected_strings option to default settings +# 2022-02-28: added expected_strings option to url settings +# added state_item_not_found option +# 2022-03-01: added options --limit-rate, --max-filesize, --max-time, --speed-limit, --speed-time, --connect-timeout +# added options --user-agent, --compressed, --no-alpn, --no-npn, --tcp-fastopen, --tcp-nodelay, +# added options --cert-status +# 2022-03-02: added options --referer -header and api_key_header (header from password store) +# 2022-03-05: added option --dump-header, state_header_str_not_found +# 2022-03-06: added option --verbose, --stderr cert_time_left +# fixed upper/lower levels +# 2022-03-10: optimized generation of upper/lower limit +# added transform for ms to s -> no need in th agent to change the value any more +# 2022-03-11: added check to avoid duplicate service names in url list +# added --location-trust, --max-redirs +# reworked redirect (--location, --location-trust, --max-redirs) +# reworked cert verify (-insecure, --cert-status, --ssl-no-revok) +# reworked advanced_settings (--no-alpn, --no-npn, --tcp-fastopen, -tcp-nodelay) +# removed get_session_data. moved to curl default options +# 2022-03-12: added --cacert +# added max_age +# 2022-03-13: added post data +# made some entries fordable (Default options/Per URL settings, CA Cert) +# changed url and service_name to curl_service tuple +# changed headers to list of tuple +# 2022-03-15: added regex pattern match for bakery +# 2022-03-18: added regex pattern match for check +# 2022-03-19: added options --dns-interface, -dns-ipv4-addr, --dns-ipv6-addr and --dns-servers +# reworked ip_address_resolution section +# added options --ftp-account, --ftp-alternative-to-user, --ftp-create-dirs, --ftp-method +# added options --ftp-pasv, --disable-epsv, --ftp-pret, --ftp-skip-pasv-ip +# added options --ftp-port, --disable-eprt +# added options --ftp-ssl-control, --ftp-ssl-ccc, --ftp-ssl-ccc-mode +# 2022-03-21: moved --connect-timeout, --limit-rate, --max-filesize, --max-time, --speed-limit, --speed-time +# to "limits" sub Directory +# 2022-03-22: added curl_error_code_to_ignore and http_error_code_to_ignore options +# 2022-03-24: added options --hostpubmd5, --hostpubsha256, --pubkey +# 2022-03-24: added options --key --passs +# reworked user_auth section +# 2022-03-25: added options --compressed-ssh, --list-only, --use-ascii +# added options --path-as-is, --ssl-allow-beast, --no-buffer, --no-keepalive, --no-sessionid +# 2022-03-28: added options --mail-auth, --mail-from, --mail-rcpt, --mail-rcpt-allowfails, --crlf, --upload-file (SMTP) +# 2022-04-10: added options to deploy cURL executable, no separate rules for curl and curl executable anymore +# windows/linux summarized under on option, no separate WATO rules per OS necessary anymore +# 2022-04-26: added check option clickable_url +# clarified option 'Don\'t verify certificate/pub key', 'Don\'t stop at verify errors (certificate/pub key)' +# + +import ipaddress +from cmk.gui.i18n import _ +from cmk.gui.exceptions import MKUserError +from cmk.gui.valuespec import ( + Dictionary, + ListOf, + CascadingDropdown, + TextUnicode, + FixedValue, + Integer, + Tuple, + DropdownChoice, + MonitoringState, + ListOfStrings, + TextInput, + Checkbox, + Transform, + CAorCAChain, + Optional, + Foldable, + Age, + # Url, + UploadOrPasteTextFile, + Alternative, +) +from cmk.gui.plugins.wato.utils import ( + rulespec_registry, + HostRulespec, + RulespecGroupCheckParametersOperatingSystem, + CheckParameterRulespecWithItem, +) +from cmk.gui.plugins.wato.utils import ( + PasswordFromStore, +) + +from cmk.gui.cee.plugins.wato.agent_bakery.rulespecs.utils import ( + RulespecGroupMonitoringAgentsAgentPlugins, +) + +bakery_plugin_version = '20220426.v0.0.8' + +# unsafe characters https://www.tutorialspoint.com/html/html_url_encoding.htm +forbidden_chars = '"<>#%{}|\^~[]` \'' + +_limits_transform = [ + ('time_namelookup', 'Time name lookup', 'ms', ), + ('time_connect', 'Time connect', 'ms', ), + ('time_appconnect', 'Time app connect', 'ms', ), + ('time_pretransfer', 'Time pre transfer', 'ms', ), + ('time_redirect', 'Time redirect', 'ms', ), + ('time_starttransfer', 'Time start transfer', 'ms', ), + ('time_total', 'Time Total', 'ms', ), +] + +_limits_no_transform = [ + ('cert_time_left', 'Certificate life time', 'Day(s)', ), + ('num_connects', '# of connects', 'count', ), + ('num_redirects', '# of redirects', 'count', ), + ('num_headers', '# of headers', 'count', ), + ('size_download', 'Size download', 'bytes', ), + ('size_upload', 'Size upload', 'bytes', ), + ('size_header', 'Size header', 'bytes', ), + ('size_request', 'Size request', 'bytes', ), + ('speed_download', 'Speed download', 'bytes/s', ), + ('speed_upload', 'Speed upload', 'bytes/s', ), +] + +_curl_check_elements = [ + ('clickable_url', + FixedValue( + True, + title=_('Render clickable URLs for HTTP/HTTPS (see Inline help)'), + totext=_(''), + help=_('Needs "Escape HTML in service output" rule or in Global settings enabled to work.') + )), + ('state_item_not_found', + MonitoringState( + default_value=1, + title=_('State on item not found'), + help=_('Monitoring state if the item is not found in the agent data. Default is UNKNOWN.') + )), + ('state_http_result_not_200', + MonitoringState( + default_value=1, + title=_('State on HTTP result not OK'), + help=_('Monitoring state if the HTTP return code is not in 2xx or 3xx. Default is WARN.') + )), + ('http_error_code_to_ignore', + ListOfStrings( + title=_('HTTP error codes to ignore'), + allow_empty=False, + orientation='horizontal', + valuespec=Integer(size=3, minvalue=0, maxvalue=999), + )), + ('state_curl_result_not_0', + MonitoringState( + default_value=1, + title=_('State on cURL exit code not OK'), + help=_('Monitoring state if the exit code is not 0. Default is WARN.') + )), + ('curl_error_code_to_ignore', + ListOfStrings( + title=_('cURL error codes to ignore'), + allow_empty=False, + orientation='horizontal', + valuespec=Integer(size=3, minvalue=0, maxvalue=999), + )), + ('state_verify_sll_not_0', + MonitoringState( + default_value=1, + title=_('State on SSL verify not OK'), + help=_('Monitoring state if the SSL verify code is not 0. Default is WARN.') + )), + ('state_expected_str_not_found', + MonitoringState( + default_value=1, + title=_('State on expected string not found'), + help=_('Monitoring state if one expected string is not found in the cURL output. Default is WARN.') + )), + ('state_header_str_not_found', + MonitoringState( + default_value=1, + title=_('State on expected header not found'), + help=_('Monitoring state if one expected header string is not found in the cURL output. Default is WARN.') + )), + ('state_for_regex', + Tuple( + title=_('State for regex pattern match'), + elements=[ + MonitoringState( + default_value=0, + title=_('State on regex pattern match'), + ), + MonitoringState( + default_value=1, + title=_('State on regex pattern don\'t match'), + ), + MonitoringState( + default_value=0, + title=_('State on regex pattern match info missing'), + ), + ], + )), + ('show_additional_info', + Tuple( + title=_('Show additional info'), + help=_('Shows RAW data from cURL in the service details.'), + elements=[ + Checkbox('Request headers'), + Checkbox('Response headers'), + Checkbox('(TLS/SSL) session info'), + Checkbox('RAW data'), + ], + )), + ('max_age', + Tuple( + title=_('Maximum age'), + elements=[ + Age( + title=_('Warning at'), + help=_('Warn, if the age of the page is older than this'), + default_value=3600 * 24, + ), + Age( + title=_('Critical at'), + help=_('Critical, if the age of the page is older than this'), + default_value=3600 * 24 * 4, + ), + MonitoringState( + default_value=0, + title=_('State if not available'), + help=_( + 'Monitoring state if the "Last-Modified" header is not available in the agent data. Default is OK.' + ) + ), + ] + )), +] + + +def _get_tuple_upper(_unit: str) -> Tuple: + return Tuple( + title=_('Upper limits'), + orientation='horizontal', + elements=[ + Integer(title=_('Warning at'), minvalue=0, unit=_(_unit), size=10), + Integer(title=_('Critical at'), minvalue=0, unit=_(_unit), size=10), + ], + ) + + +def _get_tuple_lower(_unit): + return Tuple( + title=_('Lower limits'), + orientation='horizontal', + elements=[ + Integer(title=_('Warning below'), minvalue=0, unit=_(_unit), size=10), + Integer(title=_('Critical below'), minvalue=0, unit=_(_unit), size=10), + ], + ) + + +for key, label, unit in _limits_transform: + _curl_check_elements.append( + (key, + Dictionary( + title=_(label), + elements=[ + ('upper', + Transform( + _get_tuple_upper(unit), + # run after read from rules.mk before show in wato + forth=lambda elems: (int((elems[0] * 1000)), int((elems[1] * 1000))), + # run before write to rule.mk after input in wato + back=lambda elems: (float((elems[0] / 1000)), float((elems[1] / 1000))), + )), + ('lower', + Transform( + _get_tuple_lower(unit), + forth=lambda elems: (int((elems[0] * 1000)), int((elems[1] * 1000))), + back=lambda elems: (float((elems[0] / 1000)), float((elems[1] / 1000))), + )), + ], + )) + ) + +for key, label, unit in _limits_no_transform: + _curl_check_elements.append( + (key, + Dictionary( + title=_(label), + elements=[ + ('upper', _get_tuple_upper(unit)), + ('lower', _get_tuple_lower(unit)), + ], + )) + ) + + +def _valuespec_curl(): + return Dictionary( + elements=_curl_check_elements, + ) + + +rulespec_registry.register( + CheckParameterRulespecWithItem( + check_group_name='curl', + group=RulespecGroupCheckParametersOperatingSystem, + parameter_valuespec=_valuespec_curl, + title=lambda: _('cURL'), + match_type='dict', + item_spec=lambda: TextUnicode(title=_('cURL service name'), ), + )) + +# ######################################################################################################### +# +# cURL bakery options +# +# ######################################################################################################### + +_option_curl_service = ('curl_service', + Tuple( + elements=[ + TextUnicode( + title=_('Service name'), + help=_('Name for the discovered service, for example www.example.com'), + allow_empty=False, + placeholder='your.service.name', + forbidden_chars=forbidden_chars, + ), + TextUnicode( # ToDo: change to URL? + title=_('URL to check'), + help=_('URL to check with cURL, for example https://www.example.com'), + allow_empty=False, + size=90, + placeholder='https://www.example.com', + # forbidden_chars=forbidden_chars, + ), + ], + orientation='horizontal', + )) + + +def _transform_forth_verify_remote_host(params): + if type(params) == tuple: + if len(params) == 4: # added 2022-03-23 + params = (params[0], params[1], params[2], params[3], None, None, None) + return params + + +_option_verify_remote_host = ('cert_verify', + Transform( + Tuple( + title='Configure verification of remote host (certificate/pub key)', + elements=[ + # Checkbox('Don\'t verify certificate/pub key'), + Checkbox('Don\'t stop at verify errors (certificate/pub key)'), + Checkbox('Use OCSP to check certificate status'), + Checkbox('Disable cert revocation checks (WinSSL)'), + Optional(Foldable(CAorCAChain()), label='Certificate to verify against', ), + Optional(TextUnicode(size=40, minlen=32, maxlen=32, regex='[0-9a-fA-F]', ), + label='Expected MD5 hash of pub key'), + Optional(TextUnicode(size=60, allow_empty=False), + label='Expected SHA256 hash of pub key'), + Optional(Foldable(UploadOrPasteTextFile(title='Public key'), ), + label='Expected public key'), + ] + ), + forth=_transform_forth_verify_remote_host + )) + +_option_redirects = ('redirects', + Tuple( + title='Configure redirects', + elements=[ + Checkbox('Follow redirects'), + Checkbox('Use authentication on redirects'), + Optional(Integer(minvalue=-1, default_value=10), label='Max. redirects', sameline=True) + ] + )) + +_option_regex_response = ('regex_response', + Tuple( + title=_('Regular expression to expect in content'), + elements=[ + TextUnicode( + label=_('Regular expression'), + placeholder=_('If empty regex search will be disabled') + ), + Checkbox('Case insensitive'), + Checkbox('Multiline string matching'), + ] + )) + +_option_advanced_settings = ('advanced_settings', + Tuple( + title='Advanced settings', + elements=[ + Checkbox('Allow SSL beast security flaw to improve interoperability'), + Checkbox('Convert LF to CRLF in upload'), + Checkbox('Disable Application Layer Protocol Negotiation (ALPN)'), + Checkbox('Disable buffering of the output stream'), + Checkbox('Disable Next Protocol Negotiation (NPN)'), + Checkbox('Disable SSL session-ID reusing'), + Checkbox('Disable TCP keep alive on the connection'), + Checkbox('Do not squash .. sequences in URL path'), + Checkbox('Use TCP fast open option'), + Checkbox('Use TCP no delay option'), + ] + )) + +_options_get_header_only = ('get_header_only', + FixedValue( + '--head', + title=_('Get header only'), + totext=_('Only headers will be downloaded'), + help=_('cURL will will only download headers. Implements the "--head" option'), + )) +_url_get_header_only = ('get_header_only', + DropdownChoice( + title=_('Get Header only'), + choices=[ + ('--head', _('Get header only')), + ('', _('Get the hole document')), + ], + )) + +_option_auth_user = ('user_auth', + _('Username/Password'), + Tuple( + title=_('Configure user authentication'), + help=_( + 'The password entered here is stored in plain text within the monitored host. ' + 'This is needed because the agent plugin needs to have access to the unencrypted ' + 'password to authenticate with the server.' + ), + elements=[ + TextUnicode( + title=_('Username'), + allow_empty=False, + forbidden_chars=forbidden_chars, + placeholder='username', + ), + PasswordFromStore( + title=_('Password of the user'), + allow_empty=False, + ), + DropdownChoice( + title=_('Authentication method'), + choices=[ + ('', _('Use cURL default')), + ('--basic', _('Basic authentication')), + ('--digest', _('Digest authentication')), + ('--ntlm', _('NTLM authentication')), + ('--ntlm-wb', _('NTLM authentication with winbind')), + ('--negotiate', _('HTTP Negotiate (SPNEGO) authentication')), + ('--anyauth', _('Any authentication')), + ]), + ], + )) +_option_auth_priv_key = ('priv_key_auth', + _('Private/public key'), + Tuple( + elements=[ + TextUnicode( + title=_('Username'), + allow_empty=False, + forbidden_chars=forbidden_chars, + placeholder='username', + ), + PasswordFromStore( + title=_('Pass phrase'), + allow_empty=False, + ), + Foldable(UploadOrPasteTextFile(title='Private key', file_title='Private key (PEM)'), + title='Private key'), + ] + )) +_option_auth = ('user_auth', + CascadingDropdown( + title=_('Configure authentication'), + sorted=False, + choices=[ + _option_auth_user, + _option_auth_priv_key, + (None, _('No authentication')), + ], + )) + +_option_proxy_server = ('proxy_server', + Tuple( + title=_('Proxy server'), + show_titles=False, + elements=[ + DropdownChoice( + title=_('Protocol'), + choices=[ + ('--proxy', _('HTTP')), + ('--socks4', _('SOCKS4')), + ('--socks4a', _('SOCKS4a')), + ('--socks5', _('SOCKS5')), + ('--socks5-hostname', _('SOCKS5 hostname')), + ]), + TextUnicode( + label=_('Server'), + help=_('Name or IP-address of the proxy server.'), + allow_empty=False, + size=40, + placeholder='your.proxy.server', + forbidden_chars=forbidden_chars, + ), + Integer( + label=_('Port'), + default_value=3128, + minvalue=1, + maxvalue=65565, + ), + ], + orientation='horizontal', + )) + +_option_proxy_auth = ('proxy_auth', + Tuple( + title=_('Proxy authentication'), + help=_( + 'The password entered here is stored in plain text within the monitored host. ' + 'This is needed because the agent plugin needs to have access to the unencrypted ' + 'password to authenticate with the proxy.' + ), + elements=[ + TextUnicode( + title=_('Proxy username'), + allow_empty=False, + forbidden_chars=forbidden_chars, + placeholder='proxyusername', + ), + PasswordFromStore( + title=_('Password of the user'), + allow_empty=False, + ), + DropdownChoice( + title=_('Authentication method'), + choices=[ + ('--proxy-basic', _('Basic authentication')), + ('--proxy-digest', _('Digest authentication')), + ('--proxy-ntlm', _('NTLM authentication')), + ('--proxy-negotiate', _('HTTP Negotiate (SPNEGO) authentication')), + ('--proxy-anyauth', _('Any authentication')), + ('--socks5-basic', _('SOCKS5 basic authentication')), + ]), + ], + )) + +_options_proxy = ('http_proxy', + Alternative( + title=_('Configure proxy server'), + elements=[ + Dictionary( + title='Use proxy', + elements=[ + _option_proxy_server, + _option_proxy_auth, + ], + required_keys=['proxy_server'], + ), + FixedValue('--noproxy', title=_('Don\'t use any proxy'), totext=_('')), + FixedValue(None, title=_('Don\'t configure an proxy (use system settings)'), totext=_('')), + ], + )) + +_option_tls_ssl_version = ('tls_ssl_version', + DropdownChoice( + title=_('Use TLS/SSL version'), + choices=[ + ('', _('cURL default')), + ('--ssl', _('Try TLS/SSL')), + ('--ssl-reqd', _('Require TLS/SSL')), + ('--tlsv1.3', _('Use TLS 1.3')), + ('--tlsv1.2', _('Use TLS 1.2')), + ('--tlsv1.1', _('Use TLS 1.1')), + ('--tlsv1.0', _('Use TLS 1.0')), + ('--tlsv1', _('Use TLS1.0 or greater')), + ('--sslv3', _('Use SSLv3')), + ('--sslv2', _('Use SSLv2')), + ]),) + +_option_http_version = ('http_version', + DropdownChoice( + title=_('Use HTTP version'), + choices=[ + ('', _('cURL preferred version')), + ('--http2', _('Use HTTP/2')), + ('--http1.1', _('Use HTTP 1.1')), + ('--http1.0', _('Use HTTP 1.0')), + ]),) + + +def _transform_forth_address_resolution(params): + if not type(params) == dict: + if params == '': + params = None + params = {'dns_resolve_names': params} + return params + + +def _validate_ipaddress(pattern, varprefix): + if pattern: + try: + ipaddress.ip_address(pattern) + except ValueError: + raise MKUserError(varprefix, _(f'{pattern} is not a valid IP address')) + + +_option_address_resolution = ('ip_address_resolution', + Transform( + Foldable( + Dictionary( + title=_('DNS options'), + elements=[ + ('dns_resolve_names', DropdownChoice( + title=_('Resolve names'), + choices=[ + (None, _('IPv4/IPv6')), + ('--ipv4', _('IPv4 only')), + ('--ipv6', _('IPv6 only')), + ])), + ('dns_source_interface', TextUnicode( + title=_('Source interface'), + regex='[0-9a-zA-Z]', + size=15, + )), + ('dns_source_ipv4', TextUnicode( + title=_('IPv4 source address'), + validate=_validate_ipaddress, + size=15, + )), + ('dns_source_ipv6', TextUnicode( + title=_('IPv6 source address'), + validate=_validate_ipaddress, + size=42 + )), + ('dns_servers', ListOfStrings( + title=_('DNS servers'), + valuespec=TextInput(validate=_validate_ipaddress, size=42), + orientation='horizontal', + + )), + ], + ), + forth=_transform_forth_address_resolution + ), + title=_('Set DNS options'), + )) + +_option_ftp_settings = ('ftp_settings', + Foldable( + Dictionary( + title=_('FTP/SCP/SFTP options'), + elements=[ + ('ftp_account', TextUnicode(title=_('Account data string')),), + ('ftp_alternate_to_user', TextUnicode(title=_('String to replace USER command'))), + ('ftp_create_dirs', FixedValue( + True, + title=_('Create remote dir(s)'), + totext=_('enabled') + )), + ('ftp_change_cwd_method', DropdownChoice( + title=_('Change working directory method'), + choices=[ + ('multicwd', 'one CD for each directory'), + ('nocdw', 'No CD. Use full path in SIZE, RETR, STOR etc.'), + ('singlecwd', 'use one CD with full path') + ] + )), + ('ftp_mode', + CascadingDropdown( + title=_('Passive/Actrive mode'), + sorted=False, + choices=[ + ('ftp_pass', + _('FTP passive mode'), + Tuple( + elements=[ + Checkbox(label=_('Don\'t send EPSV command')), + Checkbox(label=_('Send PRET before PASV')), + Checkbox( + label=_('Use remote IP form control channel for data chanel')) + ] + )), + ('ftp_active', + _('FTP active mode'), + Tuple( + elements=[ + Checkbox(label=_('Don\'t send EPRT command')), + TextUnicode( + label=_('Address to use'), + help=_( + 'Can be the interface name ie "eth0", a exact ip address, a ' + 'hostname/FQDN or "-" to use the same address used for the ' + 'control connection' + ), + default_value='-', + regex='[0-9a-zA-Z\\.:\\-_]', + ), + ] + )) + ] + )), + ('ftp_ssl_control', + Tuple( + title=_('Require SSL/TLS for FTP login'), + elements=[ + Checkbox(label=_('Send CCC after authenticating')), + DropdownChoice( + label=_('Set CCC mode'), + choices=[ + ('active', 'Active'), + ('passive', 'Passive'), + ] + ) + ] + )), + ('compressed_ssh', FixedValue( + True, + title=_('Enable ssh compression'), + totext=_('enabled'), + )), + ('list_only', FixedValue( + True, + title=_('Enable list only'), + totext=_('enabled'), + )), + ('use_ascii', FixedValue( + True, + title=_('Enable ASCII transfer'), + totext=_('enabled'), + )), + ], + ), + title=_('Set FTP/SCP/SFTP options'), + )) + +_option_expected_strings = ('expected_strings', + ListOfStrings( + title=_('Strings to expect in response'), + # orientation='horizontal', + allow_empty=False, + valuespec=TextInput(allow_empty=False, regex='[a-zA-Z0-9\.]'), + )) +_url_expected_strings = ('expected_strings', + Alternative( + title=_('Override strings to expect in response'), + elements=[ + _option_expected_strings[1], + FixedValue(None, title=_('Don\'t expect any strings in the response'), totext=_('')), + ], + )) + +_option_header_strings = ('header_strings', + ListOfStrings( + title=_('Strings to expect in header'), + # orientation='horizontal', + allow_empty=False, + valuespec=TextInput(allow_empty=False, regex='[a-zA-Z0-9\\.]'), + )) +_url_header_strings = ('header_strings', + Alternative( + title=_('Override strings to expect in header'), + elements=[ + _option_expected_strings[1], + FixedValue(None, title=_('Don\'t expect any strings in the header'), totext=_('')), + ], + )) + +_option_request_headers = ('request_headers', + ListOf( + Tuple( + title=_('Set headers'), + orientation='horizontal', + elements=[ + TextUnicode( + label=_('Header'), + allow_empty=False, + placeholder='X-your-header', + regex='[a-zA-Z0-9_\\-]', + # size=30, + ), + TextUnicode( + label=_('Value'), + # allow_empty=False, + placeholder='value of header', + # regex='[a-zA-Z0-9_ :;.,=<>#\\-@\\+\\*\'/\\?!\\(\\)\\{\\}\\[\\]\\$\\&~\\^%|"`\\]', + size=50, + empty_text=';' + ), + ] + ), + allow_empty=False, + title=_('Set headers'), + add_label=_('Add header'), + movable=True, + )) +_url_request_headers = ('request_headers', + Alternative( + title=_('Override default headers'), + elements=[ + _option_request_headers[1], + FixedValue(None, title=_('Don\'t configure request headers'), totext=_('')) + ] + )) + +_option_mail_settings = ('mail_settings', + Foldable( + Dictionary( + title=_('SMTP settings'), + elements=[ + ('mail_from', TextUnicode( + title=_('Mail from address'), + allow_empty=False, + )), + ('mail_rcpt', ListOfStrings( + title=_('Mail to address'), + allow_empty=False, + max_entries=5, + )), + ('mail_auth', TextUnicode( + title=_('Mail originator address'), + )), + # ('oauth2_header', TextUnicode( + # title=_('Oauth2 token'), + # )), + ('request', TextUnicode( + title=_('REQUEST command'), + help=_('Send this command instead of LIST (POP3/IMAP) or HELP/VRFY (SMTP).') + )), + _option_request_headers, + ('message', UploadOrPasteTextFile( + title=_('Message to send'), + )), + ('mail_rpct_allowfail', FixedValue( + True, + title=_('Allow some mail to addresses to fail'), + totext=_('enabled') + )) + ] + ), + title=_('Set SMTP options'), + )) + +_option_api_key_header = ('api_key_header', + Tuple( + title=_('Set API key header'), + help=_( + 'The password entered here is stored in plain text within the monitored host. ' + 'This is needed because the agent plugin needs to have access to the unencrypted ' + 'password to authenticate with the server.' + ), + elements=[ + TextUnicode( + title=_('API Key header'), + allow_empty=False, + forbidden_chars='|"', + placeholder='X-API-Key: ', + ), + PasswordFromStore( + title=_('API Key'), + allow_empty=False, + ), + ], + )) +_url_api_key_header = ('api_key_header', + Alternative( + title=_('Set API key header'), + elements=[ + _option_api_key_header[1], + FixedValue(None, title=_('Don\'t configure an API key header'), totext=_('')), + ], + )) + +_option_limit_rate = ('limit_rate', + Tuple( + title=_('Maximum UP-/Download rate'), + # show_titles=False, + elements=[ + Integer( + label=_('Speed'), + # default_value=3128, + minvalue=1, + # maxvalue=65565, + ), + DropdownChoice( + default_value='M', + choices=[ + ('B', _('Byte/s')), + ('K', _('KByte/s')), + ('M', _('MByte/s')), + ('G', _('GByte/s')), + ]), + ], + orientation='horizontal', + )) +_url_limit_rate = ('limit_rate', + Alternative( + title=_('Maximum UP-/Download rate'), + elements=[ + _option_limit_rate[1], + FixedValue(None, title=_('Don\'t configure a rate limit'), totext=_('')), + ], + )) + +_option_max_file_size = ('max_file_size', + Tuple( + title=_('Maximum file size'), + # show_titles=False, + elements=[ + Integer( + label=_('Size'), + # default_value=3128, + minvalue=1, + # maxvalue=65565, + ), + DropdownChoice( + # title=_('Unit'), + choices=[ + ('B', _('Byte')), + ('K', _('KByte')), + ('M', _('MByte')), + ('G', _('GByte')), + ]), + ], + orientation='horizontal', + )) +_url_max_file_size = ('max_file_size', + Alternative( + title=_('Maximum file size'), + elements=[ + _option_max_file_size[1], + FixedValue(None, title=_('Don\'t configure a file size limit'), totext=_('')), + ], + )) + +_option_max_time = ('max_time', + Integer( + title=_('Maximum transfer time'), + default_value=10, + minvalue=1, + unit='s', + )) +_url_max_time = ('max_time', + Alternative( + title=_('Maximum transfer time'), + elements=[ + _option_max_time[1], + FixedValue(None, title=_('Don\'t configure a transfer time limit'), totext=_('')), + ], + )) + +_option_speed_limit = ('speed_limit', + Tuple( + title=_('Minimum speed'), + # show_titles=False, + elements=[ + Integer( + label=_('Speed'), + minvalue=1, + ), + DropdownChoice( + default_value=1024, + choices=[ + (1, _('Byte/s')), + (1024, _('KByte/s')), + (1048576, _('MByte/s')), + (1073741824, _('GByte/s')), + ]), + ], + orientation='horizontal', )) +_url_speed_limit = ('speed_limit', + Alternative( + title=_('Minimum speed'), + elements=[ + _option_speed_limit[1], + FixedValue(None, title=_('Don\'t configure a lower speed limit'), totext=_('')), + ], + )) + +_option_speed_time = ('speed_time', + Integer( + title=_('Minimum speed time'), + default_value=30, + minvalue=1, + unit='s', )) +_url_speed_time = ('speed_time', + Alternative( + title=_('Minimum speed time'), + elements=[ + _option_speed_time[1], + FixedValue(None, title=_('Don\'t configure a minimum speed time limit'), totext=_('')), + ], + )) + +_option_connect_timeout = ('connect_timeout', + Integer( + title=_('Maximum time to connect'), + default_value=1, + minvalue=1, + unit='s', )) +_url_connect_timeout = ('connect_timeout', + Alternative( + title=_('Maximum time to connect'), + elements=[ + _option_connect_timeout[1], + FixedValue(None, title=_('Don\'t configure a maximum time to connect'), totext=_('')), + ], + )) + +_option_limits = ('limits', + Foldable( + Dictionary( + title=_('Limits'), + elements=[ + _option_limit_rate, + _option_max_file_size, + _option_connect_timeout, + _option_max_time, + _option_speed_limit, + _option_speed_time, + ] + ), + title=_('Set connection limits') + )) +_url_limits = ('limits', + Foldable( + Dictionary( + title=_('Limits'), + elements=[ + _url_limit_rate, + _url_max_file_size, + _url_connect_timeout, + _url_max_time, + _url_speed_limit, + _url_speed_time, + ] + ), + title=_('Override connection limits') + )) + +_option_user_agent = ('user_agent', + TextUnicode( + title=_('Set user agent'), + allow_empty=False, + placeholder='your user agent', + # forbidden_chars=forbidden_chars, + forbidden_chars='"|' + )) +_url_user_agent = ('user_agent', + CascadingDropdown( + title=_('Set user agent'), + sorted=False, + choices=[ + ('user_agent', _('Override default user agent'), + _option_user_agent[1],), + ('', _('Don\'t configure a user agent')), + ], + )) + +_option_referer = ('referer', + TextUnicode( + title=_('Set referer'), + allow_empty=False, + placeholder='http://your.referer.url/', + # forbidden_chars=forbidden_chars, + forbidden_chars='|" ', + )) +_url_referer = ('referer', + Alternative( + title=_('Override default referer'), + elements=[ + _option_referer[1], + FixedValue(None, title=_('Don\'t configure a referer'), totext=_('')) + ] + )) + +_options_compressed = ('compressed', + FixedValue( + '--compressed', + title=_('Request compressed response'), + totext=_('Request compressed response enabled'), + )) +_url_compressed = ('compressed', + DropdownChoice( + title=_('Request compressed response'), + choices=[ + ('--compressed', _('Request compressed response')), + ('', _('Don\'t Request compressed response')), + ], + )) + +_option_post = ('post_binary', + Tuple( + title=_('Send HTTP POST data'), + elements=[ + TextUnicode( + label=_('Content-Type'), + allow_empty=False, + forbidden_chars=forbidden_chars, + default_value='text/html' + ), + UploadOrPasteTextFile( + # title=_('HTTP POST data'), + allow_empty=False, + default_value=_( + 'This posts data exactly as specified with no extra processing whatsoever.\n\n' + 'To disable HTTP POST data in per URL settings leave this empty.' + ), + ), + ] + )) + +_option_url_settings = ('url_settings', + Foldable( + Dictionary( + title=_('Per URL settings'), + elements=[ + _option_verify_remote_host, + _options_proxy, + _option_redirects, + _option_auth, + _url_get_header_only, + _option_regex_response, + _url_compressed, + _option_post, + _url_api_key_header, + _url_referer, + _url_request_headers, + _url_user_agent, + _url_header_strings, + _url_expected_strings, + _url_limits, + _option_address_resolution, + _option_ftp_settings, + _option_mail_settings, + _option_tls_ssl_version, + _option_http_version, + _option_advanced_settings, + ], + ), + title=_('Override default settings'), + )) + + +def _validate_service_names(pattern, varprefix): + service_names = [] + + for url in pattern: + service_names.append(url['curl_service'][0]) + duplicates = [service_name for service_name in service_names if service_names.count(service_name) > 1] + duplicates = list(set(duplicates)) + if duplicates: + raise MKUserError( + varprefix, + _(f'There are duplicate service names. Please check the following service names: {", ".join(duplicates)}') + ) + + +def _option_url_transform_curl_service(params): + # transform form separate dict entries to tuple + # added in version 20220314.v0.1.0 + # {'url': 'https://excample.com', 'service_name': 'example'} + # {'curl_service': ('example', 'https://eaxample.com')} + if type(params) == dict: + try: + url = params['url'] + service_name = params['service_name'] + params.pop('url'), + params.pop('service_name') + params.update({'curl_service': (service_name, url)}) + except KeyError: + pass + return params + + +_option_url = ('url_list', + Foldable( + ListOf( + Transform( + Dictionary( + elements=[ + _option_curl_service, + _option_url_settings, + ], + required_keys=['curl_service', ], + ), + forth=_option_url_transform_curl_service + ), + add_label=_('Add URL'), + movable=True, + title=_('URLs to check'), + allow_empty=False, + validate=_validate_service_names, + ))) + +_option_default_settings = ('default_settings', + Foldable( + Dictionary( + title=_('Plugin settings'), + elements=[ + _option_verify_remote_host, + _options_proxy, + _option_redirects, + _option_auth, + _options_get_header_only, + _option_regex_response, + _options_compressed, + _option_post, + _option_api_key_header, + _option_referer, + _option_request_headers, + _option_user_agent, + _option_header_strings, + _option_expected_strings, + _option_limits, + _option_address_resolution, + _option_ftp_settings, + _option_mail_settings, + _option_http_version, + _option_tls_ssl_version, + _option_advanced_settings, + ], + ), + title='Default setting', + )) + +_option_plugin_interval = ('interval', + Integer( + title=_('Plugin run interval'), + minvalue=1, + unit=_('min'), + # default_value=1, + help=_( + 'This is the interval at witch the plugin runs. If not set the plugin will ' + 'run with every cycle of the agent (By default every 1 minute).' + ), + ),) + +_option_plugin_timeout = ('timeout', + Integer( + title=_('Plugin timeout'), + minvalue=1, + unit=_('min'), + # default_value=300, + help=_( + 'This is the maximum run time for the plugin. If not set the timeout for ' + 'the plugin is 1 minute by default.' + ), + ),) + +_option_curl_executable = ('curl_executable', + DropdownChoice( + title=_('cURL executable to use'), + help=_( + 'By default this plugin will use the system provided cURL executable. You can ' + 'decide to deploy a separate cURL executable. If you do so you need to install the ' + 'optional CMK package curl_executable<version>.mkp.' + ), + choices=[ + (None, _('Use system provided cURL executable')), + ('64bit', _('Deploy 64bit cURL version')), + ('32bit', _('Deploy 32bit cURL version')), + ] + )) + + +def _transform_forth_agent_config_curl(params): + # transform added 20220410 on removing os specific rules + if type(params) == tuple: + if params[0] in ['linux', 'windows', 'deploy']: + params = params[1] + else: + params = None + return params + + +def _valuespec_agent_config_curl(): + return Transform( + Alternative( + title=_('cURL'), + elements=[ + Dictionary( + title=_('Deploy cURL agent plugin'), + elements=[ + _option_url, + _option_plugin_interval, + _option_plugin_timeout, + _option_curl_executable, + _option_default_settings, + ], + required_keys=['url_list'], + ), + FixedValue( + None, + title=_('Do not deploy the cURL agent plugin'), + totext=_('The cURL agent plugin will not be deployed') + ), + ], + ), + forth=_transform_forth_agent_config_curl, + ) + + +rulespec_registry.register( + HostRulespec( + group=RulespecGroupMonitoringAgentsAgentPlugins, + name='agent_config:curl', + valuespec=_valuespec_agent_config_curl, + ) +) diff --git a/packages/curl b/packages/curl index 84453ca..24e5b6d 100644 --- a/packages/curl +++ b/packages/curl @@ -22,11 +22,10 @@ 'download_url': 'https://thl-cmk.hopto.org/gitlab/checkmk/vendor-independent/curl', 'files': {'agent_based': ['curl.py'], 'agents': ['bakery/curl.py', 'plugins/curl.sh', 'plugins/curl.ps1'], - 'web': ['plugins/wato/curl.py', 'plugins/metrics/curl.py']}, + 'gui': ['metrics/curl.py', 'wato/curl.py']}, 'name': 'curl', - 'num_files': 6, 'title': 'cURL agent plugin', - 'version': '20220515.v0.1.8c', - 'version.min_required': '2.0.0', - 'version.packaged': '2021.09.20', + 'version': '0.1.9-20230607', + 'version.min_required': '2.1.0b1', + 'version.packaged': '2.1.0p21', 'version.usable_until': None} \ No newline at end of file -- GitLab