Merge 2667d5fb9d
into b136bbeb5a
This commit is contained in:
commit
d029e7182e
|
@ -10,6 +10,7 @@ import datetime
|
|||
from collections import OrderedDict
|
||||
from operator import itemgetter
|
||||
import utils
|
||||
import re
|
||||
|
||||
urls = ('/', 'index',
|
||||
'/help', 'help',
|
||||
|
@ -26,21 +27,41 @@ web.config.debug = False
|
|||
output = []
|
||||
|
||||
# Functions
|
||||
|
||||
|
||||
def calculate_count(data):
|
||||
count = {}
|
||||
ls = data.values()
|
||||
z, nz = 0, 0
|
||||
for v in ls:
|
||||
if v == 0:
|
||||
z += 1
|
||||
else:
|
||||
nz += 1
|
||||
for _,v in data.items():
|
||||
ls = v.values()
|
||||
for v in ls:
|
||||
if v == 0:
|
||||
z += 1
|
||||
else:
|
||||
nz += 1
|
||||
count['green'] = z
|
||||
count['red'] = nz
|
||||
return count
|
||||
|
||||
def arrange_services(services):
|
||||
checks = {}
|
||||
for service in services:
|
||||
name = service['name']
|
||||
name1, _, name2 = name.partition('-')
|
||||
if name2 == '':
|
||||
name2 = name1
|
||||
name1 = 'others'
|
||||
name1 = re.sub("([a-z])([A-Z])","\g<1> \g<2>",name1)
|
||||
if name1 not in list(checks.keys()):
|
||||
checks[name1] = OrderedDict()
|
||||
checks[name1][name2] = int(service['status'])
|
||||
return checks
|
||||
|
||||
def sorted_checks(checks):
|
||||
s_checks = {}
|
||||
for k,v in checks.iteritems():
|
||||
s_checks[k] = OrderedDict(
|
||||
sorted(v.iteritems(),key=itemgetter(1), reverse=True)
|
||||
)
|
||||
return s_checks
|
||||
|
||||
def getMonit():
|
||||
output = []
|
||||
|
@ -57,22 +78,13 @@ def getMonit():
|
|||
allstat = json.loads(json.dumps(xmltodict.parse(r.text)['monit']))
|
||||
|
||||
services = allstat['service']
|
||||
status = {}
|
||||
server = {}
|
||||
checks = OrderedDict()
|
||||
|
||||
for service in services:
|
||||
name = service['name']
|
||||
status[name] = int(service['status'])
|
||||
checks[name] = status[name]
|
||||
|
||||
sorted_checks = OrderedDict()
|
||||
sorted_checks = OrderedDict(sorted(checks.iteritems(),
|
||||
key=itemgetter(1), reverse=True))
|
||||
count = calculate_count(sorted_checks)
|
||||
checks = arrange_services(services)
|
||||
s_checks = sorted_checks(checks)
|
||||
count = calculate_count(s_checks)
|
||||
server = dict(name=site, url=s['url'],
|
||||
result=sorted_checks, s_rate=count)
|
||||
|
||||
result=s_checks, s_rate=count)
|
||||
output.append(server)
|
||||
print(datetime.datetime.now())
|
||||
return(output)
|
||||
|
|
|
@ -10,6 +10,11 @@ th {
|
|||
padding: 10px;
|
||||
}
|
||||
|
||||
.th-custom {
|
||||
padding: 10px;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
td {
|
||||
border-bottom: 1px solid #ccc;
|
||||
padding: 15px;
|
||||
|
@ -68,11 +73,11 @@ div.download-header {
|
|||
div.panel {
|
||||
padding: 0 18px;
|
||||
background-color: white;
|
||||
display: none;
|
||||
display: block;
|
||||
}
|
||||
|
||||
div.panel.show {
|
||||
display: block;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.green {
|
||||
|
@ -117,3 +122,11 @@ div.panel.show {
|
|||
background-color: #F2F2F2;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
tbody.toggle-id {
|
||||
display: none;
|
||||
}
|
||||
|
||||
tbody.toggle-id.show {
|
||||
display: contents;
|
||||
}
|
||||
|
|
|
@ -8,6 +8,16 @@ for (i = 0; i < acc.length; i++) {
|
|||
}
|
||||
}
|
||||
|
||||
var acc = document.getElementsByClassName("inner-rows");
|
||||
var i;
|
||||
|
||||
for (i = 0; i < acc.length; i++) {
|
||||
acc[i].onclick = function() {
|
||||
this.classList.toggle("active");
|
||||
this.nextElementSibling.classList.toggle("show");
|
||||
}
|
||||
}
|
||||
|
||||
function draw(rate) {
|
||||
var count = [rate['green'], rate['red']];
|
||||
var percentage = [
|
||||
|
@ -41,13 +51,11 @@ function draw(rate) {
|
|||
ctx.moveTo(200 + offsetX, 200 + offsetY);
|
||||
ctx.arc(200 + offsetX, 200 + offsetY, 120, beginAngle, endAngle);
|
||||
ctx.lineTo(200 + offsetX, 200 + offsetY);
|
||||
// ctx.stroke();
|
||||
ctx.fill();
|
||||
|
||||
ctx.rect(canvas.width - 129, i * 20 + 10, 10, 10);
|
||||
ctx.fill();
|
||||
ctx.font = "13px sans-serif";
|
||||
//ctx.font = "20px Georgia";
|
||||
ctx.fillText(status[i] + " - " + count[i] + " (" +
|
||||
Number(percentage[i]).toFixed(1) + "%)",
|
||||
canvas.width - 109, i * 20 + 20);
|
||||
|
|
|
@ -1,5 +1,36 @@
|
|||
$def with (output, now)
|
||||
|
||||
<!-- Functions -->
|
||||
$def row_error(check):
|
||||
<tr>
|
||||
<td><a href="$output[server]['url']/$env-$check"
|
||||
target="_blank" style="text-decoration:none;">$check</a></td>
|
||||
<td><img src="static/img/error.png"></td>
|
||||
</tr>
|
||||
|
||||
$def row_ok(check):
|
||||
<tr>
|
||||
<td><a href="$output[server]['url']/$env-$check"
|
||||
target="_blank" style="text-decoration:none; color:black;">$check</a></td>
|
||||
<td><img src="static/img/ok.png"></td>
|
||||
</tr>
|
||||
|
||||
$def table_contents(color, text, services):
|
||||
<thead class="inner-rows">
|
||||
<tr><th class="th-custom ${color}" colspan="2">
|
||||
<a style="color: white">$text</a>
|
||||
</th></tr>
|
||||
</thead>
|
||||
<tbody class="toggle-id">
|
||||
$for check in services.keys():
|
||||
$ isError = services.get(check)
|
||||
$if isError != 0:
|
||||
$:row_error(check)
|
||||
$else:
|
||||
$:row_ok(check)
|
||||
</tbody>
|
||||
|
||||
<!-- Main Content -->
|
||||
<body onload="draw($output[0]['s_rate']);">
|
||||
$ errors = 0
|
||||
$ color = "green"
|
||||
|
@ -13,11 +44,12 @@ $def with (output, now)
|
|||
errors = 0
|
||||
color = "green"
|
||||
|
||||
$for check in output[server]['result'].keys():
|
||||
$ isError = output[server]['result'].get(check)
|
||||
$if isError != 0:
|
||||
$code:
|
||||
errors=errors+1
|
||||
$for _,v in output[server]['result'].items():
|
||||
$for check in v.keys():
|
||||
$ isError = v.get(check)
|
||||
$if isError != 0:
|
||||
$code:
|
||||
errors=errors+1
|
||||
|
||||
$if errors > 0:
|
||||
$code:
|
||||
|
@ -27,26 +59,26 @@ $def with (output, now)
|
|||
|
||||
<br>
|
||||
<table width=100%>
|
||||
<thead class="server-link">
|
||||
<!-- <thead class="server-link">
|
||||
<tr><th colspan="2">
|
||||
<a href="$output[server]['url']" target="_blank">$output[server]['name']</a>
|
||||
</th></tr>
|
||||
</thead>
|
||||
$for check in output[server]['result'].keys():
|
||||
$ isError = output[server]['result'].get(check)
|
||||
</thead> -->
|
||||
$for env, services in output[server]['result'].items():
|
||||
$ errors = 0
|
||||
$for check in services.keys():
|
||||
$ isError = services.get(check)
|
||||
$if isError != 0:
|
||||
<tr>
|
||||
<td><a href="$output[server]['url']/$check"
|
||||
target="_blank">$check</a></td>
|
||||
<td><a href="$output[server]['url']/$check"
|
||||
target="_blank"><img src="static/img/error.png"></a></td>
|
||||
</tr>
|
||||
$else:
|
||||
<tr>
|
||||
<td>$check</td>
|
||||
<td><img src="static/img/ok.png"></td>
|
||||
</tr>
|
||||
|
||||
$ errors=errors+1
|
||||
$if errors > 0:
|
||||
$code:
|
||||
color = "red"
|
||||
txt = "{}: {} error(s)".format(env, errors)
|
||||
$:table_contents(color, txt, services)
|
||||
$else:
|
||||
$code:
|
||||
color = "green"
|
||||
$:table_contents(color, env, services)
|
||||
</table>
|
||||
</div>
|
||||
$else:
|
||||
|
@ -57,26 +89,25 @@ $def with (output, now)
|
|||
|
||||
<br>
|
||||
<table width=100%>
|
||||
<thead class="server-link">
|
||||
<!-- <thead class="server-link">
|
||||
<tr><th colspan="2">
|
||||
<a href="$output[server]['url']" target="_blank">$output[server]['name']</a>
|
||||
</th></tr>
|
||||
</thead>
|
||||
$for check in output[server]['result'].keys():
|
||||
$ isError = output[server]['result'].get(check)
|
||||
</thead> -->
|
||||
$for env, services in output[server]['result'].items():
|
||||
$ errors = 0
|
||||
$for check in services.keys():
|
||||
$ isError = services.get(check)
|
||||
$if isError != 0:
|
||||
<tr>
|
||||
<td><a href="$output[server]['url']/$check"
|
||||
target="_blank">$check</a></td>
|
||||
<td><a href="$output[server]['url']/$check"
|
||||
target="_blank"><img src="static/img/error.png"></a></td>
|
||||
</tr>
|
||||
$else:
|
||||
<tr>
|
||||
<td>$check</td>
|
||||
<td><img src="static/img/ok.png"></td>
|
||||
</tr>
|
||||
|
||||
$ errors=errors+1
|
||||
$if errors > 0:
|
||||
$code:
|
||||
color = "red"
|
||||
txt = "{}: {} error(s)".format(env, errors)
|
||||
$:table_contents(color, txt, services)
|
||||
$else:
|
||||
$ color = "green"
|
||||
$:table_contents(color, env, services)
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in New Issue