{%- if slap_software_type == software_type %} {%- set CONFIGURATION = {} %} {%- for k, v in sorted(slap_configuration.items()) %} {%- if k.startswith('configuration.') %} {%- do CONFIGURATION.__setitem__(k[14:], v) %} {%- endif %} {%- endfor %} {%- set slave_instance_dict = {} %} {%- set extra_slave_instance_list = slapparameter_dict.get('extra_slave_instance_list') %} {%- if extra_slave_instance_list %} {#- Create slaves to process with setting up defaults #} {%- for slave in extra_slave_instance_list | sort(attribute='-slave-title') %} {%- do slave.setdefault('check-status-code', 200) %} {%- do slave.setdefault('check-http-header-dict', {}) %} {%- do slave.setdefault('check-certificate-expiration-days', 15) %} {%- do slave.setdefault('failure-amount', 2) %} {%- do slave.setdefault('check-maximum-elapsed-time', 2) %} {%- do slave.setdefault('check-frontend-ip-list', CONFIGURATION['check-frontend-ip-list']) %} {%- if 'url' in slave %} {%- set class = slave['check-maximum-elapsed-time'] %} {%- if class not in slave_instance_dict %} {%- do slave_instance_dict.__setitem__(class, []) %} {%- endif %} {%- do slave_instance_dict[class].append(slave) %} {%- endif %} {%- endfor %} {%- endif %} {%- set part_list = [] %} {%- for class, slave_instance_list in slave_instance_dict.items() %} {#- class is used to separate surykatka with different timeouts #} {%- set URL_LIST = [] %} {%- for slave in slave_instance_list | sort(attribute='-slave-title') %} {%- do URL_LIST.append(slave['url']) %} {%- set part_id = 'http-query-' ~ hashlib_module.md5(slave['-slave-reference'].encode('utf-8')).hexdigest() ~ '-promise' %} {%- do part_list.append(part_id) %} {%- set safe_name = part_id.replace('_', '').replace('.', '-').replace(' ', '-') %} [{{part_id}}] <= monitor-promise-base promise = check_surykatka_json name = {{ safe_name }}.py config-report = http_query config-url = {{ slave['url'] }} config-status-code = {{ slave['check-status-code'] }} config-http-header-dict = {{ json_module.dumps(slave['check-http-header-dict']) }} config-certificate-expiration-days = {{ slave['check-certificate-expiration-days'] }} config-failure-amount = {{ slave['failure-amount'] }} config-maximum-elapsed-time = {{ slave['check-maximum-elapsed-time'] }} config-ip-list = {{ ' '.join(slave['check-frontend-ip-list']) }} config-json-file = ${surykatka-config-{{ class }}:json} {%- endfor %} [surykatka-bot-promise-{{ class }}] <= monitor-promise-base promise = check_surykatka_json name = surykatka-bot-promise-{{ class }}.py config-report = bot_status config-json-file = ${surykatka-config-{{ class }}:json} [surykatka-config-{{ class }}] recipe = slapos.recipe.template:jinja2 db = ${directory:srv}/surykatka-{{ class }}.db rendered = ${directory:etc}/surykatka-{{ class }}.ini template = {{ template_surykatka_ini }} url_list = {{ dumps(URL_LIST) }} nameserver_list = {{ dumps(CONFIGURATION['nameserver-list']) }} json = ${directory:srv}/surykatka-{{ class }}.json {#- timeout is just a bit bigger than class time #} timeout = {{ int(class) + 2 }} context = import json_module json key db :db key nameserver_list :nameserver_list key url_list :url_list key timeout :timeout [surykatka-{{ class }}] recipe = slapos.cookbook:wrapper config = ${surykatka-config-{{ class }}:rendered} command-line = {{ surykatka_binary }} --run crawl --reload --configuration ${:config} wrapper-path = ${monitor-directory:service}/${:_buildout_section_name_} hash-existing-files = ${buildout:directory}/software_release/buildout.cfg [surykatka-status-json-{{ class }}] recipe = slapos.recipe.template:jinja2 json = ${surykatka-config-{{ class }}:json} template = inline:#!/bin/sh {{ surykatka_binary }} --run status --configuration ${surykatka-{{ class }}:config} --output json --stdout ${:json} rendered = ${monitor-directory:bin}/${:_buildout_section_name_} mode = 0755 [cron-entry-surykatka-status-{{ class }}] recipe = slapos.cookbook:cron.d cron-entries = ${directory:etc}/cron.d name = surykatka-status-{{ class }} frequency = */2 * * * * command = ${surykatka-status-json-{{ class }}:rendered} {%- do part_list.append('surykatka-%i'% (class,)) %} {%- do part_list.append('surykatka-bot-promise-%i' % (class,)) %} {%- do part_list.append('cron-entry-surykatka-status-%i' % (class,)) %} {%- endfor %} [buildout] extends = {{ monitor_template_output }} parts = cron monitor-base publish-connection-information {% for part_id in sorted(part_list) %} {{ part_id }} {% endfor %} eggs-directory = {{ eggs_directory }} develop-eggs-directory = {{ develop_eggs_directory }} offline = true [publish-connection-information] recipe = slapos.cookbook:publish.serialised monitor-base-url = ${monitor-publish-parameters:monitor-base-url} monitor-url = ${monitor-publish-parameters:monitor-url} monitor-user = ${monitor-publish-parameters:monitor-user} monitor-password = ${monitor-publish-parameters:monitor-password} [monitor-instance-parameter] monitor-httpd-port = {{ slapparameter_dict['monitor-httpd-port'] }} cors-domains = {{ slapparameter_dict.get('monitor-cors-domains', 'monitor.app.officejs.com') }} {% if slapparameter_dict.get('monitor-username', '') -%} username = {{ slapparameter_dict['monitor-username'] }} {% endif -%} {% if slapparameter_dict.get('monitor-password', '') -%} password = {{ slapparameter_dict['monitor-password'] }} {% endif -%} interface-url = {{ slapparameter_dict.get('monitor-interface-url', 'https://monitor.app.officejs.com') }} [monitor-directory] service = ${buildout:directory}/etc/service var = ${buildout:directory}/var srv = ${buildout:directory}/srv server-log = ${:private}/server-log monitor-log = ${:private}/monitor-log [slap-configuration] recipe = slapos.cookbook:slapconfiguration.serialised computer = ${slap-connection:computer-id} partition = ${slap-connection:partition-id} url = ${slap-connection:server-url} key = ${slap-connection:key-file} cert = ${slap-connection:cert-file} [slap-parameter] {%- endif %} {#- if slap_software_type == software_type #}