@@ -135,11 +135,14 @@ export class ExpectationManager {
135135 type : 'websocket' ,
136136 clientConnection : client ,
137137 } )
138- this . workerAgents [ client . clientId ] = { api }
138+ this . workerAgents [ client . clientId ] = { api, connected : true }
139139 client . on ( 'close' , ( ) => {
140+ this . logger . debug ( `ExpectationManager: Connection to Worker "${ client . clientId } " closed` )
141+
142+ this . workerAgents [ client . clientId ] . connected = false
140143 delete this . workerAgents [ client . clientId ]
141144 } )
142-
145+ this . logger . debug ( `ExpectationManager: Connection to Worker " ${ client . clientId } " established` )
143146 this . _triggerEvaluateExpectations ( true )
144147 break
145148 }
@@ -226,7 +229,7 @@ export class ExpectationManager {
226229 type : 'internal' ,
227230 hookMethods : clientMethods ,
228231 } )
229- this . workerAgents [ clientId ] = { api }
232+ this . workerAgents [ clientId ] = { api, connected : true }
230233
231234 return workerAgentMethods
232235 }
@@ -238,6 +241,7 @@ export class ExpectationManager {
238241 if ( workerAgent . api . type !== 'internal' )
239242 throw new Error ( `Cannot remove WorkerAgent "${ clientId } ", due to the type being "${ workerAgent . api . type } "` )
240243
244+ workerAgent . connected = false
241245 delete this . workerAgents [ clientId ]
242246 }
243247 /** Called when there is an updated set of PackageContainerExpectations. */
@@ -295,7 +299,7 @@ export class ExpectationManager {
295299 }
296300 async getStatus ( ) : Promise < any > {
297301 return {
298- workforce : await this . workforceAPI . getStatus ( ) ,
302+ workforce : this . workforceAPI . connected ? await this . workforceAPI . getStatus ( ) : { } ,
299303 expectationManager : this . status ,
300304 }
301305 }
@@ -824,6 +828,8 @@ export class ExpectationManager {
824828 let hasQueriedAnyone = false
825829 await Promise . all (
826830 Object . entries ( this . workerAgents ) . map ( async ( [ workerId , workerAgent ] ) => {
831+ if ( ! workerAgent . connected ) return
832+
827833 // Only ask each worker once:
828834 if (
829835 ! trackedExp . queriedWorkers [ workerId ] ||
@@ -1513,7 +1519,7 @@ export class ExpectationManager {
15131519 const trackedPackageContainer = this . trackedPackageContainers [ containerId ]
15141520 if ( trackedPackageContainer . currentWorker ) {
15151521 const workerAgent = this . workerAgents [ trackedPackageContainer . currentWorker ]
1516- if ( workerAgent ) {
1522+ if ( workerAgent && workerAgent . connected ) {
15171523 try {
15181524 const result = await workerAgent . api . disposePackageContainerMonitors ( containerId )
15191525 if ( result . success ) {
@@ -1553,16 +1559,20 @@ export class ExpectationManager {
15531559 // If the packageContainer was newly updated, reset and set up again:
15541560 if ( trackedPackageContainer . currentWorker ) {
15551561 const workerAgent = this . workerAgents [ trackedPackageContainer . currentWorker ]
1556- const disposeMonitorResult = await workerAgent . api . disposePackageContainerMonitors (
1557- trackedPackageContainer . id
1558- )
1559- if ( ! disposeMonitorResult . success ) {
1560- badStatus = true
1561- this . updateTrackedPackageContainerStatus ( trackedPackageContainer , StatusCode . BAD , {
1562- user : `Unable to restart monitor, due to ${ disposeMonitorResult . reason . user } ` ,
1563- tech : `Unable to restart monitor: ${ disposeMonitorResult . reason . tech } ` ,
1564- } )
1565- continue // Break further execution for this PackageContainer
1562+ if ( workerAgent && workerAgent . connected ) {
1563+ const disposeMonitorResult = await workerAgent . api . disposePackageContainerMonitors (
1564+ trackedPackageContainer . id
1565+ )
1566+ if ( ! disposeMonitorResult . success ) {
1567+ badStatus = true
1568+ this . updateTrackedPackageContainerStatus ( trackedPackageContainer , StatusCode . BAD , {
1569+ user : `Unable to restart monitor, due to ${ disposeMonitorResult . reason . user } ` ,
1570+ tech : `Unable to restart monitor: ${ disposeMonitorResult . reason . tech } ` ,
1571+ } )
1572+ continue // Break further execution for this PackageContainer
1573+ }
1574+ } else {
1575+ // Lost connecttion to the worker & monitor
15661576 }
15671577 trackedPackageContainer . currentWorker = null
15681578 }
@@ -1580,7 +1590,9 @@ export class ExpectationManager {
15801590
15811591 let notSupportReason : Reason | null = null
15821592 await Promise . all (
1583- Object . entries ( this . workerAgents ) . map ( async ( [ workerId , workerAgent ] ) => {
1593+ Object . entries ( this . workerAgents ) . map < Promise < void > > ( async ( [ workerId , workerAgent ] ) => {
1594+ if ( ! workerAgent . connected ) return
1595+
15841596 const support = await workerAgent . api . doYouSupportPackageContainer (
15851597 trackedPackageContainer . packageContainer
15861598 )
@@ -1934,6 +1946,7 @@ export type ExpectationManagerServerOptions =
19341946
19351947interface TrackedWorkerAgent {
19361948 api : WorkerAgentAPI
1949+ connected : boolean
19371950}
19381951
19391952interface TrackedExpectation {
0 commit comments