embulk-filter-speedometer 0.3.2 → 0.3.3
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/README.md +1 -1
- data/build.gradle +4 -3
- data/classpath/{embulk-filter-speedometer-0.3.2.jar → embulk-filter-speedometer-0.3.3.jar} +0 -0
- data/src/integration-test/java/org/embulk/filter/TestSingleRun.java +62 -8
- data/src/integration-test/resources/config_json.yml +20 -0
- data/src/integration-test/resources/json_01.json.gz +0 -0
- data/src/integration-test/resources/ref_json_result_01.csv.gz +0 -0
- data/src/main/java/org/embulk/filter/SpeedometerFilterPlugin.java +19 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4439cf02600ec5d3100d5e55278db0f621ea0379
|
4
|
+
data.tar.gz: 50d8c16f4517f224d220a5dfea9e00e7f18ede42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 961d57c198263a6a5288e9b5d88ae88a41db7207782aabe9f6a8a237f4ae92029f82c58ce4e07cbe6beddc0e136ede9559971aeeaac2f19430950f5801773cae
|
7
|
+
data.tar.gz: e7afe0a2ca10f05912444ad06619b3b88b61f91ae1f4b0669097c0c478d116d316cdb00cf74a141334d2918399776ee1f9335dbddbc4aaafab91258b320b5464
|
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
[](https://travis-ci.org/hata/embulk-filter-speedometer.svg?branch=master)
|
4
4
|
|
5
5
|
Write log message of processed bytes and throughput periodically.
|
6
|
-
This plugin works with embulk:0.
|
6
|
+
This plugin works with embulk:0.8.0 or later versions.
|
7
7
|
|
8
8
|
## Overview
|
9
9
|
|
data/build.gradle
CHANGED
@@ -18,11 +18,12 @@ configurations {
|
|
18
18
|
provided
|
19
19
|
}
|
20
20
|
|
21
|
-
version = "0.3.
|
21
|
+
version = "0.3.3"
|
22
22
|
|
23
23
|
dependencies {
|
24
|
-
compile "org.embulk:embulk-core:0.
|
25
|
-
|
24
|
+
compile "org.embulk:embulk-core:0.8.0+"
|
25
|
+
compile "org.msgpack:msgpack-core:0.7.1"
|
26
|
+
provided "org.embulk:embulk-core:0.8.0+"
|
26
27
|
// compile "YOUR_JAR_DEPENDENCY_GROUP:YOUR_JAR_DEPENDENCY_MODULE:YOUR_JAR_DEPENDENCY_VERSION"
|
27
28
|
testCompile "org.jmockit:jmockit:1.15+"
|
28
29
|
testCompile "junit:junit:4.+"
|
Binary file
|
@@ -14,7 +14,10 @@ import java.io.InputStream;
|
|
14
14
|
import java.util.regex.Pattern;
|
15
15
|
import java.util.zip.GZIPInputStream;
|
16
16
|
import java.util.ArrayList;
|
17
|
+
import java.util.TreeSet;
|
18
|
+
import java.util.List;
|
17
19
|
import java.util.Collections;
|
20
|
+
import java.util.Set;
|
18
21
|
|
19
22
|
import org.junit.Test;
|
20
23
|
|
@@ -38,6 +41,11 @@ public class TestSingleRun {
|
|
38
41
|
validateResultFiles("big_01.csv.gz", "result_big_");
|
39
42
|
}
|
40
43
|
|
44
|
+
@Test
|
45
|
+
public void testValidateJsonOutputFile() throws Exception {
|
46
|
+
validateJsonResultFiles("ref_json_result_01.csv.gz", "result_json_");
|
47
|
+
}
|
48
|
+
|
41
49
|
@Test
|
42
50
|
public void testSpeedometerMinLog() throws Exception {
|
43
51
|
validateSpeedometerLog("config_min.yml.run.log");
|
@@ -48,6 +56,11 @@ public class TestSingleRun {
|
|
48
56
|
validateSpeedometerLog("config_big.yml.run.log");
|
49
57
|
}
|
50
58
|
|
59
|
+
@Test
|
60
|
+
public void testSpeedometerJsonLog() throws Exception {
|
61
|
+
validateSpeedometerLog("config_json.yml.run.log");
|
62
|
+
}
|
63
|
+
|
51
64
|
private void validateSpeedometerLog(String logFile) throws Exception {
|
52
65
|
boolean found = false;
|
53
66
|
try (BufferedReader r = new BufferedReader(new FileReader(getTestFile(logFile)))) {
|
@@ -64,19 +77,44 @@ public class TestSingleRun {
|
|
64
77
|
}
|
65
78
|
|
66
79
|
private void validateResultFiles(String gzipSrcFile, final String prefix) throws Exception {
|
67
|
-
ArrayList inList = new ArrayList();
|
68
|
-
ArrayList outList = new ArrayList();
|
80
|
+
ArrayList<String> inList = new ArrayList();
|
81
|
+
ArrayList<String> outList = new ArrayList();
|
82
|
+
|
83
|
+
readToListFromGzipFile(gzipSrcFile, inList);
|
84
|
+
readToListFromPrefixMatching(prefix, outList);
|
85
|
+
|
86
|
+
Collections.sort(inList);
|
87
|
+
Collections.sort(outList);
|
88
|
+
|
89
|
+
assertEquals("Verify input and output lines are identical. in:" +
|
90
|
+
inList.size() + ", out:" + outList.size(), inList.toString(), outList.toString());
|
91
|
+
}
|
92
|
+
|
69
93
|
|
94
|
+
private void validateJsonResultFiles(String gzipSrcFile, final String prefix) throws Exception {
|
95
|
+
ArrayList<String> inList = new ArrayList();
|
96
|
+
ArrayList<String> outList = new ArrayList();
|
97
|
+
|
98
|
+
readToListFromGzipFile(gzipSrcFile, inList);
|
99
|
+
readToListFromPrefixMatching(prefix, outList);
|
100
|
+
|
101
|
+
assertEquals("Verify input and output lines are identical. in:" +
|
102
|
+
inList.size() + ", out:" + outList.size(), readToSet(inList), readToSet(outList));
|
103
|
+
}
|
104
|
+
|
105
|
+
private void readToListFromGzipFile(String gzipSrcFile, List<String> lineList) throws IOException {
|
70
106
|
try (BufferedReader reader = new BufferedReader(new InputStreamReader(
|
71
107
|
new GZIPInputStream(new FileInputStream(getTestFile(gzipSrcFile)))))) {
|
72
108
|
String line = reader.readLine(); // Discard a header line
|
73
109
|
line = reader.readLine();
|
74
110
|
while (line != null) {
|
75
|
-
|
111
|
+
lineList.add(line);
|
76
112
|
line = reader.readLine();
|
77
113
|
}
|
78
114
|
}
|
115
|
+
}
|
79
116
|
|
117
|
+
private void readToListFromPrefixMatching(final String prefix, List<String> lineList) throws IOException {
|
80
118
|
// In travis env, there are many cpus and it may be different from
|
81
119
|
// my local environment. From this, list all files using File.list method.
|
82
120
|
String[] resultFiles = new File(TEST_DIR).list(new FilenameFilter() {
|
@@ -90,16 +128,32 @@ public class TestSingleRun {
|
|
90
128
|
String line = reader.readLine(); // Discard a header line
|
91
129
|
line = reader.readLine();
|
92
130
|
while (line != null) {
|
93
|
-
|
131
|
+
lineList.add(line);
|
94
132
|
line = reader.readLine();
|
95
133
|
}
|
96
134
|
}
|
97
135
|
}
|
136
|
+
}
|
98
137
|
|
99
|
-
|
100
|
-
|
138
|
+
private TreeSet<String> readToSet(List<String> lineList) throws Exception {
|
139
|
+
TreeSet<String> set = new TreeSet<>();
|
140
|
+
for (String line : lineList) {
|
141
|
+
line = stripQuote(line);
|
142
|
+
if (line.startsWith("{") && line.endsWith("}")) {
|
143
|
+
ArrayList<String> fields = new ArrayList<>();
|
144
|
+
for (String field : line.substring(1, line.length() - 1).split(",")) {
|
145
|
+
fields.add(field);
|
146
|
+
}
|
147
|
+
Collections.sort(fields);
|
148
|
+
set.add(fields.toString());
|
149
|
+
} else {
|
150
|
+
throw new Exception("Unexpected lines." + lineList);
|
151
|
+
}
|
152
|
+
}
|
153
|
+
return set;
|
154
|
+
}
|
101
155
|
|
102
|
-
|
103
|
-
|
156
|
+
private String stripQuote(String line) {
|
157
|
+
return line.startsWith("'") && line.endsWith("'") ? line.substring(1, line.length() -1) : line;
|
104
158
|
}
|
105
159
|
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
in:
|
2
|
+
type: file
|
3
|
+
path_prefix: ./json_
|
4
|
+
decoders:
|
5
|
+
- {type: gzip}
|
6
|
+
parser:
|
7
|
+
type: json
|
8
|
+
filters:
|
9
|
+
- type: speedometer
|
10
|
+
speed_limit: 250000
|
11
|
+
out:
|
12
|
+
type: file
|
13
|
+
path_prefix: ./result_json_
|
14
|
+
file_ext: csv
|
15
|
+
formatter:
|
16
|
+
type: csv
|
17
|
+
quote_policy: MINIMAL
|
18
|
+
default_timezone: UTC
|
19
|
+
newline: LF
|
20
|
+
quote: "'"
|
Binary file
|
Binary file
|
@@ -22,6 +22,7 @@ import org.embulk.spi.Schema;
|
|
22
22
|
import org.embulk.spi.time.Timestamp;
|
23
23
|
import org.embulk.spi.time.TimestampFormatter;
|
24
24
|
import org.embulk.spi.util.Timestamps;
|
25
|
+
import org.msgpack.value.Value;
|
25
26
|
|
26
27
|
public class SpeedometerFilterPlugin
|
27
28
|
implements FilterPlugin
|
@@ -188,6 +189,16 @@ public class SpeedometerFilterPlugin
|
|
188
189
|
}
|
189
190
|
}
|
190
191
|
|
192
|
+
@Override
|
193
|
+
public void jsonColumn(Column column) {
|
194
|
+
if (pageReader.isNull(column)) {
|
195
|
+
speedMonitor(column);
|
196
|
+
pageBuilder.setNull(column);
|
197
|
+
} else {
|
198
|
+
pageBuilder.setJson(column, speedMonitor(column, pageReader.getJson(column)));
|
199
|
+
}
|
200
|
+
}
|
201
|
+
|
191
202
|
private void speedMonitorStartRecord() {
|
192
203
|
startRecordTime = System.currentTimeMillis();
|
193
204
|
}
|
@@ -232,6 +243,14 @@ public class SpeedometerFilterPlugin
|
|
232
243
|
return t;
|
233
244
|
}
|
234
245
|
|
246
|
+
private Value speedMonitor(Column column, Value v) {
|
247
|
+
speedMonitorForDelimiter(column);
|
248
|
+
// NOTE: This may not be good for performance. But, I have no other idea.
|
249
|
+
String s = v.toJson();
|
250
|
+
controller.checkSpeedLimit(startRecordTime, s != null ? s.length() : 0);
|
251
|
+
return v;
|
252
|
+
}
|
253
|
+
|
235
254
|
private void speedMonitorForDelimiter(Column column) {
|
236
255
|
if (column.getIndex() > 0) {
|
237
256
|
controller.checkSpeedLimit(startRecordTime, delimiterLength);
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: embulk-filter-speedometer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- hata
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,8 +58,11 @@ files:
|
|
58
58
|
- src/integration-test/java/org/embulk/filter/TestSingleRun.java
|
59
59
|
- src/integration-test/resources/big_01.csv.gz
|
60
60
|
- src/integration-test/resources/config_big.yml
|
61
|
+
- src/integration-test/resources/config_json.yml
|
61
62
|
- src/integration-test/resources/config_min.yml
|
63
|
+
- src/integration-test/resources/json_01.json.gz
|
62
64
|
- src/integration-test/resources/min_01.csv.gz
|
65
|
+
- src/integration-test/resources/ref_json_result_01.csv.gz
|
63
66
|
- src/main/java/org/embulk/filter/SpeedometerFilterPlugin.java
|
64
67
|
- src/main/java/org/embulk/filter/SpeedometerSpeedAggregator.java
|
65
68
|
- src/main/java/org/embulk/filter/SpeedometerSpeedController.java
|
@@ -68,7 +71,7 @@ files:
|
|
68
71
|
- src/test/java/org/embulk/filter/TestSpeedometerSpeedAggregator.java
|
69
72
|
- src/test/java/org/embulk/filter/TestSpeedometerSpeedController.java
|
70
73
|
- src/test/java/org/embulk/filter/TestSpeedometerUtil.java
|
71
|
-
- classpath/embulk-filter-speedometer-0.3.
|
74
|
+
- classpath/embulk-filter-speedometer-0.3.3.jar
|
72
75
|
homepage: https://github.com/hata/embulk-filter-speedometer
|
73
76
|
licenses:
|
74
77
|
- MIT
|