diff --git a/component/asciibox/asciibox.go b/component/asciibox/asciibox.go index 6751efe..4d30f17 100644 --- a/component/asciibox/asciibox.go +++ b/component/asciibox/asciibox.go @@ -1,7 +1,7 @@ package asciibox import ( - fl "github.com/sqshq/figlet4go" + fl "github.com/mbndr/figlet4go" "github.com/sqshq/sampler/asset" "github.com/sqshq/sampler/data" ui "github.com/sqshq/termui" @@ -24,6 +24,8 @@ const ( AsciiFont3D AsciiFont = "3d" ) +const asciiFontExtension = ".flf" + func NewAsciiBox(title string, font AsciiFont, color ui.Color) *AsciiBox { block := *ui.NewBlock() @@ -32,7 +34,7 @@ func NewAsciiBox(title string, font AsciiFont, color ui.Color) *AsciiBox { options := fl.NewRenderOptions() options.FontName = string(font) - fontStr, err := asset.Asset(options.FontName + ".flf") + fontStr, err := asset.Asset(options.FontName + asciiFontExtension) if err != nil { panic("Can't load the font: " + err.Error()) } diff --git a/component/barchart/barchart.go b/component/barchart/barchart.go index ac287f3..692fdfc 100644 --- a/component/barchart/barchart.go +++ b/component/barchart/barchart.go @@ -12,8 +12,7 @@ import ( ) const ( - barSymbol rune = '⠿' - barIndent int = 1 + barIndent int = 1 ) type BarChart struct { @@ -106,7 +105,7 @@ func (b *BarChart) Draw(buf *ui.Buffer) { maxYCoordinate := b.Inner.Max.Y - height for x := barXCoordinate; x < ui.MinInt(barXCoordinate+barWidth, b.Inner.Max.X-barIndent); x++ { for y := b.Inner.Max.Y - 2; y >= maxYCoordinate; y-- { - c := ui.NewCell(barSymbol, ui.NewStyle(bar.color)) + c := ui.NewCell(console.SymbolShade, ui.NewStyle(bar.color)) buf.SetCell(c, image.Pt(x, y)) } } diff --git a/component/component.go b/component/component.go index c8146c3..dbd41d3 100644 --- a/component/component.go +++ b/component/component.go @@ -5,6 +5,10 @@ import ( ui "github.com/sqshq/termui" ) +const ( + minDimension = 3 +) + type Component struct { Type config.ComponentType Drawable ui.Drawable @@ -27,11 +31,11 @@ func (c *Component) Resize(x, y int) { } func (c *Component) normalize() { - if c.Size.X < 0 { - c.Size.X = 0 + if c.Size.X < minDimension { + c.Size.X = minDimension } - if c.Size.Y < 0 { - c.Size.Y = 0 + if c.Size.Y < minDimension { + c.Size.Y = minDimension } if c.Position.X < 0 { c.Position.X = 0 diff --git a/component/gauge/gauge.go b/component/gauge/gauge.go new file mode 100644 index 0000000..6cfb76a --- /dev/null +++ b/component/gauge/gauge.go @@ -0,0 +1,103 @@ +package gauge + +import ( + "fmt" + "github.com/sqshq/sampler/console" + "github.com/sqshq/sampler/data" + ui "github.com/sqshq/termui" + "image" + "math" + "strconv" +) + +const ( + MinValueLabel = "min" + MaxValueLabel = "max" + CurValueLabel = "cur" +) + +type Gauge struct { + ui.Block + minValue float64 + maxValue float64 + curValue float64 + scale int + color ui.Color +} + +func NewGauge(title string, scale int, color ui.Color) *Gauge { + block := *ui.NewBlock() + block.Title = title + return &Gauge{ + Block: block, + scale: scale, + color: color, + } +} + +func (g *Gauge) ConsumeSample(sample data.Sample) { + + float, err := strconv.ParseFloat(sample.Value, 64) + if err != nil { + // TODO visual notification + check sample.Error + } + + switch sample.Label { + case MinValueLabel: + g.minValue = float + break + case MaxValueLabel: + g.maxValue = float + break + case CurValueLabel: + g.curValue = float + break + } +} + +func (g *Gauge) Draw(buf *ui.Buffer) { + + g.Block.Draw(buf) + + percent := 0.0 + if g.curValue != 0 { + percent = (100 * g.curValue) / (g.maxValue - g.minValue) + } + + label := fmt.Sprintf("%v%% (%v)", formatValue(percent, g.scale), g.curValue) + + // plot bar + barWidth := int((percent / 100) * float64(g.Inner.Dx())) + if barWidth == 0 { + barWidth = 1 + } else if barWidth > g.Dx()-2 { + barWidth = g.Dx() - 2 + } + buf.Fill( + ui.NewCell(console.SymbolVerticalBar, ui.NewStyle(g.color)), + image.Rect(g.Inner.Min.X+1, g.Inner.Min.Y, g.Inner.Min.X+barWidth, g.Inner.Max.Y), + ) + + // plot label + labelXCoordinate := g.Inner.Min.X + (g.Inner.Dx() / 2) - int(float64(len(label))/2) + labelYCoordinate := g.Inner.Min.Y + ((g.Inner.Dy() - 1) / 2) + if labelYCoordinate < g.Inner.Max.Y { + for i, char := range label { + style := ui.NewStyle(console.ColorWhite) + if labelXCoordinate+i+1 <= g.Inner.Min.X+barWidth { + style = ui.NewStyle(console.ColorWhite, ui.ColorClear) + } + buf.SetCell(ui.NewCell(char, style), image.Pt(labelXCoordinate+i, labelYCoordinate)) + } + } +} + +// TODO extract to utils +func formatValue(value float64, scale int) string { + if math.Abs(value) == math.MaxFloat64 { + return "Inf" + } else { + format := "%." + strconv.Itoa(scale) + "f" + return fmt.Sprintf(format, value) + } +} diff --git a/component/layout.go b/component/layout.go index 5ec2550..9c619e7 100644 --- a/component/layout.go +++ b/component/layout.go @@ -29,8 +29,8 @@ const ( ) const ( - columnsCount = 60 - rowsCount = 40 + columnsCount = 80 + rowsCount = 60 statusbarHeight = 1 ) diff --git a/component/menu.go b/component/menu.go index 5022e01..4148d30 100644 --- a/component/menu.go +++ b/component/menu.go @@ -33,6 +33,10 @@ const ( MenuOptionResume MenuOption = "RESUME" ) +const ( + minimalMenuHeight = 8 +) + func NewMenu() *Menu { block := *ui.NewBlock() block.Border = true @@ -99,7 +103,12 @@ func (m *Menu) Draw(buffer *ui.Buffer) { m.updateDimensions() buffer.Fill(ui.NewCell(' ', ui.NewStyle(ui.ColorBlack)), m.GetRect()) - m.drawInnerBorder(buffer) + + if m.Dy() > minimalMenuHeight { + m.drawInnerBorder(buffer) + } + + m.Block.Draw(buffer) switch m.mode { case MenuModeHighlight: @@ -109,15 +118,25 @@ func (m *Menu) Draw(buffer *ui.Buffer) { case MenuModeOptionSelect: m.renderOptions(buffer) } - - m.Block.Draw(buffer) } func (m *Menu) renderHighlight(buffer *ui.Buffer) { + arrowsText := "Use arrows for selection" + optionsText := " to view options" + resumeText := " to resume" + + if m.Dy() <= minimalMenuHeight { + buffer.SetString( + optionsText, + ui.NewStyle(console.ColorDarkGrey), + getMiddlePoint(m.Block, optionsText, -1), + ) + return + } + m.printAllDirectionsArrowSign(buffer, -2) - arrowsText := "Use arrows for selection" arrowsTextPoint := getMiddlePoint(m.Block, arrowsText, 2) if arrowsTextPoint.Y+1 < m.Inner.Max.Y { buffer.SetString( @@ -127,7 +146,6 @@ func (m *Menu) renderHighlight(buffer *ui.Buffer) { ) } - optionsText := " to view options" optionsTextPoint := getMiddlePoint(m.Block, optionsText, 3) if optionsTextPoint.Y+1 < m.Inner.Max.Y { buffer.SetString( @@ -137,7 +155,6 @@ func (m *Menu) renderHighlight(buffer *ui.Buffer) { ) } - resumeText := " to resume" resumeTextPoint := getMiddlePoint(m.Block, resumeText, 4) if resumeTextPoint.Y+1 < m.Inner.Max.Y { buffer.SetString( @@ -150,17 +167,15 @@ func (m *Menu) renderHighlight(buffer *ui.Buffer) { func (m *Menu) renderMoveAndResize(buffer *ui.Buffer) { - m.printAllDirectionsArrowSign(buffer, -2) - saveText := " to save changes" - saveTextPoint := getMiddlePoint(m.Block, saveText, 4) - if saveTextPoint.In(m.Rectangle) { - buffer.SetString( - saveText, - ui.NewStyle(console.ColorDarkGrey), - saveTextPoint, - ) + + if m.Dy() <= minimalMenuHeight { + buffer.SetString(saveText, ui.NewStyle(console.ColorDarkGrey), getMiddlePoint(m.Block, saveText, -1)) + return } + + m.printAllDirectionsArrowSign(buffer, -1) + buffer.SetString(saveText, ui.NewStyle(console.ColorDarkGrey), getMiddlePoint(m.Block, saveText, 3)) } func (m *Menu) printAllDirectionsArrowSign(buffer *ui.Buffer, y int) { @@ -184,7 +199,7 @@ func (m *Menu) renderOptions(buffer *ui.Buffer) { // TODO extract styles to console.Palette highlightedStyle := ui.NewStyle(console.ColorOlive, console.ColorBlack, ui.ModifierReverse) - regularStyle := ui.NewStyle(console.ColorWhite) + regularStyle := ui.NewStyle(console.ColorWhite, console.ColorBlack) offset := 1 for _, option := range m.options { @@ -197,9 +212,10 @@ func (m *Menu) renderOptions(buffer *ui.Buffer) { if option != MenuOptionPinpoint || m.component.Type == config.TypeRunChart { offset += 2 point := getMiddlePoint(m.Block, string(option), offset-5) - if point.In(m.GetRect()) { - buffer.SetString(string(option), style, point) - } + buffer.SetString(string(option), style, point) + //if point.In(m.GetRect()) { + // buffer.SetString(string(option), style, point) + //} } } } diff --git a/config.yml b/config.yml index 0e7f931..d15b80b 100644 --- a/config.yml +++ b/config.yml @@ -9,11 +9,11 @@ runcharts: scale: 3 items: - label: GOOGLE - script: curl -o /dev/null -s -w '%{time_total}' https://www.google.com + value: curl -o /dev/null -s -w '%{time_total}' https://www.google.com - label: YAHOO - script: curl -o /dev/null -s -w '%{time_total}' https://search.yahoo.com + value: curl -o /dev/null -s -w '%{time_total}' https://search.yahoo.com - label: BING - script: curl -o /dev/null -s -w '%{time_total}' https://www.bing.com + value: curl -o /dev/null -s -w '%{time_total}' https://www.bing.com - title: SEARCH ENGINE RESPONSE TIME 2 (sec) refresh-rate-ms: 5000 position: @@ -27,11 +27,11 @@ runcharts: details: false items: - label: GOOGLE - script: curl -o /dev/null -s -w '%{time_total}' https://www.google.com + value: curl -o /dev/null -s -w '%{time_total}' https://www.google.com - label: YAHOO - script: curl -o /dev/null -s -w '%{time_total}' https://search.yahoo.com + value: curl -o /dev/null -s -w '%{time_total}' https://search.yahoo.com - label: BING - script: curl -o /dev/null -s -w '%{time_total}' https://www.bing.com + value: curl -o /dev/null -s -w '%{time_total}' https://www.bing.com - title: MONGO COLLECTIONS COUNT position: w: 21 @@ -42,9 +42,9 @@ runcharts: scale: 0 items: - label: ACTIVE - script: mongo --quiet --host=localhost blog --eval "db.getCollection('posts').find({status:'ACTIVE'}).itcount()" + value: mongo --quiet --host=localhost blog --eval "db.getCollection('posts').find({status:'ACTIVE'}).itcount()" - label: INACTIVE - script: mongo --quiet --host=localhost blog --eval "db.getCollection('posts').find({status:'INACTIVE'}).itcount()" + value: mongo --quiet --host=localhost blog --eval "db.getCollection('posts').find({status:'INACTIVE'}).itcount()" barcharts: - title: EVENTS BY STATUS refresh-rate-ms: 1000 @@ -57,15 +57,28 @@ barcharts: scale: 0 items: - label: NEW - script: mongo --quiet --host=localhost blog --eval "db.getCollection('posts').find({status:'ACTIVE'}).itcount()" + value: mongo --quiet --host=localhost blog --eval "db.getCollection('posts').find({status:'ACTIVE'}).itcount()" - label: TRIGGERED - script: mongo --quiet --host=localhost blog --eval "db.getCollection('posts').find({status:'INACTIVE'}).itcount()" + value: mongo --quiet --host=localhost blog --eval "db.getCollection('posts').find({status:'INACTIVE'}).itcount()" - label: IN_PROCESS - script: echo 0 - - label: FINISHED - script: mongo --quiet --host=localhost blog --eval "db.getCollection('posts').find({status:'ACTIVE'}).itcount()" + value: echo 0 - label: FAILED - script: mongo --quiet --host=localhost blog --eval "db.getCollection('posts').find({status:'INACTIVE'}).itcount()" + value: mongo --quiet --host=localhost blog --eval "db.getCollection('posts').find({status:'ACTIVE'}).itcount()" + - label: FINISHED + value: mongo --quiet --host=localhost blog --eval "db.getCollection('posts').find({status:'INACTIVE'}).itcount()" +gauges: +- title: YEAR PROGRESS + position: + w: 21 + h: 33 + size: + w: 20 + h: 3 + values: + cur: echo 245 + max: echo 365 + min: echo 0 + items: [] asciiboxes: - title: LOCAL TIME position: @@ -74,7 +87,7 @@ asciiboxes: size: w: 20 h: 6 - script: date +%r + value: date +%r - title: UTC TIME position: w: 40 @@ -82,5 +95,5 @@ asciiboxes: size: w: 20 h: 7 - script: env TZ=UTC date +%r + value: env TZ=UTC date +%r font: 3d diff --git a/config/component.go b/config/component.go new file mode 100644 index 0000000..487ed59 --- /dev/null +++ b/config/component.go @@ -0,0 +1,73 @@ +package config + +import ( + "github.com/sqshq/sampler/component/asciibox" + "github.com/sqshq/sampler/data" + ui "github.com/sqshq/termui" +) + +type ComponentConfig struct { + Title string `yaml:"title"` + RefreshRateMs *int `yaml:"refresh-rate-ms,omitempty"` + Position Position `yaml:"position"` + Size Size `yaml:"size"` +} + +type GaugeConfig struct { + ComponentConfig `yaml:",inline"` + Scale *int `yaml:"scale,omitempty"` + Color *ui.Color `yaml:"color,omitempty"` + Values map[string]string `yaml:"values"` + Items []data.Item +} + +type BarChartConfig struct { + ComponentConfig `yaml:",inline"` + Scale *int `yaml:"scale,omitempty"` + Items []data.Item `yaml:"items"` +} + +type AsciiBoxConfig struct { + ComponentConfig `yaml:",inline"` + data.Item `yaml:",inline"` + Font *asciibox.AsciiFont `yaml:"font,omitempty"` +} + +type RunChartConfig struct { + ComponentConfig `yaml:",inline"` + Legend *LegendConfig `yaml:"legend,omitempty"` + Scale *int `yaml:"scale,omitempty"` + Items []data.Item `yaml:"items"` +} + +type LegendConfig struct { + Enabled bool `yaml:"enabled"` + Details bool `yaml:"details"` +} + +type Position struct { + X int `yaml:"w"` + Y int `yaml:"h"` +} + +type Size struct { + X int `yaml:"w"` + Y int `yaml:"h"` +} + +type ComponentType rune + +const ( + TypeRunChart ComponentType = 0 + TypeBarChart ComponentType = 1 + TypeTextBox ComponentType = 2 + TypeAsciiBox ComponentType = 3 + TypeGauge ComponentType = 4 +) + +type ComponentSettings struct { + Type ComponentType + Title string + Size Size + Position Position +} diff --git a/config/config.go b/config/config.go index c1f388a..ce64c29 100644 --- a/config/config.go +++ b/config/config.go @@ -2,9 +2,7 @@ package config import ( "fmt" - "github.com/sqshq/sampler/component/asciibox" "github.com/sqshq/sampler/console" - "github.com/sqshq/sampler/data" "gopkg.in/yaml.v2" "io/ioutil" "log" @@ -15,6 +13,7 @@ type Config struct { Theme *console.Theme `yaml:"theme,omitempty"` RunCharts []RunChartConfig `yaml:"runcharts,omitempty"` BarCharts []BarChartConfig `yaml:"barcharts,omitempty"` + Gauges []GaugeConfig `yaml:"gauges,omitempty"` AsciiBoxes []AsciiBoxConfig `yaml:"asciiboxes,omitempty"` } @@ -23,63 +22,6 @@ type Flags struct { Variables map[string]string } -type ComponentConfig struct { - Title string `yaml:"title"` - RefreshRateMs *int `yaml:"refresh-rate-ms,omitempty"` - Position Position `yaml:"position"` - Size Size `yaml:"size"` -} - -type RunChartConfig struct { - ComponentConfig `yaml:",inline"` - Legend *LegendConfig `yaml:"legend,omitempty"` - Scale *int `yaml:"scale,omitempty"` - Items []data.Item `yaml:"items"` -} - -type BarChartConfig struct { - ComponentConfig `yaml:",inline"` - Scale *int `yaml:"scale,omitempty"` - Items []data.Item `yaml:"items"` -} - -type AsciiBoxConfig struct { - ComponentConfig `yaml:",inline"` - data.Item `yaml:",inline"` - Font *asciibox.AsciiFont `yaml:"font,omitempty"` -} - -type LegendConfig struct { - Enabled bool `yaml:"enabled"` - Details bool `yaml:"details"` -} - -type Position struct { - X int `yaml:"w"` - Y int `yaml:"h"` -} - -type Size struct { - X int `yaml:"w"` - Y int `yaml:"h"` -} - -type ComponentType rune - -const ( - TypeRunChart ComponentType = 0 - TypeBarChart ComponentType = 1 - TypeTextBox ComponentType = 2 - TypeAsciiBox ComponentType = 3 -) - -type ComponentSettings struct { - Type ComponentType - Title string - Size Size - Position Position -} - func Load() (Config, Flags) { if len(os.Args) < 2 { @@ -121,6 +63,12 @@ func (c *Config) findComponent(componentType ComponentType, componentTitle strin return &c.BarCharts[i].ComponentConfig } } + case TypeGauge: + for i, component := range c.Gauges { + if component.Title == componentTitle { + return &c.Gauges[i].ComponentConfig + } + } case TypeAsciiBox: for i, component := range c.AsciiBoxes { if component.Title == componentTitle { diff --git a/config/default.go b/config/default.go index 5130cd0..b8ac5ec 100644 --- a/config/default.go +++ b/config/default.go @@ -3,6 +3,7 @@ package config import ( "github.com/sqshq/sampler/component/asciibox" "github.com/sqshq/sampler/console" + "github.com/sqshq/sampler/data" ) const ( @@ -52,6 +53,24 @@ func (c *Config) setDefaultValues() { c.BarCharts[i] = chart } + for i, g := range c.Gauges { + if g.RefreshRateMs == nil { + r := defaultRefreshRateMs + g.RefreshRateMs = &r + } + if g.Scale == nil { + p := defaultScale + g.Scale = &p + } + var items []data.Item + for label, script := range g.Values { + l := label + items = append(items, data.Item{Label: &l, Script: script}) + } + g.Items = items + c.Gauges[i] = g + } + for i, box := range c.AsciiBoxes { if box.RefreshRateMs == nil { r := defaultRefreshRateMs @@ -99,4 +118,11 @@ func (c *Config) setDefaultColors() { } } } + + for i, g := range c.Gauges { + if g.Color == nil { + g.Color = &palette.Colors[i%colorsCount] + c.Gauges[i] = g + } + } } diff --git a/console/palette.go b/console/palette.go index 8567914..d4dd638 100644 --- a/console/palette.go +++ b/console/palette.go @@ -28,7 +28,7 @@ const ( ) const ( - MenuColorBackground ui.Color = 236 + MenuColorBackground ui.Color = 234 MenuColorText ui.Color = 255 ) diff --git a/console/symbol.go b/console/symbol.go index 1368c07..8146e7e 100644 --- a/console/symbol.go +++ b/console/symbol.go @@ -1,5 +1,7 @@ package console const ( - SymbolSelection rune = '▲' + SymbolSelection rune = '▲' + SymbolVerticalBar rune = '⢸' + SymbolShade rune = '⣿' ) diff --git a/data/item.go b/data/item.go index ef8bb08..beede7c 100644 --- a/data/item.go +++ b/data/item.go @@ -8,7 +8,7 @@ import ( type Item struct { Label *string `yaml:"label,omitempty"` - Script string `yaml:"script"` + Script string `yaml:"value"` Color *ui.Color `yaml:"color,omitempty"` } diff --git a/go.mod b/go.mod index ec98ea2..d962ba3 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,8 @@ require ( github.com/hajimehoshi/go-mp3 v0.1.1 github.com/hajimehoshi/oto v0.1.1 github.com/mattn/go-runewidth v0.0.4 + github.com/mbndr/figlet4go v0.0.0-20190224160619-d6cef5b186ea github.com/mitchellh/go-wordwrap v1.0.0 // indirect - github.com/sqshq/figlet4go v0.0.0-20190224060604-5ce91d55ba00 github.com/sqshq/termui v0.0.0-20190125032456-731556c09f2c gopkg.in/yaml.v2 v2.2.2 ) diff --git a/go.sum b/go.sum index cd7511c..466561b 100644 --- a/go.sum +++ b/go.sum @@ -11,13 +11,13 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mbndr/figlet4go v0.0.0-20190224160619-d6cef5b186ea h1:mQncVDBpKkAecPcH2IMGpKUQYhwowlafQbfkz2QFqkc= +github.com/mbndr/figlet4go v0.0.0-20190224160619-d6cef5b186ea/go.mod h1:QzTGLGoOqLHUBK8/EZ0v4Fa4CdyXmdyRwCHcl0YbeO4= github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/nsf/termbox-go v0.0.0-20190121233118-02980233997d h1:x3S6kxmy49zXVVyhcnrFqxvNVCBPb2KZ9hV2RBdS840= github.com/nsf/termbox-go v0.0.0-20190121233118-02980233997d/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ= -github.com/sqshq/figlet4go v0.0.0-20190224060604-5ce91d55ba00 h1:HDXBCtVmmsZ0uMTd7CduTASlVECbRZhyAc0m3C+Dbjk= -github.com/sqshq/figlet4go v0.0.0-20190224060604-5ce91d55ba00/go.mod h1:8MTXZj469VoimW9vWH9LcL9Q3k1SRa+dgZdni8ZZw0o= github.com/sqshq/termui v0.0.0-20190125032456-731556c09f2c h1:BBEmIcD4UhAHDVWi3PVuA5TxVTZxcjmYzmdvhWkPfvE= github.com/sqshq/termui v0.0.0-20190125032456-731556c09f2c/go.mod h1:puWaguPLLYPPKabYPVhZ8sDNe0nKSMiKWRfLVaaX8Zs= golang.org/x/arch v0.0.0-20181203225421-5a4828bb7045/go.mod h1:cYlCBUl1MsqxdiKgmc4uh7TxZfWSFLOGSRR090WDxt8= diff --git a/main.go b/main.go index 544dc6a..5768d12 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "github.com/sqshq/sampler/component" "github.com/sqshq/sampler/component/asciibox" "github.com/sqshq/sampler/component/barchart" + "github.com/sqshq/sampler/component/gauge" "github.com/sqshq/sampler/component/runchart" "github.com/sqshq/sampler/config" "github.com/sqshq/sampler/console" @@ -40,14 +41,24 @@ func main() { data.NewSampler(box, a.Item, *a.RefreshRateMs) } - for _, c := range cfg.BarCharts { + for _, b := range cfg.BarCharts { - chart := barchart.NewBarChart(c.Title, *c.Scale) - layout.AddComponent(config.TypeBarChart, chart, c.Title, c.Position, c.Size, *c.RefreshRateMs) + chart := barchart.NewBarChart(b.Title, *b.Scale) + layout.AddComponent(config.TypeBarChart, chart, b.Title, b.Position, b.Size, *b.RefreshRateMs) - for _, item := range c.Items { + for _, item := range b.Items { chart.AddBar(*item.Label, *item.Color) - data.NewSampler(chart, item, *c.RefreshRateMs) + data.NewSampler(chart, item, *b.RefreshRateMs) + } + } + + for _, gc := range cfg.Gauges { + + g := gauge.NewGauge(gc.Title, *gc.Scale, *gc.Color) + layout.AddComponent(config.TypeGauge, g, gc.Title, gc.Position, gc.Size, *gc.RefreshRateMs) + + for _, item := range gc.Items { + data.NewSampler(g, item, *gc.RefreshRateMs) } } diff --git a/sampler.zip b/sampler.zip deleted file mode 100644 index 6c10ba8..0000000 Binary files a/sampler.zip and /dev/null differ