diff --git a/services/service/client/client.go b/services/service/client/client.go index 1dc87358..4cdbec43 100644 --- a/services/service/client/client.go +++ b/services/service/client/client.go @@ -218,19 +218,21 @@ func (s *statusCmd) Execute(ctx context.Context, f *flag.FlagSet, args ...interf return subcommands.ExitUsageError } - req := &pb.StatusRequest{ - SystemType: system, - ServiceName: serviceName, - } - c := pb.NewServiceClientProxy(state.Conn) + err = StopRemoteServiceMany(ctx, state.Conn, system, serviceName) - respChan, err := c.StatusOneMany(ctx, req) + //req := &pb.StatusRequest{ + // SystemType: system, + // ServiceName: serviceName, + //} + //c := pb.NewServiceClientProxy(state.Conn) + // + //respChan, err := c.StatusOneMany(ctx, req) if err != nil { - // Emit this to every error file as it's not specific to a given target. - for _, e := range state.Err { - fmt.Fprintf(e, "All targets - error executing 'status' for service %s: %v\n", serviceName, err) - } + //// Emit this to every error file as it's not specific to a given target. + //for _, e := range state.Err { + // fmt.Fprintf(e, "All targets - error executing 'status' for service %s: %v\n", serviceName, err) + //} return subcommands.ExitFailure } @@ -241,24 +243,24 @@ func (s *statusCmd) Execute(ctx context.Context, f *flag.FlagSet, args ...interf // return early here. // Note that this is only the last non-nil error, and previous // error values may be lost. - var lastErr error - for resp := range respChan { - out := state.Out[resp.Index] - system, status := resp.Resp.GetSystemType(), resp.Resp.GetServiceStatus().GetStatus() - output := fmt.Sprintf("[%s] %s : %s", systemTypeString(system), serviceName, statusString(status)) - if resp.Error != nil { - lastErr = fmt.Errorf("target %s [%d] error: %w\n", resp.Target, resp.Index, resp.Error) - fmt.Fprint(state.Err[resp.Index], lastErr) - continue - } - if _, err := fmt.Fprintln(out, output); err != nil { - lastErr = fmt.Errorf("target %s [%d] write error: %w\n", resp.Target, resp.Index, err) - fmt.Fprint(state.Err[resp.Index], lastErr) - } - } - if lastErr != nil { - return subcommands.ExitFailure - } + //var lastErr error + //for resp := range respChan { + // out := state.Out[resp.Index] + // system, status := resp.Resp.GetSystemType(), resp.Resp.GetServiceStatus().GetStatus() + // output := fmt.Sprintf("[%s] %s : %s", systemTypeString(system), serviceName, statusString(status)) + // if resp.Error != nil { + // lastErr = fmt.Errorf("target %s [%d] error: %w\n", resp.Target, resp.Index, resp.Error) + // fmt.Fprint(state.Err[resp.Index], lastErr) + // continue + // } + // if _, err := fmt.Fprintln(out, output); err != nil { + // lastErr = fmt.Errorf("target %s [%d] write error: %w\n", resp.Target, resp.Index, err) + // fmt.Fprint(state.Err[resp.Index], lastErr) + // } + //} + //if lastErr != nil { + // return subcommands.ExitFailure + //} return subcommands.ExitSuccess } @@ -293,7 +295,6 @@ func (l *listCmd) Execute(ctx context.Context, f *flag.FlagSet, args ...interfac SystemType: system, } c := pb.NewServiceClientProxy(state.Conn) - respChan, err := c.ListOneMany(ctx, req) if err != nil { // Emit this to every error file as it's not specific to a given target. diff --git a/services/service/client/utils.go b/services/service/client/utils.go index beaf0633..fa3f074d 100644 --- a/services/service/client/utils.go +++ b/services/service/client/utils.go @@ -96,6 +96,58 @@ func StopRemoteService(ctx context.Context, conn *proxy.Conn, system pb.SystemTy return nil } +// StartRemoteServiceManys is a helper function for starting a service on multiple remote targets. +func StartRemoteServiceMany(ctx context.Context, conn *proxy.Conn, system pb.SystemType, service string) error { + c := pb.NewServiceClientProxy(conn) + resp, err := c.ActionOneMany(ctx, &pb.ActionRequest{ + ServiceName: service, + SystemType: system, + Action: pb.Action_ACTION_START, + }) + + if err != nil { + return fmt.Errorf("can't start service %s - %v", service, err) + } + + errMsg := "" + for r := range resp { + if r.Error != nil { + errMsg += fmt.Sprintf("target %s (%d): %v", r.Target, r.Index, r.Error) + } + } + if errMsg != "" { + return fmt.Errorf("StartRemoteServiceMany failed: %s", errMsg) + } + + return nil +} + +// StopRemoteServiceMany is a helper function for stopping a service on multiple remote targets. +func StopRemoteServiceMany(ctx context.Context, conn *proxy.Conn, system pb.SystemType, service string) error { + c := pb.NewServiceClientProxy(conn) + resp, err := c.ActionOneMany(ctx, &pb.ActionRequest{ + ServiceName: service, + SystemType: system, + Action: pb.Action_ACTION_STOP, + }) + + if err != nil { + return fmt.Errorf("can't stop service %s - %v", service, err) + } + + errMsg := "" + for r := range resp { + if r.Error != nil { + errMsg += fmt.Sprintf("target %s (%d): %v", r.Target, r.Index, r.Error) + } + } + if errMsg != "" { + return fmt.Errorf("StopRemoteServiceMany failed: %s", errMsg) + } + + return nil +} + // RestartService was the original exported name for RestartRemoteService and now // exists for backwards compatibility. //