add script for clean s3
This commit is contained in:
parent
3216f0d7a2
commit
bd104f75f1
120
script/main.go
Normal file
120
script/main.go
Normal file
@ -0,0 +1,120 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/minio/minio-go/v7"
|
||||
"github.com/minio/minio-go/v7/pkg/credentials"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
"go.mongodb.org/mongo-driver/mongo/options"
|
||||
"penahub.gitlab.yandexcloud.net/backend/verification/internal/models"
|
||||
)
|
||||
|
||||
const (
|
||||
bucketName = "videodata"
|
||||
minioEndpoint = "localhost:9000"
|
||||
accessKeyID = "admin"
|
||||
secretAccessKey = "admin123"
|
||||
mongoURI = "mongodb://test:test@localhost:27024/?authSource=admin"
|
||||
mongoDBName = "admin"
|
||||
collectionName = "verification"
|
||||
)
|
||||
|
||||
func main() {
|
||||
ctx := context.Background()
|
||||
clientOptions := options.Client().ApplyURI(mongoURI)
|
||||
client, err := mongo.Connect(ctx, clientOptions)
|
||||
if err != nil {
|
||||
fmt.Println("Ошибка подключения к монго:", err)
|
||||
return
|
||||
}
|
||||
defer client.Disconnect(ctx)
|
||||
|
||||
collection := client.Database(mongoDBName).Collection(collectionName)
|
||||
|
||||
minioClient, err := minio.New(minioEndpoint, &minio.Options{
|
||||
Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
|
||||
Secure: false,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("Ошибка подключения к минио:", err)
|
||||
return
|
||||
}
|
||||
|
||||
allFiles, err := getAllFilesInBucket(ctx, minioClient)
|
||||
if err != nil {
|
||||
fmt.Println("Ошибка при получении списка файлов в бакете:", err)
|
||||
return
|
||||
}
|
||||
|
||||
verifications, err := getVerificationRecords(ctx, collection)
|
||||
if err != nil {
|
||||
fmt.Println("Ошибка при получении записей верификаций из базы данных:", err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, file := range allFiles {
|
||||
if !checkContains(verifications, file.Key) {
|
||||
fmt.Println("Удаление файла:", file.Key)
|
||||
err := deleteFileFromBucket(ctx, minioClient, file.Key)
|
||||
if err != nil {
|
||||
fmt.Println("Ошибка при удалении файла:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// получение всех файлов из минио по бакету
|
||||
func getAllFilesInBucket(ctx context.Context, client *minio.Client) ([]minio.ObjectInfo, error) {
|
||||
var files []minio.ObjectInfo
|
||||
objectCh := client.ListObjects(ctx, bucketName, minio.ListObjectsOptions{})
|
||||
for object := range objectCh {
|
||||
if object.Err != nil {
|
||||
return nil, object.Err
|
||||
}
|
||||
files = append(files, object)
|
||||
}
|
||||
return files, nil
|
||||
}
|
||||
|
||||
// удаление файла из минио
|
||||
func deleteFileFromBucket(ctx context.Context, client *minio.Client, fileName string) error {
|
||||
err := client.RemoveObject(ctx, bucketName, fileName, minio.RemoveObjectOptions{})
|
||||
return err
|
||||
}
|
||||
|
||||
// получение списка верефикаций из монго
|
||||
func getVerificationRecords(ctx context.Context, collection *mongo.Collection) ([]models.Verification, error) {
|
||||
var records []models.Verification
|
||||
cursor, err := collection.Find(ctx, bson.M{})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer cursor.Close(ctx)
|
||||
for cursor.Next(ctx) {
|
||||
var record models.Verification
|
||||
if err := cursor.Decode(&record); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
records = append(records, record)
|
||||
}
|
||||
if err := cursor.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return records, nil
|
||||
}
|
||||
|
||||
// проверка на существования файла минио в монге по урлу
|
||||
func checkContains(verifications []models.Verification, fileKey string) bool {
|
||||
fileURL := fmt.Sprintf("%s/%s/%s", minioEndpoint, bucketName, fileKey)
|
||||
for _, verification := range verifications {
|
||||
for _, file := range verification.Files {
|
||||
fmt.Println(file.Url)
|
||||
if file.Url == fileURL {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
Loading…
Reference in New Issue
Block a user