Commit 459c986b authored by Tristan Cavelier's avatar Tristan Cavelier

+1

parent 853b4890
...@@ -70,7 +70,7 @@ mode = 0644 ...@@ -70,7 +70,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 = 1e17f3c1850a3bda25409e2fdc0e3db8 md5sum = cba562a714ebaa79b5fc9ae0f730c9d8
destination = ${buildout:parts-directory}/monitor-index destination = ${buildout:parts-directory}/monitor-index
filename = index.cgi.in filename = index.cgi.in
mode = 0644 mode = 0644
......
...@@ -26,6 +26,14 @@ monitor_apache_password_command = "{{ apache_update_command }}" ...@@ -26,6 +26,14 @@ monitor_apache_password_command = "{{ apache_update_command }}"
monitor_rewrite = "{{ ' '.join(rewrite_element.keys()) }}" monitor_rewrite = "{{ ' '.join(rewrite_element.keys()) }}"
instance_path = os.path.join(cgi_path, "../../..")
slappart1_mysql_error_log = os.path.join(instance_path, "slappart1/var/log/mariadb_error.log")
slappart1_mysql_slowquery_log = os.path.join(instance_path, "slappart1/var/log/mariadb_slowquery.log")
slappart6_zope_0_event_log = os.path.join(instance_path, "slappart6/var/log/zope-0-event.log")
slappart6_zope_0_Z2_log = os.path.join(instance_path, "slappart6/var/log/zope-0-Z2.log")
slappart7_apache_access_log = os.path.join(instance_path, "slappart7/var/log/apache-access.log")
slappart7_apache_error_log = os.path.join(instance_path, "slappart7/var/log/apache-error.log")
################# #################
# Main function # # Main function #
################# #################
...@@ -270,7 +278,7 @@ def promise_slowQuery(): ...@@ -270,7 +278,7 @@ def promise_slowQuery():
return 0 return 0
if form.has_key("grep"): if form.has_key("grep"):
grep = form["grep"].value grep = form["grep"].value
with open(os.path.join(cgi_path, "mariadb_slowquery.log")) as f: with open(os.path.join(instance_path, "slappart1/var/log/mariadb_slowquery.log")) as f:
setHeader("Status", "200 OK") setHeader("Status", "200 OK")
setHeader("Content-Type", "text/plain") setHeader("Content-Type", "text/plain")
sendHeaders() sendHeaders()
...@@ -280,7 +288,7 @@ def promise_slowQuery(): ...@@ -280,7 +288,7 @@ def promise_slowQuery():
sys.stdout.write("% 5d: %s" % (i, line)) sys.stdout.write("% 5d: %s" % (i, line))
i += 1 i += 1
return 0 return 0
with open(os.path.join(cgi_path, "mariadb_slowquery.log")) as f: with open(os.path.join(instance_path, "slappart1/var/log/mariadb_slowquery.log")) as f:
setHeader("Status", "200 OK") setHeader("Status", "200 OK")
setHeader("Content-Type", "text/plain") setHeader("Content-Type", "text/plain")
sendHeaders() sendHeaders()
...@@ -315,7 +323,7 @@ def promise_slowQuery(): ...@@ -315,7 +323,7 @@ def promise_slowQuery():
print('<input name="grep" type="text" /><input type="submit" value="Search" /></form>') print('<input name="grep" type="text" /><input type="submit" value="Search" /></form>')
print('<div style="display: inline-block;"><span> | </span><button>Rotate log</button></div>') print('<div style="display: inline-block;"><span> | </span><button>Rotate log</button></div>')
try: try:
print('<pre style="overflow-wrap: initial; overflow-x: auto; white-space: pre;">[..]\n' + escapeHtml(open(os.path.join(cgi_path, "mariadb_slowquery.log")).read()[-1024:] or "No log") + "</pre>") print('<pre style="overflow-wrap: initial; overflow-x: auto; white-space: pre;">[..]\n' + escapeHtml(open(os.path.join(instance_path, "slappart1/var/log/mariadb_slowquery.log")).read()[-1024:] or "No log") + "</pre>")
except Exception, e: except Exception, e:
print("<p>An error occured durring log reading</p><pre>" + escapeHtml(repr(e)) + "</pre>") print("<p>An error occured durring log reading</p><pre>" + escapeHtml(repr(e)) + "</pre>")
print("</body></html>") print("</body></html>")
...@@ -364,6 +372,38 @@ def promise_logSupervisor(): ...@@ -364,6 +372,38 @@ def promise_logSupervisor():
# sendHeaders() # sendHeaders()
# sys.stdout.write(f.read()) # sys.stdout.write(f.read())
# return 0 # return 0
log_list = [
{
"name": "instance 1: Mariadb error log",
"id": "slappart1-mariadb-error-log",
"path": slappart1_mysql_error_log,
},
{
"name": "instance 1: Mariadb slow query log",
"id": "slappart1-mariadb-slowquery-log",
"path": slappart1_mysql_slowquery_log,
},
{
"name": "instance 6: Zope event log",
"id": "slappart6-zope-event-log",
"path": slappart6_zope_0_event_log,
},
{
"name": "instance 6: Zope access log",
"id": "slappart6-zope-0-Z2-log",
"path": slappart6_zope_0_Z2_log,
},
{
"name": "instance 7: Apache access log",
"id": "slappart7-apache-access-log",
"path": slappart7_apache_access_log,
},
{
"name": "instance 7: Apache error log",
"id": "slappart7-apache-error-log",
"path": slappart7_apache_error_log,
}
]
setHeader("Status", "200 OK") setHeader("Status", "200 OK")
sendHeaders() sendHeaders()
print("<!DOCTYPE html><html><head>") print("<!DOCTYPE html><html><head>")
...@@ -372,7 +412,6 @@ def promise_logSupervisor(): ...@@ -372,7 +412,6 @@ def promise_logSupervisor():
print('<header><a href="?" class="as-button">Parent page</a><a href="" class="as-button">Refresh</a></header>') print('<header><a href="?" class="as-button">Parent page</a><a href="" class="as-button">Refresh</a></header>')
print("<h1>ERP5 log supervisor</h1>") print("<h1>ERP5 log supervisor</h1>")
print("<p>This page gives access to all ERP5 log files. If a log file goes too big, the status of this supervisor is change to BAD.</p>") print("<p>This page gives access to all ERP5 log files. If a log file goes too big, the status of this supervisor is change to BAD.</p>")
print('<p><img src="%s" style="height: 10mm; width: 10mm; vertical-align: bottom;" alt="RSS feed"/></p>' % rssIconDataUri)
print("<p>Index:</p>") print("<p>Index:</p>")
print('<ul>') print('<ul>')
print(' <li><a href="#log-file-size">Log file size</a></li>') print(' <li><a href="#log-file-size">Log file size</a></li>')
...@@ -380,62 +419,52 @@ def promise_logSupervisor(): ...@@ -380,62 +419,52 @@ def promise_logSupervisor():
print(' <li><a href="#slappart1-mariadb-log">instance 1: Mariadb log</a></li>') print(' <li><a href="#slappart1-mariadb-log">instance 1: Mariadb log</a></li>')
print(' <li><a href="#slappart6-zope-0-event">instance 6: Zope 0 event log</a></li>') print(' <li><a href="#slappart6-zope-0-event">instance 6: Zope 0 event log</a></li>')
print(' <li><a href="#slappart6-zope-0-access">instance 6: Zope 0 access log</a></li>') print(' <li><a href="#slappart6-zope-0-access">instance 6: Zope 0 access log</a></li>')
print(' <li><a href="#slappart7-apache-access">instance 7: Apache access log</a></li>')
print(' <li><a href="#slappart7-apache-error">instance 7: Apache error log</a></li>')
print('</ul>') print('</ul>')
print('<h2 id="log-file-size">Log file size</h2>') print('<h2 id="log-file-size">Log file size</h2>')
print('<p><img src="%s" style="height: 10mm; width: 10mm; vertical-align: bottom;" alt="RSS feed"/></p>' % rssIconDataUri)
i = 0
for log in log_list:
log["size"], log["i"], i = os.stat(log["path"]).st_size, i, i + 1
log_list.sort(key=lambda x: x["size"], reverse=True)
print("<ul>") print("<ul>")
print(' <li style="color: red; font-weight: bold;">0.9 GB: instance 1: Mariadb slow query log | <button>Compress & backup</button></li>') for log in log_list:
print(" <li>10 MB: instance 6: Zope 0 access log</li>") if log["size"] > (1 * 1024 * 1024): # 1MB
print(" <li>2 MB: instance 6: Zope 0 event log</li>") print(' <li><span style="color: red; font-weight: bold;">%(size)d B: %(name)s</span> | <button>Compress & backup</button></li>' % log)
print(" <li>0 B: instance 1: Mariadb log</li>") else:
print(" <li>%(size)d B: %(name)s</li>" % log)
print("</ul>") print("</ul>")
QUERY_STRING = os.getenv("QUERY_STRING") QUERY_STRING = os.getenv("QUERY_STRING")
query_list = parseQueryString(QUERY_STRING) query_list = parseQueryString(QUERY_STRING)
print('<h2 id="slappart1-mariadb-slow-query-log">instance 1: Mariadb slow query log</h2>') log_list.sort(key=lambda x: x["i"])
print('<p style="display: inline-block;"><a href="?href=log-supervisor&display_log=slappart1-mariadb-slow-query&feeds=bunch-of-lines"><img src="%s" style="height: 10mm; width: 10mm; vertical-align: bottom;" alt="RSS feed"/></a> | ' % rssIconDataUri) for log in log_list:
print('<a href="?%s" download="mariadb_slowquery.log" class="as-button">Download</a> | </p>' % (QUERY_STRING + ("&" if QUERY_STRING else "") + "display_log=slappart1-mariadb-slow-query")) # show log title
print('<h3 id="%(id)s">%(name)s</h3>' % log)
# show rss
print('<p style="display: inline-block;"><a href="?href=log-supervisor&display_log=%(id)s&feeds=bunch-of-lines">' % log)
print('<img src="%s" style="height: 10mm; width: 10mm; vertical-align: bottom;" alt="RSS feed"/></a> | ' % rssIconDataUri)
# show download field
print('<a href="?%s" ' % (QUERY_STRING + ("&" if QUERY_STRING else "") + "display_log=slappart1-mariadb-slow-query"))
print('download="%(id)s.log" class="as-button">Download</a> | </p>' % log)
# show search field
print('<form style="display: inline-block;" method="get" action="?">') print('<form style="display: inline-block;" method="get" action="?">')
for query in query_list: for query in query_list:
print('<input name="%s" type="hidden" value="%s" />' % (escapeHtml(query[0]), escapeHtml(query[1]))) print('<input name="%s" type="hidden" value="%s" />' % (escapeHtml(query[0]), escapeHtml(query[1])))
print('<input name="display_log" type="hidden" value="slappart1-mariadb-slow-query" />') print('<input name="display_log" type="hidden" value="%(id)s" />' % log)
print('<input name="grep" type="text" /><input type="submit" value="Search" /></form>') print('<input name="grep" type="text" /><input type="submit" value="Search" /></form>')
# show rotate log
print('<div style="display: inline-block;"><span> | </span><button>Rotate log</button></div>') print('<div style="display: inline-block;"><span> | </span><button>Rotate log</button></div>')
# show last log data
try: try:
print('<pre style="overflow-wrap: initial; overflow-x: auto; white-space: pre;">[..]\n' + escapeHtml(open(os.path.join(cgi_path, "mariadb_slowquery.log")).read()[-1024:] or "No log") + "</pre>") data = open(log["path"]).read()[-1024:]
if data:
print('<pre style="overflow-wrap: initial; overflow-x: auto; white-space: pre;">[..]\n' + escapeHtml(data) + "</pre>")
else:
print("<p>Empty log</p>")
except Exception, e: except Exception, e:
print("<p>An error occured durring log reading</p><pre>" + escapeHtml(repr(e)) + "</pre>") print("<p>An error occured durring log reading</p><pre>" + escapeHtml(repr(e)) + "</pre>")
print('<h2 id="slappart1-mariadb-log">instance 1: Mariadb log</h2>')
print('<p style="display: inline-block;"><a href="?href=log-supervisor&display_log=slappart1-mariadb&feeds=bunch-of-lines"><img src="%s" style="height: 10mm; width: 10mm; vertical-align: bottom;" alt="RSS feed"/></a> | ' % rssIconDataUri)
print('<a href="?%s" download="mariadb.log" class="as-button">Download</a> | </p>' % (QUERY_STRING + ("&" if QUERY_STRING else "") + "display_log=slappart1-mariadb"))
print('<form style="display: inline-block;" method="get" action="?">')
for query in query_list:
print('<input name="%s" type="hidden" value="%s" />' % (escapeHtml(query[0]), escapeHtml(query[1])))
print('<input name="display_log" type="hidden" value="slappart1-mariadb" />')
print('<input name="grep" type="text" /><input type="submit" value="Search" /></form>')
print('<div style="display: inline-block;"><span> | </span><button>Rotate log</button></div>')
print("<p>Empty log</p>")
print('<h2 id="slappart6-zope-0-event">instance 6: Zope 0 event log</h2>')
print('<p style="display: inline-block;"><a href="?href=log-supervisor&display_log=slappart6-zope-0-event&feeds=bunch-of-lines"><img src="%s" style="height: 10mm; width: 10mm; vertical-align: bottom;" alt="RSS feed"/></a> | ' % rssIconDataUri)
print('<a href="?%s" download="zope-0-event.log" class="as-button">Download</a> | </p>' % (QUERY_STRING + ("&" if QUERY_STRING else "") + "display_log=slappart6-zope-0-event"))
print('<form style="display: inline-block;" method="get" action="?">')
for query in query_list:
print('<input name="%s" type="hidden" value="%s" />' % (escapeHtml(query[0]), escapeHtml(query[1])))
print('<input name="display_log" type="hidden" value="slappart6-zope-0-event" />')
print('<input name="grep" type="text" /><input type="submit" value="Search" /></form>')
print('<div style="display: inline-block;"><span> | </span><button>Rotate log</button></div>')
print("<p>XXX</p>")
print('<h2 id="slappart6-zope-0-access">instance 6: Zope 0 access log</h2>')
print('<p style="display: inline-block;"><a href="?href=log-supervisor&display_log=slappart6-zope-0-access&feeds=bunch-of-lines"><img src="%s" style="height: 10mm; width: 10mm; vertical-align: bottom;" alt="RSS feed"/></a> | ' % rssIconDataUri)
print('<a href="?%s" download="zope-0-Z2.log" class="as-button">Download</a> | </p>' % (QUERY_STRING + ("&" if QUERY_STRING else "") + "display_log=slappart6-zope-0-access"))
print('<form style="display: inline-block;" method="get" action="?">')
for query in query_list:
print('<input name="%s" type="hidden" value="%s" />' % (escapeHtml(query[0]), escapeHtml(query[1])))
print('<input name="display_log" type="hidden" value="slappart6-zope-0-access" />')
print('<input name="grep" type="text" /><input type="submit" value="Search" /></form>')
print('<div style="display: inline-block;"><span> | </span><button>Rotate log</button></div>')
print("<p>XXX</p>")
print("</body></html>") print("</body></html>")
return 0 return 0
if lget(args.args, 1) == "show": if lget(args.args, 1) == "show":
...@@ -746,6 +775,18 @@ def parseQueryString(string): ...@@ -746,6 +775,18 @@ def parseQueryString(string):
parameter_list[index] = (split[0], "=".join(split[1:])) parameter_list[index] = (split[0], "=".join(split[1:]))
return parameter_list return parameter_list
# import random
# def generateUuid():
# def s4():
# return random.randint(0, 65536)
# def s8():
# return random.randint(0, 4294967296)
# return "%08x-%04x-%04x-%04x-%08x%04x" % (s8(), s4(), s4(), s4(), s8(), s4())
# import uuid
# def generateUuid():
# return str(uuid.uuid4())
rssIconDataUri = "".join([ rssIconDataUri = "".join([
"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+CjwhRE9DVFlQR", "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+CjwhRE9DVFlQR",
"SBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cu", "SBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cu",
......
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