initial commit

This commit is contained in:
Othman Hendy Suseno
2025-09-09 23:22:13 +07:00
parent 509451f6e7
commit 04f97885e9
12 changed files with 1482 additions and 1 deletions

74
cmd/status.go Normal file
View File

@@ -0,0 +1,74 @@
package cmd
import (
"fmt"
"github.com/cloudmigration/drive-migrator/internal/tracker"
"github.com/spf13/cobra"
)
func init() {
statusCmd := &cobra.Command{
Use: "status [job-id]",
Short: "Show migration status",
Long: "Show status of migration jobs. If no job-id provided, shows all recent jobs.",
RunE: runStatus,
}
listCmd := &cobra.Command{
Use: "list",
Short: "List all migration jobs",
RunE: runList,
}
rootCmd.AddCommand(statusCmd)
rootCmd.AddCommand(listCmd)
}
func runStatus(cmd *cobra.Command, args []string) error {
trackFile := "migration.db" // Default, could be made configurable
t, err := tracker.NewTracker(trackFile)
if err != nil {
return fmt.Errorf("failed to initialize tracker: %w", err)
}
defer t.Close()
if len(args) > 0 {
jobID := args[0]
job, err := t.GetJob(jobID)
if err != nil {
return fmt.Errorf("job not found: %w", err)
}
fmt.Printf("Job ID: %s\n", job.ID)
fmt.Printf("Source: %s\n", job.SourceName)
fmt.Printf("Destination: %s\n", job.DestName)
fmt.Printf("Status: %s\n", job.Status)
fmt.Printf("Start Time: %s\n", job.StartTime.Format("2006-01-02 15:04:05"))
if !job.EndTime.IsZero() {
fmt.Printf("End Time: %s\n", job.EndTime.Format("2006-01-02 15:04:05"))
fmt.Printf("Duration: %s\n", job.EndTime.Sub(job.StartTime))
}
if job.ErrorMessage != "" {
fmt.Printf("Error: %s\n", job.ErrorMessage)
}
completed := t.GetCompletedFiles(jobID)
fmt.Printf("Completed Files: %d\n", completed)
if job.TotalFiles > 0 {
percentage := float64(completed) / float64(job.TotalFiles) * 100
fmt.Printf("Progress: %.2f%%\n", percentage)
}
} else {
fmt.Println("Please provide a job ID. Use 'list' command to see all jobs.")
}
return nil
}
func runList(cmd *cobra.Command, args []string) error {
fmt.Println("Job listing feature will be implemented soon.")
fmt.Println("For now, check the migration.db file or use status with specific job ID.")
return nil
}