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 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