Commit 3422b8fa authored by Kazuhiko Shiozaki's avatar Kazuhiko Shiozaki

Merge remote-tracking branch 'origin/master' into erp5-component

parents 4aa021e0 e2f33e64
...@@ -67,7 +67,7 @@ mode = 0644 ...@@ -67,7 +67,7 @@ mode = 0644
[template-apache-frontend] [template-apache-frontend]
recipe = slapos.recipe.template recipe = slapos.recipe.template
url = ${:_profile_base_location_}/instance-apache-frontend.cfg url = ${:_profile_base_location_}/instance-apache-frontend.cfg
md5sum = b823cb31ff97700c009cf14725690323 md5sum = 070275aa2b2941702cc9ec637fe778e1
output = ${buildout:directory}/template-apache-frontend.cfg output = ${buildout:directory}/template-apache-frontend.cfg
mode = 0644 mode = 0644
......
...@@ -39,6 +39,7 @@ parts = ...@@ -39,6 +39,7 @@ parts =
deploy-index deploy-index
deploy-settings-cgi deploy-settings-cgi
deploy-status-cgi deploy-status-cgi
deploy-status-history-cgi
setup-static-files setup-static-files
certificate-authority certificate-authority
zero-parameters zero-parameters
...@@ -52,6 +53,7 @@ parts = ...@@ -52,6 +53,7 @@ parts =
monitor-backup-log-access monitor-backup-log-access
monitor-ats-cache-stats-wrapper monitor-ats-cache-stats-wrapper
monitor-apache-configuration-verification monitor-apache-configuration-verification
monitor-verify-re6st-connectivity
extends = ${monitor-template:output} extends = ${monitor-template:output}
...@@ -629,3 +631,13 @@ mode = 0700 ...@@ -629,3 +631,13 @@ mode = 0700
command = echo "<pre>$($${apache-configuration:frontend-configuration-verification})</pre>" command = echo "<pre>$($${apache-configuration:frontend-configuration-verification})</pre>"
extra-context = extra-context =
key content :command key content :command
[monitor-verify-re6st-connectivity]
recipe = slapos.cookbook:check_url_available
path = $${monitor-directory:monitor-custom-scripts}/re6st-connectivity
url = $${public:re6st-verification-url}
dash_path = ${dash:location}/bin/dash
curl_path = ${curl:location}/bin/curl
[public]
re6st-verification-url = http://[2001:67c:1254:4::1]/index.html
...@@ -10,7 +10,6 @@ extends = ...@@ -10,7 +10,6 @@ extends =
parts = parts =
slapos-cookbook slapos-cookbook
dcron dcron
download-static-files
monitor-eggs monitor-eggs
extra-eggs extra-eggs
monitor-bin monitor-bin
...@@ -42,7 +41,7 @@ recipe = slapos.recipe.template ...@@ -42,7 +41,7 @@ recipe = slapos.recipe.template
url = ${:_profile_base_location_}/monitor.cfg.in url = ${:_profile_base_location_}/monitor.cfg.in
output = ${buildout:directory}/monitor.cfg output = ${buildout:directory}/monitor.cfg
filename = monitor.cfg filename = monitor.cfg
md5sum = 499ba647f0c22f16bea3cc88bdfd98e8 md5sum = 0fe5b78cd16df190ec8838116954669e
mode = 0644 mode = 0644
[monitor-bin] [monitor-bin]
...@@ -58,7 +57,7 @@ mode = 0644 ...@@ -58,7 +57,7 @@ mode = 0644
recipe = hexagonit.recipe.download recipe = hexagonit.recipe.download
url = ${:_profile_base_location_}/webfile-directory/${:filename} url = ${:_profile_base_location_}/webfile-directory/${:filename}
download-only = true download-only = true
md5sum = cd649264b331499241abfcdb4e81672a md5sum = af1adc107b73290afb98d011f7307de1
destination = ${buildout:directory}/parts/monitor-index destination = ${buildout:directory}/parts/monitor-index
filename = index.cgi.in filename = index.cgi.in
mode = 0644 mode = 0644
...@@ -68,7 +67,7 @@ recipe = hexagonit.recipe.download ...@@ -68,7 +67,7 @@ recipe = hexagonit.recipe.download
url = ${:_profile_base_location_}/webfile-directory/${:filename} url = ${:_profile_base_location_}/webfile-directory/${:filename}
download-only = true download-only = true
destination = ${buildout:directory}/parts/monitor-template-index destination = ${buildout:directory}/parts/monitor-template-index
md5sum = e0d2aaeffc046b2ac6d9d717e1ba321d md5sum = 05051a2ff81ce7dc2eef3106d75b33f9
filename = index.html.jinja2 filename = index.html.jinja2
mode = 0644 mode = 0644
...@@ -76,16 +75,25 @@ mode = 0644 ...@@ -76,16 +75,25 @@ mode = 0644
recipe = hexagonit.recipe.download recipe = hexagonit.recipe.download
url = ${:_profile_base_location_}/webfile-directory/${:filename} url = ${:_profile_base_location_}/webfile-directory/${:filename}
download-only = true download-only = true
md5sum = 4fb26753ee669b8ac90ffe33dbd12e8f md5sum = e43d79bec8824265e22df7960744113a
destination = ${buildout:directory}/parts/monitor-template-status-cgi destination = ${buildout:directory}/parts/monitor-template-status-cgi
filename = status.cgi.in filename = status.cgi.in
mode = 0644 mode = 0644
[status-history-cgi]
recipe = hexagonit.recipe.download
url = ${:_profile_base_location_}/webfile-directory/${:filename}
download-only = true
md5sum = fa8ec5aa5395b1bc6b9c7e898d6c5ec5
destination = ${buildout:directory}/parts/monitor-template-status-history-cgi
filename = status-history.cgi.in
mode = 0644
[settings-cgi] [settings-cgi]
recipe = hexagonit.recipe.download recipe = hexagonit.recipe.download
url = ${:_profile_base_location_}/webfile-directory/${:filename} url = ${:_profile_base_location_}/webfile-directory/${:filename}
download-only = true download-only = true
md5sum = f19c8e4b94718d475520618ae57338c8 md5sum = b4cef123a3273e848e8fe496e22b20a8
destination = ${buildout:directory}/parts/monitor-template-settings-cgi destination = ${buildout:directory}/parts/monitor-template-settings-cgi
filename = settings.cgi.in filename = settings.cgi.in
mode = 0644 mode = 0644
...@@ -94,7 +102,7 @@ mode = 0644 ...@@ -94,7 +102,7 @@ mode = 0644
recipe = hexagonit.recipe.download recipe = hexagonit.recipe.download
url = ${:_profile_base_location_}/webfile-directory/${:filename} url = ${:_profile_base_location_}/webfile-directory/${:filename}
download-only = true download-only = true
md5sum = 1a6153908934bf77e3e033eeabdc1675 md5sum = c7ba7ecb09d0d1d24e7cb73a212cc33f
destination = ${buildout:directory}/parts/monitor-template-monitor-password-cgi destination = ${buildout:directory}/parts/monitor-template-monitor-password-cgi
filename = monitor-password.cgi.in filename = monitor-password.cgi.in
mode = 0644 mode = 0644
...@@ -115,11 +123,20 @@ output = $${directory:services}/crond ...@@ -115,11 +123,20 @@ output = $${directory:services}/crond
mode = 0700 mode = 0700
logfile = $${directory:log}/crond.log logfile = $${directory:log}/crond.log
[download-static-files] [download-monitor-static]
recipe = hexagonit.recipe.download recipe = hexagonit.recipe.download
url = https://github.com/SlapOS/staticForMonitoring/blob/8b7050faa2dd22592766e25b66b9efe0d0b216c9/static-files.tar.gz?raw=true url = http://git.erp5.org/gitweb/slapos.git/snapshot/930be99041ea26b7b1186830e5eb56ef0acc1bdf.tar.gz
download-only = true download-only = false
md5sum = 05030ff31dc75c2b96559dedc70945f5 filename = monitor-static.tar.gz
filename = static-files.tar.gz
destination = ${buildout:directory}/parts/monitor-static-files destination = ${buildout:directory}/parts/monitor-static-files
ignore-existing = true
strip-top-level-dir = true
mode = 0644
[download-monitor-jquery]
recipe = hexagonit.recipe.download
url = http://code.jquery.com/jquery-1.10.2.min.js
download-only = true
destination = ${download-monitor-static:destination}
filename = jquery-1.10.2.min.js
mode = 0644 mode = 0644
...@@ -87,12 +87,9 @@ frequency = */5 * * * * ...@@ -87,12 +87,9 @@ frequency = */5 * * * *
command = $${make-rss:rendered} command = $${make-rss:rendered}
[setup-static-files] [setup-static-files]
recipe = hexagonit.recipe.download recipe = plone.recipe.command
url = ${download-static-files:destination}/${download-static-files:filename} command = ln -s ${download-monitor-jquery:destination} $${monitor-directory:www}/static
filename = static update-command = $${:command}
destination = $${monitor-directory:www}
ignore-existing = true
mode = 0644
[deploy-index] [deploy-index]
recipe = slapos.recipe.template:jinja2 recipe = slapos.recipe.template:jinja2
...@@ -107,7 +104,7 @@ context = ...@@ -107,7 +104,7 @@ context =
key monitor_password_script_path deploy-monitor-password-cgi:rendered key monitor_password_script_path deploy-monitor-password-cgi:rendered
key apache_update_command :update-apache-access key apache_update_command :update-apache-access
raw extra_eggs_interpreter ${buildout:directory}/bin/${extra-eggs:interpreter} raw extra_eggs_interpreter ${buildout:directory}/bin/${extra-eggs:interpreter}
raw default_page /welcome.html raw default_page /static/welcome.html
[deploy-index-template] [deploy-index-template]
recipe = hexagonit.recipe.download recipe = hexagonit.recipe.download
...@@ -130,6 +127,17 @@ context = ...@@ -130,6 +127,17 @@ context =
key this_file :filename key this_file :filename
raw python_executable ${buildout:executable} raw python_executable ${buildout:executable}
[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}
[deploy-settings-cgi] [deploy-settings-cgi]
recipe = slapos.recipe.template:jinja2 recipe = slapos.recipe.template:jinja2
template = ${settings-cgi:location}/${settings-cgi:filename} template = ${settings-cgi:location}/${settings-cgi:filename}
...@@ -220,6 +228,7 @@ name = example.com ...@@ -220,6 +228,7 @@ name = example.com
[public] [public]
recipe = slapos.cookbook:zero-knowledge.write recipe = slapos.cookbook:zero-knowledge.write
filename = knowledge0.cfg filename = knowledge0.cfg
status-history-length = 5
[zero-parameters] [zero-parameters]
recipe = slapos.cookbook:zero-knowledge.read recipe = slapos.cookbook:zero-knowledge.read
......
...@@ -161,8 +161,8 @@ if not is_password_set(): ...@@ -161,8 +161,8 @@ if not is_password_set():
elif not check_password(password): elif not check_password(password):
print "<html><head>" print "<html><head>"
print """ print """
<link rel="stylesheet" href="pure-min.css"> <link rel="stylesheet" href="static/pure-min.css">
<link rel="stylesheet" href="/style.css">""" <link rel="stylesheet" href="static/style.css">"""
print "</head><body>" print "</head><body>"
if password is None: if password is None:
print "<h1>This is the monitoring interface</h1>" print "<h1>This is the monitoring interface</h1>"
......
<html> <html>
<head> <head>
<title>Monitoring Interface</title> <title>Monitoring Interface</title>
<link rel="stylesheet" href="pure-min.css"> <link rel="stylesheet" href="static/pure-min.css">
<link rel="stylesheet" href="/style.css"> <link rel="stylesheet" href="static/style.css">
<script src="jquery-1.10.2.min.js"></script> <script src="static/jquery-1.10.2.min.js"></script>
<script src="script.js"></script> <script src="static/script.js"></script>
</head> </head>
<body> <body>
<div id="div-menu"> <div id="div-menu">
......
...@@ -6,9 +6,9 @@ cgitb.enable() ...@@ -6,9 +6,9 @@ cgitb.enable()
print "<html><head>" print "<html><head>"
print """ print """
<script type="text/javascript" src="/jquery-1.10.2.min.js"></script> <script type="text/javascript" src="static/jquery-1.10.2.min.js"></script>
<link rel="stylesheet" href="pure-min.css"> <link rel="stylesheet" href="static/pure-min.css">
<link rel="stylesheet" href="/style.css">""" <link rel="stylesheet" href="static/style.css">"""
print "</head><body>" print "</head><body>"
print "<h1>This is the monitoring interface</h1>" print "<h1>This is the monitoring interface</h1>"
print "<h2>Please set your password for later access</h2>" print "<h2>Please set your password for later access</h2>"
...@@ -24,6 +24,6 @@ print """ ...@@ -24,6 +24,6 @@ print """
<div class="pure-controls"> <div class="pure-controls">
<button id="register-button" type="submit" class="pure-button pure-button-primary" disabled>Access</button></div> <button id="register-button" type="submit" class="pure-button pure-button-primary" disabled>Access</button></div>
</form> </form>
<script type="text/javascript" src="monitor-register.js"></script> <script type="text/javascript" src="static/monitor-register.js"></script>
</body></html> </body></html>
""" """
...@@ -9,8 +9,8 @@ cgitb.enable() ...@@ -9,8 +9,8 @@ cgitb.enable()
form = cgi.FieldStorage() form = cgi.FieldStorage()
print "<html><head>" print "<html><head>"
print "<link rel=\"stylesheet\" href=\"pure-min.css\">" print "<link rel=\"stylesheet\" href=\"static/pure-min.css\">"
print "<link rel=\"stylesheet\" href=\"/style.css\">" print "<link rel=\"stylesheet\" href=\"static/style.css\">"
print "</head><body>" print "</head><body>"
config_file = "{{ config_cfg }}" config_file = "{{ config_cfg }}"
...@@ -44,8 +44,8 @@ print "<form action=\"/index.cgi\" method=\"post\" class=\"pure-form-aligned\">" ...@@ -44,8 +44,8 @@ print "<form action=\"/index.cgi\" method=\"post\" class=\"pure-form-aligned\">"
print "<input type=\"hidden\" name=\"posting-script\" value=\"{{ pwd }}/{{ this_file }}\">" print "<input type=\"hidden\" name=\"posting-script\" value=\"{{ pwd }}/{{ this_file }}\">"
for option in parser.options("public"): for option in parser.options("public"):
print "<div class=\"pure-control-group\">" print "<div class=\"pure-control-group\">"
print "<label for=\"%s\">%s</label>"%(option, option) print "<label for=\"%s\">%s</label>" % (cgi.escape(option, quote=True), cgi.escape(option))
print "<input type=\"text\" name=\"%s\" value=\"%s\">"%(option, parser.get('public', option)) print "<input type=\"text\" name=\"%s\" value=\"%s\">" % (cgi.escape(option, quote=True), cgi.escape(parser.get('public', option), quote=True))
print "</div>" print "</div>"
print "<div class=\"pure-controls\"><button type=\"submit\" class=\"pure-button \ print "<div class=\"pure-controls\"><button type=\"submit\" class=\"pure-button \
pure-button-primary\">Save</button></div></form>" pure-button-primary\">Save</button></div></form>"
...@@ -56,8 +56,8 @@ for section in parser.sections(): ...@@ -56,8 +56,8 @@ for section in parser.sections():
if section != 'public': if section != 'public':
for option in parser.options(section): for option in parser.options(section):
print "<div class=\"pure-control-group\">" print "<div class=\"pure-control-group\">"
print "<label for=\"%s\">%s</label>"%(option, option) print "<label for=\"%s\">%s</label>" % (cgi.escape(option, quote=True), cgi.escape(option))
print "<input type=\"text\" name=\"%s\" value=\"%s\" readonly>"%(option, parser.get(section, option)) print "<input type=\"text\" name=\"%s\" value=\"%s\" readonly>" %(cgi.escape(option, quote=True), cgi.escape(parser.get(section, option), quote=True))
print "</div>" print "</div>"
print "</form>" print "</form>"
......
$(window).load(function(){
$(document).ready(function() {
$("#password_2").keyup(validate);
});
function validate() {
var password1 = $("#password").val();
var password2 = $("#password_2").val();
if(password1 == password2) {
$("#register-button").removeAttr("disabled");
$("#validate-status").attr("style", "display:none");
}
else {
$("#register-button").attr("disabled", "disabled");
$("#validate-status").attr("style", "").text("Passwords do not match");
}
}
});
\ No newline at end of file
This diff is collapsed.
$(document).ready(function() {
function doDataUrl (data) {
var frame_content = document.getElementsByTagName("iframe")[0].contentWindow;
var b64 = btoa(data);
dataurl = 'data:text/html;base64,' + b64;
$("iframe").attr('src', dataurl);
}
if ( window.self === window.top ) {
//not in an iframe
$(".script").click(function(e) {
e.preventDefault();
var message = $(this).attr('href');
var slash_pos = message.search('/');
//let's differenciate kind of script called
if ( slash_pos === -1 || slash_pos === 0) {
url = message;
}
else {
url = '/index.cgi';
}
$("iframe").attr('src', url + '?script=' + encodeURIComponent(message));
});
$(".link").click(function(e) {
e.preventDefault();
var url = $(this).attr('href');
$("iframe").attr('src', url);
});
}
else {
//in an iframe
$("body").empty();
}
});
body {
padding: 15px;
}
.pure-menu .pure-menu-heading {
font-size: 120%;
}
#content {
display: inline-block;
min-width: 72%;
height: 97%;
margin-left: 30px;
}
#div-menu {
display: inline-block;
vertical-align: top;
}
#div-menu h1 {
text-align: center;
}
iframe {
width: 100%;
height: 100%;
margin: 0px;
padding: 0px;
border-style: none;
}
<html>
<head>
<title>Welcome to the Monitoring Interface</title>
<link rel="stylesheet" href="pure-min.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Welcome to your monitoring interface</h1>
<p>From this interface you can monitor, configure your instance</p>
</body>
</html>
#!{{ python_executable }}
import cgi
import datetime
import os
import sqlite3
db_path = '{{ monitor_db_path }}'
status_history_length = '{{ status_history_length }}'
db = sqlite3.connect(db_path)
print """<html><head>
<link rel="stylesheet" href="static/pure-min.css">
<link rel="stylesheet" href="static/style.css">
</head><body>
<h1>Monitor Status History :</h1>"""
def get_date_from_timestamp(timestamp):
return datetime.datetime.fromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')
def print_individual_status(timestamp):
print "<div><h3>Failure on %s</h3><ul>" % get_date_from_timestamp(timestamp)
rows = db.execute("select status, element, output from individual_status where timestamp=?", (timestamp,))
for row in rows:
status, element, output = row
print "<li>%s , %s :</br><pre>%s</pre></li>" % (status, cgi.escape(element), cgi.escape(output))
print "</ul></div>"
if not os.path.exists(db_path):
print """No status history found</p></body></html>"""
exit(0)
failure_row_list = db.execute("select timestamp from status where status='FAILURE' order by timestamp desc limit ?", status_history_length )
for failure_row in failure_row_list:
timestamp, = failure_row
print_individual_status(timestamp)
print "</body></html>"
...@@ -20,8 +20,8 @@ if not os.path.exists(json_file) or "refresh" in form: ...@@ -20,8 +20,8 @@ if not os.path.exists(json_file) or "refresh" in form:
if not os.path.exists(json_file): if not os.path.exists(json_file):
print """<html><head> print """<html><head>
<link rel="stylesheet" href="pure-min.css"> <link rel="stylesheet" href="static/pure-min.css">
<link rel="stylesheet" href="/style.css"> <link rel="stylesheet" href="static/style.css">
</head><body> </head><body>
<h1>Monitoring :</h1> <h1>Monitoring :</h1>
No status file found</p></body></html>""" No status file found</p></body></html>"""
...@@ -30,8 +30,8 @@ if not os.path.exists(json_file): ...@@ -30,8 +30,8 @@ if not os.path.exists(json_file):
result = json.load(open(json_file)) result = json.load(open(json_file))
print "<html><head>" print "<html><head>"
print "<link rel=\"stylesheet\" href=\"pure-min.css\">" print "<link rel=\"stylesheet\" href=\"static/pure-min.css\">"
print "<link rel=\"stylesheet\" href=\"/style.css\">" print "<link rel=\"stylesheet\" href=\"static/style.css\">"
print "</head><body>" print "</head><body>"
print "<h1>Monitoring :</h1>" print "<h1>Monitoring :</h1>"
print "<form action=\"/index.cgi\" method=\"post\" class=\"pure-form-aligned\">" print "<form action=\"/index.cgi\" method=\"post\" class=\"pure-form-aligned\">"
......
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