From 15c7218e3d1d09ef9f0e6e272d9ca2babeaa99fc Mon Sep 17 00:00:00 2001 From: Arsham Shirvani Date: Thu, 8 Dec 2016 09:42:48 +0000 Subject: [PATCH] Moves the main.go into cmd/expvarmon folder to make it go gettable to be used as a library Clean ups with gofmt --- .gitignore | 1 + README.md | 2 +- average.go | 2 +- average_test.go | 14 +++++++------- cmd/.gitkeep | 0 main.go => cmd/expvarmon/main.go | 28 +++++++++++++++------------- data.go | 4 ++-- expvars.go | 2 +- expvars_test.go | 2 +- histogram.go | 2 +- self.go | 2 +- service.go | 2 +- stack.go | 2 +- stack_test.go | 2 +- stat.go | 18 +++++++++--------- ui.go | 8 ++++---- ui_dummy.go | 2 +- ui_multi.go | 10 ++++++++-- ui_single.go | 12 +++++++++--- ui_single_test.go | 2 +- utils.go | 2 +- utils_test.go | 2 +- var.go | 2 +- var_test.go | 2 +- 24 files changed, 70 insertions(+), 55 deletions(-) create mode 100644 cmd/.gitkeep rename main.go => cmd/expvarmon/main.go (79%) diff --git a/.gitignore b/.gitignore index cdebd88..744c503 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ expvarmon +!cmd/expvarmon *.swp diff --git a/README.md b/README.md index fb44ea9..09ce857 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Also it doesn't use any storage engines and doesn't send notifications. Just run go get: - go get github.com/divan/expvarmon + go get github.com/divan/expvarmon/... ## Usage diff --git a/average.go b/average.go index 7adc0f7..799a785 100644 --- a/average.go +++ b/average.go @@ -1,4 +1,4 @@ -package main +package expvarmon import ( "github.com/antonholmquist/jason" diff --git a/average_test.go b/average_test.go index 2243a6a..45edb1f 100644 --- a/average_test.go +++ b/average_test.go @@ -1,15 +1,15 @@ -package main +package expvarmon import ( - "testing" + "testing" ) func TestAverage(t *testing.T) { - avg := average(samplesPartial) - want := 621090.75 - if avg != want { - t.Fatalf("Average must be %v, but got %v", want, avg) - } + avg := average(samplesPartial) + want := 621090.75 + if avg != want { + t.Fatalf("Average must be %v, but got %v", want, avg) + } } var samplesPartial = []float64{507472, 433979, 610916, 931996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} diff --git a/cmd/.gitkeep b/cmd/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/main.go b/cmd/expvarmon/main.go similarity index 79% rename from main.go rename to cmd/expvarmon/main.go index 26330ae..e7044ab 100644 --- a/main.go +++ b/cmd/expvarmon/main.go @@ -8,6 +8,8 @@ import ( "sync" "time" + "github.com/divan/expvarmon" + "gopkg.in/gizak/termui.v1" ) @@ -17,19 +19,19 @@ var ( varsArg = flag.String("vars", "mem:memstats.Alloc,mem:memstats.Sys,mem:memstats.HeapAlloc,mem:memstats.HeapInuse,memstats.PauseNs,memstats.PauseEnd,duration:memstats.PauseTotalNs", "Vars to monitor (comma-separated)") dummy = flag.Bool("dummy", false, "Use dummy (console) output") self = flag.Bool("self", false, "Monitor itself") - endpoint = flag.String("endpoint", DefaultEndpoint, "URL endpoint for expvars") + endpoint = flag.String("endpoint", expvarmon.DefaultEndpoint, "URL endpoint for expvars") ) func main() { flag.Usage = Usage flag.Parse() - DefaultEndpoint = *endpoint + expvarmon.DefaultEndpoint = *endpoint // Process ports/urls - ports, _ := ParsePorts(*urls) + ports, _ := expvarmon.ParsePorts(*urls) if *self { - port, err := StartSelfMonitor() + port, err := expvarmon.StartSelfMonitor() if err == nil { ports = append(ports, port) } @@ -46,28 +48,28 @@ func main() { } // Process vars - vars, err := ParseVars(*varsArg) + vars, err := expvarmon.ParseVars(*varsArg) if err != nil { log.Fatal(err) } // Init UIData - var services []*Service + var services []*expvarmon.Service for _, port := range ports { - service := NewService(port, vars) + service := expvarmon.NewService(port, vars) services = append(services, service) } - data := NewUIData(vars, services) + data := expvarmon.NewUIData(vars, services) // Start proper UI - var ui UI + var ui expvarmon.UI if len(services) > 1 { - ui = &TermUI{} + ui = expvarmon.NewTermUI(*interval) } else { - ui = &TermUISingle{} + ui = expvarmon.NewTermUISingle(*interval) } if *dummy { - ui = &DummyUI{} + ui = &expvarmon.DummyUI{} } if err := ui.Init(*data); err != nil { @@ -95,7 +97,7 @@ func main() { } // UpdateAll collects data from expvars and refreshes UI. -func UpdateAll(ui UI, data *UIData) { +func UpdateAll(ui expvarmon.UI, data *expvarmon.UIData) { var wg sync.WaitGroup for _, service := range data.Services { wg.Add(1) diff --git a/data.go b/data.go index 54cdbbe..9ebeab2 100644 --- a/data.go +++ b/data.go @@ -1,4 +1,4 @@ -package main +package expvarmon import "time" @@ -37,7 +37,7 @@ func NewSparklineData(vars []VarName) *SparklineData { // NewUIData inits and return new data object. func NewUIData(vars []VarName, services []*Service) *UIData { sp := make([]*SparklineData, len(services)) - for i, _ := range services { + for i := range services { sp[i] = NewSparklineData(vars) } diff --git a/expvars.go b/expvars.go index 59e23fa..83f9fd9 100644 --- a/expvars.go +++ b/expvars.go @@ -1,4 +1,4 @@ -package main +package expvarmon import ( "errors" diff --git a/expvars_test.go b/expvars_test.go index 49e25c5..edeec0b 100644 --- a/expvars_test.go +++ b/expvars_test.go @@ -1,4 +1,4 @@ -package main +package expvarmon import ( "os" diff --git a/histogram.go b/histogram.go index 2bcdce5..c4dd163 100644 --- a/histogram.go +++ b/histogram.go @@ -1,4 +1,4 @@ -package main +package expvarmon import ( "math" diff --git a/self.go b/self.go index 3d7973e..37a027f 100644 --- a/self.go +++ b/self.go @@ -1,4 +1,4 @@ -package main +package expvarmon import ( "expvar" diff --git a/service.go b/service.go index b6338d0..1b1d7a8 100644 --- a/service.go +++ b/service.go @@ -1,4 +1,4 @@ -package main +package expvarmon import ( "net/url" diff --git a/stack.go b/stack.go index dd1898b..d910e32 100644 --- a/stack.go +++ b/stack.go @@ -1,4 +1,4 @@ -package main +package expvarmon // DefaultSize specifies maximum number of items in stack. // diff --git a/stack_test.go b/stack_test.go index f971eee..f4d572d 100644 --- a/stack_test.go +++ b/stack_test.go @@ -1,4 +1,4 @@ -package main +package expvarmon import "testing" diff --git a/stat.go b/stat.go index 34516af..76e47f4 100644 --- a/stat.go +++ b/stat.go @@ -1,26 +1,26 @@ -package main +package expvarmon // Stat holds basic statistics data for // integer data used for sparklines. type Stat struct { - max int - maxStr string + max int + maxStr string } // NewStat inits new Stat object. func NewStat() *Stat { - return &Stat{} + return &Stat{} } // Update updates stats on each push. func (s *Stat) Update(v IntVar) { - if v.Value() > s.max { - s.max = v.Value() - s.maxStr = v.String() - } + if v.Value() > s.max { + s.max = v.Value() + s.maxStr = v.String() + } } // Max returns maximum recorded value. func (s *Stat) Max() string { - return s.maxStr + return s.maxStr } diff --git a/ui.go b/ui.go index 6d86d39..b08a3d8 100644 --- a/ui.go +++ b/ui.go @@ -1,8 +1,8 @@ -package main +package expvarmon // UI represents UI renderer. type UI interface { - Init(UIData) error - Close() - Update(UIData) + Init(UIData) error + Close() + Update(UIData) } diff --git a/ui_dummy.go b/ui_dummy.go index d02cbf9..e0b57b2 100644 --- a/ui_dummy.go +++ b/ui_dummy.go @@ -1,4 +1,4 @@ -package main +package expvarmon import ( "fmt" diff --git a/ui_multi.go b/ui_multi.go index f0dcb8b..7a75b6c 100644 --- a/ui_multi.go +++ b/ui_multi.go @@ -1,4 +1,4 @@ -package main +package expvarmon import ( "fmt" @@ -15,6 +15,12 @@ type TermUI struct { Lists []*termui.List Sparkline1 *termui.Sparklines Sparkline2 *termui.Sparklines + interval time.Duration // interval between refreshes +} + +// NewTermUI constructs the TermUI and sets the interval +func NewTermUI(interval time.Duration) *TermUI { + return &TermUI{interval: interval} } // Init creates widgets, sets sizes and labels. @@ -92,7 +98,7 @@ func (t *TermUI) Init(data UIData) error { // Update updates UI widgets from UIData. func (t *TermUI) Update(data UIData) { - t.Title.Text = fmt.Sprintf("monitoring %d services every %v, press q to quit", len(data.Services), *interval) + t.Title.Text = fmt.Sprintf("monitoring %d services every %v, press q to quit", len(data.Services), t.interval) t.Status.Text = fmt.Sprintf("Last update: %v", data.LastTimestamp.Format(time.Stamp)) // List with service names diff --git a/ui_single.go b/ui_single.go index 4550fdc..c2486a5 100644 --- a/ui_single.go +++ b/ui_single.go @@ -1,4 +1,4 @@ -package main +package expvarmon import ( "fmt" @@ -21,7 +21,13 @@ type TermUISingle struct { GCIChart *termui.BarChart GCIStats *termui.Par - bins int // histograms' bins count + bins int // histograms' bins count + interval time.Duration // interval between refreshes +} + +// NewTermUISingle constructs the TermUISingle and sets the interval +func NewTermUISingle(interval time.Duration) *TermUISingle { + return &TermUISingle{interval: interval} } // Init creates widgets, sets sizes and labels. @@ -128,7 +134,7 @@ func (t *TermUISingle) Update(data UIData) { // single mode assumes we have one service only to monitor service := data.Services[0] - t.Title.Text = fmt.Sprintf("monitoring %s every %v, press q to quit", service.Name, *interval) + t.Title.Text = fmt.Sprintf("monitoring %s every %v, press q to quit", service.Name, t.interval) t.Status.Text = fmt.Sprintf("Last update: %v", data.LastTimestamp.Format(time.Stamp)) // Pars diff --git a/ui_single_test.go b/ui_single_test.go index 704b559..57a15c7 100644 --- a/ui_single_test.go +++ b/ui_single_test.go @@ -1,4 +1,4 @@ -package main +package expvarmon import "testing" diff --git a/utils.go b/utils.go index 8e4c935..ab2566a 100644 --- a/utils.go +++ b/utils.go @@ -1,4 +1,4 @@ -package main +package expvarmon import ( "errors" diff --git a/utils_test.go b/utils_test.go index f99214f..28e4777 100644 --- a/utils_test.go +++ b/utils_test.go @@ -1,4 +1,4 @@ -package main +package expvarmon import "testing" diff --git a/var.go b/var.go index 1c44df6..7b7b4b5 100644 --- a/var.go +++ b/var.go @@ -1,4 +1,4 @@ -package main +package expvarmon import ( "fmt" diff --git a/var_test.go b/var_test.go index ffddf20..81aefc9 100644 --- a/var_test.go +++ b/var_test.go @@ -1,4 +1,4 @@ -package main +package expvarmon import ( "strings"