import { useState } from "react"; import { listBuckets, startMigration, getProgress } from "../api"; export default function S3S3Migrator() { const [awsAccess, setAwsAccess] = useState(""); const [awsSecret, setAwsSecret] = useState(""); const [awsRegion, setAwsRegion] = useState("us-east-1"); const [srcBucket, setSrcBucket] = useState(""); const [destBucket, setDestBucket] = useState(""); const [destEndpoint, setDestEndpoint] = useState("https://s3.amazonaws.com"); const [destAccess, setDestAccess] = useState(""); const [destSecret, setDestSecret] = useState(""); const [buckets, setBuckets] = useState([]); const [progress, setProgress] = useState({ percent: 0, message: "Waiting to start..." }); const [loading, setLoading] = useState(false); const loadBuckets = async () => { if (!awsAccess || !awsSecret) { alert("Please enter AWS Access Key and Secret Key first"); return; } setLoading(true); try { const data = await listBuckets({ AWS_SRC_ACCESS_KEY: awsAccess, AWS_SRC_SECRET_KEY: awsSecret, AWS_SRC_REGION: awsRegion }); if (data.success) { setBuckets(data.buckets); console.log("Buckets loaded:", data.buckets); } else { alert("Failed to load buckets: " + (data.error || "Unknown error")); setBuckets([]); } } catch (error) { console.error("Error loading buckets:", error); alert("Connection error: " + error.message); setBuckets([]); } finally { setLoading(false); } }; const handleMigration = async () => { const payload = { AWS_SRC_ACCESS_KEY: awsAccess, AWS_SRC_SECRET_KEY: awsSecret, AWS_SRC_REGION: awsRegion, AWS_SRC_BUCKET: srcBucket, CUMIN_DEST_ACCESS_KEY: destAccess, CUMIN_DEST_SECRET_KEY: destSecret, CUMIN_DEST_ENDPOINT: destEndpoint, CUMIN_DEST_BUCKET: destBucket }; try { const data = await startMigration("s3_s3", payload); if (data.success) { pollProgress(); } else { alert("Migration failed: " + (data.error || "Unknown error")); } } catch (error) { console.error("Error starting migration:", error); alert("Connection error: " + error.message); } }; const pollProgress = async () => { try { const data = await getProgress("s3_s3"); setProgress(data); if (data.status === "error") { alert("Migration error: " + (data.message || "Unknown error")); } else if (data.percent < 100 && data.status !== "completed") { setTimeout(pollProgress, 2000); } } catch (error) { console.error("Error polling progress:", error); setTimeout(pollProgress, 2000); } }; return (
Migrate files between S3 buckets.
{JSON.stringify(progress, null, 2)}