Skip to content

Commit

Permalink
chore(storage): Changing hwo the gcs client is generated (#28)
Browse files Browse the repository at this point in the history
* Changing hwo the gcs client is generated

* correcting purge

* Correcting build
  • Loading branch information
Jacobbrewer1 authored Mar 29, 2024
1 parent d1ddd62 commit e9f5379
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 21 deletions.
18 changes: 10 additions & 8 deletions cmd/dumper/cmd_dump.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,33 +93,35 @@ func (c *dumpCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}
timestamp := time.Now().UTC().Format(time.RFC3339)
path := fmt.Sprintf("dumps/%s/%s.sql", schemaName, timestamp)

if err := c.uploadDump(ctx, fc, path); err != nil {
storageClient, err := dataaccess.ConnectGCS(ctx, c.gcs)
if err != nil {
slog.Error("error initializing GCS", slog.String(logging.KeyError, err.Error()))
return subcommands.ExitFailure
}

if err := c.uploadDump(ctx, storageClient, fc, path); err != nil {
slog.Error("error uploading dump", slog.String(logging.KeyError, err.Error()))
return subcommands.ExitFailure
}

slog.Info("Dump file created", slog.String("path", path))

// Purge the data
if err := purgeData(ctx, c.purge); err != nil {
if err := purgeData(ctx, storageClient, c.purge); err != nil {
slog.Error("error purging data", slog.String(logging.KeyError, err.Error()))
return subcommands.ExitFailure
}

return subcommands.ExitSuccess
}

func (c *dumpCmd) uploadDump(ctx context.Context, fileContents string, path string) error {
func (c *dumpCmd) uploadDump(ctx context.Context, sc dataaccess.Storage, fileContents string, path string) error {
if c.gcs == "" {
return nil
}

if err := dataaccess.ConnectGCS(ctx, c.gcs); err != nil {
return fmt.Errorf("error connecting to GCS: %w", err)
}

// Upload the dump
err := dataaccess.GCS.SaveFile(ctx, path, []byte(fileContents))
err := sc.SaveFile(ctx, path, []byte(fileContents))
if err != nil {
return fmt.Errorf("error uploading dump: %w", err)
}
Expand Down
8 changes: 4 additions & 4 deletions cmd/dumper/cmd_purge.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,14 @@ func (p *purgeCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{
}

// Initialize the GCS client
err := dataaccess.ConnectGCS(ctx, p.gcs)
client, err := dataaccess.ConnectGCS(ctx, p.gcs)
if err != nil {
slog.Error("error initializing GCS", slog.String("error", err.Error()))
return subcommands.ExitFailure
}

// Purge the data
err = purgeData(ctx, p.days)
err = purgeData(ctx, client, p.days)
if err != nil {
slog.Error("error purging data", slog.String("error", err.Error()))
return subcommands.ExitFailure
Expand All @@ -67,7 +67,7 @@ func (p *purgeCmd) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{
return subcommands.ExitSuccess
}

func purgeData(ctx context.Context, days int) error {
func purgeData(ctx context.Context, r dataaccess.Storage, days int) error {
if days == 0 {
slog.Debug("Days to purge is 0, data will not be purged")
return nil
Expand Down Expand Up @@ -137,7 +137,7 @@ func purgeData(ctx context.Context, days int) error {
}

// Purge the data
num, err := dataaccess.GCS.Purge(ctx, from)
num, err := r.Purge(ctx, from)
if err != nil {
return fmt.Errorf("error purging data from GCS: %w", err)
}
Expand Down
16 changes: 7 additions & 9 deletions pkg/dataaccess/gcs.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ const (
EnvGCSCredentials = "GCS_CREDENTIALS"
)

var GCS Storage

type Storage interface {
// SaveFile uploads a file to the storage bucket. This will replace any existing file with the same name.
SaveFile(ctx context.Context, filePath string, file []byte) error
Expand Down Expand Up @@ -185,30 +183,30 @@ func (s *storageImpl) Purge(ctx context.Context, from time.Time) (int, error) {
return count, nil
}

func ConnectGCS(ctx context.Context, gcsBucket string) error {
func ConnectGCS(ctx context.Context, gcsBucket string) (Storage, error) {
// Get the service account credentials from the environment variable.
gcsCredentials := os.Getenv(EnvGCSCredentials)
if gcsCredentials == "" {
return errors.New("no GCS credentials provided")
return nil, errors.New("no GCS credentials provided")
}

client, err := storage.NewClient(ctx, option.WithCredentialsJSON([]byte(gcsCredentials)))
if err != nil {
return fmt.Errorf("error connecting to GCS: %w", err)
return nil, fmt.Errorf("error connecting to GCS: %w", err)
}
cs := client

// Get the bucket name from the environment variable and validate that it exists.
if gcsBucket == "" {
return errors.New("no GCS bucket provided")
return nil, errors.New("no GCS bucket provided")
}

_, err = cs.Bucket(gcsBucket).Attrs(ctx)
if err != nil {
return fmt.Errorf("error validating GCS bucket: %w", err)
return nil, fmt.Errorf("error validating GCS bucket: %w", err)
}

GCS = newStorage(cs, gcsBucket)
sc := newStorage(cs, gcsBucket)
slog.Debug("Connected to GCS")
return nil
return sc, nil
}

0 comments on commit e9f5379

Please sign in to comment.