Show database statstics on the info page.

This commit is contained in:
Justin Hawkins 2022-08-21 09:38:44 +09:30
parent 6f93f2ff50
commit db72e8fb7d
5 changed files with 37 additions and 7 deletions

View File

@ -280,3 +280,12 @@ func (m *BookmarkManager) UpdateContent() {
time.Sleep(time.Second * 5)
}
}
func (m *BookmarkManager) Stats() (entity.DBStats, error) {
stats := entity.DBStats{}
err := m.db.store.Get("stats", &stats)
if err != nil && err != bolthold.ErrNotFound {
return stats, fmt.Errorf("could not load stats: %s", err)
}
return stats, nil
}

View File

@ -32,3 +32,16 @@ func (stats DBStats) String() string {
}
return out
}
func (stats DBStats) MostRecentBookmarkInfo() BookmarkInfo {
mostRecent := time.Time{}
for k := range stats.History {
if k.After(mostRecent) {
mostRecent = k
}
}
if !mostRecent.IsZero() {
return stats.History[mostRecent]
}
return BookmarkInfo{}
}

View File

@ -35,7 +35,7 @@
<div class="top-bar-right">
<ul class="menu">
<li>
<a href="/releaseinfo">{{ version.Local.Tag }}
<a href="/info">{{ version.Local.Tag }}
{{ if version.UpgradeAvailable }}
{{ end }}
@ -63,8 +63,8 @@
{{ template "config.html" . }}
{{ else if eq .page "edit" }}
{{ template "edit.html" . }}
{{ else if eq .page "releaseinfo" }}
{{ template "release_info.html" . }}
{{ else if eq .page "info" }}
{{ template "info.html" . }}
{{ end }}
{{/* template "foundation_sample.html" . */}}
</div>

View File

@ -1,8 +1,12 @@
<div class="grid-x grid-padding-x">
<div class="large-12 cell">
<h5>Memory Usage</h5>
<p>{{ meminfo }}</p>
<h5>System information</h5>
<table>
<tr><th>Memory in use</th><td>{{ meminfo }}</td></tr>
<tr><th>Bookmarks</th><td>{{ .stats.MostRecentBookmarkInfo.Bookmarks }}</td></tr>
<tr><th>Words Indexed</th><td>{{ .stats.MostRecentBookmarkInfo.IndexedWords }}</td></tr>
</table>
<h5>Release info</h5>
{{ if not version.Remote.Valid }}

View File

@ -396,8 +396,12 @@ func Create(bmm *db.BookmarkManager, cmm *db.ConfigManager) *Server {
)
})
r.GET("/releaseinfo", func(c *gin.Context) {
meta := gin.H{"page": "releaseinfo", "config": config}
r.GET("/info", func(c *gin.Context) {
dbStats, err := bmm.Stats()
if err != nil {
panic("could not load stats for info page")
}
meta := gin.H{"page": "info", "stats": dbStats, "config": config}
c.HTML(http.StatusOK,
"_layout.html", meta,
)