diff --git a/src/apphealthmonitor.js b/src/apphealthmonitor.js index 96d43a783..628bc9296 100644 --- a/src/apphealthmonitor.js +++ b/src/apphealthmonitor.js @@ -133,18 +133,16 @@ function processDockerEvents(intervalSecs, callback) { stream.on('data', function (data) { var ev = JSON.parse(data); appdb.getByContainerId(ev.id, function (error, app) { // this can error for addons - var program = error || !app.appStoreId ? ev.id : app.appStoreId; - var context = JSON.stringify(ev); + var program = error || !app.id ? ev.id : `app-${app.id}`; var now = Date.now(); - if (app) context = context + '\n\n' + JSON.stringify(app, null, 4) + '\n'; const notifyUser = (!app || !app.debugMode) && (now - gLastOomMailTime > OOM_MAIL_LIMIT); - debug('OOM Context: %s. notifyUser: %s. lastOomTime: %s (now: %s)', context, notifyUser, gLastOomMailTime, now); + debug('OOM %s notifyUser: %s. lastOomTime: %s (now: %s)', program, notifyUser, gLastOomMailTime, now, ev); // do not send mails for dev apps if (notifyUser) { - notifications.oomEvent(program, context); // app can be null if it's an addon crash + notifications.oomEvent(program, { app: app || null, details: ev }); // app can be null if it's an addon crash gLastOomMailTime = now; } }); diff --git a/src/notifications.js b/src/notifications.js index 5c5ec1622..6d7da78ca 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -138,14 +138,19 @@ function userAdded(user, callback) { function oomEvent(program, context, callback) { assert.strictEqual(typeof program, 'string'); - assert.strictEqual(typeof context, 'string'); + assert.strictEqual(typeof context, 'object'); assert(typeof callback === 'undefined' || typeof callback === 'function'); callback = callback || NOOP_CALLBACK; actionForAllAdmins(function (admin, callback) { - mailer.oomEvent(program, context); - add(admin.id, 'Process died out-of-memory', context, '', callback); + mailer.oomEvent(program, JSON.stringify(context, null, 4)); + + var message; + if (context.app) message = `The application ${context.app.manifest.title} with id ${context.app.id} ran out of memory.`; + else message = `The container with id ${context.details.id} ran out of memory`; + + add(admin.id, 'Process died out-of-memory', message, context.app ? '/#/apps' : '', callback); }, callback); } @@ -157,6 +162,6 @@ function appDied(app, callback) { actionForAllAdmins(function (admin, callback) { mailer.appDied(app); - add(admin.id, `App ${app.fqdn} died`, `The application ${app.manifest.title} installed at ${app.fqdn} is not responding.`, '', callback); + add(admin.id, `App ${app.fqdn} died`, `The application ${app.manifest.title} installed at ${app.fqdn} is not responding.`, '/#/apps', callback); }, callback); }