fluent-plugin-sakuraio 0.1.2 → 0.1.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 +5 -5
- data/.rubocop.yml +25 -0
- data/Gemfile +2 -0
- data/Rakefile +5 -3
- data/fluent-plugin-sakuraio.gemspec +10 -7
- data/lib/fluent/plugin/in_sakuraio.rb +45 -35
- data/lib/fluent/plugin/out_sakuraio.rb +8 -5
- metadata +43 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5e4048610939f4ee51631219d5f0e08a43c4d66a339e5527a6f6fdcdcedc0ad2
|
4
|
+
data.tar.gz: 4cd1c9fb745886a0927276c88068f7252e25ae254fdab3dcfd5c040b79ebcf47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3e10d9c21538474d6b6a57cf6a729b874b796c23a7c9f1e260f213c64da43d196e7a87d08fe89d455388399267348802419840e151e54be00656a4b7fcf7f6a
|
7
|
+
data.tar.gz: 5c00a268963655a5508f62bc162c76e320d2dc465ebc0b4886f5e28daac09bbc5421199378ca70136b11452e33b455a1e1506badee6a35adb869629b7a3b3ee7
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-performance
|
3
|
+
|
4
|
+
AllCops:
|
5
|
+
TargetRubyVersion: 2.3
|
6
|
+
|
7
|
+
Layout/LineLength:
|
8
|
+
Enabled: false
|
9
|
+
|
10
|
+
Style/ClassAndModuleChildren:
|
11
|
+
Enabled: false
|
12
|
+
|
13
|
+
Style/Documentation:
|
14
|
+
Enabled: false
|
15
|
+
|
16
|
+
Metrics/BlockLength:
|
17
|
+
Exclude:
|
18
|
+
- 'test/**/*'
|
19
|
+
- '*.gemspec'
|
20
|
+
|
21
|
+
Metrics/ClassLength:
|
22
|
+
Max: 200
|
23
|
+
|
24
|
+
Metrics/MethodLength:
|
25
|
+
Max: 20
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'rake/testtask'
|
3
5
|
|
4
6
|
Rake::TestTask.new(:test) do |test|
|
5
7
|
test.libs << 'lib' << 'test'
|
@@ -7,4 +9,4 @@ Rake::TestTask.new(:test) do |test|
|
|
7
9
|
test.verbose = true
|
8
10
|
end
|
9
11
|
|
10
|
-
task :
|
12
|
+
task default: :test
|
@@ -1,10 +1,11 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
|
5
6
|
Gem::Specification.new do |spec|
|
6
7
|
spec.name = 'fluent-plugin-sakuraio'
|
7
|
-
spec.version = '0.1.
|
8
|
+
spec.version = '0.1.3'
|
8
9
|
spec.authors = ['Yuya Kusakabe']
|
9
10
|
spec.email = ['yuya.kusakabe@gmail.com']
|
10
11
|
|
@@ -20,15 +21,17 @@ Gem::Specification.new do |spec|
|
|
20
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
22
|
spec.require_paths = ['lib']
|
22
23
|
|
23
|
-
spec.required_ruby_version = '>= 2.
|
24
|
+
spec.required_ruby_version = '>= 2.3'
|
24
25
|
|
25
26
|
spec.add_runtime_dependency 'eventmachine'
|
26
27
|
spec.add_runtime_dependency 'faye-websocket'
|
27
28
|
spec.add_runtime_dependency 'fluentd', '>= 0.14', '< 2'
|
28
29
|
spec.add_runtime_dependency 'yajl-ruby'
|
29
|
-
spec.add_development_dependency 'bundler'
|
30
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
31
|
-
spec.add_development_dependency 'test-unit'
|
30
|
+
spec.add_development_dependency 'bundler'
|
32
31
|
spec.add_development_dependency 'rack'
|
32
|
+
spec.add_development_dependency 'rake'
|
33
|
+
spec.add_development_dependency 'rubocop'
|
34
|
+
spec.add_development_dependency 'rubocop-performance'
|
35
|
+
spec.add_development_dependency 'test-unit'
|
33
36
|
spec.add_development_dependency 'thin'
|
34
37
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'fluent/plugin/input'
|
2
4
|
require 'yajl'
|
3
5
|
require 'faye/websocket'
|
@@ -26,6 +28,7 @@ module Fluent::Plugin
|
|
26
28
|
|
27
29
|
def ensure_reactor_running
|
28
30
|
return if EM.reactor_running?
|
31
|
+
|
29
32
|
thread_create(:in_sakuraio_reactor) do
|
30
33
|
EM.run
|
31
34
|
end
|
@@ -45,13 +48,7 @@ module Fluent::Plugin
|
|
45
48
|
end
|
46
49
|
|
47
50
|
client.on :message do |event|
|
48
|
-
|
49
|
-
records = parse(event.data)
|
50
|
-
unless records.empty?
|
51
|
-
records.each do |r|
|
52
|
-
router.emit(r['tag'], r['time'], r['record'])
|
53
|
-
end
|
54
|
-
end
|
51
|
+
handle_message(event)
|
55
52
|
end
|
56
53
|
|
57
54
|
client.on :error do |event|
|
@@ -64,16 +61,26 @@ module Fluent::Plugin
|
|
64
61
|
end
|
65
62
|
end
|
66
63
|
|
64
|
+
def handle_message(event)
|
65
|
+
log.debug "sakuraio: received message #{event.data}"
|
66
|
+
records = parse(event.data)
|
67
|
+
return if records.empty?
|
68
|
+
|
69
|
+
records.each do |r|
|
70
|
+
router.emit(r['tag'], r['time'], r['record'])
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
67
74
|
def parse(text)
|
68
75
|
parser = Yajl::Parser.new
|
69
76
|
j = parser.parse(text)
|
70
77
|
records = []
|
71
78
|
case j['type']
|
72
|
-
when 'connection'
|
79
|
+
when 'connection'
|
73
80
|
parse_connection(records, j)
|
74
|
-
when 'location'
|
81
|
+
when 'location'
|
75
82
|
parse_location(records, j)
|
76
|
-
when 'channels'
|
83
|
+
when 'channels'
|
77
84
|
parse_channels(records, j)
|
78
85
|
else
|
79
86
|
log.debug "unknown type: #{j['type']}: #{text}"
|
@@ -81,54 +88,57 @@ module Fluent::Plugin
|
|
81
88
|
records
|
82
89
|
end
|
83
90
|
|
84
|
-
def parse_connection(records,
|
91
|
+
def parse_connection(records, data)
|
85
92
|
record = {
|
86
|
-
'tag' =>
|
93
|
+
'tag' => data['module'] + '.connection',
|
87
94
|
'record' => {
|
88
|
-
'module' =>
|
89
|
-
'is_online' =>
|
95
|
+
'module' => data['module'],
|
96
|
+
'is_online' => data['payload']['is_online']
|
90
97
|
},
|
91
|
-
'time' => @time_parser.parse(
|
98
|
+
'time' => @time_parser.parse(data['datetime'])
|
92
99
|
}
|
93
100
|
records.push(record)
|
94
101
|
records
|
95
102
|
end
|
96
103
|
|
97
|
-
def parse_location(records,
|
98
|
-
c =
|
104
|
+
def parse_location(records, data)
|
105
|
+
c = data['payload']['coordinate']
|
99
106
|
if c != 'null'
|
100
107
|
record = {
|
101
|
-
'tag' =>
|
108
|
+
'tag' => data['module'] + '.location',
|
102
109
|
'record' => {
|
103
|
-
'module' =>
|
110
|
+
'module' => data['module'],
|
104
111
|
'latitude' => c['latitude'],
|
105
112
|
'longitude' => c['longitude'],
|
106
113
|
'range_m' => c['range_m']
|
107
114
|
},
|
108
|
-
'time' => @time_parser.parse(
|
115
|
+
'time' => @time_parser.parse(data['datetime'])
|
109
116
|
}
|
110
117
|
records.push(record)
|
111
118
|
end
|
112
119
|
records
|
113
120
|
end
|
114
121
|
|
115
|
-
def parse_channels(records,
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
'tag' => tag + '.channels.' + c['channel'].to_s,
|
121
|
-
'record' => {
|
122
|
-
'module' => j['module'],
|
123
|
-
'channel' => c['channel'],
|
124
|
-
'type' => c['type'],
|
125
|
-
'value' => c['value']
|
126
|
-
},
|
127
|
-
'time' => @time_parser.parse(c['datetime']) || message_time
|
128
|
-
}
|
129
|
-
records.push(record)
|
122
|
+
def parse_channels(records, data)
|
123
|
+
msg_time = @time_parser.parse(data['datetime'])
|
124
|
+
mod = data['module']
|
125
|
+
data['payload']['channels'].each do |c|
|
126
|
+
records.push(parse_channel(mod, msg_time, c))
|
130
127
|
end
|
131
128
|
records
|
132
129
|
end
|
130
|
+
|
131
|
+
def parse_channel(mod, msg_time, chan)
|
132
|
+
{
|
133
|
+
'tag' => mod + '.channels.' + chan['channel'].to_s,
|
134
|
+
'record' => {
|
135
|
+
'module' => mod,
|
136
|
+
'channel' => chan['channel'],
|
137
|
+
'type' => chan['type'],
|
138
|
+
'value' => chan['value']
|
139
|
+
},
|
140
|
+
'time' => @time_parser.parse(chan['datetime']) || msg_time
|
141
|
+
}
|
142
|
+
end
|
133
143
|
end
|
134
144
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'fluent/plugin/output'
|
2
4
|
require 'yajl'
|
3
5
|
require 'faye/websocket'
|
@@ -20,12 +22,13 @@ module Fluent::Plugin
|
|
20
22
|
|
21
23
|
def ensure_reactor_running
|
22
24
|
return if EM.reactor_running?
|
25
|
+
|
23
26
|
thread_create(:out_sakuraio_reactor) do
|
24
27
|
EM.run
|
25
28
|
end
|
26
29
|
end
|
27
30
|
|
28
|
-
def run
|
31
|
+
def run
|
29
32
|
@client = Faye::WebSocket::Client.new(@url)
|
30
33
|
EM.next_tick do
|
31
34
|
@client.on :open do
|
@@ -46,8 +49,8 @@ module Fluent::Plugin
|
|
46
49
|
end
|
47
50
|
end
|
48
51
|
|
49
|
-
def process(_tag,
|
50
|
-
|
52
|
+
def process(_tag, events)
|
53
|
+
events.each do |_time, record|
|
51
54
|
log.debug "sakuraio: process record #{record}"
|
52
55
|
modules.each do |m|
|
53
56
|
s = encode_record(m, record)
|
@@ -57,7 +60,7 @@ module Fluent::Plugin
|
|
57
60
|
end
|
58
61
|
end
|
59
62
|
|
60
|
-
def encode_record(
|
63
|
+
def encode_record(mod, record)
|
61
64
|
data = []
|
62
65
|
@channels.each do |ch, v|
|
63
66
|
key, type = v
|
@@ -66,7 +69,7 @@ module Fluent::Plugin
|
|
66
69
|
'value' => record[key])
|
67
70
|
end
|
68
71
|
hash = { 'type' => 'channels',
|
69
|
-
'module' =>
|
72
|
+
'module' => mod,
|
70
73
|
'payload' => { 'channels' => data } }
|
71
74
|
Yajl::Encoder.encode(hash)
|
72
75
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-sakuraio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuya Kusakabe
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eventmachine
|
@@ -76,32 +76,60 @@ dependencies:
|
|
76
76
|
name: bundler
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- - "
|
79
|
+
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
81
|
+
version: '0'
|
82
82
|
type: :development
|
83
83
|
prerelease: false
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
|
-
- - "
|
86
|
+
- - ">="
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version: '
|
88
|
+
version: '0'
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rack
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
89
103
|
- !ruby/object:Gem::Dependency
|
90
104
|
name: rake
|
91
105
|
requirement: !ruby/object:Gem::Requirement
|
92
106
|
requirements:
|
93
|
-
- - "
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: rubocop
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
94
122
|
- !ruby/object:Gem::Version
|
95
|
-
version: '
|
123
|
+
version: '0'
|
96
124
|
type: :development
|
97
125
|
prerelease: false
|
98
126
|
version_requirements: !ruby/object:Gem::Requirement
|
99
127
|
requirements:
|
100
|
-
- - "
|
128
|
+
- - ">="
|
101
129
|
- !ruby/object:Gem::Version
|
102
|
-
version: '
|
130
|
+
version: '0'
|
103
131
|
- !ruby/object:Gem::Dependency
|
104
|
-
name:
|
132
|
+
name: rubocop-performance
|
105
133
|
requirement: !ruby/object:Gem::Requirement
|
106
134
|
requirements:
|
107
135
|
- - ">="
|
@@ -115,7 +143,7 @@ dependencies:
|
|
115
143
|
- !ruby/object:Gem::Version
|
116
144
|
version: '0'
|
117
145
|
- !ruby/object:Gem::Dependency
|
118
|
-
name:
|
146
|
+
name: test-unit
|
119
147
|
requirement: !ruby/object:Gem::Requirement
|
120
148
|
requirements:
|
121
149
|
- - ">="
|
@@ -150,6 +178,7 @@ extensions: []
|
|
150
178
|
extra_rdoc_files: []
|
151
179
|
files:
|
152
180
|
- ".gitignore"
|
181
|
+
- ".rubocop.yml"
|
153
182
|
- ".travis.yml"
|
154
183
|
- CHANGELOG.md
|
155
184
|
- Gemfile
|
@@ -171,7 +200,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
171
200
|
requirements:
|
172
201
|
- - ">="
|
173
202
|
- !ruby/object:Gem::Version
|
174
|
-
version: '2.
|
203
|
+
version: '2.3'
|
175
204
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
205
|
requirements:
|
177
206
|
- - ">="
|
@@ -179,7 +208,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
179
208
|
version: '0'
|
180
209
|
requirements: []
|
181
210
|
rubyforge_project:
|
182
|
-
rubygems_version: 2.
|
211
|
+
rubygems_version: 2.7.6.2
|
183
212
|
signing_key:
|
184
213
|
specification_version: 4
|
185
214
|
summary: fluentd plugin for sakura.io
|