109 lines
3.4 KiB
HTML
109 lines
3.4 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>Stats</title>
|
|
<style>
|
|
*, *:before, *:after {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
body {
|
|
background: #105469;
|
|
font-family: sans-serif;
|
|
}
|
|
table, #simform {
|
|
background: #012B39;
|
|
border-radius: 0.25em;
|
|
border-collapse: collapse;
|
|
margin-top: 1em;
|
|
margin-bottom: 1em;
|
|
margin-left: auto;
|
|
margin-right: auto;
|
|
}
|
|
th {
|
|
border-bottom: 1px solid #364043;
|
|
color: #E2B842;
|
|
font-size: 0.85em;
|
|
font-weight: 600;
|
|
padding: 0.5em 1em;
|
|
text-align: left;
|
|
}
|
|
td, #simform {
|
|
color: #fff;
|
|
font-weight: 400;
|
|
padding: 0.65em 1em;
|
|
}
|
|
.disabled td {
|
|
color: #4F5F64;
|
|
}
|
|
tbody tr {
|
|
transition: background 0.25s ease;
|
|
}
|
|
tbody tr:hover {
|
|
background: #014055;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div id="simform">
|
|
<form action="/tgstats" method="POST">
|
|
{{ define "simform" }}
|
|
<label for="lookbackDays">Lookback Days</label> <input id="lookbackDays" name="lookbackDays" type="number" min="1" max="14" value="{{ .Lookback }}" />
|
|
<label for="halfLife">Half life</label> <input id="halfLife" name="halfLife" type="text" value="{{ .HalfLife }}" />
|
|
<label for="recent">Recent</label> <input id="recent" name="recent" type="text" value="{{ .Recent }}" />
|
|
<label for="simInterval">Sim Interval</label> <input id="simInterval" name="simInterval" type="text" value="{{ .SimInterval }}" />
|
|
<label for="scoreStart">Score Start</label> <input id="scoreStart" name="scoreStart" type="datetime-local" value="{{ .ScoreStart }}" />
|
|
<label for="scoreEnd">Score End</label> <input id="scoreEnd" name="scoreEnd" type="datetime-local" value="{{ .ScoreEnd }}" />
|
|
<input type="submit" value="Simulate" />
|
|
{{end}}
|
|
{{ if .Simulation }}
|
|
{{ template "simform" dict "Lookback" .Simulation.LookbackDays "HalfLife" .Simulation.HalfLife "Recent" .Simulation.Recent "ScoreStart" (formTime .Simulation.ScoreStart) "ScoreEnd" (formTime .Simulation.ScoreEnd) "SimInterval" .Simulation.SimInterval }}
|
|
{{ else }}
|
|
{{ template "simform" dict "Lookback" .Config.LookbackDays "HalfLife" .Config.HalfLife "Recent" .Config.Recent "ScoreStart" (ago "72h") "ScoreEnd" "" "SimInterval" "5m" }}
|
|
{{ end }}
|
|
</form>
|
|
</div>
|
|
<table>
|
|
{{ if .Simulation }}
|
|
<tr>
|
|
<td colspan="10">Simulating from {{ formTime .Simulation.ScoreStart }} until {{ formTime .Simulation.ScoreEnd }}</td>
|
|
</tr>
|
|
{{ end }}
|
|
<tr>
|
|
<th>System</th>
|
|
<th>TG</th>
|
|
<th>TG ID</th>
|
|
<th>Count</th>
|
|
<th>Recent</th>
|
|
<th>Score</th>
|
|
<th>Probab</th>
|
|
<th>Expect</th>
|
|
<th>Max</th>
|
|
<th>KL</th>
|
|
</tr>
|
|
{{ range .Scores }}
|
|
{{ $tg := (index $.TGs .ID) }}
|
|
<tr>
|
|
<td>{{ $tg.System.Name}}</td>
|
|
<td>{{ $tg.Talkgroup }}</td>
|
|
<td>{{ .ID.Talkgroup }}</td>
|
|
<td>{{ f .Count 0 }}</td>
|
|
<td>{{ f .RecentCount 0 }}</td>
|
|
<td>{{ f .Score }}</td>
|
|
<td>{{ f .Probability }}</td>
|
|
<td>{{ f .Expectation }}</td>
|
|
<td>{{ f .Maximum }}</td>
|
|
<td>{{ f .KLScore }}</td>
|
|
</tr>
|
|
{{else}}
|
|
<tr>
|
|
<td colspan="10">No Data</td>
|
|
</tr>
|
|
{{ end }}
|
|
<tr>
|
|
<td colspan="10">Last updated at {{ .LastScore }}</td>
|
|
</tr>
|
|
</table>
|
|
</body>
|
|
</html>
|