Files
go-sip/cmd/sip-go-agent/upload_retry_command.go
T

54 lines
2.1 KiB
Go

package main
import (
"errors"
"time"
"git.ipao.vip/rogee/go-sip/internal/agent"
"git.ipao.vip/rogee/go-sip/internal/config"
"git.ipao.vip/rogee/go-sip/internal/rpc"
"github.com/spf13/cobra"
)
func newUploadRetryCommand() *cobra.Command {
cfg, configErr := config.FromEnv()
var uploadID, requestID, path string
cmd := &cobra.Command{
Use: "upload-retry", Short: "explicitly request one new grant for an unsuccessful upload; never dial",
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, _ []string) (returnErr error) {
if configErr != nil {
return configErr
}
if uploadID == "" || requestID == "" || path == "" {
return errors.New("--upload-id, --request-id and --file are required")
}
if err := cfg.Validate("agent"); err != nil {
return err
}
if cfg.DispatcherGRPCEndpoint == "" || cfg.DispatcherGRPCServerName == "" {
return errors.New("Dispatcher gRPC endpoint and server name are required")
}
spool, err := agent.NewSpool(cfg.SpoolRoot, time.Now)
if err != nil {
return err
}
client, err := rpc.DialFromFiles(cfg.DispatcherGRPCEndpoint, cfg.MTLSCAFile, cfg.MTLSCertFile, cfg.MTLSKeyFile, cfg.DispatcherGRPCServerName)
if err != nil {
return err
}
defer func() { returnErr = errors.Join(returnErr, client.Close()) }()
record, err := retryUploadRecording(cmd.Context(), cfg, client, agent.UploadClient{Now: time.Now}, spool, uploadID, requestID, path)
if err != nil {
return err
}
return writeResult(map[string]any{"upload_id": record.UploadID, "notification_state": record.State, "bytes": record.Result.SizeBytes, "sha256": record.Result.SHA256})
},
}
cmd.Flags().StringVar(&cfg.SpoolRoot, "spool", cfg.SpoolRoot, "existing Agent spool root")
cmd.Flags().StringVar(&uploadID, "upload-id", "", "existing failed or uncertain upload identity")
cmd.Flags().StringVar(&requestID, "request-id", "", "explicit new canonical UUID v4; never reuse a consumed request")
cmd.Flags().StringVar(&path, "file", "", "retained original recording; content must match its persisted identity")
return cmd
}