@@ -4,7 +4,7 @@ import * as path from "path";
4
4
import { mkdir , WriteStream } from "fs" ;
5
5
import { promisify } from "util" ;
6
6
import { TextDecoder } from "text-encoding" ;
7
- import { logger , field } from "@coder/logger" ;
7
+ import { Logger , logger , field } from "@coder/logger" ;
8
8
import { ClientMessage , WorkingInitMessage , ServerMessage , NewSessionMessage , WriteToSessionMessage } from "../proto" ;
9
9
import { evaluate } from "./evaluate" ;
10
10
import { ReadWriteConnection } from "../common/connection" ;
@@ -95,8 +95,12 @@ export class Server {
95
95
if ( message . hasNewEval ( ) ) {
96
96
evaluate ( this . connection , message . getNewEval ( ) ! ) ;
97
97
} else if ( message . hasNewSession ( ) ) {
98
- const session = handleNewSession ( this . connection , message . getNewSession ( ) ! , this . options , ( ) => {
99
- this . sessions . delete ( message . getNewSession ( ) ! . getId ( ) ) ;
98
+ const sessionMessage = message . getNewSession ( ) ! ;
99
+ const childLogger = this . getChildLogger ( sessionMessage . getCommand ( ) ) ;
100
+ childLogger . debug ( sessionMessage . getIsFork ( ) ? "Forking" : "Spawning" , field ( "args" , sessionMessage . getArgsList ( ) ) ) ;
101
+ const session = handleNewSession ( this . connection , sessionMessage , this . options , ( ) => {
102
+ childLogger . debug ( "Exited" ) ;
103
+ this . sessions . delete ( sessionMessage . getId ( ) ) ;
100
104
} ) ;
101
105
this . sessions . set ( message . getNewSession ( ) ! . getId ( ) , session ) ;
102
106
} else if ( message . hasCloseSessionInput ( ) ) {
@@ -134,10 +138,15 @@ export class Server {
134
138
s . write ( data ) ;
135
139
}
136
140
} else if ( message . hasNewConnection ( ) ) {
137
- const socket = handleNewConnection ( this . connection , message . getNewConnection ( ) ! , ( ) => {
138
- this . connections . delete ( message . getNewConnection ( ) ! . getId ( ) ) ;
141
+ const connectionMessage = message . getNewConnection ( ) ! ;
142
+ const name = connectionMessage . getPath ( ) || `${ connectionMessage . getPort ( ) } ` ;
143
+ const childLogger = this . getChildLogger ( name , ">" ) ;
144
+ childLogger . debug ( "Connecting" , field ( "path" , connectionMessage . getPath ( ) ) , field ( "port" , connectionMessage . getPort ( ) ) ) ;
145
+ const socket = handleNewConnection ( this . connection , connectionMessage , ( ) => {
146
+ childLogger . debug ( "Disconnected" ) ;
147
+ this . connections . delete ( connectionMessage . getId ( ) ) ;
139
148
} ) ;
140
- this . connections . set ( message . getNewConnection ( ) ! . getId ( ) , socket ) ;
149
+ this . connections . set ( connectionMessage . getId ( ) , socket ) ;
141
150
} else if ( message . hasConnectionOutput ( ) ) {
142
151
const c = this . getConnection ( message . getConnectionOutput ( ) ! . getId ( ) ) ;
143
152
if ( ! c ) {
@@ -151,14 +160,21 @@ export class Server {
151
160
}
152
161
c . end ( ) ;
153
162
} else if ( message . hasNewServer ( ) ) {
154
- const s = handleNewServer ( this . connection , message . getNewServer ( ) ! , ( socket ) => {
163
+ const serverMessage = message . getNewServer ( ) ! ;
164
+ const name = serverMessage . getPath ( ) || `${ serverMessage . getPort ( ) } ` ;
165
+ const childLogger = this . getChildLogger ( name ) ;
166
+ childLogger . debug ( "Listening" , field ( "path" , serverMessage . getPath ( ) ) , field ( "port" , serverMessage . getPort ( ) ) ) ;
167
+ const s = handleNewServer ( this . connection , serverMessage , ( socket ) => {
155
168
const id = this . connectionId -- ;
156
169
this . connections . set ( id , socket ) ;
170
+ childLogger . debug ( "Got connection" , field ( "id" , id ) ) ;
171
+
157
172
return id ;
158
173
} , ( ) => {
159
- this . connections . delete ( message . getNewServer ( ) ! . getId ( ) ) ;
174
+ childLogger . debug ( "Stopped" ) ;
175
+ this . connections . delete ( serverMessage . getId ( ) ) ;
160
176
} ) ;
161
- this . servers . set ( message . getNewServer ( ) ! . getId ( ) , s ) ;
177
+ this . servers . set ( serverMessage . getId ( ) , s ) ;
162
178
} else if ( message . hasServerClose ( ) ) {
163
179
const s = this . getServer ( message . getServerClose ( ) ! . getId ( ) ) ;
164
180
if ( ! s ) {
@@ -180,4 +196,26 @@ export class Server {
180
196
return this . sessions . get ( id ) ;
181
197
}
182
198
199
+ private getChildLogger ( command : string , prefix : string = "" ) : Logger {
200
+ // TODO: Temporary, for debugging. Should probably ask for a name?
201
+ let name : string ;
202
+ if ( command . includes ( "vscode-ipc" ) ) {
203
+ name = "exthost" ;
204
+ } else if ( command . includes ( "vscode-online" ) ) {
205
+ name = "shared" ;
206
+ } else {
207
+ const basename = command . split ( "/" ) . pop ( ) ! ;
208
+ let i = 0 ;
209
+ for ( ; i < basename . length ; i ++ ) {
210
+ const character = basename . charAt ( i ) ;
211
+ if ( character === character . toUpperCase ( ) ) {
212
+ break ;
213
+ }
214
+ }
215
+ name = basename . substring ( 0 , i ) ;
216
+ }
217
+
218
+ return logger . named ( prefix + name ) ;
219
+ }
220
+
183
221
}
0 commit comments