fluent-plugin-websocket 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
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 # 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
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, data\_object]
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.6 Added lisence to gemspec.
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
- lib = File.expand_path('../lib', __FILE__)
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"
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.add_development_dependency "msgpack"
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
- $thread = Thread.new do
34
- $log.trace "Started em-websocket thread."
35
- $log.info "WebSocket server #{@host}:#{@port} [msgpack: #{@use_msgpack}]"
36
- EM.run {
37
- EM::WebSocket.run(:host => @host, :port => @port) do |ws|
38
- ws.onopen { |handshake|
39
- callback = @use_msgpack ? proc{|msg| ws.send_binary(msg)} : proc{|msg| ws.send(msg)}
40
- $lock.synchronize do
41
- sid = $channel.subscribe callback
42
- $log.trace "WebSocket connection: ID " + sid.to_s
43
- ws.onclose {
44
- $log.trace "Connection closed: ID " + sid.to_s
45
- $lock.synchronize do
46
- $channel.unsubscribe(sid)
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
- #ws.onmessage { |msg|
52
- #}
53
- }
54
- end
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($thread)
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.6
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: 2013-11-18 00:00:00.000000000 Z
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: :development
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: 1.8.25
133
+ rubygems_version: 2.2.2
164
134
  signing_key:
165
- specification_version: 3
135
+ specification_version: 4
166
136
  summary: Fluentd websocket output plugin
167
137
  test_files:
168
138
  - test/plugin/test_out_websocket.rb