Add crashRepoter.getLastCrashReport API
authorCheng Zhao <zcbenz@gmail.com>
Tue, 11 Nov 2014 09:20:04 +0000 (17:20 +0800)
committerCheng Zhao <zcbenz@gmail.com>
Tue, 11 Nov 2014 09:30:01 +0000 (17:30 +0800)
atom/common/api/lib/crash-reporter.coffee

index ecbd2f1..6fd839d 100644 (file)
@@ -1,18 +1,21 @@
-{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'
@@ -20,12 +23,12 @@ class CrashReporter
       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
@@ -35,4 +38,20 @@ class CrashReporter
     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