diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2020-06-30 17:50:27 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2020-07-09 19:40:12 +0200 |
| commit | c0631963487790b901d281202df69282e5e2efd3 (patch) | |
| tree | b8122bd798778740ea9d0a4a7c0f5844815b3847 | |
| parent | 353d19019153d6e7ee4e98b18d790b2523901c58 (diff) | |
dashboard/app: add memcache to admin interface
Add memcache statistics and flush action to the admin page
in preparation for actually using memcache in future commits.
| -rw-r--r-- | dashboard/app/admin.html | 24 | ||||
| -rw-r--r-- | dashboard/app/main.go | 32 |
2 files changed, 48 insertions, 8 deletions
diff --git a/dashboard/app/admin.html b/dashboard/app/admin.html index 172070821..bce5d2cda 100644 --- a/dashboard/app/admin.html +++ b/dashboard/app/admin.html @@ -22,6 +22,30 @@ Main page. </script> <br><br> + {{with $.MemcacheStats}} + <table class="list_table"> + <caption><a href="https://pkg.go.dev/google.golang.org/appengine/memcache?tab=doc#Item" target="_blank">Memcache stats:</a></caption> + <tr> + <th>Hits</th> + <th>Misses</th> + <th>ByteHits</th> + <th>Items</th> + <th>Bytes</th> + <th>Oldest</th> + <th></th> + </tr> + <tr> + <td class="stat">{{.Hits}}</td> + <td class="stat">{{.Misses}}</td> + <td class="stat">{{.ByteHits}}</td> + <td class="stat">{{.Items}}</td> + <td class="stat">{{.Bytes}}</td> + <td class="stat">{{.Oldest}}</td> + <td><a href="?action=memcache_flush">flush</input></td> + </tr> + </table> + {{end}} + {{template "manager_list" $.Managers}} {{template "job_list" $.Jobs}} </body> diff --git a/dashboard/app/main.go b/dashboard/app/main.go index 1039d230b..270a1750b 100644 --- a/dashboard/app/main.go +++ b/dashboard/app/main.go @@ -19,6 +19,7 @@ import ( "golang.org/x/net/context" db "google.golang.org/appengine/datastore" "google.golang.org/appengine/log" + "google.golang.org/appengine/memcache" ) // This file contains web UI http handlers. @@ -58,10 +59,11 @@ type uiTerminalPage struct { } type uiAdminPage struct { - Header *uiHeader - Log []byte - Managers []*uiManager - Jobs *uiJobList + Header *uiHeader + Log []byte + Managers []*uiManager + Jobs *uiJobList + MemcacheStats *memcache.Statistics } type uiManager struct { @@ -284,10 +286,23 @@ func handleAdmin(c context.Context, w http.ResponseWriter, r *http.Request) erro if accessLevel != AccessAdmin { return ErrAccess } + switch action := r.FormValue("action"); action { + case "": + case "memcache_flush": + if err := memcache.Flush(c); err != nil { + return fmt.Errorf("failed to flush memcache: %v", err) + } + default: + return fmt.Errorf("unknown action %q", action) + } hdr, err := commonHeader(c, r, w, "") if err != nil { return err } + memcacheStats, err := memcache.Stats(c) + if err != nil { + return err + } managers, err := loadManagers(c, accessLevel, "") if err != nil { return err @@ -301,10 +316,11 @@ func handleAdmin(c context.Context, w http.ResponseWriter, r *http.Request) erro return err } data := &uiAdminPage{ - Header: hdr, - Log: errorLog, - Managers: managers, - Jobs: &uiJobList{Jobs: jobs}, + Header: hdr, + Log: errorLog, + Managers: managers, + Jobs: &uiJobList{Jobs: jobs}, + MemcacheStats: memcacheStats, } return serveTemplate(w, "admin.html", data) } |
