1
0
Fork 0
mirror of https://github.com/Luzifer/mondash.git synced 2024-12-23 12:31:18 +00:00
mondash/storage/s3.go

91 lines
2.1 KiB
Go
Raw Permalink Normal View History

2015-07-06 19:41:21 +00:00
package storage // import "github.com/Luzifer/mondash/storage"
import (
2015-07-06 23:01:14 +00:00
"bytes"
2015-07-06 19:41:21 +00:00
"io/ioutil"
"strings"
"github.com/Luzifer/mondash/config"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/awserr"
"github.com/aws/aws-sdk-go/service/s3"
)
2015-07-06 19:44:13 +00:00
// S3Storage is a storage adapter storing the data into single S3 files
2015-07-06 19:41:21 +00:00
type S3Storage struct {
s3connection *s3.S3
cfg *config.Config
}
2015-07-06 19:44:13 +00:00
// NewS3Storage instanciates a new S3Storage
2015-07-06 19:41:21 +00:00
func NewS3Storage(cfg *config.Config) *S3Storage {
s3connection := s3.New(&aws.Config{})
return &S3Storage{
s3connection: s3connection,
cfg: cfg,
2015-07-06 19:41:21 +00:00
}
}
2015-07-06 19:44:13 +00:00
// Put writes the given data to S3
2015-07-06 19:41:21 +00:00
func (s *S3Storage) Put(dashboardID string, data []byte) error {
_, err := s.s3connection.PutObject(&s3.PutObjectInput{
Bucket: aws.String(s.cfg.S3.Bucket),
ContentType: aws.String("application/json"),
Key: aws.String(dashboardID),
2015-07-06 23:01:14 +00:00
Body: bytes.NewReader(data),
ACL: aws.String("private"),
2015-07-06 19:41:21 +00:00
})
return err
}
2015-07-06 19:44:13 +00:00
// Get loads the data for the given dashboard from S3
2015-07-06 19:41:21 +00:00
func (s *S3Storage) Get(dashboardID string) ([]byte, error) {
res, err := s.s3connection.GetObject(&s3.GetObjectInput{
Bucket: aws.String(s.cfg.S3.Bucket),
Key: aws.String(dashboardID),
})
if err != nil {
return nil, err
}
defer res.Body.Close()
data, err := ioutil.ReadAll(res.Body)
if err != nil {
return nil, err
}
return data, nil
}
2015-07-06 19:44:13 +00:00
// Delete deletes the given dashboard from S3
2015-07-06 19:41:21 +00:00
func (s *S3Storage) Delete(dashboardID string) error {
_, err := s.s3connection.DeleteObject(&s3.DeleteObjectInput{
Bucket: aws.String(s.cfg.S3.Bucket),
Key: aws.String(dashboardID),
})
return err
}
2015-07-06 19:44:13 +00:00
// Exists checks for the existence of the given dashboard
2015-07-06 19:41:21 +00:00
func (s *S3Storage) Exists(dashboardID string) (bool, error) {
_, err := s.s3connection.HeadObject(&s3.HeadObjectInput{
Bucket: aws.String(s.cfg.S3.Bucket),
Key: aws.String(dashboardID),
})
if err != nil {
if awsErr, ok := err.(awserr.Error); ok {
if strings.Contains(awsErr.Error(), "status code: 404") {
return false, nil
}
return false, err
}
2015-07-06 19:44:13 +00:00
return false, err
2015-07-06 19:41:21 +00:00
}
return true, nil
}