fastly_fluent 0.0.1 → 0.0.2
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.
- data/fastly_fluent.gemspec +1 -1
- data/lib/fluent/plugin/in_fastly.rb +26 -0
- data/test/plugin/test_fastly_fluent.rb +37 -0
- metadata +25 -11
- checksums.yaml +0 -7
data/fastly_fluent.gemspec
CHANGED
@@ -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 = "fastly_fluent"
|
7
|
-
spec.version = '0.0.
|
7
|
+
spec.version = '0.0.2'
|
8
8
|
spec.authors = ["Benjamin Bryant"]
|
9
9
|
spec.email = ["benjaminhbryant@gmail.com"]
|
10
10
|
spec.description = %q{fluent plugin for JSON encoded fastly syslogs}
|
@@ -29,6 +29,7 @@ module Fluent
|
|
29
29
|
super
|
30
30
|
require 'cool.io'
|
31
31
|
require 'fluent/plugin/socket_util'
|
32
|
+
require 'cgi'
|
32
33
|
end
|
33
34
|
|
34
35
|
config_param :port, :integer, :default => 5140
|
@@ -89,10 +90,35 @@ module Fluent
|
|
89
90
|
tag = record.delete('tag')
|
90
91
|
|
91
92
|
message = JSON.parse(record.delete('message'))
|
93
|
+
|
94
|
+
## copy message params into message, skipping null items
|
92
95
|
message.each do |k,v|
|
93
96
|
record[k] = v unless v == "(null)"
|
94
97
|
end
|
95
98
|
|
99
|
+
## parse url
|
100
|
+
if message['url']
|
101
|
+
uri = URI.parse(message['url'])
|
102
|
+
record['path'] = uri.path
|
103
|
+
|
104
|
+
|
105
|
+
# emit query params
|
106
|
+
unless uri.query.nil? || uri.query == ""
|
107
|
+
|
108
|
+
CGI::parse(uri.query).each do |k,v|
|
109
|
+
if record[k].nil?
|
110
|
+
if v.count > 1
|
111
|
+
record[k] = v
|
112
|
+
elsif v.count == 1
|
113
|
+
record[k] = v.first
|
114
|
+
else
|
115
|
+
record[k] = true
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
96
122
|
|
97
123
|
emit(tag, time, record)
|
98
124
|
}
|
@@ -68,6 +68,43 @@ class FastlyInputTest < Test::Unit::TestCase
|
|
68
68
|
}
|
69
69
|
end
|
70
70
|
|
71
|
+
def test_param_splitting
|
72
|
+
|
73
|
+
|
74
|
+
configs = {'127.0.0.1' => CONFIG}
|
75
|
+
configs.merge!('::1' => IPv6_CONFIG) if ipv6_enabled?
|
76
|
+
|
77
|
+
configs.each_pair { |k, v|
|
78
|
+
d = create_driver(v)
|
79
|
+
|
80
|
+
test = "<134>2014-07-10T23:18:15Z cache-hk91 td.server.requests[11226]: {\"ip\":\"166.137.213.198\",\"client_id\":\"17a8e5f8f64a9a7c85d1ccab51bcfdf6\",\"status\":200,\"user_agent\":\"Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B511 Safari/9537.53\",\"null_val\":\"(null)\",\"url\":\"/my/path?query=param&bob=first&bob=second&sally\"}"
|
81
|
+
|
82
|
+
|
83
|
+
|
84
|
+
d.run do
|
85
|
+
u = Fluent::SocketUtil.create_udp_socket(k)
|
86
|
+
u.connect(k, PORT)
|
87
|
+
u.send(test, 0)
|
88
|
+
|
89
|
+
sleep 1
|
90
|
+
end
|
91
|
+
|
92
|
+
tag =d.emits.first[0]
|
93
|
+
time = d.emits.first[1]
|
94
|
+
record = d.emits.first[2]
|
95
|
+
|
96
|
+
assert_equal(tag, 'td.server.requests')
|
97
|
+
assert_equal(time, Time.new(2014,7,10,23,18,15).to_i)
|
98
|
+
assert_equal(record['ip'], '166.137.213.198')
|
99
|
+
assert_equal(record['path'], '/my/path')
|
100
|
+
|
101
|
+
assert_equal(record['query'], 'param')
|
102
|
+
assert_equal(record['bob'], ["first","second"])
|
103
|
+
assert_equal(record['sally'], true)
|
104
|
+
|
105
|
+
}
|
106
|
+
end
|
107
|
+
|
71
108
|
def test_msg_size
|
72
109
|
d = create_driver
|
73
110
|
tests = create_test_case
|
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastly_fluent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Benjamin Bryant
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
12
|
+
date: 2014-07-14 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,29 +30,33 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: rake
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
|
-
- - '>='
|
35
|
+
- - ! '>='
|
32
36
|
- !ruby/object:Gem::Version
|
33
37
|
version: '0'
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
|
-
- - '>='
|
43
|
+
- - ! '>='
|
39
44
|
- !ruby/object:Gem::Version
|
40
45
|
version: '0'
|
41
46
|
- !ruby/object:Gem::Dependency
|
42
47
|
name: fluentd
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
44
50
|
requirements:
|
45
|
-
- - '>='
|
51
|
+
- - ! '>='
|
46
52
|
- !ruby/object:Gem::Version
|
47
53
|
version: '0'
|
48
54
|
type: :runtime
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
51
58
|
requirements:
|
52
|
-
- - '>='
|
59
|
+
- - ! '>='
|
53
60
|
- !ruby/object:Gem::Version
|
54
61
|
version: '0'
|
55
62
|
description: fluent plugin for JSON encoded fastly syslogs
|
@@ -71,26 +78,33 @@ files:
|
|
71
78
|
homepage: ''
|
72
79
|
licenses:
|
73
80
|
- MIT
|
74
|
-
metadata: {}
|
75
81
|
post_install_message:
|
76
82
|
rdoc_options: []
|
77
83
|
require_paths:
|
78
84
|
- lib
|
79
85
|
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
80
87
|
requirements:
|
81
|
-
- - '>='
|
88
|
+
- - ! '>='
|
82
89
|
- !ruby/object:Gem::Version
|
83
90
|
version: '0'
|
91
|
+
segments:
|
92
|
+
- 0
|
93
|
+
hash: 4532696612457073463
|
84
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
85
96
|
requirements:
|
86
|
-
- - '>='
|
97
|
+
- - ! '>='
|
87
98
|
- !ruby/object:Gem::Version
|
88
99
|
version: '0'
|
100
|
+
segments:
|
101
|
+
- 0
|
102
|
+
hash: 4532696612457073463
|
89
103
|
requirements: []
|
90
104
|
rubyforge_project:
|
91
|
-
rubygems_version:
|
105
|
+
rubygems_version: 1.8.25
|
92
106
|
signing_key:
|
93
|
-
specification_version:
|
107
|
+
specification_version: 3
|
94
108
|
summary: ''
|
95
109
|
test_files:
|
96
110
|
- test/helper.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 908f50379a7eebc384dadea58ff75cab3452ee55
|
4
|
-
data.tar.gz: 4bff227b7727af33b38d45afef1600b0b1c02935
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 1c4125fdf6248b2a62f5fd1916c85749e4ac3921c689f62555f3d7913c5a98cdd65f16df999f499a84dd03e74988494231be2ff75302d10ff8b2e6d7428d74ed
|
7
|
-
data.tar.gz: 3b33e3ed78c7bcea9c13b69ee51eea4ef764c6d4c5bce813e7af94da3bde49a7ae1488cd772c4a619ba87c763ae51ae4cd5d9e3b47220b8c86c5f533c6557011
|