repos / pico

pico services mono repo
git clone https://github.com/picosh/pico.git

commit
954b9b8
parent
894e7de
author
Eric Bower
date
2025-01-25 21:58:40 -0500 EST
chore(pgs): cleanup deprecated buckets
3 files changed,  +78, -9
A cmd/scripts/rm-old-buckets/rm-old-buckets.go
+77, -0
 1@@ -0,0 +1,77 @@
 2+package main
 3+
 4+import (
 5+	"context"
 6+	"net/url"
 7+
 8+	"github.com/minio/minio-go/v7"
 9+	"github.com/minio/minio-go/v7/pkg/credentials"
10+	"github.com/picosh/pico/db/postgres"
11+	"github.com/picosh/pico/prose"
12+	"github.com/picosh/pico/shared"
13+)
14+
15+func bail(err error) {
16+	if err != nil {
17+		panic(err)
18+	}
19+}
20+
21+func main() {
22+	cfg := prose.NewConfigSite()
23+	logger := cfg.Logger
24+	picoDb := postgres.NewDB(cfg.DbURL, logger)
25+	endpoint, err := url.Parse(cfg.MinioURL)
26+	bail(err)
27+	ssl := endpoint.Scheme == "https"
28+	mClient, err := minio.New(endpoint.Host, &minio.Options{
29+		Creds:  credentials.NewStaticV4(cfg.MinioUser, cfg.MinioPass, ""),
30+		Secure: ssl,
31+	})
32+	bail(err)
33+
34+	users, err := picoDb.FindUsers()
35+	bail(err)
36+	ctx := context.TODO()
37+
38+	for _, user := range users {
39+		logger.Info("deleting old buckets", "user", user.Name)
40+		bucketName := shared.GetImgsBucketName(user.ID)
41+
42+		exists, err := mClient.BucketExists(ctx, bucketName)
43+		if err != nil {
44+			logger.Error("bucket exists", "err", err)
45+		}
46+
47+		if !exists {
48+			continue
49+		}
50+
51+		objectsCh := make(chan minio.ObjectInfo)
52+		go func() {
53+			defer close(objectsCh)
54+			opts := minio.ListObjectsOptions{Prefix: "", Recursive: true}
55+			for object := range mClient.ListObjects(ctx, bucketName, opts) {
56+				logger.Info("object", "name", object.Key)
57+				if object.Err != nil {
58+					logger.Error("list objects", "err", err)
59+				}
60+				objectsCh <- object
61+			}
62+		}()
63+
64+		errorCh := mClient.RemoveObjects(ctx, bucketName, objectsCh, minio.RemoveObjectsOptions{})
65+
66+		for e := range errorCh {
67+			logger.Error("remove obj", "err", e)
68+		}
69+
70+		logger.Info("removing bucket", "user", user.Name, "bucket", bucketName)
71+		err = mClient.RemoveBucket(ctx, bucketName)
72+		if err != nil {
73+			logger.Error("remove bucket", "err", err)
74+		}
75+
76+		logger.Info("Success!", "user", user.Name)
77+	}
78+}
M docker-compose.prod.yml
+0, -8
 1@@ -30,10 +30,6 @@ services:
 2       - .env.prod
 3     volumes:
 4       - ./data/minio-data:/data
 5-    deploy:
 6-      resources:
 7-        limits:
 8-          cpus: '0.3'
 9   pipemgr:
10     env_file:
11       - .env.prod
12@@ -45,10 +41,6 @@ services:
13     volumes:
14       - ./data/imgs-storage/data:/storage/imgs
15       - ./data/pgs-storage/data:/storage/pgs
16-    deploy:
17-      resources:
18-        limits:
19-          cpus: '0.3'
20   pastes-caddy:
21     image: ghcr.io/picosh/pico/caddy:latest
22     restart: always
M pgs/cli.go
+1, -1
1@@ -214,7 +214,7 @@ func (c *Cmd) stats(cfgMaxSize uint64) error {
2 	storageMax := ff.Data.StorageMax
3 
4 	bucketName := shared.GetAssetBucketName(c.User.ID)
5-	bucket, err := c.Store.UpsertBucket(bucketName)
6+	bucket, err := c.Store.GetBucket(bucketName)
7 	if err != nil {
8 		return err
9 	}