mirror of
https://github.com/k8sgpt-ai/k8sgpt.git
synced 2026-01-25 14:54:20 +00:00
* feat: add Azure remote cache Signed-off-by: Aris Boutselis <arisboutselis08@gmail.com> * feat: add serve mode support and update buf schema Signed-off-by: Aris Boutselis <arisboutselis08@gmail.com> * fix: map structure name Signed-off-by: Aris Boutselis <arisboutselis08@gmail.com> * chore: add a new cache type to make code readable Signed-off-by: Aris Boutselis <arisboutselis08@gmail.com> * docs: update docs to reflect new remote cache type Signed-off-by: Aris Boutselis <arisboutselis08@gmail.com> * fix(deps): update module github.com/prometheus/client_golang to v1.17.0 (#687) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Aris Boutselis <arisboutselis08@gmail.com> * fix(deps): update module buf.build/gen/go/k8sgpt-ai/k8sgpt/grpc/go to v1.3.0-20231002095256-194bc640518b.1 (#692) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix(deps): update module helm.sh/helm/v3 to v3.13.0 (#688) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix: security warning around printing provider details in https://github.com/k8sgpt-ai/k8sgpt/security/code-scanning/1 (#695) Signed-off-by: Aris Boutselis <arisboutselis08@gmail.com> * fix(deps): update module buf.build/gen/go/k8sgpt-ai/k8sgpt/protocolbuffers/go to v1.31.0-20231002095256-194bc640518b.1 (#693) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix(deps): update module github.com/sashabaranov/go-openai to v1.15.4 (#689) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Aris Boutselis <arisboutselis08@gmail.com> * fix(deps): update module github.com/aws/aws-sdk-go to v1.45.20 (#685) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * chore(deps): update amannn/action-semantic-pull-request action to v5.3.0 (#683) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Aris Boutselis <arisboutselis08@gmail.com> * fix(deps): update module github.com/aws/aws-sdk-go to v1.45.21 (#696) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> * fix(deps): update module github.com/aws/aws-sdk-go to v1.45.22 (#697) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Aris Boutselis <arisboutselis08@gmail.com> * fix(deps): update module github.com/aws/aws-sdk-go to v1.45.23 (#699) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Aris Boutselis <arisboutselis08@gmail.com> * fix(deps): update module github.com/aws/aws-sdk-go to v1.45.24 (#701) Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Aris Boutselis <arisboutselis08@gmail.com> --------- Signed-off-by: Aris Boutselis <arisboutselis08@gmail.com> Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Aris Boutselis <aris.boutselis@senseon.io> Co-authored-by: Aris Boutselis <arisboutselis08@gmail.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Alex Jones <alexsimonjones@gmail.com>
117 lines
2.4 KiB
Go
117 lines
2.4 KiB
Go
package cache
|
|
|
|
import (
|
|
"bytes"
|
|
"log"
|
|
|
|
"github.com/aws/aws-sdk-go/aws"
|
|
"github.com/aws/aws-sdk-go/aws/session"
|
|
"github.com/aws/aws-sdk-go/service/s3"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
// Generate ICache implementation
|
|
type S3Cache struct {
|
|
noCache bool
|
|
bucketName string
|
|
session *s3.S3
|
|
}
|
|
|
|
func (s *S3Cache) Store(key string, data string) error {
|
|
// Store the object as a new file in the bucket with data as the content
|
|
_, err := s.session.PutObject(&s3.PutObjectInput{
|
|
Body: aws.ReadSeekCloser(bytes.NewReader([]byte(data))),
|
|
Bucket: aws.String(s.bucketName),
|
|
Key: aws.String(key),
|
|
})
|
|
return err
|
|
|
|
}
|
|
|
|
func (s *S3Cache) Load(key string) (string, error) {
|
|
|
|
// Retrieve the object from the bucket and load it into a string
|
|
result, err := s.session.GetObject(&s3.GetObjectInput{
|
|
Bucket: aws.String(s.bucketName),
|
|
Key: aws.String(key),
|
|
})
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
buf := new(bytes.Buffer)
|
|
buf.ReadFrom(result.Body)
|
|
result.Body.Close()
|
|
return buf.String(), nil
|
|
}
|
|
|
|
func (s *S3Cache) List() ([]string, error) {
|
|
|
|
// List the files in the bucket
|
|
result, err := s.session.ListObjectsV2(&s3.ListObjectsV2Input{Bucket: aws.String(s.bucketName)})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var keys []string
|
|
for _, item := range result.Contents {
|
|
keys = append(keys, *item.Key)
|
|
}
|
|
|
|
return keys, nil
|
|
}
|
|
|
|
func (s *S3Cache) Exists(key string) bool {
|
|
// Check if the object exists in the bucket
|
|
_, err := s.session.HeadObject(&s3.HeadObjectInput{
|
|
Bucket: aws.String(s.bucketName),
|
|
Key: aws.String(key),
|
|
})
|
|
return err == nil
|
|
|
|
}
|
|
|
|
func (s *S3Cache) IsCacheDisabled() bool {
|
|
return s.noCache
|
|
}
|
|
|
|
func NewS3Cache(nocache bool) ICache {
|
|
|
|
var cache CacheProvider
|
|
err := viper.UnmarshalKey("cache", &cache)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if cache.BucketName == "" {
|
|
log.Fatal("Bucket name not configured")
|
|
}
|
|
if cache.Region == "" {
|
|
log.Fatal("Region not configured")
|
|
}
|
|
|
|
sess := session.Must(session.NewSessionWithOptions(session.Options{
|
|
SharedConfigState: session.SharedConfigEnable,
|
|
Config: aws.Config{
|
|
Region: aws.String(cache.Region),
|
|
},
|
|
}))
|
|
|
|
s := s3.New(sess)
|
|
|
|
// Check if the bucket exists, if not create it
|
|
_, err = s.HeadBucket(&s3.HeadBucketInput{
|
|
Bucket: aws.String(cache.BucketName),
|
|
})
|
|
if err != nil {
|
|
_, _ = s.CreateBucket(&s3.CreateBucketInput{
|
|
Bucket: aws.String(cache.BucketName),
|
|
})
|
|
}
|
|
|
|
return &S3Cache{
|
|
noCache: nocache,
|
|
session: s,
|
|
bucketName: cache.BucketName,
|
|
}
|
|
}
|