Sha256: 9b08523bd61fb398ae497ab4f932f47f7d35445ad58d1cf6b4b5c325a0139048

Contents?: true

Size: 1.99 KB

Versions: 2

Compression:

Stored size: 1.99 KB

Contents

#!/usr/bin/env ruby
#
# A squab stream to e-mail script
#

require 'rubygems'
require 'optparse'
require 'ostruct'
require 'pp'
require 'net/smtp'

require 'squab-client'

options = OpenStruct.new
options.days = 1
options.sources = []
options.to = []
options.from = "squab-digest@example.com"
options.today = Time.now.strftime("%a, %b %d")

optparse = OptionParser.new do |opts|
  opts.banner = "Usarge #{__FILE__} [options]"
  opts.on('-d', '--days DAYS', "Number of days to digest") do |arg|
    options.days = arg.to_i
  end
  opts.on('-e', '--email EMAIL', "Where to send the digest") do |arg|
    options.to.push(arg)
  end
  opts.on('-s', '--source SOURCE', 'Specify a source to digest.  Can be used multiple times') do |arg|
    options.sources.push(arg)
  end
  opts.on('-a', '--api URL', "API URL for squab") do |arg|
    options.api = arg
  end
  opts.on('-D', '--dry-run', "Don't send mail, output the message to stdout") do
    options.dry = true
  end
end

optparse.parse!

sc = if options.api
  Squab::Client.new(:api => options.api)
else
  Squab::Client.new()
end

if options.sources.empty?
  $stderr.puts optparse
  $stderr.puts "\n[ERROR] You must supply a source to digest (-s)"
  exit 1
end

if options.to.empty?
  $stderr.puts optparse
  $stderr.puts "\n[ERROR] You must supply an email to send to (-e)"
  exit 1
end

since = Time.now.to_i - (86400 * options.days.to_i)
message = <<-EOM.gsub(/^\s+/, '')
  From: #{options.from}
  To: #{options.to.join(',')}
  Subject: Squab Digest Report for #{options.today}
EOM

message << "\n\n"

options.sources.each do |src|
  search_params = { :source => src,
                    :from => since }

  res = JSON.parse(sc.search(search_params))
  message << "#{src} events from the last #{options.days} days\n\n"
  res.each do |event|
    message << sprintf("%-16s -- %s\n", event['uid'], event['value'])
  end
  message << "\n\n"
end

if options.dry
  puts message
else
  Net::SMTP.start('localhost', 25) do |smtp|
    smtp.send_message message, options.from, options.to
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
squab-client-1.4.1 bin/squab-digest
squab-client-1.4.0 bin/squab-digest