embulk-input-mixpanel 0.5.14 → 0.5.15

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: cf14d1cd9b35cd1dbde2a915a31fa71b7c321fc3
4
- data.tar.gz: 3bd9b09fd763e0b42537f88879146606dbd92d1d
3
+ metadata.gz: 6c2a00332d19da50d63a726cac679e745206ccab
4
+ data.tar.gz: f2810c25272ee6b001f206dd0ddd93895c247ab6
5
5
  SHA512:
6
- metadata.gz: 5c1b12301829f2d451013c0883a06d442fad5321c1b497d7d8761ffd6bd7313ada5fa2c2ede54752a56b2e17f0f324741a449831deb4112625d0200ba2448fd6
7
- data.tar.gz: d7fd325a8a6f70c0ff61330f5f3f0f1733242f20f2c5349bd8491ebcfab9c78bbf1a6eb0e870027b5b9ffe61bb15f7fdc073dc979b30278853a9c3ade7894be3
6
+ metadata.gz: 062a5d9d8948ba9efe802b477756484f03add6ce542d9bdbf40ee3988c2c943f5f6445fc32b15d05dfd0b909761fbf4f47f530e0e2d1357b1a57ca0c20074c55
7
+ data.tar.gz: df58ccf3ab6acad568681d57c39e97258849dc6e3946f5367ccdf31d64265d8c6d6afbb724259b66d21003b670b1763b6e097a0e871ff9bdaeb9e396f5e1b0cc
@@ -1,6 +1,9 @@
1
1
  language: ruby
2
2
 
3
- jdk: oraclejdk8
3
+ dist: trusty
4
+
5
+ jdk: openjdk8
6
+
4
7
  sudo: false
5
8
 
6
9
  addons:
@@ -15,9 +18,9 @@ before_install:
15
18
  ruby -v
16
19
  rvm get head
17
20
  rvm use jruby-9.0.5.0 --install
18
- gem install bundler
21
+ gem install bundler -v '< 2'
19
22
  ruby -v
20
- - gem i bundler
23
+ - gem install bundler -v '< 2'
21
24
 
22
25
  rvm:
23
26
  - jruby-9.0.5.0
@@ -1,6 +1,10 @@
1
+ ## 0.5.15 - 2020-01-22
2
+
3
+ * [enhancement] Update the authentication method to latest [#63](https://github.com/treasure-data/embulk-input-mixpanel/pull/63)
4
+
1
5
  ## 0.5.14 - 2018-10-22
2
6
 
3
- * [enhancement] Handle the wrong period during transition from standard to daylight saving time exception [#61](https://github.com/treasure-data/embulk-input-mixpanel/pull/61)
7
+ * [enhancement] Handle the wrong period during transition from standard to daylight saving time exception [#62](https://github.com/treasure-data/embulk-input-mixpanel/pull/62)
4
8
 
5
9
  ## 0.5.13 - 2018-10-04
6
10
 
data/README.md CHANGED
@@ -31,7 +31,6 @@ To get it, you should log in mixpanel website, and click gear icon at the lower
31
31
 
32
32
  ### Configuration
33
33
 
34
- - **api_key**: project API Key (string, required)
35
34
  - **api_secret**: project API Secret (string, required)
36
35
  - **export_endpoint**: the Data Export API's endpoint (string, default to "http://data.mixpanel.com/api/2.0/export")
37
36
  - **timezone**: project timezone(string, required)
@@ -69,7 +68,6 @@ If you have such data and set config.yml as below.
69
68
  ```yaml
70
69
  in:
71
70
  type: mixpanel
72
- api_key: "API_KEY"
73
71
  api_secret: "API_SECRET"
74
72
  timezone: "US/Pacific"
75
73
  from_date: "2015-07-19"
@@ -102,7 +100,6 @@ in:
102
100
  ```yaml
103
101
  in:
104
102
  type: mixpanel
105
- api_key: "API_KEY"
106
103
  api_secret: "API_SECRET"
107
104
  timezone: "US/Pacific"
108
105
  from_date: "2015-07-19"
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "embulk-input-mixpanel"
3
- spec.version = "0.5.14"
3
+ spec.version = "0.5.15"
4
4
  spec.authors = ["yoshihara", "uu59"]
5
5
  spec.summary = "Mixpanel input plugin for Embulk"
6
6
  spec.description = "Loads records from Mixpanel."
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.require_paths = ["lib"]
14
14
 
15
15
  spec.add_dependency 'httpclient', '>= 2.8.3' # To use tcp_keepalive
16
- spec.add_dependency 'tzinfo'
16
+ spec.add_dependency 'tzinfo', '1.2.5' # to avoid failure in when upgrade to 1.2.6 https://github.com/tzinfo/tzinfo/issues/114
17
17
  spec.add_dependency 'perfect_retry', ["~> 0.5"]
18
18
  spec.add_dependency 'activesupport'
19
19
  spec.add_development_dependency 'bundler', ['~> 1.0']
@@ -61,7 +61,6 @@ module Embulk
61
61
  dates: range,
62
62
  timezone: timezone,
63
63
  export_endpoint: export_endpoint(config),
64
- api_key: config.param(:api_key, :string),
65
64
  api_secret: config.param(:api_secret, :string),
66
65
  schema: config.param(:columns, :array),
67
66
  fetch_unknown_columns: fetch_unknown_columns,
@@ -129,8 +128,7 @@ module Embulk
129
128
  retry_initial_wait_sec: config.param(:retry_initial_wait_sec, :integer, default: 1),
130
129
  retry_limit: config.param(:retry_limit, :integer, default: 5),
131
130
  })
132
- client = MixpanelApi::Client.new(config.param(:api_key, :string),
133
- config.param(:api_secret, :string),
131
+ client = MixpanelApi::Client.new(config.param(:api_secret, :string),
134
132
  retryer,
135
133
  export_endpoint(config))
136
134
 
@@ -162,7 +160,6 @@ module Embulk
162
160
 
163
161
  def init
164
162
  @export_endpoint = task[:export_endpoint]
165
- @api_key = task[:api_key]
166
163
  @api_secret = task[:api_secret]
167
164
  @params = task[:params]
168
165
  @timezone = task[:timezone]
@@ -310,7 +307,7 @@ module Embulk
310
307
  )
311
308
  end
312
309
  Embulk.logger.info "Where params is #{params["where"]}"
313
- client = MixpanelApi::Client.new(@api_key, @api_secret, self.class.perfect_retry(task), @export_endpoint)
310
+ client = MixpanelApi::Client.new(@api_secret, self.class.perfect_retry(task), @export_endpoint)
314
311
 
315
312
  if preview?
316
313
  client.export_for_small_dataset(params)
@@ -342,9 +339,7 @@ module Embulk
342
339
  def self.export_params(config)
343
340
  event = config.param(:event, :array, default: nil)
344
341
  event = event.nil? ? nil : event.to_json
345
-
346
342
  {
347
- api_key: config.param(:api_key, :string),
348
343
  event: event,
349
344
  where: config.param(:where, :string, default: nil),
350
345
  bucket: config.param(:bucket, :string, default: nil),
@@ -29,7 +29,9 @@ module Embulk
29
29
  begin
30
30
  retryer.with_retry do
31
31
  client = HTTPClient.new
32
+ client.force_basic_auth = true
32
33
  client.connect_timeout = PING_TIMEOUT_SECONDS
34
+ client.set_auth(nil, @api_secret, nil)
33
35
  client.get(URI.join(endpoint, '/'))
34
36
  end
35
37
  true
@@ -38,9 +40,8 @@ module Embulk
38
40
  end
39
41
  end
40
42
 
41
- def initialize(api_key, api_secret, retryer = nil, endpoint = DEFAULT_EXPORT_ENDPOINT)
43
+ def initialize(api_secret, retryer = nil, endpoint = DEFAULT_EXPORT_ENDPOINT)
42
44
  @endpoint = endpoint
43
- @api_key = api_key
44
45
  @api_secret = api_secret
45
46
  @retryer = retryer || PerfectRetry.new do |config|
46
47
  # for test
@@ -100,7 +101,6 @@ module Embulk
100
101
  def request(params, &block)
101
102
  # https://mixpanel.com/docs/api-documentation/exporting-raw-data-you-inserted-into-mixpanel
102
103
  Embulk.logger.debug "Export param: #{params.to_s}"
103
- set_signatures(params)
104
104
 
105
105
  buf = ""
106
106
  error_response = ''
@@ -133,7 +133,6 @@ module Embulk
133
133
  # guess/preview
134
134
  # Try to fetch first number of records
135
135
  params["limit"] = num_of_records
136
- set_signatures(params)
137
136
  Embulk.logger.info "Sending request to #{@endpoint}"
138
137
  res = httpclient.get(@endpoint, params)
139
138
  handle_error(res,res.body)
@@ -154,25 +153,6 @@ module Embulk
154
153
  end
155
154
  end
156
155
 
157
- def set_signatures(params)
158
- params[:expire] ||= Time.now.to_i + TIMEOUT_SECONDS
159
- params[:sig] = signature(params)
160
- params
161
- end
162
-
163
- def signature(params)
164
- # https://mixpanel.com/docs/api-documentation/data-export-api#auth-implementation
165
- params.delete(:sig)
166
- sorted_keys = params.keys.map(&:to_s).sort
167
- signature = sorted_keys.inject("") do |sig, key|
168
- value = params[key] || params[key.to_sym]
169
- next sig unless value
170
- sig << "#{key}=#{value}"
171
- end
172
-
173
- Digest::MD5.hexdigest(signature + @api_secret)
174
- end
175
-
176
156
  def httpclient
177
157
  @client ||=
178
158
  begin
@@ -181,6 +161,8 @@ module Embulk
181
161
  client.tcp_keepalive = true
182
162
  client.default_header = {Accept: "application/json; charset=UTF-8"}
183
163
  # client.debug_dev = STDERR
164
+ client.force_basic_auth = true
165
+ client.set_auth(nil, @api_secret, nil);
184
166
  client
185
167
  end
186
168
  end
@@ -8,49 +8,28 @@ module Embulk
8
8
  class ClientTest < Test::Unit::TestCase
9
9
  include OverrideAssertRaise
10
10
 
11
- API_KEY = "api_key".freeze
12
11
  API_SECRET = "api_secret".freeze
13
12
 
14
13
  def setup
15
- @client = Client.new(API_KEY, API_SECRET)
14
+ @client = Client.new(API_SECRET)
16
15
  stub(Embulk).logger { ::Logger.new(IO::NULL) }
17
16
  end
18
17
 
19
- # NOTE: Client#signature is private method but this value
20
- # can't be checked via other methods.
21
- def test_signature
22
- now = Time.parse("2015-07-22 00:00:00")
23
- stub(Time).now { now }
24
-
25
- params = {
26
- string: "string",
27
- array: ["elem1", "elem2"],
28
- }
29
- expected = "4be4a4f92f57e12b543a2a5f2f5897b6"
30
-
31
- assert_equal(expected, @client.__send__(:signature, params))
32
- end
33
-
34
18
  class TestKeepAlive < self
35
19
  def test_tcp_keepalive_enabled
36
- client = Client.new(API_KEY, API_SECRET)
20
+ client = Client.new(API_SECRET)
37
21
  assert client.send(:httpclient).tcp_keepalive
38
22
  end
39
23
  end
40
24
 
41
25
  class TryToDatesTest < self
42
26
  def setup
43
- @client = Client.new(API_KEY, API_SECRET)
27
+ @client = Client.new(API_SECRET)
44
28
  end
45
29
 
46
- data do
47
- [
48
- ["2000-01-01", "2000-01-01"],
49
- ["2010-01-01", "2010-01-01"],
50
- ["3 days ago", (Date.today - 3).to_s],
51
- ]
52
- end
53
- def test_candidates(from_str)
30
+
31
+ def test_candidates_case1
32
+ from_str = "2000-01-01"
54
33
  from = Date.parse(from_str)
55
34
  yesterday = Date.today - 1
56
35
  dates = @client.try_to_dates(from.to_s)
@@ -66,6 +45,24 @@ module Embulk
66
45
  assert_equal expect, dates
67
46
  assert dates.all?{|d| d <= yesterday}
68
47
  end
48
+
49
+ def test_candidates_case2
50
+ from_str = (Date.today - 3).to_s
51
+ from = Date.parse(from_str)
52
+ yesterday = Date.today - 1
53
+ dates = @client.try_to_dates(from.to_s)
54
+ expect = [
55
+ from + 1,
56
+ from + 10,
57
+ from + 100,
58
+ from + 1000,
59
+ from + 10000,
60
+ yesterday,
61
+ ].find_all{|d| d <= yesterday}
62
+
63
+ assert_equal expect, dates
64
+ assert dates.all?{|d| d <= yesterday}
65
+ end
69
66
  end
70
67
 
71
68
  class ExportTest < self
@@ -77,7 +74,7 @@ module Embulk
77
74
 
78
75
  def test_success
79
76
  stub_client
80
- stub(@client).set_signatures(anything) {}
77
+ # stub(@client).set_signatures(anything) {}
81
78
  stub_response(success_response)
82
79
 
83
80
  records = []
@@ -90,7 +87,7 @@ module Embulk
90
87
 
91
88
  def test_export_partial_with_export_terminated_early
92
89
  stub_client
93
- stub(@client).set_signatures(anything) {}
90
+ # stub(@client).set_signatures(anything) {}
94
91
  stub_response(Struct.new(:code, :body).new(200, jsonl_dummy_responses+"\nexport terminated early"))
95
92
 
96
93
  records = []
@@ -104,7 +101,7 @@ module Embulk
104
101
 
105
102
  def test_export_partial_with_error_json
106
103
  stub_client
107
- stub(@client).set_signatures(anything) {}
104
+ # stub(@client).set_signatures(anything) {}
108
105
  stub_response(Struct.new(:code, :body).new(200, jsonl_dummy_responses+"\n{\"error\":"))
109
106
  records = []
110
107
  assert_raise MixpanelApi::IncompleteExportResponseError do
@@ -203,7 +200,6 @@ module Embulk
203
200
 
204
201
  def params
205
202
  {
206
- "api_key" => API_KEY,
207
203
  "api_secret" => API_SECRET,
208
204
  "from_date" => "2015-01-01",
209
205
  "to_date" => "2015-03-02",
@@ -9,7 +9,6 @@ module Embulk
9
9
  class MixpanelTest < Test::Unit::TestCase
10
10
  include OverrideAssertRaise
11
11
 
12
- API_KEY = "api_key".freeze
13
12
  API_SECRET = "api_secret".freeze
14
13
  FROM_DATE = "2015-02-22".freeze
15
14
  TO_DATE = "2015-03-02".freeze
@@ -31,7 +30,6 @@ module Embulk
31
30
 
32
31
  def setup_client
33
32
  params = {
34
- api_key: API_KEY,
35
33
  event: nil,
36
34
  where: nil,
37
35
  bucket: nil,
@@ -72,7 +70,6 @@ module Embulk
72
70
  def test_from_date_old_date
73
71
  config = {
74
72
  type: "mixpanel",
75
- api_key: API_KEY,
76
73
  api_secret: API_SECRET,
77
74
  from_date: FROM_DATE,
78
75
  }
@@ -87,7 +84,6 @@ module Embulk
87
84
  def test_from_date_future
88
85
  config = {
89
86
  type: "mixpanel",
90
- api_key: API_KEY,
91
87
  api_secret: API_SECRET,
92
88
  timezone: TIMEZONE,
93
89
  from_date: (today + 1).to_s
@@ -103,7 +99,6 @@ module Embulk
103
99
  from_date = (today - 1).to_s
104
100
  config = {
105
101
  type: "mixpanel",
106
- api_key: API_KEY,
107
102
  api_secret: API_SECRET,
108
103
  from_date: from_date,
109
104
  }
@@ -117,7 +112,6 @@ module Embulk
117
112
  def test_no_from_date
118
113
  config = {
119
114
  type: "mixpanel",
120
- api_key: API_KEY,
121
115
  api_secret: API_SECRET,
122
116
  timezone: TIMEZONE
123
117
  }
@@ -141,7 +135,6 @@ module Embulk
141
135
  stub(Embulk::Input::MixpanelApi::Client).mixpanel_available? { false }
142
136
  config = {
143
137
  type: "mixpanel",
144
- api_key: API_KEY,
145
138
  api_secret: API_SECRET,
146
139
  }
147
140
 
@@ -300,7 +293,6 @@ module Embulk
300
293
  def transaction_task(timezone)
301
294
  task.merge(
302
295
  dates: DATES.map {|date| date.to_s},
303
- api_key: API_KEY,
304
296
  api_secret: API_SECRET,
305
297
  incremental: true,
306
298
  incremental_column: nil,
@@ -366,7 +358,6 @@ module Embulk
366
358
  from_date = Date.parse(FROM_DATE)
367
359
  task.merge(
368
360
  dates: (from_date..(from_date + days - 1)).map {|date| date.to_s},
369
- api_key: API_KEY,
370
361
  api_secret: API_SECRET,
371
362
  timezone: TIMEZONE,
372
363
  schema: schema
@@ -434,7 +425,6 @@ module Embulk
434
425
  def transaction_task
435
426
  task.merge(
436
427
  dates: DATES.map {|date| date.to_s},
437
- api_key: API_KEY,
438
428
  api_secret: API_SECRET,
439
429
  timezone: TIMEZONE,
440
430
  schema: schema
@@ -451,7 +441,6 @@ module Embulk
451
441
  def test_export_params
452
442
  config_params = [
453
443
  :type, "mixpanel",
454
- :api_key, API_KEY,
455
444
  :api_secret, API_SECRET,
456
445
  :from_date, FROM_DATE,
457
446
  :to_date, TO_DATE,
@@ -463,7 +452,6 @@ module Embulk
463
452
  config = DataSource[*config_params]
464
453
 
465
454
  expected = {
466
- api_key: API_KEY,
467
455
  event: "[\"ViewHoge\",\"ViewFuga\"]",
468
456
  where: 'properties["$os"] == "Windows"',
469
457
  bucket: "987",
@@ -541,7 +529,6 @@ module Embulk
541
529
 
542
530
  def task
543
531
  {
544
- api_key: API_KEY,
545
532
  api_secret: API_SECRET,
546
533
  export_endpoint: "https://data.mixpanel.com/api/2.0/export/",
547
534
  timezone: TIMEZONE,
@@ -846,7 +833,6 @@ module Embulk
846
833
 
847
834
  def task
848
835
  {
849
- api_key: API_KEY,
850
836
  api_secret: API_SECRET,
851
837
  export_endpoint: "https://data.mixpanel.com/api/2.0/export/",
852
838
  timezone: TIMEZONE,
@@ -891,7 +877,6 @@ module Embulk
891
877
  def config
892
878
  {
893
879
  type: "mixpanel",
894
- api_key: API_KEY,
895
880
  api_secret: API_SECRET,
896
881
  from_date: FROM_DATE,
897
882
  fetch_days: DAYS,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-input-mixpanel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.14
4
+ version: 0.5.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - yoshihara
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-10-22 00:00:00.000000000 Z
12
+ date: 2020-02-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  requirement: !ruby/object:Gem::Requirement
@@ -28,17 +28,17 @@ dependencies:
28
28
  - !ruby/object:Gem::Dependency
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 1.2.5
34
34
  name: tzinfo
35
35
  prerelease: false
36
36
  type: :runtime
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - ">="
39
+ - - '='
40
40
  - !ruby/object:Gem::Version
41
- version: '0'
41
+ version: 1.2.5
42
42
  - !ruby/object:Gem::Dependency
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements: