fluent-plugin-websocket 0.1.6 → 0.1.7
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 +7 -0
- data/README.rdoc +12 -7
- data/fluent-plugin-websocket.gemspec +3 -4
- data/lib/fluent/plugin/out_websocket.rb +35 -22
- metadata +21 -51
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 88b467a1b71ca69b8a5788e2b8eaf77dc2757e5d
|
4
|
+
data.tar.gz: d875ee07c22e50bca910a3fde58114ada7cee4ba
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5a94849d7c1120d52cb8ba89f554de622fb7027989e426d76ab103e01ea6021bd1631db2914e09112bad06313f4af63e35e62a78affca0ffceb1e29b060db2db
|
7
|
+
data.tar.gz: 9373a773cdf5f4cd5bdc0e1d04738f18b2315c3bafcebe72d933a6fd83b5f2a984c298da0a61aebbf571b792078e83374355ea15f6b6cf63da15db1058ffed6e
|
data/README.rdoc
CHANGED
@@ -15,11 +15,12 @@ This plugin depends on {*em-websocket*}[https://github.com/igrigorik/em-websocke
|
|
15
15
|
== Configuration
|
16
16
|
<match foo.**>
|
17
17
|
type websocket
|
18
|
-
host 192.168.1.1
|
19
|
-
port 8080
|
20
|
-
use_msgpack false
|
21
|
-
add_time false
|
22
|
-
add_tag true
|
18
|
+
host 192.168.1.1 # default: 0.0.0.0 (ANY)
|
19
|
+
port 8080 # default: 8080
|
20
|
+
use_msgpack false # default: false
|
21
|
+
add_time false # default: false
|
22
|
+
add_tag true # default: true
|
23
|
+
buffered_messages 100 # default: 0
|
23
24
|
</match>
|
24
25
|
|
25
26
|
* *host*: WebSocket server IP address.
|
@@ -27,6 +28,7 @@ This plugin depends on {*em-websocket*}[https://github.com/igrigorik/em-websocke
|
|
27
28
|
* <b>use_msgpack</b>: Send {MessagePack}[http://msgpack.org/] format binary. Otherwise, you send JSON format text.
|
28
29
|
* <b>add_time</b>: Add timestamp to the data.
|
29
30
|
* <b>add_tag</b>: Add fluentd tag to the data.
|
31
|
+
* <b>buffered_messages</b>: The number of messages to be buffered. The new connection receives them.
|
30
32
|
|
31
33
|
If there are no websocket connections, this plugin silently discards data. You may use <em>out_copy</em> plugin like this:
|
32
34
|
|
@@ -42,8 +44,10 @@ If there are no websocket connections, this plugin silently discards data. You m
|
|
42
44
|
</store>
|
43
45
|
</match>
|
44
46
|
|
47
|
+
If <em>buffered_messages</em> is greater than <em>0</em>, the last stored data is sent to the client upon new connection.
|
48
|
+
|
45
49
|
== Data format
|
46
|
-
[tag, timestamp,
|
50
|
+
[tag, timestamp, data_object]
|
47
51
|
|
48
52
|
* tag is appended when <em>add_tag</em> option is true.
|
49
53
|
* timestamp is appended when <em>add_time</em> option is true.
|
@@ -79,7 +83,8 @@ Extract data by {msgpack.js}[https://github.com/msgpack/msgpack-javascript].
|
|
79
83
|
5. Create new Pull Request
|
80
84
|
|
81
85
|
== Recent changes
|
82
|
-
* 0.1.
|
86
|
+
* 0.1.7 Add message buffering. (Thanks to {SebastianOsuna}[https://github.com/SebastianOsuna])
|
87
|
+
* 0.1.6 Added license to gemspec.
|
83
88
|
* 0.1.5 Fixed dependencies. (Thanks to {ca-gacky}[https://github.com/ca-gacky])
|
84
89
|
* 0.1.4 Changed json parser to yajl. (Thanks to {Kogarasi}[https://github.com/Kogarasi])
|
85
90
|
* 0.1.3 Bug fix.
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.name = "fluent-plugin-websocket"
|
6
|
-
gem.version = "0.1.
|
6
|
+
gem.version = "0.1.7"
|
7
7
|
gem.authors = ["IZAWA Tetsu (@moccos)"]
|
8
8
|
gem.email = ["tt.izawa@gmail.com"]
|
9
9
|
gem.homepage = "https://github.com/moccos/fluent-plugin-websocket"
|
@@ -18,9 +18,8 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
20
|
gem.add_development_dependency "rake"
|
21
|
-
gem.add_development_dependency "fluentd"
|
22
21
|
gem.add_development_dependency "websocket-eventmachine-client"
|
23
|
-
gem.
|
22
|
+
gem.add_runtime_dependency "msgpack"
|
24
23
|
gem.add_runtime_dependency "yajl-ruby"
|
25
24
|
gem.add_runtime_dependency "fluentd"
|
26
25
|
gem.add_runtime_dependency "em-websocket"
|
@@ -27,43 +27,48 @@ module Fluent
|
|
27
27
|
config_param :port, :integer, :default => 8080
|
28
28
|
config_param :add_time, :bool, :default => false
|
29
29
|
config_param :add_tag, :bool, :default => true
|
30
|
+
config_param :buffered_messages, :integer, :default => 0
|
30
31
|
|
31
32
|
def configure(conf)
|
32
33
|
super
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
34
|
+
@thread = Thread.new do
|
35
|
+
$log.trace "Started em-websocket thread."
|
36
|
+
$log.info "WebSocket server #{@host}:#{@port} [msgpack: #{@use_msgpack}]"
|
37
|
+
EM.run {
|
38
|
+
EM::WebSocket.run(:host => @host, :port => @port) do |ws|
|
39
|
+
ws.onopen { |handshake|
|
40
|
+
callback = @use_msgpack ? proc{|msg| ws.send_binary(msg)} : proc{|msg| ws.send(msg)}
|
41
|
+
$lock.synchronize do
|
42
|
+
sid = $channel.subscribe callback
|
43
|
+
$log.trace "WebSocket connection: ID " + sid.to_s
|
44
|
+
ws.onclose {
|
45
|
+
$log.trace "Connection closed: ID " + sid.to_s
|
46
|
+
$lock.synchronize do
|
47
|
+
$channel.unsubscribe(sid)
|
48
|
+
end
|
49
|
+
}
|
50
|
+
@buffer.each do |msg|
|
51
|
+
ws.send(msg)
|
47
52
|
end
|
48
|
-
|
49
|
-
end
|
53
|
+
end
|
50
54
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
55
|
+
#ws.onmessage { |msg|
|
56
|
+
#}
|
57
|
+
}
|
58
|
+
end
|
59
|
+
}
|
56
60
|
end
|
57
61
|
end
|
58
62
|
|
59
63
|
def start
|
64
|
+
@buffer = []
|
60
65
|
super
|
61
66
|
end
|
62
67
|
|
63
68
|
def shutdown
|
64
69
|
super
|
65
70
|
EM.stop
|
66
|
-
Thread::kill(
|
71
|
+
Thread::kill(@thread)
|
67
72
|
$log.trace "Killed em-websocket thread."
|
68
73
|
end
|
69
74
|
|
@@ -74,10 +79,18 @@ module Fluent
|
|
74
79
|
if (@add_time) then data.unshift(time) end
|
75
80
|
if (@add_tag) then data.unshift(tag) end
|
76
81
|
output = @use_msgpack ? data.to_msgpack : Yajl::Encoder.encode( data )
|
82
|
+
buffer(output)
|
77
83
|
$lock.synchronize do
|
78
84
|
$channel.push output
|
79
85
|
end
|
80
86
|
}
|
81
87
|
end
|
88
|
+
|
89
|
+
def buffer(data)
|
90
|
+
return unless @buffered_messages > 0
|
91
|
+
@buffer << data
|
92
|
+
# Buffer only new @buffered_messages messages
|
93
|
+
@buffer = @buffer[-@buffered_messages, @buffered_messages] if @buffer.length > @buffered_messages
|
94
|
+
end
|
82
95
|
end
|
83
96
|
end
|
metadata
CHANGED
@@ -1,126 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-websocket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- IZAWA Tetsu (@moccos)
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2016-09-04 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rake
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: fluentd
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ! '>='
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '0'
|
38
|
-
type: :development
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
24
|
+
- - ">="
|
44
25
|
- !ruby/object:Gem::Version
|
45
26
|
version: '0'
|
46
27
|
- !ruby/object:Gem::Dependency
|
47
28
|
name: websocket-eventmachine-client
|
48
29
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
30
|
requirements:
|
51
|
-
- -
|
31
|
+
- - ">="
|
52
32
|
- !ruby/object:Gem::Version
|
53
33
|
version: '0'
|
54
34
|
type: :development
|
55
35
|
prerelease: false
|
56
36
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
37
|
requirements:
|
59
|
-
- -
|
38
|
+
- - ">="
|
60
39
|
- !ruby/object:Gem::Version
|
61
40
|
version: '0'
|
62
41
|
- !ruby/object:Gem::Dependency
|
63
42
|
name: msgpack
|
64
43
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
44
|
requirements:
|
67
|
-
- -
|
45
|
+
- - ">="
|
68
46
|
- !ruby/object:Gem::Version
|
69
47
|
version: '0'
|
70
|
-
type: :
|
48
|
+
type: :runtime
|
71
49
|
prerelease: false
|
72
50
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
51
|
requirements:
|
75
|
-
- -
|
52
|
+
- - ">="
|
76
53
|
- !ruby/object:Gem::Version
|
77
54
|
version: '0'
|
78
55
|
- !ruby/object:Gem::Dependency
|
79
56
|
name: yajl-ruby
|
80
57
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
58
|
requirements:
|
83
|
-
- -
|
59
|
+
- - ">="
|
84
60
|
- !ruby/object:Gem::Version
|
85
61
|
version: '0'
|
86
62
|
type: :runtime
|
87
63
|
prerelease: false
|
88
64
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
65
|
requirements:
|
91
|
-
- -
|
66
|
+
- - ">="
|
92
67
|
- !ruby/object:Gem::Version
|
93
68
|
version: '0'
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: fluentd
|
96
71
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
72
|
requirements:
|
99
|
-
- -
|
73
|
+
- - ">="
|
100
74
|
- !ruby/object:Gem::Version
|
101
75
|
version: '0'
|
102
76
|
type: :runtime
|
103
77
|
prerelease: false
|
104
78
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
79
|
requirements:
|
107
|
-
- -
|
80
|
+
- - ">="
|
108
81
|
- !ruby/object:Gem::Version
|
109
82
|
version: '0'
|
110
83
|
- !ruby/object:Gem::Dependency
|
111
84
|
name: em-websocket
|
112
85
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
86
|
requirements:
|
115
|
-
- -
|
87
|
+
- - ">="
|
116
88
|
- !ruby/object:Gem::Version
|
117
89
|
version: '0'
|
118
90
|
type: :runtime
|
119
91
|
prerelease: false
|
120
92
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
93
|
requirements:
|
123
|
-
- -
|
94
|
+
- - ">="
|
124
95
|
- !ruby/object:Gem::Version
|
125
96
|
version: '0'
|
126
97
|
description: Fluentd websocket output plugin which can output JSON string or MessagePack
|
@@ -131,7 +102,7 @@ executables: []
|
|
131
102
|
extensions: []
|
132
103
|
extra_rdoc_files: []
|
133
104
|
files:
|
134
|
-
- .gitignore
|
105
|
+
- ".gitignore"
|
135
106
|
- Gemfile
|
136
107
|
- LICENSE.txt
|
137
108
|
- README.rdoc
|
@@ -142,27 +113,26 @@ files:
|
|
142
113
|
homepage: https://github.com/moccos/fluent-plugin-websocket
|
143
114
|
licenses:
|
144
115
|
- Apache License, Version 2.0
|
116
|
+
metadata: {}
|
145
117
|
post_install_message:
|
146
118
|
rdoc_options: []
|
147
119
|
require_paths:
|
148
120
|
- lib
|
149
121
|
required_ruby_version: !ruby/object:Gem::Requirement
|
150
|
-
none: false
|
151
122
|
requirements:
|
152
|
-
- -
|
123
|
+
- - ">="
|
153
124
|
- !ruby/object:Gem::Version
|
154
125
|
version: 1.9.2
|
155
126
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
-
none: false
|
157
127
|
requirements:
|
158
|
-
- -
|
128
|
+
- - ">="
|
159
129
|
- !ruby/object:Gem::Version
|
160
130
|
version: '0'
|
161
131
|
requirements: []
|
162
132
|
rubyforge_project:
|
163
|
-
rubygems_version:
|
133
|
+
rubygems_version: 2.2.2
|
164
134
|
signing_key:
|
165
|
-
specification_version:
|
135
|
+
specification_version: 4
|
166
136
|
summary: Fluentd websocket output plugin
|
167
137
|
test_files:
|
168
138
|
- test/plugin/test_out_websocket.rb
|