mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-16 01:01:03 +00:00
add /internal/disk-usage endpoint for testing
will be used to ensure delete work doesn't result in an ever-inflating usage of memory
This commit is contained in:
parent
3135c40f17
commit
5224612df3
4 changed files with 84 additions and 1 deletions
|
|
@ -468,6 +468,7 @@ func newRouter(handler *Handler) http.Handler {
|
|||
|
||||
// other ones
|
||||
router.HandleFunc("/internal/mem-usage", handler.chkAuthZ(handler.handleGetMemUsage, authz.Read)).Methods("GET").Name("GetUsage")
|
||||
router.HandleFunc("/internal/disk-usage", handler.chkAuthZ(handler.handleGetDiskUsage, authz.Read)).Methods("GET").Name("GetUsage")
|
||||
router.HandleFunc("/internal/fragment/block/data", handler.chkAuthN(handler.handleGetFragmentBlockData)).Methods("GET").Name("GetFragmentBlockData")
|
||||
router.HandleFunc("/internal/fragment/blocks", handler.chkAuthN(handler.handleGetFragmentBlocks)).Methods("GET").Name("GetFragmentBlocks")
|
||||
router.HandleFunc("/internal/fragment/data", handler.chkAuthN(handler.handleGetFragmentData)).Methods("GET").Name("GetFragmentData")
|
||||
|
|
@ -1013,6 +1014,25 @@ func (h *Handler) handleGetMemUsage(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
}
|
||||
|
||||
// handleGetDiskUsage handles GET /internal/disk-usage requests.
|
||||
func (h *Handler) handleGetDiskUsage(w http.ResponseWriter, r *http.Request) {
|
||||
if !validHeaderAcceptJSON(r.Header) {
|
||||
http.Error(w, "JSON only acceptable response", http.StatusNotAcceptable)
|
||||
return
|
||||
}
|
||||
|
||||
use, err := GetDiskUsage(h.api.server.dataDir)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
if err := json.NewEncoder(w).Encode(use); err != nil {
|
||||
h.logger.Errorf("write disk usage response error: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
// handleGetShardDistribution handles GET /ui/shard-distribution requests.
|
||||
func (h *Handler) handleGetShardDistribution(w http.ResponseWriter, r *http.Request) {
|
||||
dist := h.api.ShardDistribution(r.Context())
|
||||
|
|
|
|||
|
|
@ -789,3 +789,24 @@ func TestHandleGetMemUsage(t *testing.T) {
|
|||
t.Fatalf("expected %v, got %v", http.StatusOK, resp.StatusCode)
|
||||
}
|
||||
}
|
||||
|
||||
func TestHandleGetDiskUsage(t *testing.T) {
|
||||
h := Handler{
|
||||
logger: logger.NewStandardLogger(os.Stdout),
|
||||
queryLogger: logger.NewStandardLogger(os.Stdout),
|
||||
api: &API{
|
||||
server: &Server{
|
||||
dataDir: t.TempDir(),
|
||||
},
|
||||
},
|
||||
}
|
||||
w := httptest.NewRecorder()
|
||||
r := httptest.NewRequest("GET", "/whatever", nil)
|
||||
|
||||
h.handleGetDiskUsage(w, r)
|
||||
|
||||
resp := w.Result()
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
t.Fatalf("expected %v, got %v", http.StatusOK, resp.StatusCode)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
31
util.go
31
util.go
|
|
@ -5,7 +5,11 @@ package pilosa
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/user"
|
||||
"path/filepath"
|
||||
"reflect"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/shirou/gopsutil/v3/mem"
|
||||
|
|
@ -71,3 +75,30 @@ func GetMemoryUsage() (MemoryUsage, error) {
|
|||
}
|
||||
return MemoryUsage{Capacity: usage.Total, TotalUse: usage.Used}, nil
|
||||
}
|
||||
|
||||
type DiskUsage struct {
|
||||
Usage int64 `json:"usage"`
|
||||
}
|
||||
|
||||
// GetDiskUsage gets the disk usage of the path
|
||||
func GetDiskUsage(path string) (DiskUsage, error) {
|
||||
usr, _ := user.Current()
|
||||
dir := usr.HomeDir
|
||||
if path == "~" {
|
||||
path = dir
|
||||
} else if strings.HasPrefix(path, "~/") {
|
||||
path = filepath.Join(dir, path[2:])
|
||||
}
|
||||
|
||||
var size int64
|
||||
err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !info.IsDir() {
|
||||
size += info.Size()
|
||||
}
|
||||
return err
|
||||
})
|
||||
return DiskUsage{size}, err
|
||||
}
|
||||
|
|
|
|||
13
util_test.go
13
util_test.go
|
|
@ -2,7 +2,6 @@
|
|||
package pilosa
|
||||
|
||||
// util_test.go has unit tests for utility functions from util.go
|
||||
//
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
|
@ -96,3 +95,15 @@ func TestGetMemoryUsage(t *testing.T) {
|
|||
t.Fatalf("unexpected error getting memory usage: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetDiskUsage(t *testing.T) {
|
||||
tdir := t.TempDir()
|
||||
if _, err := GetDiskUsage(tdir); err != nil {
|
||||
t.Fatalf("unexpected error getting disk usage: %v", err)
|
||||
}
|
||||
|
||||
if _, err := GetDiskUsage(""); err == nil {
|
||||
t.Fatal("expected error getting disk usage but got nil")
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue