Skip to content

Instantly share code, notes, and snippets.

@postwait
Created October 4, 2016 13:28
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save postwait/5123d4fe13f13c204b7778d61b744296 to your computer and use it in GitHub Desktop.
Save postwait/5123d4fe13f13c204b7778d61b744296 to your computer and use it in GitHub Desktop.
sparkpost.coffee (for hubot)
# Description:
# interacts with the Sparkpost reporting API.
#
# Dependencies:
# None
#
# Configuration:
# HUBOT_SPARKPOST_API_TOKEN your API token with reporting privileges
# HUBOT_SPARKPOST_TIMEZONE the timezone (default America/New_York)
#
# Commands:
# !sparkpost <email>
#
# Notes:
#
# Author:
# postwait
env = process.env
tz = if env.HUBOT_SPARKPOST_TIMEZONE then env.HUBOT_SPARKPOST_TIMEZONE else "America/New_York"
api_url = "https://api.sparkpost.com/api/v1/message-events?timezone=#{tz}&recipients="
api_reporting_token = env.HUBOT_SPARKPOST_API_TOKEN
tssimple = (a) ->
a.replace("T", " ").replace(".000", " (") + ")"
module.exports = (robot) ->
robot.hear /!sparkpost\s+(.*)$/i, (res) ->
if res.match[1] == 'help'
res.send "!sparkpost <email> -> show event logs involving the specified email address\n"
return
robot.http(api_url + res.match[1].toLowerCase())
.header('Authorization', api_reporting_token)
.header('Accept', 'application/json')
.get() (err, httpres, body) ->
if err
res.send "Encountered an error :( #{err}"
return
data = JSON.parse(body)
out = (i) ->
type = i.type
tsstr = tssimple(i.timestamp)
if i.reason
type = "#{type} '#{i.reason}'"
return "[#{tsstr}] (#{type} of #{i.template_id}) to #{i.raw_rcpt_to} \"#{i.subject}\""
if (! data.results?)
res.send "No results returned: #{body}"
return
if data.results.length == 0
res.send "No logs for #{ res.match[1] }"
return
payload = (out(d) for d in data.results.reverse()).join("\n")
res.send "Logs for #{ res.match[1] }\n#{payload}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment