github.com/TrueBlocks/trueblocks-core/src/apps/chifra@v0.0.0-20241022031540-b362680128f7/pkg/logger/timer.go (about) 1 package logger 2 3 import ( 4 "fmt" 5 "os" 6 "strings" 7 "time" 8 ) 9 10 var perfTiming bool 11 12 func init() { 13 perfTiming = os.Getenv("TB_TIMER_ON") == "true" 14 } 15 16 type Timer struct { 17 start time.Time 18 lastReport time.Time 19 verbose bool 20 level int 21 } 22 23 func NewTimer() Timer { 24 now := time.Now() 25 return Timer{ 26 start: now, 27 lastReport: now, 28 verbose: false, 29 level: 0, 30 } 31 } 32 33 func (t *Timer) Level(l int) { 34 t.level = l 35 } 36 37 func (t *Timer) LevelUp() { 38 t.level++ 39 } 40 41 func (t *Timer) LevelDown() { 42 if t.level > 0 { 43 t.level-- 44 } 45 } 46 47 func (t *Timer) Report(msg string) { 48 if !perfTiming { 49 return 50 } 51 since := time.Since(t.start) 52 diff := time.Since(t.lastReport) 53 if t.verbose { 54 Info(msg, "start", t.start) 55 Info(msg, "stop", time.Now()) 56 Info(msg, "since", since) 57 Info(msg, "diff", diff) 58 } 59 60 name := os.Getenv("TB_TIMER_NAME") 61 if len(name) > 0 { 62 msg = strings.Replace(msg, "chifra ", "", -1) + "_" + name 63 } 64 65 max := func(x, y int64) int64 { 66 if x > y { 67 return x 68 } 69 return y 70 } 71 72 // nItems := 0 73 fmt.Printf("PERF,%s%s,%d,%d\n", strings.Repeat("_", t.level), msg, max(1, since.Milliseconds()), max(1, diff.Milliseconds())) 74 75 t.lastReport = time.Now() 76 }