embulk-parser-apache-custom-log 0.3.0 → 0.4.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: 3ba30504cc0a6d376ddd430be6eb5e52d1268ec2
4
- data.tar.gz: cf21f1c47b0f0fa4b15ed2f2f1bda56a7224e8f6
3
+ metadata.gz: 0e9175fc76d713c5e0cb3d94e76abfd1d5907381
4
+ data.tar.gz: b0b200ead1ca5153054ac23656bdef3257ef9ba9
5
5
  SHA512:
6
- metadata.gz: a441b181d0243e8f00a97ccc2fbc4e7fe53a3918a4dac8574e6c04d85d6ae494390effa1d1b384a308f464cdb1cd32cbf04550d08f38cfd46ff0effc2669f75a
7
- data.tar.gz: 6d3dd325b7168007af1bf5be476534d899f6ff061f0ea2ad918b220ea6612e97281680d91d534003fa3a95cc9198503d141231f41c16645b5f080a798e88cc72
6
+ metadata.gz: 9d31ad44accc1e444a1b27d5d0cb26e62c09d859ae1d25ab0fbcbabf1187810967ee22bc09347f1f0058e5172f4d942d46bf036bf4afdc726e920d30bb26f2a9
7
+ data.tar.gz: a8c7663f5b7084dfcc721b9b09ddb25e7a8f6365fe0db77536182dd9c914fe0028dc2efa27b9c36ed07d76aac6a7ec4430b1526807bfde2fc7c561225e24635f
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Apache **CustomLog** parser plugin for Embulk
2
2
 
3
+ ![circlci-badge](https://circleci.com/gh/jami-i/embulk-parser-apache-custom-log.svg?&style=shield&circle-token=7092d38cbe35149872178bbce455dfc9d5bc951b)
4
+
3
5
  Embulk parser plugin for apache **CustomLog**.
4
6
 
5
7
  Parser configuration based [Apache HTTPD 2.2 CustomLogFormat](http://httpd.apache.org/docs/2.2/en/mod/mod_log_config.html#formats)
@@ -64,7 +66,7 @@ see: [LogFormats.java](https://github.com/jami-i/embulk-parser-apache-custom-log
64
66
  | q | String | request-query | |
65
67
  | r | String | request-line | |
66
68
  | s | Long | response-status | |
67
- | t | Timestamp | request-time | timestamp format defined in [strptime](http://docs.ruby-lang.org/en/2.0.0/DateTime.html#method-c-_strptime)|
69
+ | t | Timestamp | request-time | timestamp format defined in [strptime](http://docs.ruby-lang.org/en/2.0.0/DateTime.html#method-c-_strptime). <br/>if format is not present, DateTimeFormatter class will be used. |
68
70
  | T | Long | request-process-time-s | |
69
71
  | u | String | request-user | |
70
72
  | U | String | request-path | |
@@ -12,7 +12,7 @@ configurations {
12
12
  provided
13
13
  }
14
14
 
15
- version = "0.3.0"
15
+ version = "0.4.0"
16
16
 
17
17
  dependencies {
18
18
  compile "org.embulk:embulk-core:0.7.4"
@@ -0,0 +1,3 @@
1
+ machine:
2
+ java:
3
+ version: oraclejdk8
@@ -0,0 +1,42 @@
1
+ package org.embulk.parser.apache.log;
2
+
3
+ import org.embulk.spi.PageBuilder;
4
+ import org.embulk.spi.time.Timestamp;
5
+ import org.embulk.spi.time.TimestampParser;
6
+ import org.joda.time.format.DateTimeFormat;
7
+ import org.joda.time.format.DateTimeFormatter;
8
+
9
+ import java.util.Locale;
10
+
11
+
12
+ public class SimpleDateFormatTimestampLogElement extends TimestampLogElement {
13
+
14
+ static final DateTimeFormatter formatter =
15
+ DateTimeFormat
16
+ .forPattern("dd/MMM/yyyy:HH:mm:ss Z")
17
+ .withLocale(Locale.US);
18
+
19
+ public SimpleDateFormatTimestampLogElement(TimestampParser.Task task, String name) {
20
+ super(task, name, "\\[([^\\]]+)\\]", "");
21
+ }
22
+
23
+ @Override
24
+ public Timestamp parse(String s) {
25
+ try{
26
+ long epoch = formatter.parseDateTime(s).getMillis();
27
+ return Timestamp.ofEpochMilli(epoch);
28
+ }catch (Exception e){
29
+ return null;
30
+ }
31
+ }
32
+
33
+ @Override
34
+ public void setToPageBuilder(PageBuilder pageBuilder, int i, String value) {
35
+ Timestamp parse = parse(value);
36
+ if(parse != null){
37
+ pageBuilder.setTimestamp(i, parse);
38
+ }else{
39
+ pageBuilder.setNull(i);
40
+ }
41
+ }
42
+ }
@@ -1,13 +1,15 @@
1
1
  package org.embulk.parser.apache.log;
2
2
 
3
- import java.util.regex.Pattern;
4
- import java.util.regex.Matcher;
5
3
 
6
4
  import org.apache.commons.lang3.StringUtils;
7
5
  import org.embulk.spi.time.TimestampParser;
6
+ import org.slf4j.Logger;
7
+ import org.slf4j.LoggerFactory;
8
8
 
9
9
  public class TimestampLogElementFactory implements LogElementFactory<TimestampLogElement>, Patterns {
10
10
 
11
+ private static final Logger logger = LoggerFactory.getLogger(TimestampLogElementFactory.class);
12
+
11
13
  private TimestampParser.Task task;
12
14
  private String name;
13
15
 
@@ -19,7 +21,8 @@ public class TimestampLogElementFactory implements LogElementFactory<TimestampLo
19
21
  @Override
20
22
  public TimestampLogElement create(String parameter) {
21
23
  if(StringUtils.isEmpty(parameter)){
22
- return new TimestampLogElement(task, name, "\\[([^\\]]+)\\]");
24
+ logger.info("since format parameter is not given, use DateTimeFormatter.");
25
+ return new SimpleDateFormatTimestampLogElement(task, name);
23
26
  }else{
24
27
  String regex = toTimestampRegex(parameter);
25
28
  return new TimestampLogElement(task, name, regex, parameter);
@@ -9,6 +9,7 @@ import java.io.File;
9
9
  import java.io.FileReader;
10
10
  import java.io.IOException;
11
11
  import java.net.URISyntaxException;
12
+ import java.util.Arrays;
12
13
  import java.util.function.Consumer;
13
14
 
14
15
  import static org.hamcrest.CoreMatchers.is;
@@ -16,7 +17,7 @@ import static org.junit.Assert.assertThat;
16
17
 
17
18
  public class TestApacheLogParserPlugin {
18
19
 
19
- private static EmbulkPluginTester tester = new EmbulkPluginTester(ParserPlugin.class, "apache-log", ApacheLogParserPlugin.class);
20
+ private static EmbulkPluginTester tester = new EmbulkPluginTester(ParserPlugin.class, "apache-log", ApacheCustomLogParserPlugin.class);
20
21
 
21
22
  @Test
22
23
  public void test_common() throws Exception {
@@ -52,6 +53,40 @@ public class TestApacheLogParserPlugin {
52
53
 
53
54
  }
54
55
 
56
+ @Test
57
+ public void test_custom_time_format() throws Exception {
58
+ tester.run("/yml/test_custom_time_format.yml");
59
+
60
+ assertResult(
61
+ "/temp/result_custom_time_format.000.00.tsv",
62
+ cols -> {
63
+ String[] expected = new String[]{
64
+ "remote-host",
65
+ "remote-log-name",
66
+ "request-user",
67
+ "request-time",
68
+ "request-line",
69
+ "response-status",
70
+ "response-bytes"
71
+ };
72
+ assertThat(cols, is(expected));
73
+ },
74
+ cols -> {
75
+ String[] expected = new String[]{
76
+ "127.0.0.1",
77
+ "",
78
+ "frank",
79
+ "2015-11-20 13:55:36.000000 +0000",
80
+ "GET /apache_pb.gif HTTP/1.0",
81
+ "200",
82
+ "2326"
83
+ };
84
+ assertThat(cols, is(expected));
85
+ }
86
+ );
87
+
88
+ }
89
+
55
90
  @Test
56
91
  public void test_combined() throws Exception {
57
92
  tester.run("/yml/test_combined.yml");
@@ -29,6 +29,11 @@ public class DummyConfigSource implements ConfigSource {
29
29
  return false;
30
30
  }
31
31
 
32
+ @Override
33
+ public boolean has(String attrName) {
34
+ return false;
35
+ }
36
+
32
37
  @Override
33
38
  public <E> E get(Class<E> type, String attrName) {
34
39
  return null;
@@ -8,7 +8,8 @@ import java.io.FileWriter;
8
8
  import java.util.regex.Matcher;
9
9
  import java.util.regex.Pattern;
10
10
 
11
- import org.embulk.command.Runner;
11
+ import org.embulk.EmbulkEmbed;
12
+ import org.embulk.config.ConfigLoader;
12
13
 
13
14
  public class EmbulkPluginTester {
14
15
 
@@ -19,8 +20,14 @@ public class EmbulkPluginTester {
19
20
 
20
21
  public void run(String ymlPath) throws Exception
21
22
  {
22
- Runner runner = new Runner("{}");
23
- runner.run(convert(ymlPath));
23
+ EmbulkEmbed.Bootstrap bootstrap = new EmbulkEmbed.Bootstrap();
24
+
25
+ EmbulkEmbed embulk = bootstrap.initialize();
26
+
27
+ ConfigLoader configLoader = new ConfigLoader(embulk.getModelManager());
28
+ embulk.run(configLoader.fromYamlFile(new File(convert(ymlPath))));
29
+
30
+
24
31
  }
25
32
 
26
33
  private String convert(String yml) throws Exception
@@ -0,0 +1 @@
1
+ 127.0.0.1 - frank [2015.11.20 13:55:36] "GET /apache_pb.gif HTTP/1.0" 200 2326
@@ -0,0 +1,13 @@
1
+ in:
2
+ type: file
3
+ path_prefix: 'data/access_log_custom_time_format'
4
+ parser:
5
+ type: apache-log
6
+ format: '%h %l %u %{[%Y.%m.%d %T]}t \"%r\" %>s %b'
7
+ out:
8
+ type: file
9
+ path_prefix: '/temp/result_custom_time_format.'
10
+ file_ext: tsv
11
+ formatter:
12
+ type: csv
13
+ delimiter: "\t"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-parser-apache-custom-log
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroyuki Sato
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-10-25 00:00:00.000000000 Z
12
+ date: 2015-11-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +52,7 @@ files:
52
52
  - LICENSE.txt
53
53
  - README.md
54
54
  - build.gradle
55
+ - circle.yml
55
56
  - gradle/wrapper/gradle-wrapper.jar
56
57
  - gradle/wrapper/gradle-wrapper.properties
57
58
  - gradlew
@@ -66,6 +67,7 @@ files:
66
67
  - src/main/java/org/embulk/parser/apache/log/LongLogElementFactory.java
67
68
  - src/main/java/org/embulk/parser/apache/log/Patterns.java
68
69
  - src/main/java/org/embulk/parser/apache/log/Replacement.java
70
+ - src/main/java/org/embulk/parser/apache/log/SimpleDateFormatTimestampLogElement.java
69
71
  - src/main/java/org/embulk/parser/apache/log/StringLogElement.java
70
72
  - src/main/java/org/embulk/parser/apache/log/StringLogElementFactory.java
71
73
  - src/main/java/org/embulk/parser/apache/log/TimestampLogElement.java
@@ -82,12 +84,14 @@ files:
82
84
  - src/test/resources/data/access_log_2_combined
83
85
  - src/test/resources/data/access_log_combined
84
86
  - src/test/resources/data/access_log_common
87
+ - src/test/resources/data/access_log_custom_time_format
85
88
  - src/test/resources/resource.txt
86
89
  - src/test/resources/temp/dummy
87
90
  - src/test/resources/yml/test_combined.yml
88
91
  - src/test/resources/yml/test_combined2.yml
89
92
  - src/test/resources/yml/test_common.yml
90
- - classpath/embulk-parser-apache-custom-log-0.3.0.jar
93
+ - src/test/resources/yml/test_custom_time_format.yml
94
+ - classpath/embulk-parser-apache-custom-log-0.4.0.jar
91
95
  homepage: https://github.com/jami-i/embulk-parser-apache-custom-log
92
96
  licenses:
93
97
  - MIT