fluent-plugin-ua-parser 0.2.2 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 337a460e83df30aaf3e1723b70fabbd0d82514af
4
- data.tar.gz: cf9823914d9dacfdd9eebbfcc3b0472030a30fe5
3
+ metadata.gz: 798fd3a07e20680afeb795bce63afd87c1d0ea50
4
+ data.tar.gz: a254e9205acd22070d3ddbd8cfeab569dd0afaf0
5
5
  SHA512:
6
- metadata.gz: bb1f8302dd21aeaa8faa549eff52b89c85b9f5099819bf4a73feb9866f379994f8fa4b42ce933f297180c9d599591f4004bd3ec8b01f763930f87d2ee005d6a6
7
- data.tar.gz: 7a50a8fd7e997da3c1002893f72efe90d11ccb6278c449bf47b7e99453529b77337b3c504ee8f4652958f3af4f33fd718766025a62efb9f7daf88afa73e4b435
6
+ metadata.gz: ef90a396baadafd69ca1e5743980b8e5b5c0a99ba0b296dab16d0e90b1052a68dcce69cb4ec2fa968ef7a7fbe5d59d380f6e223d7510e005e9108b06dcbd6e2f
7
+ data.tar.gz: f2a5211d157b3f754d64e3ffaa8f1f62a0c95ad8620a77c6185ec5e7e310e0da9e99e9685f61a95981e45c57bb7255b0b77842db6d003832e98e7b6ae6ceb079
data/README.md CHANGED
@@ -112,6 +112,38 @@ access.apache: {
112
112
  }
113
113
  ```
114
114
 
115
+ ### Example 3:
116
+
117
+ ```xml
118
+ <filter access.apache.**>
119
+ @type ua_parser
120
+ key_name ua_string
121
+ flatten
122
+ </filter>
123
+ ```
124
+
125
+ Assuming following inputs are coming:
126
+
127
+ ```json
128
+ access.apache: {
129
+ "ua_string":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7"
130
+ }
131
+ ```
132
+
133
+ then output bocomes as belows:
134
+
135
+ ```json
136
+ access.apache: {
137
+ "ua_string":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.7",
138
+ "ua_browser_family":"Safari",
139
+ "ua_browser_version":"9.0.1",
140
+ "ua_browser_major_version":9,
141
+ "ua_os_family":"Mac OS X",
142
+ "ua_os_version":"10.11.1",
143
+ "ua_os_major_version":10,
144
+ "ua_device":"Other"
145
+ }
146
+ ```
115
147
 
116
148
 
117
149
  ## Parameters
@@ -132,10 +164,13 @@ access.apache: {
132
164
  Patterns file(regexes.yaml) path.
133
165
  Get from [uap-core](https://github.com/ua-parser/uap-core)
134
166
 
167
+ - flatten *bool*
168
+ join hashed data by '_'. default false.
169
+
135
170
 
136
171
  ## TODO
137
172
 
138
- * flatten option (join hashed data by '_')
173
+ * patches welcome!
139
174
 
140
175
 
141
176
  ## Contributing
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "fluent-plugin-ua-parser"
7
- spec.version = "0.2.2"
7
+ spec.version = "0.3.0"
8
8
  spec.authors = ["Yuri Umezaki"]
9
9
  spec.email = ["bungoume@gmail.com"]
10
10
  spec.homepage = "https://github.com/bungoume/fluent-plugin-ua-parser"
@@ -13,7 +13,7 @@ module Fluent
13
13
  config_param :key_name, :string, :default => 'user_agent'
14
14
  config_param :delete_key, :bool, :default => false
15
15
  config_param :out_key, :string, :default => 'ua'
16
- # config_param :flatten, :bool :default => false
16
+ config_param :flatten, :bool, :default => false
17
17
  config_param :patterns_path, :string, :default => nil
18
18
 
19
19
  def configure(conf)
@@ -32,7 +32,11 @@ module Fluent
32
32
  record.delete(@key_name) if @delete_key
33
33
  unless ua_string.nil?
34
34
  user_agent_detail = @ua_cache.getset(ua_string) { get_ua_detail(ua_string) }
35
- record[@out_key] = user_agent_detail
35
+ if flatten
36
+ record.merge! hash_flatten(user_agent_detail, [@out_key])
37
+ else
38
+ record[@out_key] = user_agent_detail
39
+ end
36
40
  end
37
41
  record
38
42
  end
@@ -52,5 +56,19 @@ module Fluent
52
56
  data['device'] = ua.device.to_s
53
57
  data
54
58
  end
59
+
60
+ def hash_flatten(a, keys=[])
61
+ ret = {}
62
+ a.each{|k,v|
63
+ ks = keys + [k]
64
+ if v.class == Hash
65
+ ret.merge!(hash_flatten(v, ks))
66
+ else
67
+ ret.merge!({ks.join('_')=> v})
68
+ end
69
+ }
70
+ ret
71
+ end
72
+
55
73
  end if defined?(Filter) # Support only >= v0.12
56
74
  end
@@ -41,4 +41,26 @@ class UaParserFilterTest < Test::Unit::TestCase
41
41
  assert_equal 'Other', ua_object['device']
42
42
  end
43
43
 
44
+ def test_emit_flatten
45
+ d1 = d1 = create_driver(%[
46
+ type ua_parser
47
+ flatten
48
+ ], 'test')
49
+ ua = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36'
50
+
51
+ d1.run do
52
+ d1.emit({'user_agent' => ua})
53
+ end
54
+ emits = d1.emits
55
+ assert_equal 1, emits.length
56
+ assert_equal 'test', emits[0][0] # tag
57
+ ua_object = emits[0][2]
58
+ assert_equal 'Chrome', ua_object['ua_browser_family']
59
+ assert_equal 46, ua_object['ua_browser_major_version']
60
+ assert_equal '46.0.2490', ua_object['ua_browser_version']
61
+ assert_equal 'Windows 7', ua_object['ua_os_family']
62
+ assert_equal '', ua_object['ua_os_version']
63
+ assert_equal 'Other', ua_object['ua_device']
64
+ end
65
+
44
66
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-ua-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuri Umezaki