Class: Embulk::Input::Sendgrid

Inherits:
InputPlugin
  • Object
show all
Defined in:
lib/embulk/input/sendgrid.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.resume(task, columns, count, &control) ⇒ Object



40
41
42
43
44
45
# File 'lib/embulk/input/sendgrid.rb', line 40

def self.resume(task, columns, count, &control)
  task_reports = yield(task, columns, count)

  next_config_diff = {}
  return next_config_diff
end

.transaction(config, &control) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/embulk/input/sendgrid.rb', line 9

def self.transaction(config, &control)
  task = {
    api_key: config.param(:api_key, :string),
    start_date: config.param(:start_date, :string),
    end_date: config.param(:end_date, :string, default: 'today')
  }

  columns = [
    Column.new(0, 'date', :timestamp),
    Column.new(1, 'category', :string),
    Column.new(2, 'blocks', :long),
    Column.new(3, 'bounce_drops', :long),
    Column.new(4, 'bounces', :long),
    Column.new(5, 'clicks', :long),
    Column.new(6, 'deferred', :long),
    Column.new(7, 'delivered', :long),
    Column.new(8, 'invalid_emails', :long),
    Column.new(9, 'opens', :long),
    Column.new(10, 'processed', :long),
    Column.new(11, 'requests', :long),
    Column.new(12, 'spam_report_drops', :long),
    Column.new(13, 'spam_reports', :long),
    Column.new(14, 'unique_clicks', :long),
    Column.new(15, 'unique_opens', :long),
    Column.new(16, 'unsubscribe_drops', :long),
    Column.new(17, 'unsubscribes', :long)
  ]

  resume(task, columns, 1, &control)
end

Instance Method Details

#runObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/embulk/input/sendgrid.rb', line 47

def run
  max_category_limit = 100

  date = @task[:start_date] == 'today' ? Date.today : Date.parse(@task[:start_date])
  end_date = @task[:end_date] == 'today' ? Date.today : Date.parse(@task[:end_date])
  endpoint = 'https://api.sendgrid.com/v3/categories/stats/sums'

  while date <= end_date
    json = RestClient.get(endpoint, { params: { start_date: date.strftime("%Y-%m-%d"), limit: max_category_limit }, Authorization: "Bearer #{@task[:api_key]}", content_type: 'application/json' })
    results = JSON.parse(json)

    results["stats"].each do |metrics|
      @page_builder.add(metrics["metrics"].values.unshift(metrics["name"]).unshift(Time.parse(results["date"])))
    end

    date = date.next_day
  end

  @page_builder.finish
  {}
end