@@ -15,6 +15,7 @@ import (
15
15
"tailscale.com/tsnet"
16
16
17
17
cslog "cdr.dev/slog"
18
+ csloghuman "cdr.dev/slog/sloggers/sloghuman"
18
19
"github.com/coder/coder/v2/agent/agentssh"
19
20
"github.com/coder/serpent"
20
21
"github.com/coder/wush/cliui"
@@ -23,14 +24,21 @@ import (
23
24
)
24
25
25
26
func receiveCmd () * serpent.Command {
26
- var overlayType string
27
+ var (
28
+ overlayType string
29
+ verbose bool
30
+ )
27
31
return & serpent.Command {
28
32
Use : "receive" ,
29
33
Aliases : []string {"host" },
30
34
Long : "Runs the wush server. Allows other wush CLIs to connect to this computer." ,
31
35
Handler : func (inv * serpent.Invocation ) error {
32
36
ctx := inv .Context ()
33
- logger := slog .New (slog .NewTextHandler (io .Discard , nil ))
37
+ var logSink io.Writer = io .Discard
38
+ if verbose {
39
+ logSink = inv .Stderr
40
+ }
41
+ logger := slog .New (slog .NewTextHandler (logSink , nil ))
34
42
dm , err := tsserver .DERPMapTailscale (ctx )
35
43
if err != nil {
36
44
return err
@@ -77,7 +85,12 @@ func receiveCmd() *serpent.Command {
77
85
78
86
fmt .Println (cliui .Timestamp (time .Now ()), "Wireguard is ready" )
79
87
80
- sshSrv , err := agentssh .NewServer (ctx , cslog .Make ( /* sloghuman.Sink(os.Stderr)*/ ), prometheus .NewRegistry (), fs , nil )
88
+ sshSrv , err := agentssh .NewServer (ctx ,
89
+ cslog .Make (csloghuman .Sink (logSink )),
90
+ prometheus .NewRegistry (),
91
+ fs ,
92
+ nil ,
93
+ )
81
94
if err != nil {
82
95
return err
83
96
}
@@ -87,14 +100,33 @@ func receiveCmd() *serpent.Command {
87
100
return err
88
101
}
89
102
90
- return sshSrv .Serve (ls )
103
+ go func () {
104
+ fmt .Println (cliui .Timestamp (time .Now ()), "SSH server listening" )
105
+ err := sshSrv .Serve (ls )
106
+ if err != nil {
107
+ logger .Info ("ssh server exited" , "err" , err )
108
+ }
109
+ }()
110
+
111
+ ctx , ctxCancel := inv .SignalNotifyContext (ctx , os .Interrupt )
112
+ defer ctxCancel ()
113
+
114
+ <- ctx .Done ()
115
+ return sshSrv .Close ()
91
116
},
92
117
Options : []serpent.Option {
93
118
{
94
119
Flag : "overlay-type" ,
95
120
Default : "derp" ,
96
121
Value : serpent .EnumOf (& overlayType , "derp" , "stun" ),
97
122
},
123
+ {
124
+ Flag : "verbose" ,
125
+ FlagShorthand : "v" ,
126
+ Description : "Enable verbose logging." ,
127
+ Default : "false" ,
128
+ Value : serpent .BoolOf (& verbose ),
129
+ },
98
130
},
99
131
}
100
132
}
0 commit comments