embulk-input-marketo 0.6.6 → 0.6.7.test.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/build.gradle +1 -1
- data/src/main/java/org/embulk/input/marketo/delegate/MarketoBaseBulkExtractInputPlugin.java +5 -83
- data/src/test/java/org/embulk/input/marketo/delegate/ActivityBulkExtractInputPluginTest.java +9 -7
- data/src/test/java/org/embulk/input/marketo/delegate/LeadBulkExtractInputPluginTest.java +8 -4
- data/src/test/java/org/embulk/input/marketo/delegate/MarketoBaseBulkExtractInputPluginTest.java +1 -9
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa96517b794a4be81d0c96ee7d02965aeeefff06
|
4
|
+
data.tar.gz: 2f7b3bc43e55c8009c0a7177504db1fbf53406e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 88f03e659566b8dd879fa52e02102cb1de879cd56264474a106eedbceb7bdc4071b93fb8975f501728568ba01d3e65be9b316e7b6ff37c14056732b14d1d117a
|
7
|
+
data.tar.gz: fd9ca5fd78bd3b164796a25b8322390020d96a5edacd8469f230b4da2a111f8fd3b95a0eeb1b8fed9c5654687b56e37d73332e288b037e05bc90895acd69c7c4
|
data/build.gradle
CHANGED
@@ -33,8 +33,6 @@ import org.embulk.spi.time.TimestampParser;
|
|
33
33
|
import org.embulk.spi.util.InputStreamFileInput;
|
34
34
|
import org.embulk.spi.util.LineDecoder;
|
35
35
|
import org.joda.time.DateTime;
|
36
|
-
import org.joda.time.format.DateTimeFormatter;
|
37
|
-
import org.joda.time.format.ISODateTimeFormat;
|
38
36
|
import org.msgpack.value.Value;
|
39
37
|
|
40
38
|
import java.io.InputStream;
|
@@ -43,7 +41,6 @@ import java.text.SimpleDateFormat;
|
|
43
41
|
import java.util.ArrayList;
|
44
42
|
import java.util.Date;
|
45
43
|
import java.util.HashMap;
|
46
|
-
import java.util.HashSet;
|
47
44
|
import java.util.Iterator;
|
48
45
|
import java.util.List;
|
49
46
|
import java.util.Map;
|
@@ -55,18 +52,10 @@ import java.util.Set;
|
|
55
52
|
*/
|
56
53
|
public abstract class MarketoBaseBulkExtractInputPlugin<T extends MarketoBaseBulkExtractInputPlugin.PluginTask> extends MarketoBaseInputPluginDelegate<T>
|
57
54
|
{
|
58
|
-
private static final String LATEST_FETCH_TIME = "latest_fetch_time";
|
59
|
-
|
60
|
-
private static final String LATEST_UID_LIST = "latest_uids";
|
61
|
-
|
62
|
-
private static final DateTimeFormatter ISO_DATETIME_FORMAT = ISODateTimeFormat.dateTimeParser();
|
63
|
-
|
64
55
|
private static final String FROM_DATE = "from_date";
|
65
56
|
|
66
57
|
private static final int MARKETO_MAX_RANGE_EXTRACT = 30;
|
67
58
|
|
68
|
-
private static final String IMPORTED = "imported";
|
69
|
-
|
70
59
|
public interface PluginTask extends MarketoBaseInputPluginDelegate.PluginTask, CsvTokenizer.PluginTask
|
71
60
|
{
|
72
61
|
@Config("from_date")
|
@@ -95,10 +84,6 @@ public abstract class MarketoBaseBulkExtractInputPlugin<T extends MarketoBaseBul
|
|
95
84
|
@ConfigDefault("true")
|
96
85
|
Boolean getIncremental();
|
97
86
|
|
98
|
-
@Config("latest_uids")
|
99
|
-
@ConfigDefault("[]")
|
100
|
-
Set<String> getPreviousUids();
|
101
|
-
|
102
87
|
@Config("to_date")
|
103
88
|
@ConfigDefault("null")
|
104
89
|
Optional<Date> getToDate();
|
@@ -107,6 +92,8 @@ public abstract class MarketoBaseBulkExtractInputPlugin<T extends MarketoBaseBul
|
|
107
92
|
|
108
93
|
@Config("incremental_column")
|
109
94
|
@ConfigDefault("\"createdAt\"")
|
95
|
+
//Incremental column are only keep here since we don't want to introduce too much change to plugin
|
96
|
+
//Consider remove it in next release
|
110
97
|
Optional<String> getIncrementalColumn();
|
111
98
|
|
112
99
|
void setIncrementalColumn(Optional<String> incrementalColumn);
|
@@ -153,39 +140,12 @@ public abstract class MarketoBaseBulkExtractInputPlugin<T extends MarketoBaseBul
|
|
153
140
|
public ConfigDiff buildConfigDiff(T task, Schema schema, int taskCount, List<TaskReport> taskReports)
|
154
141
|
{
|
155
142
|
ConfigDiff configDiff = super.buildConfigDiff(task, schema, taskCount, taskReports);
|
156
|
-
Long currentLatestFetchTime = 0L;
|
157
|
-
Set latestUIds = new HashSet();
|
158
143
|
String incrementalColumn = task.getIncrementalColumn().orNull();
|
159
|
-
int imported = 0;
|
160
144
|
if (incrementalColumn != null && task.getIncremental()) {
|
161
145
|
DateFormat df = new SimpleDateFormat(MarketoUtils.MARKETO_DATE_SIMPLE_DATE_FORMAT);
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
continue;
|
166
|
-
}
|
167
|
-
if (currentLatestFetchTime < latestFetchTime) {
|
168
|
-
currentLatestFetchTime = latestFetchTime;
|
169
|
-
latestUIds = taskReport.get(Set.class, LATEST_UID_LIST);
|
170
|
-
}
|
171
|
-
else if (currentLatestFetchTime.equals(latestFetchTime)) {
|
172
|
-
latestUIds.addAll(taskReport.get(Set.class, LATEST_UID_LIST));
|
173
|
-
}
|
174
|
-
if (taskReport.has(IMPORTED)) {
|
175
|
-
imported = imported + taskReport.get(Integer.class, IMPORTED);
|
176
|
-
}
|
177
|
-
}
|
178
|
-
// in case of we didn't import anything but search range is entirely in the past. Then we should move the the range anyway.
|
179
|
-
if (imported == 0) {
|
180
|
-
Date toDate = task.getToDate().orNull();
|
181
|
-
configDiff.set(FROM_DATE, df.format(toDate));
|
182
|
-
}
|
183
|
-
else {
|
184
|
-
// Otherwise it's should start from the currentLastFetchTime plus 1 second.
|
185
|
-
configDiff.set(FROM_DATE, df.format(new DateTime(currentLatestFetchTime).plusSeconds(1).toDate()));
|
186
|
-
}
|
187
|
-
configDiff.set(LATEST_FETCH_TIME, currentLatestFetchTime);
|
188
|
-
configDiff.set(LATEST_UID_LIST, latestUIds);
|
146
|
+
// We will always move the range forward.
|
147
|
+
Date toDate = task.getToDate().orNull();
|
148
|
+
configDiff.set(FROM_DATE, df.format(toDate));
|
189
149
|
}
|
190
150
|
return configDiff;
|
191
151
|
}
|
@@ -194,8 +154,6 @@ public abstract class MarketoBaseBulkExtractInputPlugin<T extends MarketoBaseBul
|
|
194
154
|
public TaskReport ingestServiceData(final T task, RecordImporter recordImporter, int taskIndex, PageBuilder pageBuilder)
|
195
155
|
{
|
196
156
|
TaskReport taskReport = Exec.newTaskReport();
|
197
|
-
String incrementalColumn = task.getIncrementalColumn().orNull();
|
198
|
-
String uidColumn = task.getUidColumn().orNull();
|
199
157
|
if (Exec.isPreview()) {
|
200
158
|
return importMockPreviewData(pageBuilder);
|
201
159
|
}
|
@@ -209,9 +167,6 @@ public abstract class MarketoBaseBulkExtractInputPlugin<T extends MarketoBaseBul
|
|
209
167
|
return new CsvRecordIterator(input, task);
|
210
168
|
}
|
211
169
|
}));
|
212
|
-
Long latestFetchTime = task.getLatestFetchTime().or(0L);
|
213
|
-
long currentTimestamp = latestFetchTime;
|
214
|
-
Set<String> latestUids = task.getPreviousUids();
|
215
170
|
//Keep the preview code here when we can enable real preview
|
216
171
|
if (Exec.isPreview()) {
|
217
172
|
csvRecords = Iterators.limit(csvRecords, PREVIEW_RECORD_LIMIT);
|
@@ -219,43 +174,10 @@ public abstract class MarketoBaseBulkExtractInputPlugin<T extends MarketoBaseBul
|
|
219
174
|
int imported = 0;
|
220
175
|
while (csvRecords.hasNext()) {
|
221
176
|
Map<String, String> csvRecord = csvRecords.next();
|
222
|
-
if (task.getIncremental()) {
|
223
|
-
String incrementalTimeStamp = csvRecord.get(incrementalColumn);
|
224
|
-
long timestamp = ISO_DATETIME_FORMAT.parseDateTime(incrementalTimeStamp).getMillis();
|
225
|
-
//Ignore records that have timestamp smaller or equal with latestFetchTime
|
226
|
-
if (latestFetchTime >= timestamp) {
|
227
|
-
continue;
|
228
|
-
}
|
229
|
-
if (!csvRecord.containsKey(incrementalColumn)) {
|
230
|
-
throw new DataException("Extracted record doesn't have incremental column " + incrementalColumn);
|
231
|
-
}
|
232
|
-
if (uidColumn != null) {
|
233
|
-
String uid = csvRecord.get(uidColumn);
|
234
|
-
if (latestUids.contains(uid)) {
|
235
|
-
//Duplicate value
|
236
|
-
continue;
|
237
|
-
}
|
238
|
-
}
|
239
|
-
if (currentTimestamp < timestamp) {
|
240
|
-
currentTimestamp = timestamp;
|
241
|
-
//switch timestamp
|
242
|
-
latestUids.clear();
|
243
|
-
}
|
244
|
-
else if (currentTimestamp == timestamp) {
|
245
|
-
//timestamp is equal
|
246
|
-
if (uidColumn != null) {
|
247
|
-
String uid = csvRecord.get(uidColumn);
|
248
|
-
latestUids.add(uid);
|
249
|
-
}
|
250
|
-
}
|
251
|
-
}
|
252
177
|
ObjectNode objectNode = MarketoUtils.OBJECT_MAPPER.valueToTree(csvRecord);
|
253
178
|
recordImporter.importRecord(new AllStringJacksonServiceRecord(objectNode), pageBuilder);
|
254
179
|
imported = imported + 1;
|
255
180
|
}
|
256
|
-
taskReport.set(LATEST_FETCH_TIME, currentTimestamp);
|
257
|
-
taskReport.set(LATEST_UID_LIST, latestUids);
|
258
|
-
taskReport.set(IMPORTED, imported);
|
259
181
|
return taskReport;
|
260
182
|
}
|
261
183
|
}
|
data/src/test/java/org/embulk/input/marketo/delegate/ActivityBulkExtractInputPluginTest.java
CHANGED
@@ -3,14 +3,18 @@ package org.embulk.input.marketo.delegate;
|
|
3
3
|
import org.embulk.EmbulkTestRuntime;
|
4
4
|
import org.embulk.base.restclient.ServiceResponseMapper;
|
5
5
|
import org.embulk.base.restclient.record.ValueLocator;
|
6
|
+
import org.embulk.config.ConfigDiff;
|
6
7
|
import org.embulk.config.ConfigLoader;
|
7
8
|
import org.embulk.config.ConfigSource;
|
8
9
|
import org.embulk.config.TaskReport;
|
10
|
+
import org.embulk.input.marketo.MarketoUtils;
|
9
11
|
import org.embulk.input.marketo.model.BulkExtractRangeHeader;
|
10
12
|
import org.embulk.input.marketo.rest.MarketoRestClient;
|
11
13
|
import org.embulk.spi.Column;
|
12
14
|
import org.embulk.spi.PageBuilder;
|
15
|
+
import org.embulk.spi.Schema;
|
13
16
|
import org.joda.time.DateTime;
|
17
|
+
import org.junit.Assert;
|
14
18
|
import org.junit.Before;
|
15
19
|
import org.junit.Rule;
|
16
20
|
import org.junit.Test;
|
@@ -18,6 +22,8 @@ import org.mockito.ArgumentCaptor;
|
|
18
22
|
import org.mockito.Mockito;
|
19
23
|
|
20
24
|
import java.io.IOException;
|
25
|
+
import java.text.DateFormat;
|
26
|
+
import java.text.SimpleDateFormat;
|
21
27
|
import java.util.Arrays;
|
22
28
|
import java.util.Date;
|
23
29
|
import java.util.List;
|
@@ -74,12 +80,8 @@ public class ActivityBulkExtractInputPluginTest
|
|
74
80
|
Mockito.verify(mockMarketoRestclient, Mockito.times(1)).createActivityExtract(startDate.toDate(), startDate.plusDays(30).toDate());
|
75
81
|
DateTime startDate2 = startDate.plusDays(30).plusSeconds(1);
|
76
82
|
Mockito.verify(mockMarketoRestclient, Mockito.times(1)).createActivityExtract(startDate2.toDate(), startDate.plusDays(task.getFetchDays()).toDate());
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
Set latestUids = taskReport.get(Set.class, "latest_uids");
|
81
|
-
assertEquals(1504888754000L, latestFetchTime);
|
82
|
-
assertEquals(Arrays.asList("558681", "558682", "558683", "558684", "558685", "558686", "558687", "558688", "558689", "558690", "558691", "558692", "558693", "558694", "558695", "558696", "558697", "558698", "558699", "558700", "558701", "558702", "558703", "558704", "558705", "558706", "558707", "558708", "558709", "558710", "558711", "558712", "558713", "558714", "558716", "558717", "558718", "558719", "558720", "558721", "558722", "558723", "558724", "558725", "558726", "558727", "558728", "558729", "558730", "558731", "558732", "558733", "558734", "558735", "558736"), marketoUids);
|
83
|
-
assertEquals(36, latestUids.size());
|
83
|
+
ConfigDiff configDiff = activityBulkExtractInputPlugin.buildConfigDiff(task, Mockito.mock(Schema.class), 1, Arrays.asList(taskReport));
|
84
|
+
DateFormat df = new SimpleDateFormat(MarketoUtils.MARKETO_DATE_SIMPLE_DATE_FORMAT);
|
85
|
+
Assert.assertEquals(df.format(startDate.plusDays(task.getFetchDays()).toDate()), configDiff.get(String.class, "from_date"));
|
84
86
|
}
|
85
87
|
}
|
@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|
5
5
|
import org.embulk.EmbulkTestRuntime;
|
6
6
|
import org.embulk.base.restclient.ServiceResponseMapper;
|
7
7
|
import org.embulk.base.restclient.record.ValueLocator;
|
8
|
+
import org.embulk.config.ConfigDiff;
|
8
9
|
import org.embulk.config.ConfigLoader;
|
9
10
|
import org.embulk.config.ConfigSource;
|
10
11
|
import org.embulk.config.TaskReport;
|
@@ -14,6 +15,7 @@ import org.embulk.input.marketo.model.MarketoField;
|
|
14
15
|
import org.embulk.input.marketo.rest.MarketoRestClient;
|
15
16
|
import org.embulk.spi.Column;
|
16
17
|
import org.embulk.spi.PageBuilder;
|
18
|
+
import org.embulk.spi.Schema;
|
17
19
|
import org.joda.time.DateTime;
|
18
20
|
import org.junit.Assert;
|
19
21
|
import org.junit.Before;
|
@@ -23,9 +25,11 @@ import org.mockito.ArgumentCaptor;
|
|
23
25
|
import org.mockito.Mockito;
|
24
26
|
|
25
27
|
import java.io.IOException;
|
28
|
+
import java.text.DateFormat;
|
29
|
+
import java.text.SimpleDateFormat;
|
30
|
+
import java.util.Arrays;
|
26
31
|
import java.util.Date;
|
27
32
|
import java.util.List;
|
28
|
-
import java.util.Set;
|
29
33
|
|
30
34
|
import static org.mockito.ArgumentMatchers.any;
|
31
35
|
import static org.mockito.ArgumentMatchers.eq;
|
@@ -87,9 +91,9 @@ public class LeadBulkExtractInputPluginTest
|
|
87
91
|
Mockito.verify(mockMarketoRestclient, Mockito.times(1)).createLeadBulkExtract(startDate2.toDate(), startDate.plusDays(task.getFetchDays()).toDate(), fieldNameFromMarketoFields, filterField);
|
88
92
|
List<Long> leadIds = argumentCaptor.getAllValues();
|
89
93
|
Assert.assertEquals(19, leadIds.size());
|
90
|
-
|
91
|
-
|
92
|
-
Assert.assertEquals(
|
94
|
+
ConfigDiff configDiff = bulkExtractInputPlugin.buildConfigDiff(task, Mockito.mock(Schema.class), 1, Arrays.asList(taskReport));
|
95
|
+
DateFormat df = new SimpleDateFormat(MarketoUtils.MARKETO_DATE_SIMPLE_DATE_FORMAT);
|
96
|
+
Assert.assertEquals(df.format(startDate.plusDays(task.getFetchDays()).toDate()), configDiff.get(String.class, "from_date"));
|
93
97
|
Assert.assertArrayEquals(new Long[]{102488L, 102456L, 102445L, 102439L, 102471L, 102503L, 102424L, 102473L, 102505L, 102492L, 102495L, 102452L, 102435L, 102467L, 102420L, 102496L, 102448L, 102499L, 102431L}, leadIds.toArray());
|
94
98
|
}
|
95
99
|
}
|
data/src/test/java/org/embulk/input/marketo/delegate/MarketoBaseBulkExtractInputPluginTest.java
CHANGED
@@ -158,20 +158,12 @@ public class MarketoBaseBulkExtractInputPluginTest
|
|
158
158
|
public void buildConfigDiff() throws Exception
|
159
159
|
{
|
160
160
|
TaskReport taskReport1 = Mockito.mock(TaskReport.class);
|
161
|
-
TaskReport taskReport2 = Mockito.mock(TaskReport.class);
|
162
|
-
Mockito.when(taskReport1.get(Set.class, "latest_uids")).thenReturn(Sets.newHashSet("id1", "id2"));
|
163
|
-
Mockito.when(taskReport2.get(Set.class, "latest_uids")).thenReturn(Sets.newHashSet("id3", "id4"));
|
164
|
-
Mockito.when(taskReport1.get(Long.class, "latest_fetch_time")).thenReturn(1507539328000L);
|
165
|
-
Mockito.when(taskReport2.get(Long.class, "latest_fetch_time")).thenReturn(1507625728000L);
|
166
161
|
MarketoInputPluginDelegate.PluginTask task = Mockito.mock(MarketoInputPluginDelegate.PluginTask.class);
|
167
162
|
Mockito.when(task.getIncremental()).thenReturn(true);
|
168
163
|
Mockito.when(task.getIncrementalColumn()).thenReturn(Optional.of("createdAt"));
|
169
164
|
Date toDate = new Date(1507625728000L);
|
170
165
|
Mockito.when(task.getToDate()).thenReturn(Optional.of(toDate));
|
171
|
-
ConfigDiff configDiff = baseBulkExtractInputPlugin.buildConfigDiff(task, Mockito.mock(Schema.class), 1, Arrays.asList(taskReport1
|
172
|
-
long latestFetchTime = configDiff.get(Long.class, "latest_fetch_time");
|
173
|
-
assertEquals(1507625728000L, latestFetchTime);
|
174
|
-
assertEquals(Sets.newHashSet("id3", "id4"), configDiff.get(Set.class, "latest_uids"));
|
166
|
+
ConfigDiff configDiff = baseBulkExtractInputPlugin.buildConfigDiff(task, Mockito.mock(Schema.class), 1, Arrays.asList(taskReport1));
|
175
167
|
DateFormat df = new SimpleDateFormat(MarketoUtils.MARKETO_DATE_SIMPLE_DATE_FORMAT);
|
176
168
|
assertEquals(df.format(toDate), configDiff.get(String.class, "from_date"));
|
177
169
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-input-marketo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.7.test.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- uu59
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-
|
13
|
+
date: 2018-02-23 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -127,9 +127,9 @@ files:
|
|
127
127
|
- classpath/embulk-base-restclient-0.5.3.jar
|
128
128
|
- classpath/jetty-client-9.2.14.v20151106.jar
|
129
129
|
- classpath/jetty-util-9.2.14.v20151106.jar
|
130
|
+
- classpath/embulk-input-marketo-0.6.7.test.1.jar
|
130
131
|
- classpath/embulk-util-retryhelper-jetty92-0.5.3.jar
|
131
132
|
- classpath/jetty-io-9.2.14.v20151106.jar
|
132
|
-
- classpath/embulk-input-marketo-0.6.6.jar
|
133
133
|
homepage: https://github.com/treasure-data/embulk-input-marketo
|
134
134
|
licenses:
|
135
135
|
- Apache2
|
@@ -145,9 +145,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
145
145
|
version: '0'
|
146
146
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
147
147
|
requirements:
|
148
|
-
- - '
|
148
|
+
- - '>'
|
149
149
|
- !ruby/object:Gem::Version
|
150
|
-
version:
|
150
|
+
version: 1.3.1
|
151
151
|
requirements: []
|
152
152
|
rubyforge_project:
|
153
153
|
rubygems_version: 2.1.9
|