github.com/telepresenceio/telepresence/v2@v2.20.0-pro.6.0.20240517030216-236ea954e789/pkg/client/logging/cached_timed_level.go (about) 1 package logging 2 3 import ( 4 "context" 5 "os" 6 "time" 7 8 "github.com/telepresenceio/telepresence/v2/pkg/client/cache" 9 "github.com/telepresenceio/telepresence/v2/pkg/log" 10 ) 11 12 type cachedTLData struct { 13 Level string `json:"level"` 14 Expires int64 // Seconds since epoch 15 } 16 17 func SetAndStoreTimedLevel(ctx context.Context, tl log.TimedLevel, level string, duration time.Duration, procName string) error { 18 tl.Set(ctx, level, duration) 19 cd := cachedTLData{Level: level} 20 if duration > 0 { 21 cd.Expires = time.Now().Add(duration).Unix() 22 } 23 return cache.SaveToUserCache(ctx, &cd, procName+".loglevel", cache.Public) 24 } 25 26 func LoadTimedLevelFromCache(ctx context.Context, tl log.TimedLevel, procName string) error { 27 file := procName + ".loglevel" 28 cd := cachedTLData{} 29 if err := cache.LoadFromUserCache(ctx, &cd, file); err != nil { 30 if os.IsNotExist(err) { 31 err = nil 32 } 33 return err 34 } 35 if cd.Expires == 0 { 36 tl.Set(ctx, cd.Level, 0) 37 } else if duration := time.Until(time.Unix(cd.Expires, 0)); duration > 0 { 38 tl.Set(ctx, cd.Level, duration) 39 } else { 40 // Time has expired, just drop the cache. 41 _ = cache.DeleteFromUserCache(ctx, file) 42 } 43 return nil 44 }