Comparing version 0.5.6 to 0.6.0
@@ -1,6 +0,5 @@ | ||
console.log(module); | ||
// Set up Raven | ||
var dsn = 'https://366f412ff7664f44891889321c8925eb:ff8d68e117804bd28776c0c2ee3cb9b1@app.getsentry.com/4291'; | ||
var raven = require('../'); | ||
var client = new raven.Client(dsn); | ||
@@ -22,3 +21,3 @@ // Express | ||
// and pass along your DSN | ||
app.use(raven.middleware.express(dsn)); | ||
app.use(raven.middleware.express(client)); | ||
// Register an optional error handler *after* the raven | ||
@@ -25,0 +24,0 @@ // middleware with access to res.sentry |
@@ -1,10 +0,3 @@ | ||
console.log(module); | ||
exports.broken = function brokenhandler(req, res) { | ||
foo(req, res); | ||
exports.broken = function(req, res) { | ||
foo(); | ||
}; | ||
function foo(req, res) { | ||
// lol, I don't know how to computer | ||
req.idontexist[0]; | ||
} |
@@ -110,3 +110,3 @@ var parsers = require('./parsers'); | ||
headers = { | ||
'X-Sentry-Auth': utils.getAuthHeader(timestamp, self.dsn.public_key, self.dsn.project_id), | ||
'X-Sentry-Auth': utils.getAuthHeader(timestamp, self.dsn.public_key, self.dsn.private_key), | ||
'Content-Type': 'application/octet-stream', | ||
@@ -113,0 +113,0 @@ 'Content-Length': message.length |
@@ -43,3 +43,3 @@ var utils = require('./utils'); | ||
kwargs = kwargs || {}; | ||
kwargs['sentry.interfaces.Http'] = { | ||
var http = { | ||
method: req.method, | ||
@@ -57,3 +57,8 @@ query_string: url.parse(req.url).query, | ||
}; | ||
var ip = (req.headers['x-forwarded-for'] || '').split(',')[0] || | ||
req.connection.remoteAddress; | ||
http.env.REMOTE_ADDR = ip; | ||
kwargs['sentry.interfaces.Http'] = http; | ||
return kwargs; | ||
}; |
@@ -24,18 +24,16 @@ var events = require('events'); | ||
res.setEncoding('utf8'); | ||
var body = []; | ||
res.on('data', function(data) { | ||
body.push(data); | ||
}); | ||
res.on('end', function(){ | ||
if(res.statusCode >= 200 && res.statusCode < 300) { | ||
self.emit('logged'); | ||
} else { | ||
body = body.join(''); | ||
var e = new Error('HTTP Error (' + res.statusCode + '): ' + body); | ||
e.response = res; | ||
e.statusCode = res.statusCode; | ||
e.responseBody = body; | ||
self.emit('error', e); | ||
} | ||
}); | ||
if(res.statusCode >= 200 && res.statusCode < 300) { | ||
self.emit('logged'); | ||
} else { | ||
var reason = res.headers['x-sentry-error']; | ||
var e = new Error('HTTP Error (' + res.statusCode + '): ' + reason); | ||
e.response = res; | ||
e.statusCode = res.statusCode; | ||
e.reason = reason; | ||
self.emit('error', e); | ||
} | ||
// force the socket to drain | ||
var noop = function(){}; | ||
res.on('data', noop); | ||
res.on('end', noop); | ||
}); | ||
@@ -42,0 +40,0 @@ req.on('error', function(e){ |
@@ -19,8 +19,8 @@ var raven = require('./client'); | ||
module.exports.getAuthHeader = function getAuthHeader(timestamp, api_key, project_id) { | ||
var header = ['Sentry sentry_version=2.0']; | ||
module.exports.getAuthHeader = function getAuthHeader(timestamp, api_key, api_secret) { | ||
var header = ['Sentry sentry_version=4']; | ||
header.push('sentry_timestamp='+timestamp); | ||
header.push('sentry_client=raven-node/'+raven.version); | ||
header.push('sentry_key='+api_key); | ||
header.push('project_id='+project_id); | ||
header.push('sentry_secret='+api_secret); | ||
return header.join(', '); | ||
@@ -111,2 +111,27 @@ }; | ||
var main_module = path.dirname(require.main.filename) + '/'; | ||
function getModule(filename, base) { | ||
if (!base) base = main_module; | ||
// It's specifically a module | ||
var file = path.basename(filename, '.js'); | ||
filename = path.dirname(filename); | ||
var n = filename.lastIndexOf('/node_modules/'); | ||
if (n > -1) { | ||
// /node_modules/ is 14 chars | ||
return filename.substr(n + 14).replace(/\//g, '.') + ':' + file; | ||
} | ||
// Let's see if it's a part of the main module | ||
// To be a part of main module, it has to share the same base | ||
n = (filename + '/').lastIndexOf(base, 0); | ||
if (n === 0) { | ||
var module = filename.substr(base.length).replace(/\//g, '.'); | ||
if (module) module += ':'; | ||
module += file; | ||
return module | ||
} | ||
return file; | ||
} | ||
function parseStack(stack, cb) { | ||
@@ -138,3 +163,3 @@ var frames = [], | ||
// Extract a module name based on the filename | ||
if (frame.filename) frame.module = path.basename(frame.filename, '.js'); | ||
if (frame.filename) frame.module = getModule(frame.filename); | ||
@@ -186,2 +211,4 @@ // internal Node files are not full path names. Ignore them. | ||
// expose basically for testing because I don't know what I'm doing | ||
module.exports.parseStack = parseStack; | ||
module.exports.getModule = getModule; |
@@ -5,3 +5,3 @@ { | ||
"keywords": ["raven", "sentry", "python"], | ||
"version": "0.5.6", | ||
"version": "0.6.0", | ||
"repository": "git://github.com/mattrobenolt/raven-node.git", | ||
@@ -8,0 +8,0 @@ "author": "Matt Robenolt <matt@ydekproductions.com>", |
@@ -13,2 +13,4 @@ # Raven [![Build Status](https://secure.travis-ci.org/mattrobenolt/raven-node.png?branch=master)](http://travis-ci.org/mattrobenolt/raven-node) | ||
Raven 0.6+ requires Sentry 6.0+ | ||
## Installation | ||
@@ -27,11 +29,2 @@ ``` | ||
## Disable Raven | ||
Pass `false` as the DSN (or any falsey value). | ||
```javascript | ||
client = new raven.Client(process.env.NODE_ENV === 'production' && '{{ SENTRY_DSN }}') | ||
``` | ||
__Note__: We don't infer this from `NODE_ENV` automatically anymore. It's up to you to implement whatever logic you'd like. | ||
## Logging an error | ||
@@ -80,3 +73,3 @@ ```javascript | ||
client.on('error', function(e){ | ||
console.log(e.responseBody); // raw response body, usually contains a message explaining the failure | ||
console.log(e.reason); // raw response body, usually contains a message explaining the failure | ||
console.log(e.statusCode); // status code of the http request | ||
@@ -184,3 +177,12 @@ console.log(e.response); // entire raw http response object | ||
## Disable Raven | ||
Pass `false` as the DSN (or any falsey value). | ||
```javascript | ||
client = new raven.Client(process.env.NODE_ENV === 'production' && '{{ SENTRY_DSN }}') | ||
``` | ||
__Note__: We don't infer this from `NODE_ENV` automatically anymore. It's up to you to implement whatever logic you'd like. | ||
## Support | ||
You can find me on IRC. I troll in `#sentry` on `freenode`. |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
27771
14
551
185