mirror of
https://github.com/bcicen/ctop.git
synced 2024-08-30 18:23:19 +00:00
e64edbdc36
Each second we receive the timer event which makes little sense but log is bloated with the event. To make logs more readable we can disable logging of this event
72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"reflect"
|
|
"runtime"
|
|
|
|
"github.com/bcicen/ctop/container"
|
|
ui "github.com/gizak/termui"
|
|
)
|
|
|
|
var mstats = &runtime.MemStats{}
|
|
|
|
func logEvent(e ui.Event) {
|
|
// skip timer events e.g. /timer/1s
|
|
if e.From == "timer" {
|
|
return
|
|
}
|
|
var s string
|
|
s += fmt.Sprintf("Type=%s", quote(e.Type))
|
|
s += fmt.Sprintf(" Path=%s", quote(e.Path))
|
|
s += fmt.Sprintf(" From=%s", quote(e.From))
|
|
if e.To != "" {
|
|
s += fmt.Sprintf(" To=%s", quote(e.To))
|
|
}
|
|
log.Debugf("new event: %s", s)
|
|
}
|
|
|
|
func runtimeStats() {
|
|
var msg string
|
|
msg += fmt.Sprintf("cgo calls=%v", runtime.NumCgoCall())
|
|
msg += fmt.Sprintf(" routines=%v", runtime.NumGoroutine())
|
|
runtime.ReadMemStats(mstats)
|
|
msg += fmt.Sprintf(" numgc=%v", mstats.NumGC)
|
|
msg += fmt.Sprintf(" alloc=%v", mstats.Alloc)
|
|
log.Debugf("runtime: %v", msg)
|
|
}
|
|
|
|
func runtimeStack() {
|
|
buf := make([]byte, 32768)
|
|
buf = buf[:runtime.Stack(buf, true)]
|
|
log.Infof(fmt.Sprintf("stack:\n%v", string(buf)))
|
|
}
|
|
|
|
// log container, metrics, and widget state
|
|
func dumpContainer(c *container.Container) {
|
|
msg := fmt.Sprintf("logging state for container: %s\n", c.Id)
|
|
for k, v := range c.Meta {
|
|
msg += fmt.Sprintf("Meta.%s = %s\n", k, v)
|
|
}
|
|
msg += inspect(&c.Metrics)
|
|
log.Infof(msg)
|
|
}
|
|
|
|
func inspect(i interface{}) (s string) {
|
|
val := reflect.ValueOf(i)
|
|
elem := val.Type().Elem()
|
|
|
|
eName := elem.String()
|
|
for i := 0; i < elem.NumField(); i++ {
|
|
field := elem.Field(i)
|
|
fieldVal := reflect.Indirect(val).FieldByName(field.Name)
|
|
s += fmt.Sprintf("%s.%s = ", eName, field.Name)
|
|
s += fmt.Sprintf("%v (%s)\n", fieldVal, field.Type)
|
|
}
|
|
return s
|
|
}
|
|
|
|
func quote(s string) string {
|
|
return fmt.Sprintf("\"%s\"", s)
|
|
}
|