This commit is contained in:
108
api/Stats.go
Normal file
108
api/Stats.go
Normal file
@ -0,0 +1,108 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"html/template"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type statsApi struct {
|
||||
ctx *ApiContext
|
||||
mux *http.ServeMux
|
||||
}
|
||||
|
||||
func (a *statsApi) Name() string {
|
||||
return "Stats"
|
||||
}
|
||||
|
||||
func (a *statsApi) Domains() []string {
|
||||
return []string{"bridge.sati.ac"}
|
||||
}
|
||||
|
||||
func (a *statsApi) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
a.mux.ServeHTTP(w, r)
|
||||
}
|
||||
|
||||
var statsTemplate = func() *template.Template {
|
||||
template, err := template.New("stats").Parse(`
|
||||
<html>
|
||||
<head>
|
||||
<title>sati bridge</title>
|
||||
<style>
|
||||
.highlight {
|
||||
color: #FF7143;
|
||||
}
|
||||
|
||||
.header {
|
||||
margin-bottom: 5px;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
html, body {
|
||||
font-size: 14px;
|
||||
background: #0f0805;
|
||||
color: #ddd;
|
||||
font-family: "Segoe UI","Noto Sans",sans-serif;
|
||||
}
|
||||
|
||||
table, th, td {
|
||||
border: 1px solid #592D25;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
th, td {
|
||||
padding: 2px 5px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="header">
|
||||
<span class="highlight">it works!</span> statistics of this instance:
|
||||
</div>
|
||||
<table>
|
||||
<tr><th>domain</th><th>handler</th></tr>
|
||||
{{range $domain, $handler := .Domains}}
|
||||
<tr><td>{{$domain}}</td><td>{{$handler}}</td></tr>
|
||||
{{end}}
|
||||
</table>
|
||||
<br/>
|
||||
<table>
|
||||
<tr><th>task registry</th></tr>
|
||||
<tr><td>Total</td><td>{{.Registry.Total}}</td></tr>
|
||||
<tr><td>Success</td><td>{{.Registry.Success}}</td></tr>
|
||||
<tr><td>Error</td><td>{{.Registry.Error}}</td></tr>
|
||||
<tr><td>Processing</td><td>{{.Registry.Processing}}</td></tr>
|
||||
</table>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
`)
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return template
|
||||
}()
|
||||
|
||||
func (a *statsApi) stats(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Add("Content-Type", "text/html")
|
||||
|
||||
domains := make(map[string]string, len(a.ctx.Server.domains))
|
||||
for domain, handler := range a.ctx.Server.domains {
|
||||
domains[domain] = handler.Name()
|
||||
}
|
||||
|
||||
statsTemplate.Execute(w, &struct {
|
||||
Domains map[string]string
|
||||
Registry RegistryStats
|
||||
}{domains, a.ctx.Registry.Stats()})
|
||||
}
|
||||
|
||||
func newStatsApi(ctx *ApiContext) ApiHandler {
|
||||
api := &statsApi{ctx, http.NewServeMux()}
|
||||
|
||||
api.mux.HandleFunc("/", api.stats)
|
||||
|
||||
return api
|
||||
}
|
Reference in New Issue
Block a user