diff --git a/local-server.js b/local-server.js index c957d182..299a9171 100644 --- a/local-server.js +++ b/local-server.js @@ -67,6 +67,19 @@ function notifyStatus(status) { ipcMain.emit('local-server-status-events', status); } +function filterOutput(line) { + const index = line.search('CRITICAL'); + if(index > -1) { + return { + isCritical: true, + errorMessage: line.substr(index) + }; + } + return { + isCritical: false + } +} + async function stopAll() { for(var serverName in runningServers) { let result, error = await stop(serverName); @@ -137,6 +150,16 @@ async function run(server, options) { }; serverProcess.stdout.on('data', function(data) { + const line = data.toString(); + const { isCritical, errorMessage } = filterOutput(line); + if(isCritical) { + notifyStatus({ + serverName: server.name, + status: 'stderr', + message: `Server reported error: '${errorMessage}` + }); + } + if(logStdout) { console.log(data.toString()); } @@ -149,17 +172,19 @@ async function run(server, options) { }); serverProcess.on('exit', (code, signal) => { - if(code > 0) { - notifyStatus({ - serverName: server.name, - status: 'errored', - message: `Server '${server.name}' has exited with status='${code}'` - }); - } + notifyStatus({ + serverName: server.name, + status: 'errored', + message: `Server '${server.name}' has exited with status='${code}'` + }); }); serverProcess.on('error', (err) => { - + notifyStatus({ + serverName: server.name, + status: 'errored', + message: `Server errored: '${errorMessage}` + }); }); } @@ -183,10 +208,6 @@ ipcMain.on('local-server-run', async function (event, server) { }); -ipcMain.on('before-quit', async function (event) { - console.log(event); -}); - if (require.main === module) { process.on('SIGINT', function() { console.log("Caught interrupt signal"); diff --git a/main.js b/main.js index e123c388..d111a956 100644 --- a/main.js +++ b/main.js @@ -63,7 +63,7 @@ function createWindow () { // Dereference the window object, usually you would store windows // in an array if your app supports multi windows, this is the time // when you should delete the corresponding element. - mainWindow = null + mainWindow = null; }); @@ -94,7 +94,7 @@ app.on('activate', function () { // On OS X it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (mainWindow === null) { - createWindow() + createWindow(); } }); diff --git a/src/app/layouts/default-layout/default-layout.component.ts b/src/app/layouts/default-layout/default-layout.component.ts index dac16e11..32edf9b7 100644 --- a/src/app/layouts/default-layout/default-layout.component.ts +++ b/src/app/layouts/default-layout/default-layout.component.ts @@ -32,6 +32,9 @@ export class DefaultLayoutComponent implements OnInit, OnDestroy { if(serverStatus.status === 'errored') { this.toasterService.error(serverStatus.message); } + if(serverStatus.status === 'stderr') { + this.toasterService.error(serverStatus.message); + } }); // stop servers only when in Electron diff --git a/src/app/services/server-management.service.ts b/src/app/services/server-management.service.ts index 48d605a1..5dbecd87 100644 --- a/src/app/services/server-management.service.ts +++ b/src/app/services/server-management.service.ts @@ -5,7 +5,7 @@ import { Subject } from 'rxjs'; export interface ServerStateEvent { serverName: string; - status: "started" | "errored" | "stopped"; + status: "started" | "errored" | "stopped" | "stderr"; message: string; }