embulk-input-marketo 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +16 -62
- data/.travis.yml.erb +9 -14
- data/CHANGELOG.md +8 -0
- data/README.md +2 -4
- data/embulk-input-marketo.gemspec +2 -1
- data/gemfiles/embulk-latest +1 -1
- data/lib/embulk/input/marketo/activity_log.rb +13 -12
- data/lib/embulk/input/marketo/lead.rb +19 -17
- data/lib/embulk/input/marketo_api/soap/activity_log.rb +25 -23
- data/lib/embulk/input/marketo_api/soap/base.rb +14 -19
- data/lib/embulk/input/marketo_api/soap/lead.rb +22 -17
- data/test/activity_log_fixtures.rb +181 -150
- data/test/embulk/input/marketo/test_activity_log.rb +13 -15
- data/test/embulk/input/marketo/test_lead.rb +19 -22
- data/test/embulk/input/marketo_api/soap/test_activity_log.rb +33 -8
- data/test/embulk/input/marketo_api/soap/test_base.rb +2 -14
- data/test/embulk/input/marketo_api/soap/test_lead.rb +2 -2
- data/test/lead_fixtures.rb +11 -19
- data/test/savon_helper.rb +17 -0
- metadata +18 -25
- data/gemfiles/embulk-0.6.0-latest +0 -4
- data/gemfiles/embulk-0.6.13 +0 -4
- data/gemfiles/embulk-0.6.14 +0 -4
- data/gemfiles/embulk-0.6.15 +0 -4
- data/gemfiles/embulk-0.6.16 +0 -4
- data/gemfiles/embulk-0.6.17 +0 -4
- data/gemfiles/embulk-0.6.18 +0 -4
- data/gemfiles/embulk-0.6.19 +0 -4
- data/gemfiles/embulk-0.6.20 +0 -4
- data/gemfiles/embulk-0.6.21 +0 -4
- data/gemfiles/embulk-0.6.22 +0 -4
- data/gemfiles/embulk-0.6.23 +0 -4
- data/gemfiles/embulk-0.6.24 +0 -4
- data/gemfiles/embulk-0.6.25 +0 -4
- data/gemfiles/embulk-0.6.26 +0 -4
- data/gemfiles/embulk-0.6.27 +0 -4
- data/gemfiles/embulk-0.7.0 +0 -4
- data/gemfiles/embulk-0.7.0-latest +0 -4
- data/gemfiles/embulk-0.7.1 +0 -4
- data/gemfiles/embulk-0.7.2 +0 -4
- data/gemfiles/embulk-0.7.3 +0 -4
- data/gemfiles/embulk-0.7.4 +0 -4
- data/gemfiles/embulk-0.7.5 +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e89a971b0dca06b010f1081c37969c59c1ef04c
|
4
|
+
data.tar.gz: 8dda51b8e935c023e514c6db6e1e15b868fc59ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a4f0072db71cdbd8ea2b6cad7c1071c5fd5ca05efe827d27d0e6185142028464890f98b413343e98396330d037ced52e114bbeec9c229a2746f573bfda070b7a
|
7
|
+
data.tar.gz: e7e7f52566640fba0a3d5cb23087dc10f6e94dd7635e6a17e36018cd8aed257ced0608a50793596608e84b0f5cb31e2bbd6c36506185b1f98bb83bd7f4004f7f
|
data/.travis.yml
CHANGED
@@ -5,87 +5,41 @@ addons:
|
|
5
5
|
repo_token:
|
6
6
|
secure: "cYPXD2Dv1VOU0rdUSsevrGuHcjBajCTq8s961R8d2pPkX+V1AbmIMKK0if00qMgqR7D65p6jOnfiuZfXolF1z4awqLXNu7LhP6zOr1hMRCOHOfjj/SJLbm5MFreN81G+6k4XpfBlA9YShA9E/nNVxBmakxC8aCnlJHGfDUbkb9kmNX/LXSNf0efZMRVr3vN8tP6tHP0TUCx90A2FNols9qHgl+boxF090OpgFTspyeqC6K82Q4D97RwajnM+oKIBMfxuc4Pc1n+PZ+mQQfYNK7ze4WszXRtQydwDD7rtF5d6IwczElZ243GjXxdJWL6inUvcMJQogC5X8ayh7m0ZNT2awfbJXT1tsLte42j+/eUAPaCD07bE8XzgdmfTdmpxP6nHasAMkleDMlcBRrxht+cGD61qEXcsSKd0c7mnvg35L+hl39NGFde0yz1Xxx/D69p9KHE0pa7cZNC7D8n1w9AUxFdl8OX6rfDlgiapIonAF/QG/5Z3ltHDzZu6XK1MMFugrdV7SxuSepL3xgBv5jN0jMA/GVmvFbXf6FGDXxt/bhSUCZoTJ/c8BaRnIM+QTkBts6TqgQ6BeUQNAe5p0TtssNwMW8RC4DpkaLDeQRSScJJ6V6UDpjsPJ3hcozpzrCVwy/5F72MYzcHeKg85EF30aA94Q+EDbsKUR0BEeGo="
|
7
7
|
|
8
|
-
notifications:
|
9
|
-
slack:
|
10
|
-
secure: NP6hpwbwLnX9jFgENk3FN3B4jO4b2bIeK7gU9tRw87QmlUFDCcypSVYJrd7j1oQP4plZy+ohZMCs7RQJmtP1k2RQ99tu2ncWhslpz6f5zZo1Hjx4hleFpAv6N9tycfxEILcq/USxcTdM/8/YPtDr5WXM+w3hTuE21VlxqT6ED9LUYaiiUZeZApBXYAe36BIOGe+TtmwWrMfXvaqaoAt0A7pIzaXPD4i7WxR+qAMM4gjJGzH4JKs2zoQ2MgI81xD5Pe0yz/5ciiHATJj0WFkrOeZaoqFvW5MQ20eArvfW9dC7/fXnrPx8RPd6iaD29hQfnPI2mnWRvXxch0DsBcYOfFzYpdgx43XVTXVJ3zyudbgqnL8RrTbwIMsxIrEW3hAZ1MvxiKDBACWFdbzz8GAjywaq0zRZ/zKam1zcDRMQAWnZP54wUFHfSXvZWhRDzImSYTM75EqaspTabRQp89SpRuaGl+ab7wEDdJBXqLiUf7jHYc2K3F9o4B99luSvbxGv97M9D7P+Aee7tpFe4mjTuxjDnIVDbQzdza8qrZWXNfymSPb2pZOKP535alF92XalExBQnxKPzmUYDpTksrsgYPZeUHcnwO6J5lCPfPerWJ/U+s4PEm0HE5TpghhsZ901gYxCeDw/KnVQGsIy3f8YAI/+YVwjl4Ld4BOd1MV2PB8=
|
11
|
-
|
12
8
|
before_install:
|
13
9
|
- |
|
14
10
|
# Currently, Travis can't treat jruby 9.0.1.0
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
11
|
+
ruby -v
|
12
|
+
rvm get head
|
13
|
+
rvm use jruby-9.0.5.0 --install
|
14
|
+
ruby -v
|
15
|
+
gem i bundler
|
16
|
+
bundle install
|
20
17
|
|
21
18
|
jdk: oraclejdk8
|
22
19
|
|
23
20
|
rvm:
|
24
|
-
- jruby-
|
25
|
-
|
21
|
+
- jruby-9.0.5.0
|
22
|
+
|
23
|
+
script: bundle exec rake test
|
26
24
|
|
27
25
|
gemfile:
|
28
|
-
- gemfiles/embulk-0.
|
29
|
-
- gemfiles/embulk-0.
|
30
|
-
- gemfiles/embulk-0.
|
31
|
-
- gemfiles/embulk-0.6.15
|
32
|
-
- gemfiles/embulk-0.6.16
|
33
|
-
- gemfiles/embulk-0.6.17
|
34
|
-
- gemfiles/embulk-0.6.18
|
35
|
-
- gemfiles/embulk-0.6.19
|
36
|
-
- gemfiles/embulk-0.6.20
|
37
|
-
- gemfiles/embulk-0.6.21
|
38
|
-
- gemfiles/embulk-0.6.22
|
39
|
-
- gemfiles/embulk-0.6.23
|
40
|
-
- gemfiles/embulk-0.6.24
|
41
|
-
- gemfiles/embulk-0.6.25
|
42
|
-
- gemfiles/embulk-0.6.26
|
43
|
-
- gemfiles/embulk-0.6.27
|
44
|
-
- gemfiles/embulk-0.7.0
|
45
|
-
- gemfiles/embulk-0.7.0-latest
|
46
|
-
- gemfiles/embulk-0.7.1
|
47
|
-
- gemfiles/embulk-0.7.2
|
48
|
-
- gemfiles/embulk-0.7.3
|
49
|
-
- gemfiles/embulk-0.7.4
|
50
|
-
- gemfiles/embulk-0.7.5
|
26
|
+
- gemfiles/embulk-0.8.0-latest
|
27
|
+
- gemfiles/embulk-0.8.7
|
28
|
+
- gemfiles/embulk-0.8.8
|
51
29
|
- gemfiles/embulk-latest
|
52
30
|
|
53
31
|
matrix:
|
54
32
|
exclude:
|
55
33
|
- jdk: oraclejdk8 # Ignore all matrix at first, use `include` to allow build
|
56
34
|
include:
|
57
|
-
- {rvm: jruby-
|
58
|
-
- {rvm: jruby-
|
59
|
-
- {rvm: jruby-
|
60
|
-
- {rvm: jruby-19mode, gemfile: gemfiles/embulk-0.6.15}
|
61
|
-
- {rvm: jruby-19mode, gemfile: gemfiles/embulk-0.6.16}
|
62
|
-
- {rvm: jruby-19mode, gemfile: gemfiles/embulk-0.6.17}
|
63
|
-
- {rvm: jruby-19mode, gemfile: gemfiles/embulk-0.6.18}
|
64
|
-
- {rvm: jruby-19mode, gemfile: gemfiles/embulk-0.6.19}
|
65
|
-
- {rvm: jruby-19mode, gemfile: gemfiles/embulk-0.6.20}
|
66
|
-
- {rvm: jruby-19mode, gemfile: gemfiles/embulk-0.6.21}
|
67
|
-
- {rvm: jruby-19mode, gemfile: gemfiles/embulk-0.6.22}
|
68
|
-
- {rvm: jruby-19mode, gemfile: gemfiles/embulk-0.6.23}
|
69
|
-
- {rvm: jruby-19mode, gemfile: gemfiles/embulk-0.6.24}
|
70
|
-
- {rvm: jruby-19mode, gemfile: gemfiles/embulk-0.6.25}
|
71
|
-
- {rvm: jruby-19mode, gemfile: gemfiles/embulk-0.6.26}
|
72
|
-
- {rvm: jruby-19mode, gemfile: gemfiles/embulk-0.6.27}
|
73
|
-
- {rvm: jruby-9.0.0.0, gemfile: gemfiles/embulk-0.7.0}
|
74
|
-
- {rvm: jruby-9.0.0.0, gemfile: gemfiles/embulk-0.7.0-latest}
|
75
|
-
- {rvm: jruby-9.0.0.0, gemfile: gemfiles/embulk-0.7.1}
|
76
|
-
- {rvm: jruby-9.0.0.0, gemfile: gemfiles/embulk-0.7.2}
|
77
|
-
- {rvm: jruby-9.0.0.0, gemfile: gemfiles/embulk-0.7.3}
|
78
|
-
- {rvm: jruby-9.0.0.0, gemfile: gemfiles/embulk-0.7.4}
|
79
|
-
- {rvm: jruby-9.0.0.0, gemfile: gemfiles/embulk-0.7.5}
|
35
|
+
- {rvm: jruby-9.0.0.0, gemfile: gemfiles/embulk-0.8.0-latest}
|
36
|
+
- {rvm: jruby-9.0.0.0, gemfile: gemfiles/embulk-0.8.7}
|
37
|
+
- {rvm: jruby-9.0.0.0, gemfile: gemfiles/embulk-0.8.8}
|
80
38
|
- {rvm: jruby-9.0.0.0, gemfile: gemfiles/embulk-latest}
|
81
39
|
|
82
40
|
|
83
41
|
allow_failures:
|
84
|
-
- gemfile: gemfiles/embulk-0.6.22
|
85
|
-
- gemfile: gemfiles/embulk-0.7.0
|
86
|
-
- gemfile: gemfiles/embulk-0.7.1
|
87
42
|
# Ignore failure for *-latest
|
88
|
-
- gemfile: embulk-0.
|
89
|
-
- gemfile: embulk-0.7.0-latest
|
43
|
+
- gemfile: embulk-0.8.0-latest
|
90
44
|
- gemfile: embulk-latest
|
91
45
|
|
data/.travis.yml.erb
CHANGED
@@ -5,24 +5,22 @@ addons:
|
|
5
5
|
repo_token:
|
6
6
|
secure: "cYPXD2Dv1VOU0rdUSsevrGuHcjBajCTq8s961R8d2pPkX+V1AbmIMKK0if00qMgqR7D65p6jOnfiuZfXolF1z4awqLXNu7LhP6zOr1hMRCOHOfjj/SJLbm5MFreN81G+6k4XpfBlA9YShA9E/nNVxBmakxC8aCnlJHGfDUbkb9kmNX/LXSNf0efZMRVr3vN8tP6tHP0TUCx90A2FNols9qHgl+boxF090OpgFTspyeqC6K82Q4D97RwajnM+oKIBMfxuc4Pc1n+PZ+mQQfYNK7ze4WszXRtQydwDD7rtF5d6IwczElZ243GjXxdJWL6inUvcMJQogC5X8ayh7m0ZNT2awfbJXT1tsLte42j+/eUAPaCD07bE8XzgdmfTdmpxP6nHasAMkleDMlcBRrxht+cGD61qEXcsSKd0c7mnvg35L+hl39NGFde0yz1Xxx/D69p9KHE0pa7cZNC7D8n1w9AUxFdl8OX6rfDlgiapIonAF/QG/5Z3ltHDzZu6XK1MMFugrdV7SxuSepL3xgBv5jN0jMA/GVmvFbXf6FGDXxt/bhSUCZoTJ/c8BaRnIM+QTkBts6TqgQ6BeUQNAe5p0TtssNwMW8RC4DpkaLDeQRSScJJ6V6UDpjsPJ3hcozpzrCVwy/5F72MYzcHeKg85EF30aA94Q+EDbsKUR0BEeGo="
|
7
7
|
|
8
|
-
notifications:
|
9
|
-
slack:
|
10
|
-
secure: NP6hpwbwLnX9jFgENk3FN3B4jO4b2bIeK7gU9tRw87QmlUFDCcypSVYJrd7j1oQP4plZy+ohZMCs7RQJmtP1k2RQ99tu2ncWhslpz6f5zZo1Hjx4hleFpAv6N9tycfxEILcq/USxcTdM/8/YPtDr5WXM+w3hTuE21VlxqT6ED9LUYaiiUZeZApBXYAe36BIOGe+TtmwWrMfXvaqaoAt0A7pIzaXPD4i7WxR+qAMM4gjJGzH4JKs2zoQ2MgI81xD5Pe0yz/5ciiHATJj0WFkrOeZaoqFvW5MQ20eArvfW9dC7/fXnrPx8RPd6iaD29hQfnPI2mnWRvXxch0DsBcYOfFzYpdgx43XVTXVJ3zyudbgqnL8RrTbwIMsxIrEW3hAZ1MvxiKDBACWFdbzz8GAjywaq0zRZ/zKam1zcDRMQAWnZP54wUFHfSXvZWhRDzImSYTM75EqaspTabRQp89SpRuaGl+ab7wEDdJBXqLiUf7jHYc2K3F9o4B99luSvbxGv97M9D7P+Aee7tpFe4mjTuxjDnIVDbQzdza8qrZWXNfymSPb2pZOKP535alF92XalExBQnxKPzmUYDpTksrsgYPZeUHcnwO6J5lCPfPerWJ/U+s4PEm0HE5TpghhsZ901gYxCeDw/KnVQGsIy3f8YAI/+YVwjl4Ld4BOd1MV2PB8=
|
11
|
-
|
12
8
|
before_install:
|
13
9
|
- |
|
14
10
|
# Currently, Travis can't treat jruby 9.0.1.0
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
11
|
+
ruby -v
|
12
|
+
rvm get head
|
13
|
+
rvm use jruby-9.0.5.0 --install
|
14
|
+
ruby -v
|
15
|
+
gem i bundler
|
16
|
+
bundle install
|
20
17
|
|
21
18
|
jdk: oraclejdk8
|
22
19
|
|
23
20
|
rvm:
|
24
|
-
- jruby-
|
25
|
-
|
21
|
+
- jruby-9.0.5.0
|
22
|
+
|
23
|
+
script: bundle exec rake test
|
26
24
|
|
27
25
|
gemfile:
|
28
26
|
<% versions.each do |file| -%>
|
@@ -38,9 +36,6 @@ matrix:
|
|
38
36
|
<% end %>
|
39
37
|
|
40
38
|
allow_failures:
|
41
|
-
- gemfile: gemfiles/embulk-0.6.22
|
42
|
-
- gemfile: gemfiles/embulk-0.7.0
|
43
|
-
- gemfile: gemfiles/embulk-0.7.1
|
44
39
|
# Ignore failure for *-latest
|
45
40
|
<% versions.find_all{|file| file.to_s.match(/-latest/)}.each do |file| -%>
|
46
41
|
- gemfile: <%= file %>
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 0.5.0 - 2016-04-06
|
2
|
+
|
3
|
+
This version drops old Embulk supports. Embulk 0.8 or later is required since this version.
|
4
|
+
|
5
|
+
* [enhancement] Add tests for Embulk 0.8 and drop support old Embulk [#52](https://github.com/treasure-data/embulk-input-marketo/pull/52)
|
6
|
+
* [maintenance] Refactor lead and activity [#51](https://github.com/treasure-data/embulk-input-marketo/pull/51)
|
7
|
+
* [maintenance] Refactor retry [#50](https://github.com/treasure-data/embulk-input-marketo/pull/50)
|
8
|
+
|
1
9
|
## 0.4.0 - 2015-10-30
|
2
10
|
|
3
11
|
This version drops scheduled execution with marketo/lead.
|
data/README.md
CHANGED
@@ -14,10 +14,10 @@ This plugin uses Marketo SOAP API.
|
|
14
14
|
|
15
15
|
## Overview
|
16
16
|
|
17
|
-
Required Embulk version >= 0.
|
17
|
+
Required Embulk version >= 0.8.7 (since 0.5.0).
|
18
18
|
|
19
19
|
* **Plugin type**: input
|
20
|
-
* **Resume supported**:
|
20
|
+
* **Resume supported**: no for `marketo/lead`, yes for `marketo/activity_log`
|
21
21
|
* **Cleanup supported**: no
|
22
22
|
* **Guess supported**: yes
|
23
23
|
|
@@ -35,8 +35,6 @@ Below parameters are shown in "Admin" > "Web Services" page in Marketo.
|
|
35
35
|
|
36
36
|
### marketo/lead
|
37
37
|
|
38
|
-
**NOTE: If you use feature of scheduled execution (resume) with marketo/lead, you should not specify `to_datetime` because this plugin can't place next to_datetime (can't know the date to run with new config).**
|
39
|
-
|
40
38
|
- **endpoint** SOAP endpoint URL for your account (string, required)
|
41
39
|
- **wsdl** SOAP endpoint URL for your account (string, default: endpoint + "?WSDL")
|
42
40
|
- **user_id** Your user id (string, reqiured)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "embulk-input-marketo"
|
3
|
-
spec.version = "0.
|
3
|
+
spec.version = "0.5.0"
|
4
4
|
spec.authors = ["uu59", "yoshihara"]
|
5
5
|
spec.summary = "Marketo input plugin for Embulk"
|
6
6
|
spec.description = "Loads records from Marketo."
|
@@ -14,6 +14,7 @@ Gem::Specification.new do |spec|
|
|
14
14
|
|
15
15
|
spec.add_dependency 'savon', ['~> 2.11.1']
|
16
16
|
spec.add_dependency 'httpclient'
|
17
|
+
spec.add_dependency 'perfect_retry', ["~> 0.3.2"]
|
17
18
|
spec.add_development_dependency 'embulk', [">= 0.6.13", "< 1.0"]
|
18
19
|
spec.add_development_dependency 'bundler', ['~> 1.0']
|
19
20
|
spec.add_development_dependency 'rake', ['>= 10.0']
|
data/gemfiles/embulk-latest
CHANGED
@@ -58,25 +58,18 @@ module Embulk
|
|
58
58
|
def init
|
59
59
|
@columns = task[:columns]
|
60
60
|
@soap = MarketoApi.soap_client(task, target)
|
61
|
-
|
62
|
-
|
63
|
-
def run
|
64
|
-
options = {
|
61
|
+
@options = {
|
65
62
|
retry_initial_wait_sec: task[:retry_initial_wait_sec],
|
66
63
|
retry_limit: task[:retry_limit],
|
67
64
|
to: task[:to_datetime],
|
68
65
|
batch_size: (preview? ? PREVIEW_COUNT : BATCH_SIZE_DEFAULT),
|
69
66
|
}
|
67
|
+
end
|
70
68
|
|
69
|
+
def run
|
71
70
|
counter = 0
|
72
|
-
latest_updated_at = @soap.each(task[:from_datetime], options) do |activity_log|
|
73
|
-
|
74
|
-
name = column["name"].to_s
|
75
|
-
value = activity_log[name]
|
76
|
-
cast_value(column, value)
|
77
|
-
end
|
78
|
-
|
79
|
-
page_builder.add(values)
|
71
|
+
latest_updated_at = @soap.each(task[:from_datetime], @options) do |activity_log|
|
72
|
+
page_builder.add(format_record(activity_log))
|
80
73
|
break if preview? && (counter += 1) >= PREVIEW_COUNT
|
81
74
|
end
|
82
75
|
|
@@ -89,6 +82,14 @@ module Embulk
|
|
89
82
|
|
90
83
|
return task_report
|
91
84
|
end
|
85
|
+
|
86
|
+
def format_record(activity_log)
|
87
|
+
@columns.map do |column|
|
88
|
+
name = column["name"].to_s
|
89
|
+
value = activity_log[name]
|
90
|
+
cast_value(column, value)
|
91
|
+
end
|
92
|
+
end
|
92
93
|
end
|
93
94
|
end
|
94
95
|
end
|
@@ -94,30 +94,19 @@ module Embulk
|
|
94
94
|
@ranges = task[:ranges][index]
|
95
95
|
@soap = MarketoApi.soap_client(task, target)
|
96
96
|
@append_processed_time_column = task[:append_processed_time_column]
|
97
|
-
|
98
|
-
|
99
|
-
def run
|
100
|
-
options = {
|
97
|
+
@options = {
|
101
98
|
retry_initial_wait_sec: task[:retry_initial_wait_sec],
|
102
99
|
retry_limit: task[:retry_limit],
|
103
100
|
}
|
104
|
-
options[:batch_size] = PREVIEW_COUNT if preview?
|
101
|
+
@options[:batch_size] = PREVIEW_COUNT if preview?
|
102
|
+
end
|
105
103
|
|
104
|
+
def run
|
106
105
|
counter = 0
|
107
106
|
catch(:finish) do
|
108
107
|
@ranges.each do |range|
|
109
|
-
soap.each(range, options) do |lead|
|
110
|
-
|
111
|
-
name = column["name"].to_s
|
112
|
-
value = (lead[name] || {})[:value]
|
113
|
-
cast_value(column, value)
|
114
|
-
end
|
115
|
-
|
116
|
-
if @append_processed_time_column
|
117
|
-
values << Time.parse(range["from"])
|
118
|
-
end
|
119
|
-
|
120
|
-
page_builder.add(values)
|
108
|
+
soap.each(range, @options) do |lead|
|
109
|
+
page_builder.add(format_record(lead, range))
|
121
110
|
throw(:finish) if preview? && (counter += 1) >= PREVIEW_COUNT
|
122
111
|
end
|
123
112
|
end
|
@@ -128,6 +117,19 @@ module Embulk
|
|
128
117
|
task_report = {}
|
129
118
|
return task_report
|
130
119
|
end
|
120
|
+
|
121
|
+
def format_record(lead, range)
|
122
|
+
values = @columns.map do |column|
|
123
|
+
name = column["name"].to_s
|
124
|
+
value = (lead[name] || {})[:value]
|
125
|
+
cast_value(column, value)
|
126
|
+
end
|
127
|
+
|
128
|
+
if @append_processed_time_column
|
129
|
+
values << Time.parse(range["from"])
|
130
|
+
end
|
131
|
+
values
|
132
|
+
end
|
131
133
|
end
|
132
134
|
end
|
133
135
|
end
|
@@ -57,42 +57,44 @@ module Embulk
|
|
57
57
|
|
58
58
|
def fetch(request, options={}, &block)
|
59
59
|
response = savon_call(:get_lead_changes, {message: request}, options)
|
60
|
-
remaining = response.
|
60
|
+
remaining = response.xpath('//remainingCount').text.to_i
|
61
61
|
Embulk.logger.info "Remaining records: #{remaining}"
|
62
62
|
|
63
|
-
|
63
|
+
activities = response.xpath('//leadChangeRecord')
|
64
64
|
|
65
|
-
if
|
65
|
+
if activities.empty?
|
66
66
|
Embulk.logger.info "No record is fetched."
|
67
67
|
return {remaining_count: 0, offset: nil, from_datetime: nil}
|
68
68
|
end
|
69
69
|
|
70
|
-
activities = activities_list[:lead_change_record].sort_by { |activity| Time.parse(activity[:activity_date_time]) }
|
71
|
-
|
72
70
|
activities.each do |activity|
|
73
|
-
|
74
|
-
"id" => activity[:id],
|
75
|
-
"activity_date_time" => activity[:activity_date_time],
|
76
|
-
"activity_type" => activity[:activity_type],
|
77
|
-
"mktg_asset_name" => activity[:mktg_asset_name],
|
78
|
-
"mkt_person_id" => activity[:mkt_person_id],
|
79
|
-
}
|
80
|
-
|
81
|
-
activity[:activity_attributes][:attribute].each do |attributes|
|
82
|
-
name = attributes[:attr_name]
|
83
|
-
value = attributes[:attr_value]
|
84
|
-
|
85
|
-
record[name] = value
|
86
|
-
end
|
87
|
-
|
88
|
-
block.call(record)
|
71
|
+
process_record(activity, &block)
|
89
72
|
end
|
90
73
|
|
91
74
|
{
|
92
75
|
remaining_count: remaining,
|
93
|
-
offset: response.
|
94
|
-
from_datetime: activities.
|
76
|
+
offset: response.xpath('//newStartPosition/offset').text,
|
77
|
+
from_datetime: activities.map{|a| Time.parse(a.at('./activityDateTime').text) }.max,
|
78
|
+
}
|
79
|
+
end
|
80
|
+
|
81
|
+
def process_record(activity, &block)
|
82
|
+
record = {
|
83
|
+
"id" => activity.at("./id").text,
|
84
|
+
"activity_date_time" => activity.at('./activityDateTime').text,
|
85
|
+
"activity_type" => activity.at('./activityType').text,
|
86
|
+
"mktg_asset_name" => activity.at('./mktgAssetName').text,
|
87
|
+
"mkt_person_id" => activity.at('./mktPersonId').text,
|
95
88
|
}
|
89
|
+
|
90
|
+
activity.xpath('./activityAttributes/attribute').each do |attr|
|
91
|
+
name = attr.xpath('attrName').text
|
92
|
+
value = attr.xpath('attrValue').text
|
93
|
+
|
94
|
+
record[name] = value
|
95
|
+
end
|
96
|
+
|
97
|
+
block.call(record)
|
96
98
|
end
|
97
99
|
end
|
98
100
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require "savon"
|
2
2
|
require "httpclient" # net/http can't verify cert correctly
|
3
|
+
require "perfect_retry"
|
3
4
|
|
4
5
|
module Embulk
|
5
6
|
module Input
|
@@ -41,8 +42,19 @@ module Embulk
|
|
41
42
|
)
|
42
43
|
end
|
43
44
|
|
45
|
+
def retryer(retry_options)
|
46
|
+
PerfectRetry.new do |config|
|
47
|
+
config.sleep = proc{|n| retry_options[:retry_initial_wait_sec] * (2 ** (n - 1))}
|
48
|
+
config.limit = retry_options[:retry_limit]
|
49
|
+
config.dont_rescues = [Embulk::ConfigError]
|
50
|
+
config.rescues = [StandardError, Timeout::Error]
|
51
|
+
config.logger = Embulk.logger
|
52
|
+
config.log_level = nil
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
44
56
|
def savon_call(operation, locals={}, retry_options={})
|
45
|
-
|
57
|
+
retryer(retry_options).with_retry do
|
46
58
|
catch_unretryable_error do
|
47
59
|
savon.call(operation, locals.merge(advanced_typecasting: false))
|
48
60
|
end
|
@@ -60,23 +72,6 @@ module Embulk
|
|
60
72
|
}
|
61
73
|
end
|
62
74
|
|
63
|
-
def with_retry(options, &block)
|
64
|
-
wait_sec = options[:retry_initial_wait_sec]
|
65
|
-
count = 0
|
66
|
-
begin
|
67
|
-
yield
|
68
|
-
rescue Embulk::ConfigError => e # TODO: Add Embulk::DataError for Embulk 0.7+
|
69
|
-
raise e
|
70
|
-
rescue ::Timeout::Error, StandardError => e
|
71
|
-
count += 1
|
72
|
-
raise e if count > options[:retry_limit]
|
73
|
-
Embulk.logger.warn "Retrying after #{wait_sec} seconds [#{count}/#{RETRY_TIMEOUT_COUNT}] Error: #{e}"
|
74
|
-
sleep wait_sec
|
75
|
-
wait_sec *= 2
|
76
|
-
retry
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
75
|
def catch_unretryable_error(&block)
|
81
76
|
yield
|
82
77
|
rescue Savon::SOAPFault => e
|
@@ -101,7 +96,7 @@ module Embulk
|
|
101
96
|
# unretryable error such as Authentication Failed, Invalid Request, etc.
|
102
97
|
raise ConfigError.new soap_message
|
103
98
|
end
|
104
|
-
rescue SocketError, Errno::ECONNREFUSED => e
|
99
|
+
rescue SocketError, ::Java::JavaNet::UnknownHostException, Errno::ECONNREFUSED => e
|
105
100
|
# maybe endpoint/wsdl domain was wrong
|
106
101
|
Embulk.logger.debug "Connection error: endpoint=#{endpoint} wsdl=#{wsdl}"
|
107
102
|
raise ConfigError.new "Connection error: #{e.message} (endpoint is '#{endpoint}')"
|