mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-06-04 11:25:52 +08:00

* feat: added new cache package for query service * feat: handle type checking for inmemory * feat: some copy corrections * feat: added inmemory test cases * chore: some renaming * feat: added redis handling * chore: add redis tests * feat(cache): refactor the code * feat(cache): refactor the code * feat(cache): added defaults for redis config * feat(cache): update makefile to run all tetss * feat(cache): update tests and docs * feat(cache): update tests and docs * feat(cache): handle signoz web flag * feat(cache): handle signoz web flag * feat(cache): handle signoz web flag
72 lines
1.5 KiB
Go
72 lines
1.5 KiB
Go
package cache
|
|
|
|
import (
|
|
"context"
|
|
"encoding"
|
|
"fmt"
|
|
"reflect"
|
|
"time"
|
|
)
|
|
|
|
// cacheable entity
|
|
type CacheableEntity interface {
|
|
encoding.BinaryMarshaler
|
|
encoding.BinaryUnmarshaler
|
|
}
|
|
|
|
func WrapCacheableEntityErrors(rt reflect.Type, caller string) error {
|
|
if rt == nil {
|
|
return fmt.Errorf("%s: (nil)", caller)
|
|
}
|
|
|
|
if rt.Kind() != reflect.Pointer {
|
|
return fmt.Errorf("%s: (non-pointer \"%s\")", caller, rt.String())
|
|
}
|
|
|
|
return fmt.Errorf("%s: (nil \"%s\")", caller, rt.String())
|
|
|
|
}
|
|
|
|
// cache status
|
|
type RetrieveStatus int
|
|
|
|
const (
|
|
RetrieveStatusHit = RetrieveStatus(iota)
|
|
RetrieveStatusPartialHit
|
|
RetrieveStatusRangeMiss
|
|
RetrieveStatusKeyMiss
|
|
RetrieveStatusRevalidated
|
|
|
|
RetrieveStatusError
|
|
)
|
|
|
|
func (s RetrieveStatus) String() string {
|
|
switch s {
|
|
case RetrieveStatusHit:
|
|
return "hit"
|
|
case RetrieveStatusPartialHit:
|
|
return "partial hit"
|
|
case RetrieveStatusRangeMiss:
|
|
return "range miss"
|
|
case RetrieveStatusKeyMiss:
|
|
return "key miss"
|
|
case RetrieveStatusRevalidated:
|
|
return "revalidated"
|
|
case RetrieveStatusError:
|
|
return "error"
|
|
default:
|
|
return "unknown"
|
|
}
|
|
}
|
|
|
|
// cache interface
|
|
type Cache interface {
|
|
Connect(ctx context.Context) error
|
|
Store(ctx context.Context, cacheKey string, data CacheableEntity, ttl time.Duration) error
|
|
Retrieve(ctx context.Context, cacheKey string, dest CacheableEntity, allowExpired bool) (RetrieveStatus, error)
|
|
SetTTL(ctx context.Context, cacheKey string, ttl time.Duration)
|
|
Remove(ctx context.Context, cacheKey string)
|
|
BulkRemove(ctx context.Context, cacheKeys []string)
|
|
Close(ctx context.Context) error
|
|
}
|