diff --git a/lib/zinnia.js b/lib/zinnia.js index 03adfea4..c8dc95f1 100644 --- a/lib/zinnia.js +++ b/lib/zinnia.js @@ -365,8 +365,23 @@ export async function run ({ ) childProcesses.push(Object.assign(childProcess, { moduleName: module })) + let timeoutId + const resetTimeout = () => { + clearTimeout(timeoutId) + timeoutId = setTimeout(() => { + onActivity({ + type: 'error', + message: `${capitalize(module)} has been inactive for 5 minutes, restarting...` + }) + controller.abort() + }, 5 * 60 * 1000) + } + resetTimeout() + signal.addEventListener('abort', () => clearTimeout(timeoutId)) + childProcess.stdout.setEncoding('utf-8') childProcess.stdout.on('data', data => { + resetTimeout() handleEvents({ module, contracts, @@ -379,7 +394,11 @@ export async function run ({ Sentry.captureException(err) }) }) - childProcess.stderr.pipe(process.stderr, { end: false }) + childProcess.stderr.setEncoding('utf-8') + childProcess.stderr.on('data', data => { + resetTimeout() + process.stderr.write(data) + }) childProcess.on('exit', (code, signal) => { const exitReason = signal ? `via signal ${signal}` : `with code: ${code}`