embulk-filter-speedometer 0.2.3 → 0.3.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: 25a84966e8bb8be6e69b29e014ee10b6569c645d
4
- data.tar.gz: 6e0073adb00e1fa9076898177602155c4382e67e
3
+ metadata.gz: 412ffe6e6afcc9ad7adcc2c3bf115ff69b46e068
4
+ data.tar.gz: 26edc64ab161aed9f413778eefb4de6e2e61fca2
5
5
  SHA512:
6
- metadata.gz: e6b580ef514a8cca77bed243f05ebf02f41887cf5b33d602959fcdfa9171395f3329f063ff7b6333c4dff932ffcbd70c7e06a595642971693d3e1e305d84bb59
7
- data.tar.gz: 43a7d51da77945c8245c9276da9f9d04694e5a87d2ac76ac5d875a7350c18f00d349c452b57c692ef027d2e72aa42c5509e0014ecc5fc32d058f733629c9682c
6
+ metadata.gz: 49cc5903582acc3e75f80e6f4a1eeddcb6b43b9751dadbd3fa51c8367c9c47adbdc56483ad0cf0b514d3446e6984a3abe299a73d28b140197f42d8d758f8ebad
7
+ data.tar.gz: a4a89b2f63c83e0e2c222e775058aa9176f92ad7487936aa2fbf4752e74c324e1e9603a75c212df057d2f6da0fc13f73c22fdae6d1020e588f038906548436e8
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Speedometer Filter Plugin for Embulk
2
2
 
3
3
  Write log message of processed bytes and throughput periodically.
4
+ This plugin works with embulk:0.6.17 or later versions because of removing deprecated APIs.
4
5
 
5
6
  ## Overview
6
7
 
@@ -12,6 +13,7 @@ Write log message of processed bytes and throughput periodically.
12
13
  - **speed_limit**: Set maximum processing size per second. If 0 is set, then no limit. (integer, optional, default: 0)
13
14
  - **delimiter**: Delimiter text to calculate delimiter length. (string, optional, default: ",")
14
15
  - **record_padding_size**: Additional byte size for each record like a return code length. (integer, optional, default: 1)
16
+ - **column_options**: A map whose keys are name of columns like csv formatter plugin (hash, optional, default: {})
15
17
 
16
18
  ## Example of Configuration
17
19
 
@@ -50,19 +52,32 @@ filters:
50
52
  record_padding_size: 0
51
53
  ```
52
54
 
55
+ - Set timestamp format to change default format for timestamp columns. The following **column_options** set %Y-%m-%d %H:%M:%S for time column and %Y%m%d for purchase column. If this option is not set, then a default embulk timestamp format is used.
56
+
57
+ ```yaml
58
+ filters:
59
+ - type: speedometer
60
+ speed_limit: 250000
61
+ column_options:
62
+ time: {format: '%Y-%m-%d %H:%M:%S'}
63
+ purchase: {format: '%Y%m%d'}
64
+ ```
65
+
66
+
53
67
  ## Sample Log Message
54
68
 
55
69
  ```
56
- 2015-03-07 18:28:51.208 -0800 [INFO] (task-0007): {speedometer: {active: 0, total: 0.0b, sec: 0.00, speed: 0.0b/s}}
57
- 2015-03-07 18:28:51.397 -0800 [INFO] (task-0000): {speedometer: {active: 0, total: 144b, sec: 0.00, speed: 144kb/s}}
58
- 2015-03-07 18:29:01.401 -0800 [INFO] (task-0002): {speedometer: {active: 5, total: 9.2mb, sec: 10.0, speed: 999kb/s}}
59
- 2015-03-07 18:29:11.410 -0800 [INFO] (task-0008): {speedometer: {active: 5, total: 36.1mb, sec: 20.0, speed: 2.7mb/s}}
70
+ 2015-11-27 13:43:25.592 +0900 [INFO] (task-0006): {speedometer: {active: 4, total: 13.5mb, sec: 1:51, speed: 121kb/s, records: 269,748, record-speed: 2,435/s}}
71
+ 2015-11-27 13:43:35.642 +0900 [INFO] (task-0004): {speedometer: {active: 4, total: 14.9mb, sec: 2:01, speed: 141kb/s, records: 297,532, record-speed: 2,832/s}}
72
+ 2015-11-27 13:43:45.661 +0900 [INFO] (task-0005): {speedometer: {active: 3, total: 16.5mb, sec: 2:11, speed: 119kb/s, records: 329,484, record-speed: 2,395/s}}
60
73
  ```
61
74
 
62
75
  - **active**: running threads
63
76
  - **total**: processed bytes. This size is calculated based on text data like csv. For example, boolean value is 4 bytes(true) or 5 bytes(false). The default configuration set a byte for delimiter and a byte padding for each record.
64
77
  - **sec**: elapsed time.
65
78
  - **speed**: bytes per second.
79
+ - **records**: total processed records.
80
+ - **record-speed**: total processed records per second.
66
81
 
67
82
  ## Build
68
83
 
data/build.gradle CHANGED
@@ -16,11 +16,11 @@ configurations {
16
16
  provided
17
17
  }
18
18
 
19
- version = "0.2.3"
19
+ version = "0.3.0"
20
20
 
21
21
  dependencies {
22
- compile "org.embulk:embulk-core:0.5.0+"
23
- provided "org.embulk:embulk-core:0.5.0+"
22
+ compile "org.embulk:embulk-core:0.6.17+"
23
+ provided "org.embulk:embulk-core:0.6.17+"
24
24
  // compile "YOUR_JAR_DEPENDENCY_GROUP:YOUR_JAR_DEPENDENCY_MODULE:YOUR_JAR_DEPENDENCY_VERSION"
25
25
  testCompile "org.jmockit:jmockit:1.15+"
26
26
  testCompile "junit:junit:4.+"
@@ -1,5 +1,7 @@
1
1
  package org.embulk.filter;
2
2
 
3
+ import java.util.Map;
4
+
3
5
  import javax.validation.constraints.Min;
4
6
 
5
7
  import org.embulk.config.Config;
@@ -19,9 +21,7 @@ import org.embulk.spi.PageReader;
19
21
  import org.embulk.spi.Schema;
20
22
  import org.embulk.spi.time.Timestamp;
21
23
  import org.embulk.spi.time.TimestampFormatter;
22
- import org.embulk.spi.type.TimestampType;
23
-
24
- import com.google.common.collect.ImmutableMap;
24
+ import org.embulk.spi.util.Timestamps;
25
25
 
26
26
  public class SpeedometerFilterPlugin
27
27
  implements FilterPlugin
@@ -30,7 +30,7 @@ public class SpeedometerFilterPlugin
30
30
  private static final int FALSE_LENGTH = Boolean.toString(false).length();
31
31
 
32
32
  public interface PluginTask
33
- extends Task, TimestampFormatter.FormatterTask
33
+ extends Task, TimestampFormatter.Task
34
34
  {
35
35
  @Config("speed_limit")
36
36
  @ConfigDefault("0")
@@ -55,10 +55,18 @@ public class SpeedometerFilterPlugin
55
55
  @Min(0)
56
56
  public int getLogIntervalSeconds();
57
57
 
58
+ @Config("column_options")
59
+ @ConfigDefault("{}")
60
+ Map<String, TimestampColumnOption> getColumnOptions();
61
+
58
62
  @ConfigInject
59
63
  public BufferAllocator getBufferAllocator();
60
64
  }
61
65
 
66
+ public interface TimestampColumnOption extends Task,
67
+ TimestampFormatter.TimestampColumnOption
68
+ { }
69
+
62
70
  @Override
63
71
  public void transaction(ConfigSource config, Schema inputSchema,
64
72
  FilterPlugin.Control control)
@@ -80,7 +88,7 @@ public class SpeedometerFilterPlugin
80
88
  static class SpeedControlPageOutput implements PageOutput {
81
89
  private final SpeedometerSpeedController controller;
82
90
  private final Schema schema;
83
- private final ImmutableMap<Column, TimestampFormatter> timestampMap;
91
+ private final TimestampFormatter[] timestampFormatters;
84
92
  private final PageOutput pageOutput;
85
93
  private final PageReader pageReader;
86
94
  private final BufferAllocator allocator;
@@ -96,7 +104,7 @@ public class SpeedometerFilterPlugin
96
104
  this.delimiterLength = task.getDelimiter().length();
97
105
  this.recordPaddingSize = task.getRecordPaddingSize();
98
106
  this.pageReader = new PageReader(schema);
99
- this.timestampMap = buildTimestampFormatterMap(task, schema);
107
+ this.timestampFormatters = Timestamps.newTimestampColumnFormatters(task, schema, task.getColumnOptions());
100
108
  this.pageBuilder = new PageBuilder(allocator, schema, pageOutput);
101
109
  }
102
110
 
@@ -126,37 +134,6 @@ public class SpeedometerFilterPlugin
126
134
  pageOutput.close();
127
135
  }
128
136
 
129
- private ImmutableMap<Column, TimestampFormatter> buildTimestampFormatterMap(final PluginTask task, Schema schema) {
130
- final ImmutableMap.Builder<Column, TimestampFormatter> builder = new ImmutableMap.Builder<>();
131
-
132
- schema.visitColumns(new ColumnVisitor() {
133
- @Override
134
- public void booleanColumn(Column column) { }
135
-
136
- @Override
137
- public void longColumn(Column column) { }
138
-
139
- @Override
140
- public void doubleColumn(Column column) { }
141
-
142
- @Override
143
- public void stringColumn(Column column) { }
144
-
145
- @Override
146
- public void timestampColumn(Column column) {
147
- if (column.getType() instanceof TimestampType) {
148
- TimestampType tt = (TimestampType) column.getType();
149
- builder.put(column, new TimestampFormatter(tt.getFormat(), task));
150
- } else {
151
- throw new RuntimeException("Timestamp should be TimestampType.");
152
- }
153
- }
154
- });
155
-
156
- return builder.build();
157
- }
158
-
159
-
160
137
  class ColumnVisitorImpl implements ColumnVisitor {
161
138
  private final PageBuilder pageBuilder;
162
139
  private long startRecordTime;
@@ -220,7 +197,7 @@ public class SpeedometerFilterPlugin
220
197
  }
221
198
 
222
199
  private void speedMonitorEndRecord() {
223
- controller.checkSpeedLimit(startRecordTime, recordPaddingSize);
200
+ controller.checkSpeedLimit(startRecordTime, recordPaddingSize, true);
224
201
  }
225
202
 
226
203
  // For null column
@@ -254,7 +231,7 @@ public class SpeedometerFilterPlugin
254
231
 
255
232
  private Timestamp speedMonitor(Column column, Timestamp t) {
256
233
  speedMonitorForDelimiter(column);
257
- TimestampFormatter formatter = timestampMap.get(column);
234
+ TimestampFormatter formatter = timestampFormatters[column.getIndex()];
258
235
  controller.checkSpeedLimit(startRecordTime, formatter.format(t).length());
259
236
  return t;
260
237
  }
@@ -18,6 +18,7 @@ class SpeedometerSpeedAggregator {
18
18
  private final AtomicInteger activeControllerCount = new AtomicInteger(0);
19
19
  private final AtomicLong globalStartTime = new AtomicLong(INITAL_START_TIME);
20
20
  private final AtomicLong globalTotalBytes = new AtomicLong(0);
21
+ private final AtomicLong globalTotalRecords = new AtomicLong(0);
21
22
  private final AtomicLong previousLogReportTimeMillisec = new AtomicLong(INITAL_START_TIME);
22
23
 
23
24
  // TODO: We can use google's library.
@@ -28,7 +29,7 @@ class SpeedometerSpeedAggregator {
28
29
  }
29
30
 
30
31
  public SpeedometerSpeedAggregator() {
31
- showLogMessage(activeControllerCount.get(), 0, 0, 0);
32
+ showLogMessage(activeControllerCount.get(), 0, 0, 0, 0, 0);
32
33
  }
33
34
 
34
35
  public void startController(SpeedometerSpeedController controller, long nowTime) {
@@ -45,6 +46,7 @@ class SpeedometerSpeedAggregator {
45
46
  }
46
47
  long runningCount = activeControllerCount.decrementAndGet();
47
48
  globalTotalBytes.addAndGet(controller.getTotalBytes());
49
+ globalTotalRecords.addAndGet(controller.getTotalRecords());
48
50
 
49
51
  // NOTE: Sometimes, there is no running thread nevertheless there are remaining tasks.
50
52
  // So, this message may be output while running tasks.
@@ -92,6 +94,10 @@ class SpeedometerSpeedAggregator {
92
94
  return globalTotalBytes.get();
93
95
  }
94
96
 
97
+ long getGlobalTotalRecords() {
98
+ return globalTotalRecords.get();
99
+ }
100
+
95
101
  List<SpeedometerSpeedController> getControllerList() {
96
102
  List<SpeedometerSpeedController> copyList;
97
103
  synchronized (controllerList) {
@@ -109,33 +115,40 @@ class SpeedometerSpeedAggregator {
109
115
  private void showProgressMessage(long nowTime) {
110
116
  long currentTotalSize = globalTotalBytes.get();
111
117
  long currentBytesPerSec = 0;
118
+ long currentTotalRecords = globalTotalRecords.get();
119
+ long currentRecordsPerSec = 0;
112
120
  for (SpeedometerSpeedController controller : getControllerList()) {
113
121
  currentTotalSize += controller.getTotalBytes();
122
+ currentTotalRecords += controller.getTotalRecords();
114
123
  currentBytesPerSec += controller.getPeriodBytesPerSec(nowTime);
124
+ currentRecordsPerSec += controller.getPeriodRecordsPerSec(nowTime);
115
125
  }
116
126
 
117
127
  long timeDelta = nowTime - globalStartTime.get();
118
128
  timeDelta = timeDelta > 0 ? timeDelta : 1;
119
129
 
120
- showLogMessage(activeControllerCount.get(), currentTotalSize, timeDelta, currentBytesPerSec);
130
+ showLogMessage(activeControllerCount.get(), currentTotalSize, timeDelta, currentBytesPerSec, currentTotalRecords, currentRecordsPerSec);
121
131
  }
122
132
 
123
133
  private void showOverallMessage() {
124
134
  long timeDelta = System.currentTimeMillis() - globalStartTime.get();
125
135
  timeDelta = timeDelta > 0 ? timeDelta : 1;
126
136
  long bytesPerSec = (globalTotalBytes.get() * 1000) / timeDelta;
137
+ long recordsPerSec = (globalTotalRecords.get() * 1000) / timeDelta;
127
138
 
128
- showLogMessage(activeControllerCount.get(), globalTotalBytes.get(), timeDelta, bytesPerSec);
139
+ showLogMessage(activeControllerCount.get(), globalTotalBytes.get(), timeDelta, bytesPerSec, globalTotalRecords.get(), recordsPerSec);
129
140
  }
130
141
 
131
- private void showLogMessage(int activeThreads, long totalBytes, long timeMilliSec, long bytesPerSec) {
142
+ private void showLogMessage(int activeThreads, long totalBytes, long timeMilliSec, long bytesPerSec, long totalRecords, long recordsPerSec) {
132
143
  Logger logger = getLogger();
133
144
  if (logger != null) {
134
- logger.info(String.format("{speedometer: {active: %d, total: %s, sec: %s, speed: %s/s}}",
145
+ logger.info(String.format("{speedometer: {active: %d, total: %s, sec: %s, speed: %s/s, records: %s, record-speed: %s/s}}",
135
146
  activeThreads,
136
- SpeedometerUtil.toNumberText(totalBytes),
147
+ SpeedometerUtil.toByteText(totalBytes),
137
148
  SpeedometerUtil.toTimeText(timeMilliSec),
138
- SpeedometerUtil.toNumberText(bytesPerSec)));
149
+ SpeedometerUtil.toByteText(bytesPerSec),
150
+ SpeedometerUtil.toDecimalText(totalRecords),
151
+ SpeedometerUtil.toDecimalText(recordsPerSec)));
139
152
  }
140
153
  }
141
154
  }
@@ -14,6 +14,8 @@ class SpeedometerSpeedController {
14
14
  private volatile long periodStartTime;
15
15
  private volatile long periodTotalBytes;
16
16
  private volatile long threadTotalBytes;
17
+ private volatile long periodTotalRecords;
18
+ private volatile long threadTotalRecords;
17
19
  private volatile boolean renewFlag = true;
18
20
 
19
21
  SpeedometerSpeedController(PluginTask task, SpeedometerSpeedAggregator aggregator) {
@@ -43,16 +45,24 @@ class SpeedometerSpeedController {
43
45
  public long getTotalBytes() {
44
46
  return threadTotalBytes + periodTotalBytes;
45
47
  }
48
+
49
+ public long getTotalRecords() {
50
+ return threadTotalRecords + periodTotalRecords;
51
+ }
46
52
 
47
53
  public long getPeriodBytesPerSec(long nowTime) {
48
- long timeDeltaMillisec = nowTime - periodStartTime;
49
- if (timeDeltaMillisec <= 0) {
50
- timeDeltaMillisec = 1;
51
- }
52
- return (periodTotalBytes * 1000) / timeDeltaMillisec;
54
+ return (periodTotalBytes * 1000) / getTimeDeltaMillisec(nowTime);
55
+ }
56
+
57
+ public long getPeriodRecordsPerSec(long nowTime) {
58
+ return (periodTotalRecords * 1000) / getTimeDeltaMillisec(nowTime);
53
59
  }
54
60
 
55
61
  public void checkSpeedLimit(long nowTime, long newDataSize) {
62
+ checkSpeedLimit(nowTime, newDataSize, false);
63
+ }
64
+
65
+ public void checkSpeedLimit(long nowTime, long newDataSize, boolean endRecord) {
56
66
  if (startTime == 0) {
57
67
  startTime = nowTime;
58
68
  aggregator.startController(this, startTime);
@@ -64,6 +74,9 @@ class SpeedometerSpeedController {
64
74
  }
65
75
 
66
76
  periodTotalBytes += newDataSize;
77
+ if (endRecord) {
78
+ periodTotalRecords++;
79
+ }
67
80
  aggregator.checkProgress(nowTime, logIntervalMillisec);
68
81
 
69
82
  if (limitBytesPerSec <= 0) {
@@ -101,7 +114,14 @@ class SpeedometerSpeedController {
101
114
  private void startNewPeriod(long newPeriodTime) {
102
115
  threadTotalBytes += periodTotalBytes;
103
116
  periodTotalBytes = 0;
117
+ threadTotalRecords += periodTotalRecords;
118
+ periodTotalRecords = 0;
104
119
  periodStartTime = newPeriodTime;
105
120
  }
121
+
122
+ private long getTimeDeltaMillisec(long nowTime) {
123
+ long timeDeltaMillisec = nowTime - periodStartTime;
124
+ return timeDeltaMillisec <= 0 ? 1 : timeDeltaMillisec;
125
+ }
106
126
  }
107
127
 
@@ -1,9 +1,11 @@
1
1
  package org.embulk.filter;
2
2
 
3
+ import java.text.NumberFormat;
4
+
3
5
  public class SpeedometerUtil {
4
6
  private static final int MIN_LENGTH = String.valueOf(Long.MIN_VALUE).length();
5
7
 
6
- public static String toNumberText(long originalNum) {
8
+ public static String toByteText(long originalNum) {
7
9
  long baseNum = 1000;
8
10
  long remain = 0;
9
11
  float num = originalNum;
@@ -24,6 +26,10 @@ public class SpeedometerUtil {
24
26
  return String.valueOf(originalNum);
25
27
  }
26
28
 
29
+ public static String toDecimalText(long originalNum) {
30
+ return NumberFormat.getNumberInstance().format(originalNum);
31
+ }
32
+
27
33
  public static String toTimeText(long timeMillisecs) {
28
34
  long num = timeMillisecs;
29
35
 
@@ -73,7 +73,7 @@ public class TestSpeedometerFilterPlugin
73
73
  builder.finish(); times = 0;
74
74
  reader.nextRecord(); times = 2;
75
75
  reader.setPage(page); times = 1;
76
- schema.visitColumns(withInstanceOf(ColumnVisitor.class)); times = 2;
76
+ schema.visitColumns(withInstanceOf(ColumnVisitor.class)); times = 1;
77
77
  }};
78
78
  }
79
79
 
@@ -42,6 +42,7 @@ public class TestSpeedometerSpeedAggregator {
42
42
  public void testStopController() {
43
43
  new NonStrictExpectations() {{
44
44
  controller.getTotalBytes(); result = 11;
45
+ controller.getTotalRecords(); result = 5;
45
46
  }};
46
47
 
47
48
  SpeedometerSpeedAggregator aggregator = new SpeedometerSpeedAggregator();
@@ -51,6 +52,7 @@ public class TestSpeedometerSpeedAggregator {
51
52
  assertEquals("Verify active controller count.", 0, aggregator.getActiveControllerCount());
52
53
  assertFalse("Verify there is a registered controller.", aggregator.getControllerList().contains(controller));
53
54
  assertEquals("Verify controller's total bytes are added to aggregator.", 11, aggregator.getGlobalTotalBytes());
55
+ assertEquals("Verify controller's total records are added to aggregator.", 5, aggregator.getGlobalTotalRecords());
54
56
  }
55
57
 
56
58
  @Test
@@ -98,7 +100,9 @@ public class TestSpeedometerSpeedAggregator {
98
100
  new Verifications() {{
99
101
  controller.renewPeriod(); times = 1;
100
102
  controller.getTotalBytes(); times = 1;
103
+ controller.getTotalRecords(); times = 1;
101
104
  controller.getPeriodBytesPerSec(startPeriodTime); times = 1;
105
+ controller.getPeriodRecordsPerSec(startPeriodTime); times = 1;
102
106
  }};
103
107
  }
104
108
 
@@ -114,7 +118,9 @@ public class TestSpeedometerSpeedAggregator {
114
118
  new Verifications() {{
115
119
  controller.renewPeriod(); times = 0;
116
120
  controller.getTotalBytes(); times = 0;
121
+ controller.getTotalRecords(); times = 0;
117
122
  controller.getPeriodBytesPerSec(startPeriodTime); times = 0;
123
+ controller.getPeriodRecordsPerSec(startPeriodTime); times = 0;
118
124
  }};
119
125
  }
120
126
  }
@@ -111,4 +111,41 @@ public class TestSpeedometerSpeedController {
111
111
  assertTrue("Verify renewPeriod flag is set.", controller.isRenewPeriodSet());
112
112
  }
113
113
 
114
+ @Test
115
+ public void testGetTotalRecords() {
116
+ new NonStrictExpectations() {{
117
+ task.getSpeedLimit(); result = 1L;
118
+ task.getMaxSleepMillisec(); result = 2;
119
+ task.getLogIntervalSeconds(); result = 3;
120
+ aggregator.getSpeedLimitForController((SpeedometerSpeedController)any); result = 10000;
121
+ }};
122
+ long nowTime = System.currentTimeMillis();
123
+ int newDataSize = 3;
124
+
125
+ controller = new SpeedometerSpeedController(task, aggregator);
126
+ assertEquals("Verify total records is zero.", 0, controller.getTotalRecords());
127
+ controller.checkSpeedLimit(nowTime, newDataSize);
128
+ assertEquals("Verify total records is zero for no new record.", 0, controller.getTotalRecords());
129
+ controller.checkSpeedLimit(nowTime + 1, newDataSize, true);
130
+ assertEquals("Verify total records", 1, controller.getTotalRecords());
131
+ }
132
+
133
+ @Test
134
+ public void testGetPeriodRecordsPerSec() {
135
+ new NonStrictExpectations() {{
136
+ task.getSpeedLimit(); result = 1L;
137
+ task.getMaxSleepMillisec(); result = 2;
138
+ task.getLogIntervalSeconds(); result = 3;
139
+ aggregator.getSpeedLimitForController((SpeedometerSpeedController)any); result = 10000;
140
+ }};
141
+ long nowTime = System.currentTimeMillis();
142
+ int newDataSize = 3;
143
+
144
+ controller = new SpeedometerSpeedController(task, aggregator);
145
+ assertEquals("Verify total records/s", 0, controller.getPeriodRecordsPerSec(System.currentTimeMillis()));
146
+ controller.checkSpeedLimit(nowTime, newDataSize);
147
+ assertEquals("Verify total records/s is not changed", 0, controller.getPeriodRecordsPerSec(System.currentTimeMillis()));
148
+ controller.checkSpeedLimit(nowTime, newDataSize, true);
149
+ assertTrue("Verify total records/s is changed", controller.getPeriodRecordsPerSec(System.currentTimeMillis()) > 0);
150
+ }
114
151
  }
@@ -7,20 +7,37 @@ import org.junit.Test;
7
7
  public class TestSpeedometerUtil {
8
8
 
9
9
  @Test
10
- public void testToNumberText() {
11
- assertEquals("Verify 0 bytes", "0.0b", SpeedometerUtil.toNumberText(0));
12
- assertEquals("Verify 0 bytes", "100b", SpeedometerUtil.toNumberText(100));
13
- assertEquals("Verify 0 bytes", "1.0kb", SpeedometerUtil.toNumberText(1000L));
14
- assertEquals("Verify 0 bytes", "100kb", SpeedometerUtil.toNumberText(1000L * 100));
15
- assertEquals("Verify 0 bytes", "1.0mb", SpeedometerUtil.toNumberText(1000L * 1000));
16
- assertEquals("Verify 0 bytes", "100mb", SpeedometerUtil.toNumberText(1000L * 1000 * 100));
17
- assertEquals("Verify 0 bytes", "1.0gb", SpeedometerUtil.toNumberText(1000L * 1000 * 1000));
18
- assertEquals("Verify 0 bytes", "100gb", SpeedometerUtil.toNumberText(1000L * 1000 * 1000 * 100));
19
- assertEquals("Verify 0 bytes", "1.0tb", SpeedometerUtil.toNumberText(1000L * 1000 * 1000 * 1000));
20
- assertEquals("Verify 0 bytes", "100tb", SpeedometerUtil.toNumberText(1000L * 1000 * 1000 * 1000 * 100));
21
- assertEquals("Verify 0 bytes", "1.0pb", SpeedometerUtil.toNumberText(1000L * 1000 * 1000 * 1000 * 1000));
22
- assertEquals("Verify 0 bytes", "100pb", SpeedometerUtil.toNumberText(1000L * 1000 * 1000 * 1000 * 1000 * 100));
23
- assertEquals("Verify 0 bytes", "1.0eb", SpeedometerUtil.toNumberText(1000L * 1000 * 1000 * 1000 * 1000 * 1000));
10
+ public void testToByteText() {
11
+ assertEquals("Verify 0 bytes", "0.0b", SpeedometerUtil.toByteText(0));
12
+ assertEquals("Verify 0 bytes", "100b", SpeedometerUtil.toByteText(100));
13
+ assertEquals("Verify 0 bytes", "1.0kb", SpeedometerUtil.toByteText(1000L));
14
+ assertEquals("Verify 0 bytes", "100kb", SpeedometerUtil.toByteText(1000L * 100));
15
+ assertEquals("Verify 0 bytes", "1.0mb", SpeedometerUtil.toByteText(1000L * 1000));
16
+ assertEquals("Verify 0 bytes", "100mb", SpeedometerUtil.toByteText(1000L * 1000 * 100));
17
+ assertEquals("Verify 0 bytes", "1.0gb", SpeedometerUtil.toByteText(1000L * 1000 * 1000));
18
+ assertEquals("Verify 0 bytes", "100gb", SpeedometerUtil.toByteText(1000L * 1000 * 1000 * 100));
19
+ assertEquals("Verify 0 bytes", "1.0tb", SpeedometerUtil.toByteText(1000L * 1000 * 1000 * 1000));
20
+ assertEquals("Verify 0 bytes", "100tb", SpeedometerUtil.toByteText(1000L * 1000 * 1000 * 1000 * 100));
21
+ assertEquals("Verify 0 bytes", "1.0pb", SpeedometerUtil.toByteText(1000L * 1000 * 1000 * 1000 * 1000));
22
+ assertEquals("Verify 0 bytes", "100pb", SpeedometerUtil.toByteText(1000L * 1000 * 1000 * 1000 * 1000 * 100));
23
+ assertEquals("Verify 0 bytes", "1.0eb", SpeedometerUtil.toByteText(1000L * 1000 * 1000 * 1000 * 1000 * 1000));
24
+ }
25
+
26
+ @Test
27
+ public void testToDecimalText() {
28
+ assertEquals("Verify 0 bytes", "0", SpeedometerUtil.toDecimalText(0));
29
+ assertEquals("Verify 0 bytes", "100", SpeedometerUtil.toDecimalText(100));
30
+ assertEquals("Verify 0 bytes", "1,000", SpeedometerUtil.toDecimalText(1000L));
31
+ assertEquals("Verify 0 bytes", "100,000", SpeedometerUtil.toDecimalText(1000L * 100));
32
+ assertEquals("Verify 0 bytes", "1,000,000", SpeedometerUtil.toDecimalText(1000L * 1000));
33
+ assertEquals("Verify 0 bytes", "100,000,000", SpeedometerUtil.toDecimalText(1000L * 1000 * 100));
34
+ assertEquals("Verify 0 bytes", "1,000,000,000", SpeedometerUtil.toDecimalText(1000L * 1000 * 1000));
35
+ assertEquals("Verify 0 bytes", "100,000,000,000", SpeedometerUtil.toDecimalText(1000L * 1000 * 1000 * 100));
36
+ assertEquals("Verify 0 bytes", "1,000,000,000,000", SpeedometerUtil.toDecimalText(1000L * 1000 * 1000 * 1000));
37
+ assertEquals("Verify 0 bytes", "100,000,000,000,000", SpeedometerUtil.toDecimalText(1000L * 1000 * 1000 * 1000 * 100));
38
+ assertEquals("Verify 0 bytes", "1,000,000,000,000,000", SpeedometerUtil.toDecimalText(1000L * 1000 * 1000 * 1000 * 1000));
39
+ assertEquals("Verify 0 bytes", "100,000,000,000,000,000", SpeedometerUtil.toDecimalText(1000L * 1000 * 1000 * 1000 * 1000 * 100));
40
+ assertEquals("Verify 0 bytes", "1,000,000,000,000,000,000", SpeedometerUtil.toDecimalText(1000L * 1000 * 1000 * 1000 * 1000 * 1000));
24
41
  }
25
42
 
26
43
  @Test
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.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - hata
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-16 00:00:00.000000000 Z
11
+ date: 2015-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -62,7 +62,7 @@ files:
62
62
  - src/test/java/org/embulk/filter/TestSpeedometerSpeedAggregator.java
63
63
  - src/test/java/org/embulk/filter/TestSpeedometerSpeedController.java
64
64
  - src/test/java/org/embulk/filter/TestSpeedometerUtil.java
65
- - classpath/embulk-filter-speedometer-0.2.3.jar
65
+ - classpath/embulk-filter-speedometer-0.3.0.jar
66
66
  homepage: https://github.com/hata/embulk-filter-speedometer
67
67
  licenses:
68
68
  - MIT