implement redis key ttl
This commit is contained in:
		| @@ -5,6 +5,7 @@ import ( | ||||
| 	"crypto/tls" | ||||
| 	"fmt" | ||||
| 	"sync" | ||||
| 	"time" | ||||
|  | ||||
| 	"gitea.libretechconsulting.com/rmcguire/go-app/pkg/otel" | ||||
| 	"go.opentelemetry.io/otel/attribute" | ||||
| @@ -20,6 +21,7 @@ import ( | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	DEF_TTL     = "24h" | ||||
| 	DEF_RETAIN  = 120 | ||||
| 	UPDATES_KEY = "weatherUpdates" | ||||
| 	NAME        = "redis recorder" | ||||
| @@ -27,6 +29,7 @@ const ( | ||||
|  | ||||
| type RedisRecorder struct { | ||||
| 	baseCtx context.Context | ||||
| 	keyTTL  time.Duration | ||||
| 	tracer  trace.Tracer | ||||
| 	redis   *redis.Client | ||||
| 	config  *config.AmbientLocalExporterConfig | ||||
| @@ -42,8 +45,10 @@ func (r *RedisRecorder) Ping(ctx context.Context) error { | ||||
| } | ||||
|  | ||||
| func (r *RedisRecorder) Init(ctx context.Context, opts *recorders.RecorderOpts) { | ||||
| 	r.log = zerolog.Ctx(r.baseCtx) | ||||
|  | ||||
| 	if opts.AppConfig.RecorderConfig.RedisConfig == nil { | ||||
| 		panic("refusing to init redis recorder with no redisConfig") | ||||
| 		r.log.Panic().Msg("refusing to init redis recorder with no redisConfig") | ||||
| 	} | ||||
|  | ||||
| 	if opts.RetainLast < 1 { | ||||
| @@ -54,7 +59,18 @@ func (r *RedisRecorder) Init(ctx context.Context, opts *recorders.RecorderOpts) | ||||
| 	r.keep = opts.RetainLast | ||||
| 	r.RWMutex = &sync.RWMutex{} | ||||
| 	r.baseCtx = opts.BaseCtx | ||||
| 	r.log = zerolog.Ctx(r.baseCtx) | ||||
|  | ||||
| 	keyTTL := opts.AppConfig.RecorderConfig.RedisConfig.RedisKeyTTL | ||||
| 	if keyTTL == "" { | ||||
| 		keyTTL = DEF_TTL | ||||
| 	} | ||||
|  | ||||
| 	var err error | ||||
| 	r.keyTTL, err = time.ParseDuration(keyTTL) | ||||
| 	if err != nil { | ||||
| 		r.log.Panic().Str("redisKeyTTL", keyTTL).Err(err). | ||||
| 			Msg("invalid redis key ttl provided") | ||||
| 	} | ||||
|  | ||||
| 	r.tracer = otel.GetTracer(r.baseCtx, "redisRecorder") | ||||
| 	ctx, span := r.tracer.Start(ctx, "redisRecorder.init", trace.WithAttributes( | ||||
| @@ -62,6 +78,7 @@ func (r *RedisRecorder) Init(ctx context.Context, opts *recorders.RecorderOpts) | ||||
| 		attribute.Int("retainLast", opts.RetainLast), | ||||
| 		attribute.Int("redisPort", opts.AppConfig.RecorderConfig.RedisConfig.RedisPort), | ||||
| 		attribute.Bool("tls", opts.AppConfig.RecorderConfig.RedisConfig.RedisTLS), | ||||
| 		attribute.String("keyTTL", r.keyTTL.String()), | ||||
| 	)) | ||||
| 	defer span.End() | ||||
|  | ||||
|   | ||||
| @@ -48,6 +48,7 @@ func (r *RedisRecorder) set(ctx context.Context, data []byte) error { | ||||
| 		pipe.LPush(ctx, r.Key(), data) | ||||
| 		pipe.LTrim(ctx, r.Key(), 0, int64(r.keep)-1) | ||||
| 		count = pipe.LLen(ctx, r.Key()) | ||||
| 		pipe.Expire(ctx, r.Key(), r.keyTTL) | ||||
| 		return nil | ||||
| 	}) | ||||
| 	if err != nil { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user