1
1
import pm2 from "pm2" ;
2
2
import path from "path" ;
3
- import Tail from "tail" ;
3
+ import { Tail } from "tail" ;
4
4
import autoBind from "auto-bind" ;
5
5
import { SubEmitterSocket } from "axon" ; // used by PM2
6
6
import { Logger , LogManager } from "@bluecadet/launchpad-utils" ;
@@ -54,34 +54,13 @@ export class LogRelay {
54
54
}
55
55
56
56
/**
57
- * @param {SubEmitterSocket } _pm2Bus
57
+ * @param {string } _eventType
58
+ * @param {* } _eventData
58
59
*/
59
- connectToBus ( _pm2Bus ) {
60
- // Implement this fn in all child classes
60
+ handleEvent ( _eventType , _eventData ) {
61
+ // implement this fn in all child classes
61
62
throw new Error ( "not implemented" ) ;
62
63
}
63
-
64
- /**
65
- * @param {SubEmitterSocket } _pm2Bus
66
- */
67
- disconnectFromBus ( _pm2Bus ) {
68
- // Implement this fn in all child classes
69
- throw new Error ( "not implemented" ) ;
70
- }
71
-
72
- /**
73
- * Higher order function for filtering out events that are not related to this relay
74
- * @protected
75
- * @param {function(*):void } handler
76
- * @returns {function(*):void }
77
- */
78
- filterEvents = ( handler ) => {
79
- const wrappedHandler = ( eventData ) => {
80
- if ( eventData ?. process ?. name !== this . _appOptions . pm2 . name ) return ;
81
- handler . bind ( this ) ( eventData ) ;
82
- } ;
83
- return wrappedHandler ;
84
- } ;
85
64
}
86
65
87
66
export class FileLogRelay extends LogRelay {
@@ -119,19 +98,18 @@ export class FileLogRelay extends LogRelay {
119
98
}
120
99
121
100
/**
122
- * @param {SubEmitterSocket } pm2Bus
123
- */
124
- connectToBus ( pm2Bus ) {
125
- pm2Bus . on ( "online" , this . filterEvents ( this . _handleOnline ) ) ;
126
- pm2Bus . on ( "exit" , this . filterEvents ( this . _handleOffline ) ) ;
127
- }
128
-
129
- /**
130
- * @param {SubEmitterSocket } pm2Bus
101
+ * @param {string } eventType
102
+ * @param {* } eventData
131
103
*/
132
- disconnectFromBus ( pm2Bus ) {
133
- pm2Bus . off ( "online" ) ;
134
- pm2Bus . off ( "exit" ) ;
104
+ handleEvent ( eventType , eventData ) {
105
+ switch ( eventType ) {
106
+ case "process:event" :
107
+ if ( eventData . event === "online" ) this . _handleOnline ( ) ;
108
+ else if ( eventData . event === "exit" ) this . _handleOffline ( ) ;
109
+ break ;
110
+ default :
111
+ break ;
112
+ }
135
113
}
136
114
137
115
/** @private */
@@ -141,7 +119,7 @@ export class FileLogRelay extends LogRelay {
141
119
fsWatchOptions : { interval : 100 } ,
142
120
} ;
143
121
const outFilepath = this . _appOptions . pm2 . output ;
144
- const errFilepath = this . _appOptions . pm2 . output ;
122
+ const errFilepath = this . _appOptions . pm2 . error ;
145
123
146
124
if ( this . _outTail ) {
147
125
this . _outTail . unwatch ( ) ;
@@ -221,19 +199,20 @@ export class BusLogRelay extends LogRelay {
221
199
}
222
200
223
201
/**
224
- * @param {SubEmitterSocket } pm2Bus
225
- */
226
- connectToBus ( pm2Bus ) {
227
- pm2Bus . on ( "log:out" , this . filterEvents ( this . _handleBusLogOut ) ) ;
228
- pm2Bus . on ( "log:err" , this . filterEvents ( this . _handleBusLogErr ) ) ;
229
- }
230
-
231
- /**
232
- * @param {SubEmitterSocket } pm2Bus
202
+ * @param {string } eventType
203
+ * @param {* } eventData
233
204
*/
234
- disconnectFromBus ( pm2Bus ) {
235
- pm2Bus . off ( "log:out" ) ;
236
- pm2Bus . off ( "log:err" ) ;
205
+ handleEvent ( eventType , eventData ) {
206
+ switch ( eventType ) {
207
+ case "log:out" :
208
+ this . _handleBusLogOut ( eventData ) ;
209
+ break ;
210
+ case "log:err" :
211
+ this . _handleBusLogErr ( eventData ) ;
212
+ break ;
213
+ default :
214
+ break ;
215
+ }
237
216
}
238
217
239
218
/**
@@ -317,17 +296,25 @@ export default class AppLogRouter {
317
296
* @param {SubEmitterSocket } pm2Bus
318
297
*/
319
298
connectToBus ( pm2Bus ) {
320
- this . _logRelays . forEach ( ( relay ) => {
321
- relay . connectToBus ( pm2Bus ) ;
322
- } ) ;
299
+ pm2Bus . on ( "*" , this . _handleEvent ) ;
323
300
}
324
301
325
302
/**
326
303
* @param {SubEmitterSocket } pm2Bus
327
304
*/
328
305
disconnectFromBus ( pm2Bus ) {
329
- this . _logRelays . forEach ( ( relay ) => {
330
- relay . disconnectFromBus ( pm2Bus ) ;
331
- } ) ;
306
+ pm2Bus . off ( "*" ) ;
307
+ }
308
+
309
+ /**
310
+ * @private
311
+ * @param {string } eventType
312
+ * @param {* } eventData
313
+ */
314
+ _handleEvent ( eventType , eventData ) {
315
+ if ( ! eventData ?. process ?. name ) return ;
316
+ this . _logRelays
317
+ . get ( eventData . process . name )
318
+ ?. handleEvent ( eventType , eventData ) ;
332
319
}
333
320
}
0 commit comments