You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pdfy/error-reporter.coffee

52 lines
1.2 KiB
CoffeeScript

chokidar = require "chokidar"
nodemailer = require "nodemailer"
path = require "path"
fs = require "fs"
watcher = chokidar.watch "./errors", depth: 0, ignoreInitial: true
mailer = nodemailer.createTransport()
processFile = (filePath) ->
fs.readFile filePath, (err, data) ->
try
parsedData = JSON.parse(data)
catch error
console.log "Error report not complete yet, retrying #{filePath} in 1 second..."
setTimeout (->
processFile(filePath)
), 1000
return
errorMessage = parsedData?.message ? "UNKNOWN ERROR"
textStack = parsedData?.stack?.replace(/\u001b(?:\[\??(?:\d\;*)*[A-HJKSTfminsulh])?/g, "") ? ""
message = """
A failure occurred. #{filePath} is attached.
#{textStack}
"""
htmlMessage = """
A failure occurred. #{filePath} is attached.
<pre>#{textStack}</pre>
""".replace(/\n/g, "<br>")
mailer.sendMail
from: "ops@pdf.yt"
to: "admin@cryto.net"
subject: "Automatic failure report: #{errorMessage}"
text: message
html: htmlMessage
attachments: [
filename: path.basename(filePath)
path: filePath
contentType: "application/json"
]
watcher.on "add", (filePath) ->
console.log "PANIC! Sending report:", filePath
processFile(filePath)
console.log "Running..."