Commit 09b2427e authored by Łukasz Nowak's avatar Łukasz Nowak

XXX software/monitor: Make promises readable

Using hashes for promises is safe, but it makes monitoring fully unreadable.

XXX: In theory it works, but in real deployments for some unknown reason there
     is a problem like:

Process http-query-COMMON-302-http---something-example-com.py:
Traceback (most recent call last):
  File "<SHARED>/lib/python3.9/multiprocessing/process.py", line 315, in _bootstrap
    self.run()
  File "<SOFTWARE>/eggs/slapos.core-1.14.3-py3.9.egg/slapos/grid/promise/__init__.py", line 179, in run
    promise_module = self._loadPromiseModule()
  File "<SOFTWARE>/eggs/slapos.core-1.14.3-py3.9.egg/slapos/grid/promise/__init__.py", line 215, in _loadPromiseModule
    promise_module = importlib.import_module(os.path.splitext(self.name)[0])
  File "<SHARED>/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 691, in _load_unlocked
KeyError: 'http-query-COMMON-302-http---something-example-com'
parent 0a2e149f
......@@ -14,7 +14,7 @@
# not need these here).
[template]
filename = instance.cfg
md5sum = 7a218919e2601fd4b4e534dbce0703a6
md5sum = ae868e1032fd7d239d1b453cbb3ef983
[json-test-template]
_update_hash_filename_ = json-test-template.json.in.jinja2
......@@ -22,7 +22,7 @@ md5sum = 2eb5596544d9c341acf653d4f7ce2680
[template-monitor-edgetest-basic]
_update_hash_filename_ = instance-monitor-edgetest-basic.cfg.jinja2
md5sum = d375f656087bfbd8a11188721e31de68
md5sum = b2c27c37691d435b474b8de54255b53d
[template-node-monitoring]
_update_hash_filename_ = instance-node-monitoring.jinja2.cfg
......
......@@ -9,6 +9,8 @@
'nameserver-list': [],
'enabled-sense-list': 'dns_query tcp_server http_query ssl_certificate elapsed_time'
} %}
{%- set SAFE_CHARACTER = string_module.ascii_letters + string_module.digits + '-' %}
{%- set REPLACEMENT_CHARCTER = '-' %}
{%- for default_key in ['check-frontend-ip-list', 'nameserver-list', 'check-status-code', 'check-certificate-expiration-days', 'check-maximum-elapsed-time', 'failure-amount', 'enabled-sense-list'] %}
{%- if default_key in slapparameter_dict %}
{%- do DEFAULT_DICT.__setitem__(default_key, slapparameter_dict[default_key]) %}
......@@ -54,7 +56,23 @@
{%- for check in class_check_list | sort(attribute='-name') %}
{%- do CLASS_URL_LIST.extend(check['url-list']) %}
{%- for url in check['url-list'] %}
{%- set promise_name = 'http-query-' ~ hashlib_module.md5(check['-name'].encode('utf-8')).hexdigest() ~ '-' ~ hashlib_module.md5(url.encode('utf-8')).hexdigest() %}
{%- set name_list = [] %}
{%- set url_list = [] %}
{%- for char in check['-name'] %}
{%- if char in SAFE_CHARACTER %}
{%- do name_list.append(char) %}
{%- else %}
{%- do name_list.append(REPLACEMENT_CHARCTER) %}
{%- endif %}
{%- endfor %}
{%- for char in url %}
{%- if char in SAFE_CHARACTER %}
{%- do url_list.append(char) %}
{%- else %}
{%- do url_list.append(REPLACEMENT_CHARCTER) %}
{%- endif %}
{%- endfor %}
{%- set promise_name = 'http-query-' ~ ''.join(name_list) ~ '-' ~ ''.join(url_list) | trim('-') %}
{%- set part_name = promise_name ~ '-promise' %}
{%- do PART_LIST.append(part_name) %}
[{{part_name}}]
......
......@@ -16,7 +16,7 @@ extensions = jinja2.ext.do
output = $${buildout:directory}/$${:_buildout_section_name_}.cfg
context =
import json_module json
import hashlib_module hashlib
import string_module string
key develop_eggs_directory buildout:develop-eggs-directory
key eggs_directory buildout:eggs-directory
key slapparameter_dict slap-configuration:configuration
......
......@@ -27,7 +27,7 @@
import datetime
import glob
import hashlib
import string
import json
import os
import psutil
......@@ -381,11 +381,17 @@ class TestEdgeBasic(EdgeMixin, SlapOSInstanceTestCase):
connection_parameter_dict
)
def _normalizePromiseString(self, s):
safe_character = string.ascii_letters + string.digits + '-'
replacement_character = '-'
return ''.join([
q if q in safe_character else replacement_character for q in s])
def assertHttpQueryPromiseContent(
self, instance_reference, name, url, content):
hashed = 'http-query-%s-%s.py' % (
hashlib.md5((name).encode('utf-8')).hexdigest(),
hashlib.md5((url).encode('utf-8')).hexdigest(),
self._normalizePromiseString(name),
self._normalizePromiseString(url),
)
self.assertPromiseContent(instance_reference, hashed, content)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment