diff --git a/go.mod b/go.mod index 0c6f6eb30..67e9df535 100644 --- a/go.mod +++ b/go.mod @@ -19,6 +19,7 @@ require ( github.com/spf13/afero v1.11.0 github.com/spf13/cobra v1.8.0 github.com/stretchr/testify v1.9.0 + github.com/victorspringer/http-cache v0.0.0-20240523143319-7d9f48f8ab91 go.opentelemetry.io/otel v1.24.0 go.uber.org/zap v1.26.0 golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 diff --git a/go.sum b/go.sum index 96a63c0c1..23ee6130c 100644 --- a/go.sum +++ b/go.sum @@ -1127,6 +1127,7 @@ github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJE github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/olvrng/ujson v1.1.0 h1:8xVUzVlqwdMVWh5d1UHBtLQ1D50nxoPuPEq9Wozs8oA= github.com/olvrng/ujson v1.1.0/go.mod h1:Mz4G3RODTUfbkKyvi0lgmPx/7vd3Saksk+1jgk8s9xo= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo/v2 v2.18.0 h1:W9Y7IWXxPUpAit9ieMOLI7PJZGaW22DTKgiVAuhDTLc= github.com/onsi/ginkgo/v2 v2.18.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= @@ -1314,6 +1315,8 @@ github.com/uptrace/uptrace-go v1.18.0 h1:RY15qy19C0irbe2UCxQbjenk8WyUdvUV756R9Zp github.com/uptrace/uptrace-go v1.18.0/go.mod h1:BUW3sFgEyRmZIxts4cv6TGaJnWAW95uW78GIiSdChOQ= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= +github.com/victorspringer/http-cache v0.0.0-20240523143319-7d9f48f8ab91 h1:b5+IzGwYrH3TnHjjUdMdM/4BCefs1pn4JWO4n/zYmMk= +github.com/victorspringer/http-cache v0.0.0-20240523143319-7d9f48f8ab91/go.mod h1:D1AD6nlXv7HkIfTVd8ZWK1KQEiXYNy/LbLkx8H9tIQw= github.com/wagoodman/go-partybus v0.0.0-20230516145632-8ccac152c651 h1:jIVmlAFIqV3d+DOxazTR9v+zgj8+VYuQBzPgBZvWBHA= github.com/wagoodman/go-partybus v0.0.0-20230516145632-8ccac152c651/go.mod h1:b26F2tHLqaoRQf8DywqzVaV1MQ9yvjb0OMcNl7Nxu20= github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0 h1:0KGbf+0SMg+UFy4e1A/CPVvXn21f1qtWdeJwxZFoQG8= diff --git a/pkg/cmd/server/start.go b/pkg/cmd/server/start.go index 9ba0a5831..4817e63ea 100644 --- a/pkg/cmd/server/start.go +++ b/pkg/cmd/server/start.go @@ -22,6 +22,7 @@ import ( "net" "net/http" "net/http/pprof" + "time" "github.com/kubescape/go-logger" "github.com/kubescape/go-logger/helpers" @@ -32,6 +33,8 @@ import ( informers "github.com/kubescape/storage/pkg/generated/informers/externalversions" sampleopenapi "github.com/kubescape/storage/pkg/generated/openapi" "github.com/spf13/cobra" + "github.com/victorspringer/http-cache" + "github.com/victorspringer/http-cache/adapter/memory" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/endpoints/openapi" @@ -180,6 +183,26 @@ func (o WardleServerOptions) RunWardleServer(stopCh <-chan struct{}) error { return err } + // add http-cache + memcached, err := memory.NewAdapter( + memory.AdapterWithAlgorithm(memory.LRU), + memory.AdapterWithStorageCapacity(500000000), // 500MB + ) + if err != nil { + logger.L().Fatal("failed to create memcached adapter", helpers.Error(err)) + } + + cacheClient, err := cache.NewClient( + cache.ClientWithAdapter(memcached), + cache.ClientWithTTL(10*time.Minute), + cache.ClientWithRefreshKey("opn"), + ) + if err != nil { + logger.L().Fatal("failed to create cache client", helpers.Error(err)) + } + director := server.GenericAPIServer.Handler.Director + server.GenericAPIServer.Handler.Director = cacheClient.Middleware(director) + server.GenericAPIServer.AddPostStartHookOrDie("start-sample-server-informers", func(context genericapiserver.PostStartHookContext) error { config.GenericConfig.SharedInformerFactory.Start(context.StopCh) o.SharedInformerFactory.Start(context.StopCh)