monitor.cfg.in 10.3 KB
Newer Older
1 2 3 4 5 6 7 8
[slap-parameters]
recipe = slapos.cookbook:slapconfiguration
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}

9 10
[monitor-parameters]
json-filename = monitor.json
11
json-path = $${monitor-directory:monitor-result}/$${:json-filename}
12
rss-filename = rssfeed.html
13
rss-path = $${monitor-directory:public-cgi}/$${:rss-filename}
14
executable = $${monitor-directory:bin}/monitor.py
15
port = 9685
16 17 18 19
htaccess-file = $${monitor-directory:etc}/.htaccess-monitor
url = https://[$${slap-parameters:ipv6-random}]:$${:port}
index-filename = index.cgi
index-path = $${monitor-directory:www}/$${:index-filename}
20
db-path = $${monitor-directory:etc}/monitor.db
21
monitor-password-path = $${monitor-directory:etc}/.monitor.shadow
22

23 24
[monitor-directory]
recipe = slapos.cookbook:mkdirectory
25
# Standard directory needed by monitoring stack
26 27 28
home = $${buildout:directory}
etc = $${:home}/etc
bin = $${:home}/bin
29
srv = $${:home}/srv
30
var = $${:home}/var
31 32 33 34 35 36 37 38 39 40
log = $${:var}/log
run = $${:var}/run
service = $${:etc}/service/
etc-run = $${:etc}/run/
tmp = $${:home}/tmp
promise = $${:etc}/promise

cron-entries = $${:etc}/cron.d
crontabs = $${:etc}/crontabs
cronstamps = $${:etc}/cronstamps
41

42
ca-dir = $${:srv}/ssl
43 44
www = $${:var}/www

45 46 47
cgi-bin = $${:var}/cgi-bin
monitoring-cgi = $${:cgi-bin}/monitoring
knowledge0-cgi = $${:cgi-bin}/zero-knowledge
48
public-cgi = $${:cgi-bin}/monitor-public
49 50 51

monitor-custom-scripts = $${:etc}/monitor
monitor-result = $${:var}/monitor
52

53 54
apachedex-result = $${:srv}/apachedex

55
private-directory = $${:srv}/monitor-private
56

57 58
[public-symlink]
recipe = cns.recipe.symlink
59
symlink = $${monitor-directory:public-cgi} = $${monitor-directory:www}/monitor-public
60 61
autocreate = true

62 63 64
[cron]
recipe = slapos.cookbook:cron
dcrond-binary = ${dcron:location}/sbin/crond
65 66 67
cron-entries = $${monitor-directory:cron-entries}
crontabs = $${monitor-directory:crontabs}
cronstamps = $${monitor-directory:cronstamps}
68
catcher = $${cron-simplelogger:wrapper}
69
binary = $${monitor-directory:service}/crond
70 71 72 73

# Add log to cron
[cron-simplelogger]
recipe = slapos.cookbook:simplelogger
74 75
wrapper = $${monitor-directory:bin}/cron_simplelogger
log = $${monitor-directory:log}/cron.log
76 77 78 79 80

[cron-entry-monitor]
<= cron
recipe = slapos.cookbook:cron.d
name = launch-monitor
81
frequency = */5 * * * *
82
command = $${deploy-monitor-script:rendered} -a
83 84 85 86 87

[cron-entry-rss]
<= cron
recipe = slapos.cookbook:cron.d
name = build-rss
88
frequency = */5 * * * *
89
command = $${make-rss:rendered}
90

91
[setup-static-files]
92 93 94
recipe = plone.recipe.command
command = ln -s ${download-monitor-jquery:destination} $${monitor-directory:www}/static
update-command = $${:command}
95

96
[deploy-index]
97
recipe = slapos.recipe.template:jinja2
98
template = ${index:location}/${index:filename}
99
rendered = $${monitor-parameters:index-path}
100
update-apache-access = ${apache:location}/bin/htpasswd -cb $${monitor-parameters:htaccess-file} admin
101 102
mode = 0744
context =
103
  key cgi_directory monitor-directory:cgi-bin
104
  raw index_template $${deploy-index-template:location}/$${deploy-index-template:filename}
105 106 107
  key monitor_password_path monitor-parameters:monitor-password-path
  key monitor_password_script_path deploy-monitor-password-cgi:rendered
  key apache_update_command :update-apache-access
108
  raw extra_eggs_interpreter ${buildout:directory}/bin/${extra-eggs:interpreter}
109
  raw default_page /static/welcome.html
110
  section rewrite_element monitor-rewrite-rule
111 112 113 114

[deploy-index-template]
recipe = hexagonit.recipe.download
url = ${index-template:location}/$${:filename}
115
destination = $${monitor-directory:www}
116 117 118
filename = ${index-template:filename}
download-only = true
mode = 0644
119 120 121 122

[deploy-status-cgi]
recipe = slapos.recipe.template:jinja2
template = ${status-cgi:location}/${status-cgi:filename}
123
rendered = $${monitor-directory:monitoring-cgi}/$${:filename}
124
filename = status.cgi
125 126 127
mode = 0744
context =
  key json_file monitor-parameters:json-path
128 129 130
  key monitor_bin monitor-parameters:executable
  key pwd monitor-directory:monitoring-cgi
  key this_file :filename
131
  raw python_executable ${buildout:executable}
132

133 134 135 136 137 138 139 140 141 142 143
[deploy-status-history-cgi]
recipe = slapos.recipe.template:jinja2
template = ${status-history-cgi:location}/${status-history-cgi:filename}
rendered = $${monitor-directory:monitoring-cgi}/$${:filename}
filename = status-history.cgi
mode = 0744
context =
  key monitor_db_path monitor-parameters:db-path
  key status_history_length zero-parameters:status-history-length
  raw python_executable ${buildout:executable}

144
[deploy-settings-cgi]
145
recipe = slapos.recipe.template:jinja2
146
template = ${settings-cgi:location}/${settings-cgi:filename}
147
rendered = $${monitor-directory:knowledge0-cgi}/$${:filename}
148
filename = settings.cgi
149 150 151
mode = 0744
context =
  raw config_cfg $${buildout:directory}/knowledge0.cfg
152
  raw timestamp $${buildout:directory}/.timestamp
153
  raw python_executable ${buildout:executable}
154
  key pwd monitor-directory:knowledge0-cgi
155
  key this_file :filename
156

157 158 159 160 161 162 163 164 165 166 167
[deploy-monitor-password-cgi]
recipe = slapos.recipe.template:jinja2
template = ${monitor-password-cgi:location}/${monitor-password-cgi:filename}
rendered = $${monitor-directory:knowledge0-cgi}/$${:filename}
filename = monitor-password.cgi
mode = 0744
context =
  raw python_executable ${buildout:executable}
  key pwd monitor-directory:knowledge0-cgi
  key this_file :filename

168 169 170
[deploy-monitor-script]
recipe = slapos.recipe.template:jinja2
template = ${monitor-bin:location}/${monitor-bin:filename}
171
rendered = $${monitor-parameters:executable}
172 173
mode = 0744
context =
174
  section directory monitor-directory
175
  section monitor_parameter monitor-parameters
176
  key monitoring_file_json monitor-parameters:json-path
177
  raw python_executable ${buildout:executable}
178

179
[make-rss]
180 181 182
recipe = slapos.recipe.template:jinja2
template = ${make-rss-script:output}
rendered = $${monitor-directory:bin}/make-rss.sh
183
mode = 0744
184 185 186
context =
  section directory monitor-directory
  section monitor_parameters monitor-parameters
187

188 189
[monitor-directory-access]
recipe = plone.recipe.command
190
command = ln -s $${:source} $${monitor-directory:private-directory}
191
source =
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
  
[apachedex-entries-base]
recipe = slapos.recipe.template:jinja2
template = ${run-apachedex:location}/${run-apachedex:filename}
rendered = $${monitor-directory:bin}/$${:script-name}
mode = 0700
extensions = jinja2.ext.do
extra-context =
context = 
  raw python_executable ${buildout:executable}
  raw apachedex_executable ${buildout:directory}/bin/apachedex
  key output_folder monitor-directory:apachedex-result
  $${:extra-context}
  
[apachedex-entries]
<= apachedex-entries-base
script-name = apachedex
extra-context =
  section parameter_dict apachedex-parameters
  key name :script-name
  
[apachedex-parameters]
# XXX - Sample log file with curent date: apache_access.log-%(date)s.gz
# which will be equivalent to apache_access.log-20150112.gz if the date is 2015-01-12
apache-log-list = 
base-list = 
skip-base-list = 
erp5-base-list = 

[cron-entry-apachedex]
<= cron
recipe = slapos.cookbook:cron.d
name = $${apachedex-entries:script-name}
frequency = 0 3 * * *
command = $${apachedex-entries:rendered}
227

228 229 230 231 232
[monitor-instance-log-access]
recipe = plone.recipe.command
command = if [ -d $${:source} ]; then ln -s $${:source} $${monitor-directory:private-directory}/instance-logs; fi
update-command = if [ -d $${:source} ]; then ln -s $${:source} $${monitor-directory:private-directory}/instance-logs; fi
source = $${monitor-directory:home}/.slapgrid/log/
233
location = $${:source}
234

235 236
[cadirectory]
recipe = slapos.cookbook:mkdirectory
237 238 239 240 241
requests = $${monitor-directory:ca-dir}/requests/
private = $${monitor-directory:ca-dir}/private/
certs = $${monitor-directory:ca-dir}/certs/
newcerts = $${monitor-directory:ca-dir}/newcerts/
crl = $${monitor-directory:ca-dir}/crl/
242 243 244 245

[certificate-authority]
recipe = slapos.cookbook:certificate_authority
openssl-binary = ${openssl:location}/bin/openssl
246
ca-dir = $${monitor-directory:ca-dir}
247
requests-directory = $${cadirectory:requests}
248
wrapper = $${monitor-directory:service}/certificate_authority
249 250 251 252 253
ca-private = $${cadirectory:private}
ca-certs = $${cadirectory:certs}
ca-newcerts = $${cadirectory:newcerts}
ca-crl = $${cadirectory:crl}

254 255 256 257 258
[ca-httpd]
<= certificate-authority
recipe = slapos.cookbook:certificate_authority.request
key-file = $${cadirectory:certs}/httpd.key
cert-file = $${cadirectory:certs}/httpd.crt
259 260
executable = $${monitor-directory:bin}/cgi-httpd
wrapper = $${monitor-directory:service}/cgi-httpd
261 262 263
# Put domain name
name = example.com

264 265 266
###########
# Deploy a webserver running cgi scripts for monitoring
###########
267
[public]
268
recipe = slapos.cookbook:zero-knowledge.write
269
filename = knowledge0.cfg
270
status-history-length = 5
271 272

[zero-parameters]
273
recipe = slapos.cookbook:zero-knowledge.read
274
filename = $${public:filename}
275

276 277
[monitor-rewrite-rule]

278
# XXX could it be something lighter?
279
[monitor-httpd-configuration]
280 281 282
pid-file = $${monitor-directory:run}/cgi-httpd.pid
cgid-pid-file = $${monitor-directory:run}/cgi-httpd-cgid.pid
error-log = $${monitor-directory:log}/cgi-httpd-error-log
283 284 285 286 287 288 289 290 291 292 293 294 295
listening-ip = $${slap-parameters:ipv6-random}
certificate = $${ca-httpd:cert-file}
key = $${ca-httpd:key-file}

[monitor-httpd-configuration-file]
recipe = slapos.recipe.template:jinja2
template = ${monitor-httpd-template:destination}/${monitor-httpd-template:filename}
rendered = $${monitor-directory:etc}/cgi-httpd.conf
mode = 0744
context =
  section directory monitor-directory
  section monitor_parameters monitor-parameters
  section httpd_configuration monitor-httpd-configuration
296
  section monitor_rewrite_rule monitor-rewrite-rule
297 298 299 300

[cgi-httpd-wrapper]
recipe = slapos.cookbook:wrapper
apache-executable = ${apache:location}/bin/httpd
301
command-line = $${:apache-executable} -f $${monitor-httpd-configuration-file:rendered} -DFOREGROUND
302
wrapper-path = $${ca-httpd:executable}
303

304
[cgi-httpd-graceful-wrapper]
305 306 307 308 309 310 311 312
recipe = slapos.recipe.template:jinja2
template = ${template-wrapper:output}
rendered = $${monitor-directory:etc-run}/cgi-httpd-graceful
mode = 0700
context =
    key content :command
command = kill -USR1 $(cat $${monitor-httpd-configuration:pid-file})

313

314 315
[monitor-promise]
recipe = slapos.cookbook:check_url_available
316 317
path = $${monitor-directory:promise}/monitor
url = $${monitor-parameters:url}/$${monitor-parameters:index-filename}
318 319 320 321
check-secure = 1
dash_path = ${dash:location}/bin/dash
curl_path = ${curl:location}/bin/curl

322
[publish-connection-informations]
323
recipe = slapos.cookbook:publish
324
monitor_url = $${monitor-parameters:url}