@@ -25,7 +25,6 @@ import {
25
25
createSimpleFileLogger ,
26
26
createViewport ,
27
27
del ,
28
- destroySession ,
29
28
edit ,
30
29
EditorClient ,
31
30
endSessionTransaction ,
@@ -38,11 +37,9 @@ import {
38
37
getCounts ,
39
38
getLanguage ,
40
39
getLogger ,
41
- getServerHeartbeat ,
42
40
getServerInfo ,
43
41
getViewportData ,
44
42
IOFlags ,
45
- IServerInfo ,
46
43
modifyViewport ,
47
44
numAscii ,
48
45
profileSession ,
@@ -77,17 +74,14 @@ import {
77
74
MessageLevel ,
78
75
} from '../svelte/src/utilities/message'
79
76
import * as editor_config from './config'
80
- import {
81
- HeartbeatInfo ,
82
- IHeartbeatInfo ,
83
- } from './include/server/heartbeat/HeartBeatInfo'
84
- import {
85
- configureOmegaEditPort ,
86
- ServerInfo ,
87
- ServerStopPredicate ,
88
- } from './include/server/ServerInfo'
77
+ import { configureOmegaEditPort , ServerInfo } from './include/server/ServerInfo'
89
78
import { isDFDLDebugSessionActive } from './include/utils'
90
79
import { SvelteWebviewInitializer } from './svelteWebviewInitializer'
80
+ import {
81
+ addActiveSession ,
82
+ removeActiveSession ,
83
+ } from './include/server/Sessions'
84
+ import { getCurrentHeartbeatInfo } from './include/server/heartbeat'
91
85
92
86
// *****************************************************************************
93
87
// global constants
@@ -108,13 +102,9 @@ const MAX_LOG_FILES: number = 5 // Maximum number of log files to keep TODO: mak
108
102
// *****************************************************************************
109
103
// file-scoped variables
110
104
// *****************************************************************************
111
-
112
- let activeSessions : string [ ] = [ ]
105
+ let serverInfo : ServerInfo = new ServerInfo ( )
113
106
let checkpointPath : string = ''
114
107
let client : EditorClient
115
- let getHeartbeatIntervalId : NodeJS . Timeout | number | undefined = undefined
116
- let heartbeatInfo : IHeartbeatInfo = new HeartbeatInfo ( )
117
- let serverInfo : IServerInfo = new ServerInfo ( )
118
108
let omegaEditPort : number = 0
119
109
120
110
// *****************************************************************************
@@ -162,6 +152,7 @@ export class DataEditorClient implements vscode.Disposable {
162
152
} )
163
153
this . panel . webview . onDidReceiveMessage ( this . messageReceiver , this )
164
154
this . panel . onDidDispose ( async ( ) => {
155
+ await removeActiveSession ( this . omegaSessionId )
165
156
await this . dispose ( )
166
157
} )
167
158
this . disposables . push (
@@ -187,20 +178,12 @@ export class DataEditorClient implements vscode.Disposable {
187
178
addDisposable ( dispoable : vscode . Disposable ) {
188
179
this . disposables . push ( dispoable )
189
180
}
190
- dispose ( ) : void {
181
+ async dispose ( ) : Promise < void > {
191
182
if ( this . sendHeartbeatIntervalId ) {
192
183
clearInterval ( this . sendHeartbeatIntervalId )
193
184
this . sendHeartbeatIntervalId = undefined
194
185
}
195
186
196
- // destroy the session and remove it from the list of active sessions
197
- destroySession ( this . omegaSessionId ) . then ( ( id ) => {
198
- removeActiveSession ( id )
199
- serverStopIf ( ( ) => {
200
- return activeSessions . length == 0
201
- } )
202
- } )
203
-
204
187
for ( let i = 0 ; i < this . disposables . length ; i ++ )
205
188
this . disposables [ i ] . dispose ( )
206
189
}
@@ -342,6 +325,8 @@ export class DataEditorClient implements vscode.Disposable {
342
325
}
343
326
344
327
private async sendHeartbeat ( ) {
328
+ const heartbeatInfo = getCurrentHeartbeatInfo ( )
329
+
345
330
await this . panel . webview . postMessage ( {
346
331
command : MessageCommand . heartbeat ,
347
332
data : {
@@ -353,13 +338,13 @@ export class DataEditorClient implements vscode.Disposable {
353
338
sessionCount : heartbeatInfo . sessionCount ,
354
339
serverInfo : {
355
340
omegaEditPort : this . configVars . port ,
356
- serverVersion : heartbeatInfo . serverInfo . serverVersion ,
357
- serverHostname : heartbeatInfo . serverInfo . serverHostname ,
358
- serverProcessId : heartbeatInfo . serverInfo . serverProcessId ,
359
- jvmVersion : heartbeatInfo . serverInfo . jvmVersion ,
360
- jvmVendor : heartbeatInfo . serverInfo . jvmVendor ,
361
- jvmPath : heartbeatInfo . serverInfo . jvmPath ,
362
- availableProcessors : heartbeatInfo . serverInfo . availableProcessors ,
341
+ serverVersion : serverInfo . serverVersion ,
342
+ serverHostname : serverInfo . serverHostname ,
343
+ serverProcessId : serverInfo . serverProcessId ,
344
+ jvmVersion : serverInfo . jvmVersion ,
345
+ jvmVendor : serverInfo . jvmVendor ,
346
+ jvmPath : serverInfo . jvmPath ,
347
+ availableProcessors : serverInfo . availableProcessors ,
363
348
} ,
364
349
} ,
365
350
} )
@@ -848,12 +833,6 @@ async function createDataEditorWebviewPanel(
848
833
await checkServerListening ( omegaEditPort , OMEGA_EDIT_HOST ) ,
849
834
'server not listening'
850
835
)
851
- // initialize the first server heartbeat
852
- await getHeartbeat ( )
853
- assert (
854
- heartbeatInfo . serverInfo . serverVersion . length > 0 ,
855
- 'heartbeat did not receive a server version'
856
- )
857
836
}
858
837
fileToEdit = fileToEdit . replace (
859
838
editor_config . WorkspaceKeyword ,
@@ -1132,9 +1111,7 @@ function removeDirectory(dirPath: string): void {
1132
1111
fs . rmdirSync ( dirPath )
1133
1112
}
1134
1113
}
1135
- async function serverStopIf ( predicate : ServerStopPredicate ) {
1136
- if ( predicate ( ) ) await serverStop ( )
1137
- }
1114
+
1138
1115
async function serverStop ( ) {
1139
1116
const serverPidFile = getPidFile ( omegaEditPort )
1140
1117
if ( fs . existsSync ( serverPidFile ) ) {
@@ -1188,57 +1165,6 @@ function generateLogbackConfigFile(
1188
1165
return logbackConfigFile // Return the path to the logback config file
1189
1166
}
1190
1167
1191
- function addActiveSession ( sessionId : string ) : void {
1192
- if ( ! activeSessions . includes ( sessionId ) ) {
1193
- activeSessions . push ( sessionId )
1194
- // scale the heartbeat interval based on the number of active sessions to reduce load on the server
1195
- getHeartbeat ( ) . then ( ( ) => {
1196
- if ( getHeartbeatIntervalId ) {
1197
- clearInterval ( getHeartbeatIntervalId )
1198
- }
1199
- getHeartbeatIntervalId = setInterval ( async ( ) => {
1200
- await getHeartbeat ( )
1201
- } , HEARTBEAT_INTERVAL_MS * activeSessions . length )
1202
- } )
1203
- }
1204
- }
1205
-
1206
- function removeActiveSession ( sessionId : string ) : void {
1207
- const index = activeSessions . indexOf ( sessionId )
1208
- if ( index >= 0 ) {
1209
- activeSessions . splice ( index , 1 )
1210
- clearInterval ( getHeartbeatIntervalId )
1211
- getHeartbeatIntervalId = undefined
1212
- if ( activeSessions . length > 0 ) {
1213
- // scale the heartbeat interval based on the number of active sessions
1214
- getHeartbeat ( ) . then ( ( ) => {
1215
- getHeartbeatIntervalId = setInterval ( async ( ) => {
1216
- await getHeartbeat ( )
1217
- } , HEARTBEAT_INTERVAL_MS * activeSessions . length )
1218
- } )
1219
- }
1220
- }
1221
- }
1222
-
1223
- async function getHeartbeat ( ) {
1224
- assert ( omegaEditPort > 0 , `illegal Ωedit port ${ omegaEditPort } ` )
1225
- const heartbeat = await getServerHeartbeat (
1226
- activeSessions ,
1227
- HEARTBEAT_INTERVAL_MS
1228
- )
1229
- heartbeatInfo . omegaEditPort = omegaEditPort
1230
- heartbeatInfo . latency = heartbeat . latency
1231
- heartbeatInfo . serverCommittedMemory = heartbeat . serverCommittedMemory
1232
- heartbeatInfo . serverCpuCount = heartbeat . serverCpuCount
1233
- heartbeatInfo . serverCpuLoadAverage = heartbeat . serverCpuLoadAverage
1234
- heartbeatInfo . serverMaxMemory = heartbeat . serverMaxMemory
1235
- heartbeatInfo . serverTimestamp = heartbeat . serverTimestamp
1236
- heartbeatInfo . serverUptime = heartbeat . serverUptime
1237
- heartbeatInfo . serverUsedMemory = heartbeat . serverUsedMemory
1238
- heartbeatInfo . sessionCount = heartbeat . sessionCount
1239
- heartbeatInfo . serverInfo = serverInfo
1240
- }
1241
-
1242
1168
async function serverStart ( ) {
1243
1169
await serverStop ( )
1244
1170
const serverStartingText = `Ωedit server starting on port ${ omegaEditPort } `
@@ -1337,8 +1263,7 @@ async function serverStart() {
1337
1263
`Server version ${ serverVersion } and client version ${ clientVersion } must match`
1338
1264
)
1339
1265
}
1340
- // get an initial heartbeat
1341
- await getHeartbeat ( )
1266
+
1342
1267
statusBarItem . text = `Ωedit server v${ serverVersion } ready on port ${ omegaEditPort } with PID ${ serverInfo . serverProcessId } `
1343
1268
setTimeout ( ( ) => {
1344
1269
statusBarItem . dispose ( )
0 commit comments