Skip to content

Commit aeac305

Browse files
authored
feat: added exit codes for CLI daemon command errors (#2400)
* Added error code for daemon failing to listen to TCP port * Better handling of daemon random port selection
1 parent cc3396f commit aeac305

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

Diff for: internal/cli/daemon/daemon.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -121,33 +121,33 @@ func runDaemonCommand(cmd *cobra.Command, args []string) {
121121
// Invalid port, such as "Foo"
122122
var dnsError *net.DNSError
123123
if errors.As(err, &dnsError) {
124-
feedback.Fatal(tr("Failed to listen on TCP port: %[1]s. %[2]s is unknown name.", port, dnsError.Name), feedback.ErrCoreConfig)
124+
feedback.Fatal(tr("Failed to listen on TCP port: %[1]s. %[2]s is unknown name.", port, dnsError.Name), feedback.ErrBadTCPPortArgument)
125125
}
126126
// Invalid port number, such as -1
127127
var addrError *net.AddrError
128128
if errors.As(err, &addrError) {
129-
feedback.Fatal(tr("Failed to listen on TCP port: %[1]s. %[2]s is an invalid port.", port, addrError.Addr), feedback.ErrCoreConfig)
129+
feedback.Fatal(tr("Failed to listen on TCP port: %[1]s. %[2]s is an invalid port.", port, addrError.Addr), feedback.ErrBadTCPPortArgument)
130130
}
131131
// Port is already in use
132132
var syscallErr *os.SyscallError
133133
if errors.As(err, &syscallErr) && errors.Is(syscallErr.Err, syscall.EADDRINUSE) {
134-
feedback.Fatal(tr("Failed to listen on TCP port: %s. Address already in use.", port), feedback.ErrNetwork)
134+
feedback.Fatal(tr("Failed to listen on TCP port: %s. Address already in use.", port), feedback.ErrFailedToListenToTCPPort)
135135
}
136-
feedback.Fatal(tr("Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v", port, err), feedback.ErrGeneric)
136+
feedback.Fatal(tr("Failed to listen on TCP port: %[1]s. Unexpected error: %[2]v", port, err), feedback.ErrFailedToListenToTCPPort)
137137
}
138138

139-
// We need to parse the port used only if the user let
140-
// us choose it randomly, in all other cases we already
141-
// know which is used.
139+
// We need to retrieve the port used only if the user did not specify it
140+
// and let the OS choose it randomly, in all other cases we already know
141+
// which port is used.
142142
if port == "0" {
143143
address := lis.Addr()
144144
split := strings.Split(address.String(), ":")
145145

146-
if len(split) == 0 {
147-
feedback.Fatal(tr("Invalid TCP address: port is missing"), feedback.ErrBadArgument)
146+
if len(split) <= 1 {
147+
feedback.Fatal(tr("Invalid TCP address: port is missing"), feedback.ErrBadTCPPortArgument)
148148
}
149149

150-
port = split[len(split)-1]
150+
port = split[1]
151151
}
152152

153153
feedback.PrintResult(daemonResult{
@@ -156,7 +156,7 @@ func runDaemonCommand(cmd *cobra.Command, args []string) {
156156
})
157157

158158
if err := s.Serve(lis); err != nil {
159-
logrus.Fatalf("Failed to serve: %v", err)
159+
feedback.Fatal(fmt.Sprintf("Failed to serve: %v", err), feedback.ErrFailedToListenToTCPPort)
160160
}
161161
}
162162

Diff for: internal/cli/feedback/errorcodes.go

+7
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,11 @@ const (
4242

4343
// ErrBadArgument is returned when the arguments are not valid (7)
4444
ErrBadArgument
45+
46+
// ErrFailedToListenToTCPPort is returned if the CLI failed to open a TCP port
47+
// to listen for incoming connections (8)
48+
ErrFailedToListenToTCPPort
49+
50+
// ErrBadTCPPortArgument is returned if the TCP port argument is not valid (9)
51+
ErrBadTCPPortArgument
4552
)

0 commit comments

Comments
 (0)