instance-monitor-edgebot.cfg.jinja2 6.2 KB
Newer Older
1 2 3 4 5 6 7
{%- 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 %}
8
{%- set slave_instance_dict = {} %}
9 10 11
{%- 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 #}
12
{%-   for slave in json_module.loads(extra_slave_instance_list) | sort(attribute='slave_title') %}
13 14 15
{%-   if 'check-status-code' not in slave %}
{%-     do slave.__setitem__('check-status-code', CONFIGURATION['check-status-code']) %}
{%-   endif %}
16 17 18
{%-   if 'check-certificate-expiration-days' not in slave %}
{%-     do slave.__setitem__('check-certificate-expiration-days', CONFIGURATION['check-certificate-expiration-days']) %}
{%-   endif %}
19 20 21
{%-   if 'failure-amount' not in slave %}
{%-     do slave.__setitem__('failure-amount', CONFIGURATION['failure-amount']) %}
{%-   endif %}
22 23 24
{%-   if 'check-maximum-elapsed-time' not in slave %}
{%-     do slave.__setitem__('check-maximum-elapsed-time', CONFIGURATION['check-maximum-elapsed-time']) %}
{%-   endif %}
25 26 27 28
{%-   if 'check-frontend-ip' not in slave %}
{%-     do slave.__setitem__('check-frontend-ip', CONFIGURATION['check-frontend-ip']) %}
{%-   endif %}
{%-   if 'url' in slave %}
29 30 31 32 33
{%-     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) %}
34 35 36 37
{%-   endif %}
{%-   endfor %}
{%- endif %}
{%- set part_list = [] %}
38 39
{%- for class, slave_instance_list in slave_instance_dict.items() %}
{#- class is used to separate surykatka with different timeouts #}
40
{%-   for slave in slave_instance_list | sort(attribute='slave_title') %}
41 42 43
{%-     set part_id = 'http-query-' ~ slave['slave_reference'] ~ '-promise' %}
{%-     do part_list.append(part_id) %}
{%-     set safe_name = part_id.replace('_', '').replace('.', '-').replace(' ', '-') %}
44 45 46 47 48 49 50
[{{part_id}}]
<= monitor-promise-base
module = check_surykatka_json
name = {{ safe_name }}.py
config-report = http_query
config-url = {{ slave['url'] }}
config-status-code = {{ slave['check-status-code'] }}
51
config-certificate-expiration-days = {{ slave['check-certificate-expiration-days'] }}
52
config-failure-amount = {{ slave['failure-amount'] }}
53
config-maximum-elapsed-time = {{ slave['check-maximum-elapsed-time'] }}
54
config-ip-list = {{ slave['check-frontend-ip'] }}
55 56
config-json-file = ${surykatka-config-{{ class }}:json}
{%-   endfor %}
57

58
[surykatka-bot-promise-{{ class }}]
59 60
<= monitor-promise-base
module = check_surykatka_json
61
name = surykatka-bot-promise-{{ class }}.py
62
config-report = bot_status
63
config-json-file = ${surykatka-config-{{ class }}:json}
64

65
[surykatka-config-{{ class }}]
66
recipe = slapos.recipe.template:jinja2
67 68
db = ${directory:srv}/surykatka-{{ class }}.db
rendered = ${directory:etc}/surykatka-{{ class }}.ini
69 70 71
template = {{ template_surykatka_ini }}
slave_instance_list = {{ dumps(slave_instance_list) }}
nameserver = {{ dumps(CONFIGURATION['nameserver']) }}
72 73 74
json = ${directory:srv}/surykatka-{{ class }}.json
{#- timeout is just a bit bigger than class time #}
timeout = {{ int(class) + 2 }}
75 76 77 78 79 80

context =
  import json_module json
  key db :db
  key nameserver :nameserver
  key slave_instance_list :slave_instance_list
81
  key timeout :timeout
82

83
[surykatka-{{ class }}]
84
recipe = slapos.cookbook:wrapper
85
config = ${surykatka-config-{{ class }}:rendered}
86 87 88 89 90
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

91
[surykatka-status-json-{{ class }}]
92
recipe = slapos.recipe.template:jinja2
93
json = ${surykatka-config-{{ class }}:json}
94
template = inline:#!/bin/sh
95 96
  if {{ surykatka_binary }} --run status --configuration ${surykatka-{{ class }}:config} --output json > ${:json}.tmp ; then
    mv -f ${:json}.tmp ${:json}
97
  else
98
    rm -f ${:json}.tmp
99 100 101 102
  fi
rendered = ${monitor-directory:bin}/${:_buildout_section_name_}
mode = 0755

103
[cron-entry-surykatka-status-{{ class }}]
104 105
recipe = slapos.cookbook:cron.d
cron-entries = ${directory:etc}/cron.d
106
name = surykatka-status-{{ class }}
107
frequency = */2 * * * *
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
command = ${surykatka-status-json-{{ class }}:rendered}
{%- do part_list.append('surykatka-' + class) %}
{%- do part_list.append('surykatka-bot-promise-' + class) %}
{%- do part_list.append('cron-entry-surykatka-status-' + 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
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

[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 %}