simple-breakpad-server
Version:
Simple breakpad crash reports collecting server
79 lines (60 loc) • 1.82 kB
JavaScript
(function() {
var Crashreport, Sequelize, cache, config, customFields, field, fs, i, j, len, len1, minidump, options, path, ref, ref1, schema, sequelize, symbolsPath, tmp;
config = require('../config');
path = require('path');
fs = require('fs-promise');
cache = require('./cache');
minidump = require('minidump');
Sequelize = require('sequelize');
sequelize = require('./db');
tmp = require('tmp');
symbolsPath = config.getSymbolsPath();
customFields = config.get('customFields') || {};
schema = {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
},
product: Sequelize.STRING,
version: Sequelize.STRING
};
options = {
indexes: [
{
fields: ['created_at']
}
]
};
ref = customFields.params;
for (i = 0, len = ref.length; i < len; i++) {
field = ref[i];
schema[field.name] = Sequelize.STRING;
}
ref1 = customFields.files;
for (j = 0, len1 = ref1.length; j < len1; j++) {
field = ref1[j];
schema[field.name] = Sequelize.BLOB;
}
Crashreport = sequelize.define('crashreports', schema, options);
Crashreport.getStackTrace = function(record, callback) {
var tmpfile;
if (cache.has(record.id)) {
return callback(null, cache.get(record.id));
}
tmpfile = tmp.fileSync();
return fs.writeFile(tmpfile.name, record.upload_file_minidump).then(function() {
return minidump.walkStack(tmpfile.name, [symbolsPath], function(err, report) {
tmpfile.removeCallback();
if (err == null) {
cache.set(record.id, report);
}
return callback(err, report);
});
})["catch"](function(err) {
tmpfile.removeCallback();
return callback(err);
});
};
module.exports = Crashreport;
}).call(this);