-{spawn} = require 'child_process'
binding = process.atomBinding 'crash_reporter'
+fs = require 'fs'
+os = require 'os'
+path = require 'path'
+{spawn} = require 'child_process'
class CrashReporter
start: (options={}) ->
- {productName, companyName, submitUrl, autoSubmit, ignoreSystemCrashHandler, extra} = options
+ {@productName, companyName, submitUrl, autoSubmit, ignoreSystemCrashHandler, extra} = options
- productName ?= 'Atom-Shell'
+ @productName ?= 'Atom-Shell'
companyName ?= 'GitHub, Inc'
submitUrl ?= 'http://54.249.141.255:1127/post'
autoSubmit ?= true
ignoreSystemCrashHandler ?= false
extra ?= {}
- extra._productName ?= productName
+ extra._productName ?= @productName
extra._companyName ?= companyName
extra._version ?=
if process.type is 'browser'
else
require('remote').require('app').getVersion()
- start = -> binding.start productName, companyName, submitUrl, autoSubmit, ignoreSystemCrashHandler, extra
+ start = => binding.start @productName, companyName, submitUrl, autoSubmit, ignoreSystemCrashHandler, extra
if process.platform is 'win32'
args = [
"--reporter-url=#{submitUrl}"
- "--application-name=#{productName}"
+ "--application-name=#{@productName}"
"--v=1"
]
env = ATOM_SHELL_INTERNAL_CRASH_SERVICE: 1
else
start()
-module.exports = new CrashReporter
+ 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