mirror of https://github.com/statping/statping
240 lines
8.1 KiB
HTML
240 lines
8.1 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, maximum-scale=1.0, user-scalable=0">
|
|
|
|
{{if .Core.OfflineAssets}}
|
|
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
|
|
<link rel="stylesheet" href="https://statup.io/base.css">
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.min.js"></script>
|
|
{{ else }}
|
|
<link rel="stylesheet" href="/css/bootstrap.min.css">
|
|
<link rel="stylesheet" href="/css/base.css">
|
|
<script src="/js/Chart.bundle.min.js"></script>
|
|
{{end}}
|
|
<title>{{.Core.Name}} Status</title>
|
|
</head>
|
|
<body>
|
|
|
|
|
|
<div class="container col-md-7 col-sm-12 mt-2 sm-container">
|
|
|
|
<h1 class="col-12 text-center mb-4 mt-sm-3">{{.Core.Name}}</h1>
|
|
|
|
{{ if .Core.Description }}
|
|
<h5 class="col-12 text-center mb-5 text-muted">{{ .Core.Description }}</h5>
|
|
{{ end }}
|
|
|
|
<div class="col-12 mb-5">
|
|
<div class="list-group online_list">
|
|
{{ range .Services }}
|
|
<a href="#" class="list-group-item list-group-item-action {{if not .Online}}failing_bg text-white{{ end }}">
|
|
{{ .Name }}
|
|
{{if .Online}}
|
|
<span class="badge online_badge float-right">ONLINE</span>
|
|
{{ else }}
|
|
<span class="badge bg-white text-black-50 float-right">OFFLINE</span>
|
|
{{end}}
|
|
</a>
|
|
{{ end }}
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="col-12">
|
|
|
|
{{ range .Services }}
|
|
<div class="mt-4">
|
|
<div class="card">
|
|
<div class="card-body{{if not .Online}} offline_bg{{end}}">
|
|
|
|
<div class="col-12">
|
|
|
|
<h4 class="mt-3"><a href="/service/{{.Id}}"{{if not .Online}} class="text-danger"{{end}}>{{ .Name }}</a>
|
|
{{if .Online}}
|
|
<span class="badge online_badge float-right">ONLINE</span>
|
|
{{ else }}
|
|
<span class="badge offline_badge float-right">OFFLINE</span>
|
|
{{end}}</h4>
|
|
|
|
<div class="row stats_area mt-5 mb-5">
|
|
|
|
<div class="col-4">
|
|
<span class="lg_number">{{.Online24}}%</span>
|
|
Online last 24 Hours
|
|
</div>
|
|
|
|
<div class="col-4">
|
|
<span class="lg_number">{{.AvgTime}}ms</span>
|
|
Average Response
|
|
</div>
|
|
|
|
<div class="col-4">
|
|
<span class="lg_number">{{.AvgUptime}}%</span>
|
|
Total Uptime
|
|
</div>
|
|
</div>
|
|
|
|
{{ if .AvgTime }}
|
|
<div class="chart-container">
|
|
<canvas id="service_{{ .Id }}"></canvas>
|
|
</div>
|
|
{{ end }}
|
|
|
|
{{ if .LimitedFailures }}
|
|
<div class="list-group mt-5">
|
|
{{ range .LimitedFailures }}
|
|
<a href="#" class="list-group-item list-group-item-action flex-column align-items-start">
|
|
<div class="d-flex w-100 justify-content-between">
|
|
<h5 class="mb-1">{{.ParseError}}</h5>
|
|
<small>Reported {{.Ago}}</small>
|
|
</div>
|
|
<p class="mb-1">{{.Issue}}</p>
|
|
</a>
|
|
{{ end }}
|
|
|
|
<span class="mt-2 text-right">{{ .TotalFailures }} Total Failures</span>
|
|
|
|
</div>
|
|
{{ end }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{ end }}
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
{{template "footer"}}
|
|
|
|
<script>
|
|
{{ range .Services }}
|
|
{{ if .AvgTime }}
|
|
var ctx = document.getElementById("service_{{.Id}}").getContext('2d');
|
|
|
|
var chartdata = new Chart(ctx, {
|
|
type: 'line',
|
|
data: {
|
|
datasets: [{
|
|
label: 'Response Time (Milliseconds)',
|
|
data: {{js .GraphData}},
|
|
backgroundColor: [
|
|
'rgba(47, 206, 30, 0.92)'
|
|
],
|
|
borderColor: [
|
|
'rgb(47, 171, 34)'
|
|
],
|
|
borderWidth: 1
|
|
}]
|
|
},
|
|
options: {
|
|
maintainAspectRatio: false,
|
|
scaleShowValues: true,
|
|
hover: {
|
|
"animationDuration": 0
|
|
},
|
|
animation: {
|
|
"duration": 0,
|
|
"onComplete": function() {
|
|
var chartInstance = this.chart,
|
|
ctx = chartInstance.ctx;
|
|
|
|
ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
|
|
ctx.textAlign = 'center';
|
|
ctx.textBaseline = 'bottom';
|
|
|
|
var controller = this.chart.controller;
|
|
var xAxis = controller.scales['x-axis-0'];
|
|
var numTicks = xAxis.ticks.length;
|
|
var yOffsetStart = xAxis.width / numTicks;
|
|
var halfBarWidth = (xAxis.width / (numTicks * 2));
|
|
|
|
xAxis.ticks.forEach(function(value, index) {
|
|
var xOffset = 20;
|
|
var yOffset = (yOffsetStart * index) + halfBarWidth;
|
|
ctx.fillStyle = '#e2e2e2';
|
|
ctx.fillText(value, yOffset, xOffset);
|
|
});
|
|
|
|
this.data.datasets.forEach(function(dataset, i) {
|
|
var meta = chartInstance.controller.getDatasetMeta(i);
|
|
var hx = 0;
|
|
var hy = 0;
|
|
var highestNum = 0;
|
|
meta.data.forEach(function(bar, index) {
|
|
var data = dataset.data[index];
|
|
if (data.y > highestNum) {
|
|
highestNum = data.y;
|
|
highest = bar;
|
|
hx = bar._model.x;
|
|
hy = bar._model.y;
|
|
}
|
|
});
|
|
ctx.fillStyle = '#0d7809';
|
|
ctx.fillText(highestNum+"ms", hx - 40, hy + 15);
|
|
});
|
|
}
|
|
},
|
|
legend: {
|
|
display: false
|
|
},
|
|
tooltips: {
|
|
"enabled": false
|
|
},
|
|
scales: {
|
|
yAxes: [{
|
|
display: false,
|
|
ticks: {
|
|
fontSize: 20,
|
|
display: false
|
|
},
|
|
gridLines: {
|
|
display:false
|
|
}
|
|
}],
|
|
xAxes: [{
|
|
type: 'time',
|
|
distribution: 'series',
|
|
autoSkip: false,
|
|
gridLines: {
|
|
display:false
|
|
},
|
|
ticks: {
|
|
fontColor: "white",
|
|
fontSize: 20,
|
|
display: false,
|
|
}
|
|
}]
|
|
},
|
|
elements: {
|
|
point: {
|
|
radius: 0
|
|
}
|
|
}
|
|
}
|
|
});
|
|
{{ end }}
|
|
{{ end }}
|
|
</script>
|
|
|
|
|
|
{{ if .Core.Style }}
|
|
<style>
|
|
{{ safe .Core.Style }}
|
|
</style>
|
|
{{ end }}
|
|
|
|
|
|
{{if .Core.OfflineAssets}}
|
|
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
|
|
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
|
|
{{ else }}
|
|
<script src="/js/jquery-3.3.1.slim.min.js"></script>
|
|
<script src="/js/bootstrap.min.js"></script>
|
|
{{end}}
|
|
|
|
</body>
|
|
</html> |