feat(reporting): Use rollbarjs for error reporting in production (#17259)

This commit is contained in:
Stuart Taylor
2018-05-29 14:08:55 +01:00
committed by mrugesh mohapatra
parent 5d7ed0a1c1
commit 6315c6eae0
4 changed files with 118 additions and 2 deletions

94
package-lock.json generated
View File

@ -3813,6 +3813,11 @@
"date-now": "0.1.4"
}
},
"console-polyfill": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/console-polyfill/-/console-polyfill-0.3.0.tgz",
"integrity": "sha512-w+JSDZS7XML43Xnwo2x5O5vxB0ID7T5BdqDtyqT6uiCAX2kZAgcWxNaGqT97tZfSHzfOcvrfsDAodKcJ3UvnXQ=="
},
"constantinople": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz",
@ -4463,6 +4468,15 @@
}
}
},
"decache": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/decache/-/decache-3.1.0.tgz",
"integrity": "sha1-T1A2+9ZYH8yXI3rDlUokS5U2wto=",
"optional": true,
"requires": {
"find": "0.2.9"
}
},
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
@ -5196,6 +5210,14 @@
"is-arrayish": "0.2.1"
}
},
"error-stack-parser": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-1.3.3.tgz",
"integrity": "sha1-+tpuOpzSsOCA5tb8dRQYZJc081w=",
"requires": {
"stackframe": "0.3.1"
}
},
"es-abstract": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.9.0.tgz",
@ -6231,6 +6253,15 @@
}
}
},
"find": {
"version": "0.2.9",
"resolved": "https://registry.npmjs.org/find/-/find-0.2.9.tgz",
"integrity": "sha1-S3Px/55WrZG3bnFkB/5f/mVUu4w=",
"optional": true,
"requires": {
"traverse-chain": "0.1.0"
}
},
"find-cache-dir": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
@ -9436,6 +9467,11 @@
"integrity": "sha1-3hqm1j6indJIc3tp8f+LgALSEIw=",
"dev": true
},
"is_js": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/is_js/-/is_js-0.9.0.tgz",
"integrity": "sha1-CrlFQFArp6+iTIVqqYVWFmnpxS0="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@ -15969,6 +16005,14 @@
"uuid": "3.1.0"
}
},
"request-ip": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/request-ip/-/request-ip-2.0.2.tgz",
"integrity": "sha1-3urm1K8hdoSX24zQX6NxQ/jxJX4=",
"requires": {
"is_js": "0.9.0"
}
},
"request-promise-core": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz",
@ -16266,6 +16310,45 @@
"resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz",
"integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w="
},
"rollbar": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/rollbar/-/rollbar-2.4.0.tgz",
"integrity": "sha512-R7AbQkXI5EHgU/2WleXbJykdQXFklOE+LsS2wbXO6Opw/BIROQ/pKAEwd7/EbMxWsiLEbwYbv3FYtqlhYfOnwA==",
"requires": {
"async": "1.2.1",
"console-polyfill": "0.3.0",
"debug": "2.6.9",
"decache": "3.1.0",
"error-stack-parser": "1.3.3",
"extend": "3.0.0",
"json-stringify-safe": "5.0.1",
"lru-cache": "2.2.4",
"request-ip": "2.0.2",
"uuid": "3.0.1"
},
"dependencies": {
"async": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/async/-/async-1.2.1.tgz",
"integrity": "sha1-pIFqF81f9RbfosdpikUzabl5DeA="
},
"extend": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz",
"integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ="
},
"lru-cache": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz",
"integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0="
},
"uuid": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
"integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE="
}
}
},
"rss-parser": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/rss-parser/-/rss-parser-3.1.2.tgz",
@ -17590,6 +17673,11 @@
"resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
"integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA="
},
"stackframe": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/stackframe/-/stackframe-0.3.1.tgz",
"integrity": "sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ="
},
"static-extend": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
@ -18906,6 +18994,12 @@
"resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz",
"integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc="
},
"traverse-chain": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/traverse-chain/-/traverse-chain-0.1.0.tgz",
"integrity": "sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=",
"optional": true
},
"trim": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",

View File

@ -141,6 +141,7 @@
"redux-form": "^5.2.3",
"request": "^2.65.0",
"reselect": "^3.0.0",
"rollbar": "^2.4.0",
"rss-parser": "^3.1.2",
"rx": "^4.1.0",
"rx-dom": "^7.0.3",

View File

@ -1,6 +1,8 @@
COMPOSE_PROJECT_NAME=freecodecamp
MONGOHQ_URL='mongodb://localhost:27017/freecodecamp'
ROLLBAR_APP_ID='my-rollbar-app-id'
FACEBOOK_ID=stuff
FACEBOOK_SECRET=stuff

View File

@ -1,15 +1,30 @@
import debug from 'debug';
import Rollbar from 'rollbar';
import {
isHandledError,
unwrapHandledError
} from '../utils/create-handled-error.js';
const { ROLLBAR_APP_ID } = process.env;
const rollbar = new Rollbar(ROLLBAR_APP_ID);
const log = debug('fcc:middlewares:error-reporter');
const errTemplate = ({message, ...restError}, req) => `
Time: ${new Date(Date.now()).toISOString()}
Error: ${message}
Is authenticated user: ${!!req.user}
Route: ${JSON.stringify(req.route, null, 2)}
${JSON.stringify(restError, null, 2)}
`;
export default function errrorReporter() {
if (process.env.NODE_ENV !== 'production' && process.env.ERROR_REPORTER) {
return (err, req, res, next) => {
console.error(errTemplate(err, req));
if (isHandledError(err)) {
// log out user messages in development
const handled = unwrapHandledError(err);
@ -18,5 +33,9 @@ export default function errrorReporter() {
next(err);
};
}
return (err, req, res, next) => next(err);
return (err, req, res, next) => {
console.error(errTemplate(err, req));
rollbar.error(err.message, err);
next(err);
};
}