mirror of
https://github.com/bcicen/ctop.git
synced 2024-08-30 18:23:19 +00:00
95 lines
1.9 KiB
Go
95 lines
1.9 KiB
Go
package compact
|
|
|
|
import (
|
|
"github.com/bcicen/ctop/models"
|
|
|
|
ui "github.com/gizak/termui"
|
|
)
|
|
|
|
// Status indicator
|
|
type Status struct {
|
|
*ui.Block
|
|
status []ui.Cell
|
|
health []ui.Cell
|
|
}
|
|
|
|
func NewStatus() CompactCol {
|
|
s := &Status{
|
|
Block: ui.NewBlock(),
|
|
status: []ui.Cell{{Ch: ' '}},
|
|
health: []ui.Cell{{Ch: ' '}},
|
|
}
|
|
s.Height = 1
|
|
s.Border = false
|
|
return s
|
|
}
|
|
|
|
func (s *Status) Buffer() ui.Buffer {
|
|
buf := s.Block.Buffer()
|
|
buf.Set(s.InnerX(), s.InnerY(), s.health[0])
|
|
buf.Set(s.InnerX()+2, s.InnerY(), s.status[0])
|
|
return buf
|
|
}
|
|
|
|
func (s *Status) SetMeta(m models.Meta) {
|
|
s.setState(m.Get("state"))
|
|
s.setHealth(m.Get("health"))
|
|
}
|
|
|
|
// Status implements CompactCol
|
|
func (s *Status) Reset() {}
|
|
func (s *Status) SetMetrics(models.Metrics) {}
|
|
func (s *Status) Highlight() {}
|
|
func (s *Status) UnHighlight() {}
|
|
func (s *Status) Header() string { return "" }
|
|
func (s *Status) FixedWidth() int { return 3 }
|
|
|
|
func (s *Status) setState(val string) {
|
|
color := ui.ColorDefault
|
|
var mark string
|
|
|
|
switch val {
|
|
case "":
|
|
return
|
|
case "created":
|
|
mark = "◉"
|
|
case "running":
|
|
mark = "⏵"
|
|
color = ui.ThemeAttr("status.ok")
|
|
case "exited":
|
|
mark = "⏹"
|
|
color = ui.ThemeAttr("status.danger")
|
|
case "paused":
|
|
mark = "⏸"
|
|
default:
|
|
mark = " "
|
|
log.Warningf("unknown status string: \"%v\"", val)
|
|
}
|
|
|
|
s.status = ui.TextCells(mark, color, ui.ColorDefault)
|
|
}
|
|
|
|
func (s *Status) setHealth(val string) {
|
|
color := ui.ColorDefault
|
|
var mark string
|
|
|
|
switch val {
|
|
case "":
|
|
return
|
|
case "healthy":
|
|
mark = "☼"
|
|
color = ui.ThemeAttr("status.ok")
|
|
case "unhealthy":
|
|
mark = "⚠"
|
|
color = ui.ThemeAttr("status.danger")
|
|
case "starting":
|
|
mark = "◌"
|
|
color = ui.ThemeAttr("status.warn")
|
|
default:
|
|
mark = " "
|
|
log.Warningf("unknown health state string: \"%v\"", val)
|
|
}
|
|
|
|
s.health = ui.TextCells(mark, color, ui.ColorDefault)
|
|
}
|