Skip to content

Commit

Permalink
fix: use a noop stats implementation if stats are disabled (#141)
Browse files Browse the repository at this point in the history
* test: use a noop stats impl on testserver

Signed-off-by: Carlos A Becker <caarlos0@gmail.com>

* fix: set a noop stats if metrics are disabled

Signed-off-by: Carlos A Becker <caarlos0@gmail.com>

* refactor: more legible

Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
  • Loading branch information
caarlos0 authored May 6, 2022
1 parent f2e1eee commit 9c620ae
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 5 deletions.
15 changes: 11 additions & 4 deletions server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/charmbracelet/charm/server/db"
"github.com/charmbracelet/charm/server/db/sqlite"
"github.com/charmbracelet/charm/server/stats"
"github.com/charmbracelet/charm/server/stats/noop"
"github.com/charmbracelet/charm/server/stats/prometheus"
"github.com/charmbracelet/charm/server/storage"
lfs "github.com/charmbracelet/charm/server/storage/local"
Expand Down Expand Up @@ -189,8 +190,7 @@ func (srv *Server) Close() error {
return fmt.Errorf("db close error: %s", err)
}
if srv.Config.Stats != nil {
err := srv.Config.Stats.Close()
if err != nil {
if err := srv.Config.Stats.Close(); err != nil {
return fmt.Errorf("db close error: %s", err)
}
}
Expand All @@ -214,7 +214,14 @@ func (srv *Server) init(cfg *Config) {
}
srv.Config = cfg.WithFileStore(fs)
}
if cfg.EnableMetrics && cfg.Stats == nil {
srv.Config = cfg.WithStats(prometheus.NewStats(cfg.DB, cfg.StatsPort))
if cfg.Stats == nil {
srv.Config = cfg.WithStats(getStatsImpl(cfg))
}
}

func getStatsImpl(cfg *Config) stats.Stats {
if cfg.EnableMetrics {
return prometheus.NewStats(cfg.DB, cfg.StatsPort)
}
return noop.Stats{}
}
34 changes: 34 additions & 0 deletions server/stats/noop/noop.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Package noop provides a stats impl that does nothing.
// nolint:revive
package noop

import (
"context"

"github.com/charmbracelet/charm/server/stats"
)

// Stats is a stats implementation that does nothing.
type Stats struct{}

var _ stats.Stats = Stats{}

func (Stats) APILinkGen() {}
func (Stats) APILinkRequest() {}
func (Stats) APIUnlink() {}
func (Stats) APIAuth() {}
func (Stats) APIKeys() {}
func (Stats) LinkGen() {}
func (Stats) LinkRequest() {}
func (Stats) Keys() {}
func (Stats) ID() {}
func (Stats) JWT() {}
func (Stats) GetUserByID() {}
func (Stats) GetUser() {}
func (Stats) SetUserName() {}
func (Stats) GetNewsList() {}
func (Stats) GetNews() {}
func (Stats) PostNews() {}
func (Stats) Start() error { return nil }
func (Stats) Close() error { return nil }
func (Stats) Shutdown(_ context.Context) error { return nil }
2 changes: 1 addition & 1 deletion testserver/testserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ func randomPort(tb testing.TB) int {
if err != nil {
tb.Fatalf("could not get a random port: %s", err)
}
listener.Close()
listener.Close() //nolint:errcheck

addr := listener.Addr().String()

Expand Down

0 comments on commit 9c620ae

Please sign in to comment.