fluent-plugin-amplitude 0.0.9 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a2df4393337ff57bd66d8282d7d27d00e18fd11f
4
- data.tar.gz: 0bb12c933cdfed442fdec1c8cde1fe66e06712b6
3
+ metadata.gz: 5a99dfa0622abec2b9b5b7eced10c234698e62f9
4
+ data.tar.gz: 0b2b2e968e091881426eae51e4b812d22351bc0f
5
5
  SHA512:
6
- metadata.gz: 9f3a3f198523457df7d57b82ee7eb6bb75536be0665a8c4ef9e027118878fa09459988092d78913377eaae44251e29d4b70d92cd79a665172dda71e8c57b7dec
7
- data.tar.gz: 08ac45b1b9eea96014545ff9c9e9c11b05f524c7de17541125410ca3e323fcc36049df41bdf17b163a9a9641bbf89122d917cdcc466ba50a81a6d486cf8a1eea
6
+ metadata.gz: 2dba48d6ac9d57bfc8871c91371bb9ee789f54ff232a28d7405f6cd11275ad606df15d4a58107a4bb45518ad4f3c1fcafcbf0afcbfc818d9d14459c6607e63a1
7
+ data.tar.gz: b3e098e985a55091aee6e17668e2b92779456f39e96eb3a6e15039555225ab210f211655f45e6062217e49ba6dbfccd0ec68ee700215d70f3bf63e4754cadea1
data/README.md CHANGED
@@ -23,6 +23,7 @@ $ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-amplitude
23
23
  api_key XXXXXX
24
24
  user_id_key user_id
25
25
  device_id_key uuid
26
+ time_key created_at
26
27
  user_properties first_name, last_name
27
28
  event_properties current_source
28
29
  properties_blacklist user
@@ -44,6 +45,9 @@ AmplitudeOutput needs your Amplitude `api_key` ([see Amplitude for more informat
44
45
  #### user_id_key and device_id_key
45
46
  You must set at least one of `user_id_key` and `device_id_key`. They will be used to pull out the `user_id` and `device_id` values from the record to send to the Amplitude API. Note these can both be arrays, and the first matching key will be used.
46
47
 
48
+ #### time_key
49
+ If set, `time_key` will be used to pull out a timestamp field to set as `time` in the Amplitude API request. This can be an array, the first matching key will be used.
50
+
47
51
  #### user_properties and event_properties
48
52
  You can optionally specify lists of `user_properties` and `event_properties` to pull from the record.
49
53
 
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'fluent-plugin-amplitude'
7
- spec.version = '0.0.9'
7
+ spec.version = '0.1.0'
8
8
  spec.authors = ['Vijay Ramesh']
9
9
  spec.email = ['vijay@change.org']
10
10
  spec.summary = 'Fluentd plugin to output event data to Amplitude'
@@ -10,6 +10,7 @@ module Fluent
10
10
  config_param :api_key, :string, secret: true
11
11
  config_param :device_id_key, :array, default: nil
12
12
  config_param :user_id_key, :array, default: nil
13
+ config_param :time_key, :array, default: nil
13
14
  config_param :user_properties, :array, default: nil
14
15
  config_param :event_properties, :array, default: nil
15
16
  config_param :properties_blacklist, :array, default: nil
@@ -42,6 +43,7 @@ module Fluent
42
43
 
43
44
  filter_properties_blacklist!(record)
44
45
  extract_user_and_device!(amplitude_hash, record)
46
+ set_time!(amplitude_hash, record)
45
47
  extract_user_properties!(amplitude_hash, record)
46
48
  extract_event_properties!(amplitude_hash, record)
47
49
 
@@ -98,6 +100,25 @@ module Fluent
98
100
  present?(user_id) || present?(device_id)
99
101
  end
100
102
 
103
+ def set_time!(amplitude_hash, record)
104
+ return unless @time_key && !@time_key.empty?
105
+ @time_key.each do |time_key|
106
+ next unless record[time_key]
107
+ if (time = parse_time_from_string(record[time_key]))
108
+ amplitude_hash[:time] = time
109
+ break
110
+ end
111
+ end
112
+ end
113
+
114
+ def parse_time_from_string(time_string)
115
+ # this should be seconds since epoch; amplitude-api
116
+ # converts it to milliseconds since epoch as needed.
117
+ Time.parse(time_string).to_i
118
+ rescue StandardError => e
119
+ log.info("failed to parse #{time_string}: #{e.message}")
120
+ end
121
+
101
122
  def extract_user_properties!(amplitude_hash, record)
102
123
  # if user_properties are specified, pull them off of the record
103
124
  return unless @user_properties
@@ -132,8 +153,11 @@ module Fluent
132
153
  errors << [[res.response_code, res.body]]
133
154
  end
134
155
  end
135
- return if errors.empty?
156
+ log_errors(errors)
157
+ end
136
158
 
159
+ def log_errors(errors)
160
+ return if errors.empty?
137
161
  errors_string = errors.map do |code, body|
138
162
  "Response: #{code} Body: #{body}"
139
163
  end
@@ -285,6 +285,51 @@ describe Fluent::AmplitudeOutput do
285
285
  }
286
286
  end
287
287
 
288
+ it 'produces the expected output' do
289
+ amplitude.expect_format [tag, now, formatted_event].to_msgpack
290
+ amplitude.run
291
+ end
292
+ end
293
+ context 'time_key specified' do
294
+ let(:conf) do
295
+ %(
296
+ api_key XXXXXX
297
+ user_id_key user_id
298
+ device_id_key uuid
299
+ time_key created_at
300
+ user_properties first_name, last_name
301
+ event_properties current_source
302
+ )
303
+ end
304
+ let(:event) do
305
+ {
306
+ 'user_id' => 42,
307
+ 'uuid' => 'e6153b00-85d8-11e6-b1bc-43192d1e493f',
308
+ 'first_name' => 'Bobby',
309
+ 'last_name' => 'Weir',
310
+ 'state' => 'CA',
311
+ 'current_source' => 'fb_share',
312
+ 'recruiter_id' => 710,
313
+ 'created_at' => '2016-12-20T00:00:06Z'
314
+ }
315
+ end
316
+
317
+ let(:formatted_event) do
318
+ {
319
+ event_type: tag,
320
+ user_id: 42,
321
+ device_id: 'e6153b00-85d8-11e6-b1bc-43192d1e493f',
322
+ time: Time.parse('2016-12-20T00:00:06Z').to_i,
323
+ user_properties: {
324
+ first_name: 'Bobby',
325
+ last_name: 'Weir'
326
+ },
327
+ event_properties: {
328
+ current_source: 'fb_share'
329
+ }
330
+ }
331
+ end
332
+
288
333
  it 'produces the expected output' do
289
334
  amplitude.expect_format [tag, now, formatted_event].to_msgpack
290
335
  amplitude.run
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-amplitude
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vijay Ramesh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-22 00:00:00.000000000 Z
11
+ date: 2017-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd