contrato: M2M infra linking (servidores, conx_dbs, ai_configs)
This commit is contained in:
+3
-1
@@ -15,4 +15,6 @@ awstatsicons
|
|||||||
icon/
|
icon/
|
||||||
stats/
|
stats/
|
||||||
pnpm-lock.yaml
|
pnpm-lock.yaml
|
||||||
package-lock.json
|
package-lock.json
|
||||||
|
.task-project
|
||||||
|
*.db
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"project": "soft_usite"
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
|
|
||||||
"github.com/minio/minio-go/v7"
|
|
||||||
"github.com/minio/minio-go/v7/pkg/credentials"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
minioClient, err := minio.New("135.181.2.237:9000", &minio.Options{
|
|
||||||
Creds: credentials.NewStaticV4("admin", "lsE6TAihW98iaXKDWG+6gGLYAFdyp2iC", ""),
|
|
||||||
Secure: false,
|
|
||||||
BucketLookup: minio.BucketLookupPath,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
var count int64
|
|
||||||
opts := minio.ListObjectsOptions{Recursive: true}
|
|
||||||
for obj := range minioClient.ListObjects(ctx, "vcard-usite", opts) {
|
|
||||||
if obj.Err != nil {
|
|
||||||
log.Fatalf("Error: %v", obj.Err)
|
|
||||||
}
|
|
||||||
count++
|
|
||||||
if count%500 == 0 {
|
|
||||||
fmt.Printf("MinIO: %d objetos...\n", count)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Printf("\nTotal en MinIO: %d objetos\n", count)
|
|
||||||
}
|
|
||||||
@@ -1,114 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/aliyun/aliyun-oss-go-sdk/oss"
|
|
||||||
"github.com/minio/minio-go/v7"
|
|
||||||
"github.com/minio/minio-go/v7/pkg/credentials"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
alibabaEndpoint := "oss-eu-central-1.aliyuncs.com"
|
|
||||||
alibabaKey := "LTAI5tCxbGnEBAj9RS5JpLWw"
|
|
||||||
alibabaSecret := "qAS8Rsi3MpRrV043fgxnW6fmUsQ8GN"
|
|
||||||
bucketName := "vcard-usite"
|
|
||||||
|
|
||||||
minioEndpoint := "135.181.2.237:9000"
|
|
||||||
minioKey := "admin"
|
|
||||||
minioSecret := "lsE6TAihW98iaXKDWG+6gGLYAFdyp2iC"
|
|
||||||
|
|
||||||
log.Println("Conectando a Alibaba OSS...")
|
|
||||||
alibabaClient, err := oss.New(alibabaEndpoint, alibabaKey, alibabaSecret)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error conectando a Alibaba: %v", err)
|
|
||||||
}
|
|
||||||
alibabaBucket, err := alibabaClient.Bucket(bucketName)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error obteniendo bucket Alibaba: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Println("Conectando a MinIO S3...")
|
|
||||||
minioClient, err := minio.New(minioEndpoint, &minio.Options{
|
|
||||||
Creds: credentials.NewStaticV4(minioKey, minioSecret, ""),
|
|
||||||
Secure: false,
|
|
||||||
BucketLookup: minio.BucketLookupPath,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error conectando a MinIO: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx := context.Background()
|
|
||||||
|
|
||||||
// Asegurar que el bucket existe en MinIO
|
|
||||||
exists, err := minioClient.BucketExists(ctx, bucketName)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error verificando bucket MinIO: %v", err)
|
|
||||||
}
|
|
||||||
if !exists {
|
|
||||||
err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{Region: "us-east-1"})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error creando bucket MinIO: %v", err)
|
|
||||||
}
|
|
||||||
log.Printf("Bucket '%s' creado en MinIO", bucketName)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Println("Listando objetos de Alibaba OSS...")
|
|
||||||
var totalObjects, skipped int64
|
|
||||||
marker := oss.Marker("vcf/vcf-Guido_Maffet-nxh4.vcf")
|
|
||||||
for {
|
|
||||||
resp, err := alibabaBucket.ListObjects(oss.MaxKeys(1000), marker)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error listando objetos Alibaba: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, obj := range resp.Objects {
|
|
||||||
totalObjects++
|
|
||||||
// Saltar si ya existe en MinIO (mismo tamaño)
|
|
||||||
info, err := minioClient.StatObject(ctx, bucketName, obj.Key, minio.StatObjectOptions{})
|
|
||||||
if err == nil && info.Size == obj.Size {
|
|
||||||
skipped++
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("[%d] Migrando: %s (%s)...\n", totalObjects, obj.Key, formatSize(obj.Size))
|
|
||||||
|
|
||||||
reader, err := alibabaBucket.GetObject(obj.Key)
|
|
||||||
if err != nil {
|
|
||||||
log.Printf(" ERROR leyendo de Alibaba: %v", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = minioClient.PutObject(ctx, bucketName, obj.Key, reader, obj.Size, minio.PutObjectOptions{})
|
|
||||||
reader.Close()
|
|
||||||
if err != nil {
|
|
||||||
log.Printf(" ERROR subiendo a MinIO: %v", err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf(" ✓ OK\n")
|
|
||||||
time.Sleep(10 * time.Millisecond)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !resp.IsTruncated {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
marker = oss.Marker(resp.NextMarker)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Printf("Migración completada. %d objetos totales, %d saltados (ya existen), %d migrados.", totalObjects, skipped, totalObjects-skipped)
|
|
||||||
}
|
|
||||||
|
|
||||||
func formatSize(bytes int64) string {
|
|
||||||
if bytes < 1024 {
|
|
||||||
return fmt.Sprintf("%d B", bytes)
|
|
||||||
} else if bytes < 1024*1024 {
|
|
||||||
return fmt.Sprintf("%.1f KB", float64(bytes)/1024)
|
|
||||||
} else if bytes < 1024*1024*1024 {
|
|
||||||
return fmt.Sprintf("%.1f MB", float64(bytes)/(1024*1024))
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%.1f GB", float64(bytes)/(1024*1024*1024))
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user