diff --git a/handler.go b/handler.go index 77dcb5700..1d2faf89f 100644 --- a/handler.go +++ b/handler.go @@ -338,6 +338,8 @@ func (h *Handler) handleDeleteIndex(w http.ResponseWriter, r *http.Request) { if err := json.NewEncoder(w).Encode(deleteIndexResponse{}); err != nil { h.logger().Printf("response encoding error: %s", err) } + + h.Holder.Stats.Count("deleteIndex", 1) } type deleteIndexResponse struct{} @@ -381,6 +383,8 @@ func (h *Handler) handlePostIndex(w http.ResponseWriter, r *http.Request) { if err := json.NewEncoder(w).Encode(postIndexResponse{}); err != nil { h.logger().Printf("response encoding error: %s", err) } + + h.Holder.Stats.Count("createIndex", 1) } // handlePatchIndexTimeQuantum handles PATCH /index/time_quantum request. @@ -531,6 +535,9 @@ func (h *Handler) handlePostFrame(w http.ResponseWriter, r *http.Request) { if err := json.NewEncoder(w).Encode(postFrameResponse{}); err != nil { h.logger().Printf("response encoding error: %s", err) } + + h.Holder.Stats.CountWithCustomTags("createFrame", 1, []string{fmt.Sprintf("index:%s", indexName)}) + } type _postFrameRequest postFrameRequest @@ -612,6 +619,8 @@ func (h *Handler) handleDeleteFrame(w http.ResponseWriter, r *http.Request) { if err := json.NewEncoder(w).Encode(deleteFrameResponse{}); err != nil { h.logger().Printf("response encoding error: %s", err) } + + h.Holder.Stats.CountWithCustomTags("deleteFrame", 1, []string{fmt.Sprintf("index:%s", indexName)}) } type deleteFrameResponse struct{} diff --git a/holder.go b/holder.go index ad329522f..8e71ebe5b 100644 --- a/holder.go +++ b/holder.go @@ -94,8 +94,6 @@ func (h *Holder) Open() error { return fmt.Errorf("open index: name=%s, err=%s", index.Name(), err) } h.indexes[index.Name()] = index - - h.Stats.Count("indexN", 1) } // Periodically flush cache. @@ -234,8 +232,6 @@ func (h *Holder) createIndex(name string, opt IndexOptions) (*Index, error) { h.indexes[index.Name()] = index - h.Stats.Count("indexN", 1) - return index, nil } @@ -274,8 +270,6 @@ func (h *Holder) DeleteIndex(name string) error { // Remove reference. delete(h.indexes, name) - h.Stats.Count("indexN", -1) - return nil } diff --git a/index.go b/index.go index 10790a079..516064f64 100644 --- a/index.go +++ b/index.go @@ -164,8 +164,6 @@ func (i *Index) openFrames() error { return fmt.Errorf("open frame: name=%s, err=%s", fr.Name(), err) } i.frames[fr.Name()] = fr - - i.Stats.Count("frameN", 1) } return nil } @@ -405,8 +403,6 @@ func (i *Index) createFrame(name string, opt FrameOptions) (*Frame, error) { // Add to index's frame lookup. i.frames[name] = f - i.Stats.Count("frameN", 1) - return f, nil } @@ -445,8 +441,6 @@ func (i *Index) DeleteFrame(name string) error { // Remove reference. delete(i.frames, name) - i.Stats.Count("frameN", -1) - return nil } diff --git a/server.go b/server.go index fc1f11020..9ccb0ee84 100644 --- a/server.go +++ b/server.go @@ -201,7 +201,6 @@ func (s *Server) monitorAntiEntropy() { continue } - // Record successful sync in log. s.logger().Printf("holder sync complete") } diff --git a/stats_test.go b/stats_test.go index 3875b6a0f..526b1deeb 100644 --- a/stats_test.go +++ b/stats_test.go @@ -2,10 +2,11 @@ package pilosa_test import ( "context" + "github.com/pilosa/pilosa" + "net/http" + "strings" "testing" "time" - - "github.com/pilosa/pilosa" ) func TestStatsCount_TopN(t *testing.T) { @@ -135,6 +136,122 @@ func TestStatsCount_SetProfileAttrs(t *testing.T) { } } +func TestStatsCount_CreateIndex(t *testing.T) { + hldr := MustOpenHolder() + defer hldr.Close() + s := NewServer() + s.Handler.Holder = hldr.Holder + defer s.Close() + called := false + s.Handler.Holder.Stats = &MockStats{ + mockCount: func(name string, value int64) { + if name != "createIndex" { + t.Errorf("Expected createIndex, Results %s", name) + } + + called = true + return + }, + } + http.DefaultClient.Do(MustNewHTTPRequest("POST", s.URL+"/index/i", nil)) + if !called { + t.Error("Count isn't called") + } +} + +func TestStatsCount_DeleteIndex(t *testing.T) { + hldr := MustOpenHolder() + defer hldr.Close() + + s := NewServer() + s.Handler.Holder = hldr.Holder + defer s.Close() + + // Create index. + if _, err := hldr.CreateIndexIfNotExists("i", pilosa.IndexOptions{}); err != nil { + t.Fatal(err) + } + called := false + s.Handler.Holder.Stats = &MockStats{ + mockCount: func(name string, value int64) { + if name != "deleteIndex" { + t.Errorf("Expected deleteIndex, Results %s", name) + } + + called = true + return + }, + } + http.DefaultClient.Do(MustNewHTTPRequest("DELETE", s.URL+"/index/i", strings.NewReader(""))) + if !called { + t.Error("Count isn't called") + } +} + +func TestStatsCount_CreateFrame(t *testing.T) { + hldr := MustOpenHolder() + defer hldr.Close() + + s := NewServer() + s.Handler.Holder = hldr.Holder + defer s.Close() + + // Create index. + if _, err := hldr.CreateIndexIfNotExists("i", pilosa.IndexOptions{}); err != nil { + t.Fatal(err) + } + called := false + s.Handler.Holder.Stats = &MockStats{ + mockCountWithTags: func(name string, value int64, index []string) { + if name != "createFrame" { + t.Errorf("Expected createFrame, Results %s", name) + } + if index[0] != "index:i" { + t.Errorf("Expected index:i, Results %s", index) + } + + called = true + return + }, + } + http.DefaultClient.Do(MustNewHTTPRequest("POST", s.URL+"/index/i/frame/f", nil)) + if !called { + t.Error("Count isn't called") + } +} + +func TestStatsCount_DeleteFrame(t *testing.T) { + hldr := MustOpenHolder() + defer hldr.Close() + + s := NewServer() + s.Handler.Holder = hldr.Holder + defer s.Close() + called := false + // Create index. + indx, _ := hldr.CreateIndexIfNotExists("i", pilosa.IndexOptions{}) + if _, err := indx.CreateFrameIfNotExists("test", pilosa.FrameOptions{}); err != nil { + t.Fatal(err) + } + s.Handler.Holder.Stats = &MockStats{ + mockCountWithTags: func(name string, value int64, index []string) { + if name != "deleteFrame" { + t.Errorf("Expected deleteFrame, Results %s", name) + } + if index[0] != "index:i" { + t.Errorf("Expected index:i, Results %s", index) + } + + called = true + return + }, + } + http.DefaultClient.Do(MustNewHTTPRequest("DELETE", s.URL+"/index/i/frame/f", strings.NewReader(""))) + if !called { + t.Error("Count isn't called") + } +} + type MockStats struct { mockCount func(name string, value int64) mockCountWithTags func(name string, value int64, tags []string)