2013-11-14 05:33:09 +00:00
|
|
|
binding = process.atomBinding 'crash_reporter'
|
2014-11-11 09:20:04 +00:00
|
|
|
fs = require 'fs'
|
|
|
|
os = require 'os'
|
|
|
|
path = require 'path'
|
|
|
|
{spawn} = require 'child_process'
|
2013-11-14 05:33:09 +00:00
|
|
|
|
|
|
|
class CrashReporter
|
2013-11-15 03:00:48 +00:00
|
|
|
start: (options={}) ->
|
2014-11-11 09:20:04 +00:00
|
|
|
{@productName, companyName, submitUrl, autoSubmit, ignoreSystemCrashHandler, extra} = options
|
2013-11-14 05:33:09 +00:00
|
|
|
|
2015-04-14 07:39:48 +00:00
|
|
|
app =
|
|
|
|
if process.type is 'browser'
|
|
|
|
require 'app'
|
|
|
|
else
|
|
|
|
require('remote').require 'app'
|
|
|
|
|
|
|
|
@productName ?= app.getName()
|
2013-11-14 05:33:09 +00:00
|
|
|
companyName ?= 'GitHub, Inc'
|
2013-11-28 04:38:33 +00:00
|
|
|
submitUrl ?= 'http://54.249.141.255:1127/post'
|
2013-11-14 05:33:09 +00:00
|
|
|
autoSubmit ?= true
|
|
|
|
ignoreSystemCrashHandler ?= false
|
2013-11-18 10:27:50 +00:00
|
|
|
extra ?= {}
|
2013-11-14 05:33:09 +00:00
|
|
|
|
2014-11-11 09:20:04 +00:00
|
|
|
extra._productName ?= @productName
|
2013-11-26 02:19:50 +00:00
|
|
|
extra._companyName ?= companyName
|
2015-04-14 09:37:22 +00:00
|
|
|
extra._version ?= app.getVersion()
|
2013-11-26 02:19:50 +00:00
|
|
|
|
2014-11-11 09:20:04 +00:00
|
|
|
start = => binding.start @productName, companyName, submitUrl, autoSubmit, ignoreSystemCrashHandler, extra
|
2013-11-24 14:22:08 +00:00
|
|
|
|
2014-02-26 12:58:17 +00:00
|
|
|
if process.platform is 'win32'
|
2013-11-24 12:45:12 +00:00
|
|
|
args = [
|
2013-11-24 14:22:08 +00:00
|
|
|
"--reporter-url=#{submitUrl}"
|
2014-11-11 09:20:04 +00:00
|
|
|
"--application-name=#{@productName}"
|
2013-11-24 14:22:08 +00:00
|
|
|
"--v=1"
|
2013-11-24 12:45:12 +00:00
|
|
|
]
|
|
|
|
env = ATOM_SHELL_INTERNAL_CRASH_SERVICE: 1
|
|
|
|
|
2013-11-24 14:22:08 +00:00
|
|
|
spawn process.execPath, args, {env, detached: true}
|
|
|
|
start()
|
2014-02-26 12:58:17 +00:00
|
|
|
else
|
|
|
|
start()
|
2013-11-14 05:33:09 +00:00
|
|
|
|
2014-11-11 09:20:04 +00:00
|
|
|
getLastCrashReport: ->
|
|
|
|
tmpdir =
|
|
|
|
if process.platform is 'win32'
|
|
|
|
os.tmpdir()
|
|
|
|
else
|
|
|
|
'/tmp'
|
|
|
|
log = path.join tmpdir, "#{@productName} Crashes", 'uploads.log'
|
|
|
|
try
|
|
|
|
reports = String(fs.readFileSync(log)).split('\n')
|
|
|
|
return null unless reports.length > 1
|
|
|
|
[time, id] = reports[reports.length - 2].split ','
|
|
|
|
return {date: new Date(parseInt(time) * 1000), id}
|
|
|
|
catch e
|
|
|
|
return null
|
|
|
|
|
|
|
|
crashRepoter = new CrashReporter
|
|
|
|
module.exports = crashRepoter
|