1
1
package cmd
2
2
3
3
import (
4
- "context"
5
- "log"
6
4
"net/url"
7
5
"os"
8
6
"os/signal"
9
7
"syscall"
10
8
9
+ // We use slog here since agent runs in the background and we can benefit
10
+ // from structured logging.
11
+ "cdr.dev/slog"
12
+ "cdr.dev/slog/sloggers/sloghuman"
11
13
"github.com/spf13/cobra"
12
14
"golang.org/x/xerrors"
13
15
@@ -46,7 +48,10 @@ coder agent start
46
48
coder agent start --coder-url https://my-coder.com --token xxxx-xxxx
47
49
` ,
48
50
RunE : func (cmd * cobra.Command , args []string ) error {
49
- ctx := cmd .Context ()
51
+ var (
52
+ ctx = cmd .Context ()
53
+ log = slog .Make (sloghuman .Sink (os .Stderr )).Leveled (slog .LevelDebug )
54
+ )
50
55
if coderURL == "" {
51
56
var ok bool
52
57
coderURL , ok = os .LookupEnv ("CODER_URL" )
@@ -73,20 +78,23 @@ coder agent start --coder-url https://my-coder.com --token xxxx-xxxx
73
78
}
74
79
}
75
80
76
- listener , err := wsnet .Listen (context .Background (), wsnet .ListenEndpoint (u , token ), token )
81
+ log .Info (ctx , "starting wsnet listener" , slog .F ("coder_access_url" , u .String ()))
82
+ listener , err := wsnet .Listen (ctx , log , wsnet .ListenEndpoint (u , token ), token )
77
83
if err != nil {
78
84
return xerrors .Errorf ("listen: %w" , err )
79
85
}
86
+ defer func () {
87
+ err := listener .Close ()
88
+ if err != nil {
89
+ log .Error (ctx , "close listener" , slog .Error (err ))
90
+ }
91
+ }()
80
92
81
93
// Block until user sends SIGINT or SIGTERM
82
94
sigs := make (chan os.Signal , 1 )
83
95
signal .Notify (sigs , syscall .SIGINT , syscall .SIGTERM )
84
96
<- sigs
85
97
86
- if err = listener .Close (); err != nil {
87
- log .Panic (err )
88
- }
89
-
90
98
return nil
91
99
},
92
100
}
0 commit comments