daioikachan 0.0.2 → 0.0.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 +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +1 -1
- data/VERSION +1 -1
- data/daioikachan.gemspec +1 -2
- metadata +5 -7
- data/README/out_irc.md +0 -58
- data/lib/fluent/plugin/out_irc.rb +0 -292
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f5aaa06960399af8c0db1b659792fbe07b64e8b
|
4
|
+
data.tar.gz: 3d719dd5b2d8fb8d587a6253e97495847240386b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af6e9a5b261f683988c5287ffd7009219ee32731d8113de0b8a19460028c5cc15d60b470972a28ef94266bb1e927f18845ecebc1fda8ae01bb36d7b9eec4ee26
|
7
|
+
data.tar.gz: 9b970c33412b8524e5a3422293e8939875056c5c4def588f3091d404c39c957307b796a5d032cf5c0b58d522ef2471f06de00394e731825637472286b38f3af5
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -74,7 +74,7 @@ See [config-file](http://docs.fluentd.org/articles/config-file) documentation of
|
|
74
74
|
See following pages for built-in plugins.
|
75
75
|
|
76
76
|
* [in_daioikachan](./README/in_daioikachan.md)
|
77
|
-
* [fluent-plugin-irc](
|
77
|
+
* [fluent-plugin-irc](https://github.com/choplin/fluent-plugin-irc)
|
78
78
|
* [fluent-plugin-slack](https://github.com/sowawa/fluent-plugin-slack)
|
79
79
|
|
80
80
|
If you need other backends, search other fluentd output plugins and add them. Enjoy!
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
data/daioikachan.gemspec
CHANGED
@@ -19,8 +19,7 @@ Gem::Specification.new do |gem|
|
|
19
19
|
gem.add_dependency "fluentd", "~> 0.12.0"
|
20
20
|
gem.add_dependency "dotenv"
|
21
21
|
gem.add_dependency "puma"
|
22
|
-
|
23
|
-
gem.add_dependency "irc_parser"
|
22
|
+
gem.add_dependency "fluent-plugin-irc", ">= 0.0.7"
|
24
23
|
gem.add_dependency "fluent-plugin-slack", ">= 0.5.0"
|
25
24
|
gem.add_development_dependency "rake"
|
26
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: daioikachan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Naotoshi Seo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -53,19 +53,19 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: fluent-plugin-irc
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 0.0.7
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 0.0.7
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: fluent-plugin-slack
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,7 +108,6 @@ files:
|
|
108
108
|
- LICENSE
|
109
109
|
- README.md
|
110
110
|
- README/in_daioikachan.md
|
111
|
-
- README/out_irc.md
|
112
111
|
- Rakefile
|
113
112
|
- VERSION
|
114
113
|
- bin/daioikachan
|
@@ -116,7 +115,6 @@ files:
|
|
116
115
|
- examples/example.conf
|
117
116
|
- examples/multi_slack.conf
|
118
117
|
- lib/fluent/plugin/in_daioikachan.rb
|
119
|
-
- lib/fluent/plugin/out_irc.rb
|
120
118
|
- test/helper.rb
|
121
119
|
- test/plugin/test_in_daioikachan.rb
|
122
120
|
homepage: https://github.com/sonots/daioikachan
|
data/README/out_irc.md
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
# Fluent::Plugin::Irc, a plugin for [Fluentd](http://fluentd.org)
|
2
|
-
|
3
|
-
[](https://travis-ci.org/choplin/fluent-plugin-irc)
|
4
|
-
|
5
|
-
Fluent plugin to send messages to IRC server
|
6
|
-
|
7
|
-
## Installation
|
8
|
-
|
9
|
-
`$ fluent-gem install fluent-plugin-irc`
|
10
|
-
|
11
|
-
## Configuration
|
12
|
-
|
13
|
-
### Example
|
14
|
-
|
15
|
-
```
|
16
|
-
<match **>
|
17
|
-
type irc
|
18
|
-
host localhost
|
19
|
-
port 6667
|
20
|
-
channel fluentd
|
21
|
-
nick fluentd
|
22
|
-
user fluentd
|
23
|
-
real fluentd
|
24
|
-
message notice: %s [%s] %s
|
25
|
-
out_keys tag,time,message
|
26
|
-
time_key time
|
27
|
-
time_format %Y/%m/%d %H:%M:%S
|
28
|
-
tag_key tag
|
29
|
-
</match>
|
30
|
-
```
|
31
|
-
|
32
|
-
### Parameter
|
33
|
-
|
34
|
-
|parameter|description|default|
|
35
|
-
|---|---|---|
|
36
|
-
|host|IRC server host|localhost|
|
37
|
-
|port|IRC server port number|6667|
|
38
|
-
|channel|channel to send messages (without first '#')||
|
39
|
-
|channel_keys|keys used to format channel. %s will be replaced with value specified by channel_keys if this option is used|nil|
|
40
|
-
|nick|nickname registerd of IRC|fluentd|
|
41
|
-
|user|user name registerd of IRC|fluentd|
|
42
|
-
|real|real name registerd of IRC|fluentd|
|
43
|
-
|message|message format. %s will be replaced with value specified by out_keys||
|
44
|
-
|out_keys|keys used to format messages||
|
45
|
-
|time_key|key name for time|time|
|
46
|
-
|time_format|time format. This will be formatted with Time#strftime.|%Y/%m/%d %H:%M:%S|
|
47
|
-
|tag_key|key name for tag|tag|
|
48
|
-
|command|irc command. `privmsg` or `notice`|privmsg|
|
49
|
-
|command_keys|keys used to format command. %s will be replaced with value specified by command_keys if this option is used|nil|
|
50
|
-
|send_interval|interval (sec) to send message. defence Excess Flood|2|
|
51
|
-
|max_send_queue|maximum size of send message queue|100|
|
52
|
-
|
53
|
-
## Copyright
|
54
|
-
|
55
|
-
<table>
|
56
|
-
<tr><td>Copyright</td><td>Copyright (c) 2015 OKUNO Akihiro</td></tr>
|
57
|
-
<tr><td>License</td><td>Apache License, Version 2.0</td></tr>
|
58
|
-
</table>
|
@@ -1,292 +0,0 @@
|
|
1
|
-
module Fluent
|
2
|
-
class IRCOutput < Fluent::Output
|
3
|
-
Fluent::Plugin.register_output('irc', self)
|
4
|
-
|
5
|
-
include SetTimeKeyMixin
|
6
|
-
include SetTagKeyMixin
|
7
|
-
|
8
|
-
config_set_default :include_time_key, true
|
9
|
-
config_set_default :include_tag_key, true
|
10
|
-
|
11
|
-
config_param :host , :string , :default => 'localhost'
|
12
|
-
config_param :port , :integer , :default => 6667
|
13
|
-
config_param :channel , :string
|
14
|
-
config_param :channel_keys, :default => nil do |val|
|
15
|
-
val.split(',')
|
16
|
-
end
|
17
|
-
config_param :nick , :string , :default => 'fluentd'
|
18
|
-
config_param :user , :string , :default => 'fluentd'
|
19
|
-
config_param :real , :string , :default => 'fluentd'
|
20
|
-
config_param :password , :string , :default => nil
|
21
|
-
config_param :message , :string
|
22
|
-
config_param :out_keys do |val|
|
23
|
-
val.split(',')
|
24
|
-
end
|
25
|
-
config_param :time_key , :string , :default => 'time'
|
26
|
-
config_param :time_format , :string , :default => '%Y/%m/%d %H:%M:%S'
|
27
|
-
config_param :tag_key , :string , :default => 'tag'
|
28
|
-
config_param :command , :string , :default => 'privmsg'
|
29
|
-
config_param :command_keys, :default => nil do |val|
|
30
|
-
val.split(',')
|
31
|
-
end
|
32
|
-
|
33
|
-
config_param :blocking_timeout, :time, :default => 0.5
|
34
|
-
config_param :max_send_queue, :integer, :default => 100
|
35
|
-
config_param :send_interval, :time, :default => 2
|
36
|
-
|
37
|
-
COMMAND_MAP = {
|
38
|
-
'priv_msg' => :priv_msg,
|
39
|
-
'privmsg' => :priv_msg,
|
40
|
-
'notice' => :notice,
|
41
|
-
}
|
42
|
-
|
43
|
-
# To support log_level option implemented by Fluentd v0.10.43
|
44
|
-
unless method_defined?(:log)
|
45
|
-
define_method("log") { $log }
|
46
|
-
end
|
47
|
-
|
48
|
-
attr_reader :conn # for test
|
49
|
-
|
50
|
-
def initialize
|
51
|
-
super
|
52
|
-
require 'irc_parser'
|
53
|
-
end
|
54
|
-
|
55
|
-
def configure(conf)
|
56
|
-
super
|
57
|
-
|
58
|
-
begin
|
59
|
-
@message % (['1'] * @out_keys.length)
|
60
|
-
rescue ArgumentError
|
61
|
-
raise Fluent::ConfigError, "string specifier '%s' and out_keys specification mismatch"
|
62
|
-
end
|
63
|
-
|
64
|
-
if @channel_keys
|
65
|
-
begin
|
66
|
-
@channel % (['1'] * @channel_keys.length)
|
67
|
-
rescue ArgumentError
|
68
|
-
raise Fluent::ConfigError, "string specifier '%s' and channel_keys specification mismatch"
|
69
|
-
end
|
70
|
-
end
|
71
|
-
@channel = '#'+@channel
|
72
|
-
|
73
|
-
if @command_keys
|
74
|
-
begin
|
75
|
-
@command % (['1'] * @command_keys.length)
|
76
|
-
rescue ArgumentError
|
77
|
-
raise Fluent::ConfigError, "string specifier '%s' and command_keys specification mismatch"
|
78
|
-
end
|
79
|
-
else
|
80
|
-
unless @command = COMMAND_MAP[@command]
|
81
|
-
raise Fluent::ConfigError, "command must be one of #{COMMAND_MAP.keys.join(', ')}"
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
@send_queue = []
|
86
|
-
end
|
87
|
-
|
88
|
-
def start
|
89
|
-
super
|
90
|
-
|
91
|
-
begin
|
92
|
-
@loop = Coolio::Loop.new
|
93
|
-
@conn = create_connection
|
94
|
-
@timer = TimerWatcher.new(@send_interval, true, log, &method(:on_timer))
|
95
|
-
@loop.attach(@timer)
|
96
|
-
@thread = Thread.new(&method(:run))
|
97
|
-
rescue => e
|
98
|
-
puts e
|
99
|
-
raise Fluent::ConfigError, "failed to connect IRC server #{@host}:#{@port}"
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
def shutdown
|
104
|
-
super
|
105
|
-
@loop.watchers.each { |w| w.detach }
|
106
|
-
@loop.stop
|
107
|
-
@conn.close
|
108
|
-
@thread.join
|
109
|
-
end
|
110
|
-
|
111
|
-
def run
|
112
|
-
@loop.run(@blocking_timeout)
|
113
|
-
rescue => e
|
114
|
-
log.error "unexpected error", :error => e, :error_class => e.class
|
115
|
-
log.error_backtrace
|
116
|
-
end
|
117
|
-
|
118
|
-
def emit(tag, es, chain)
|
119
|
-
chain.next
|
120
|
-
|
121
|
-
if @conn.closed?
|
122
|
-
log.warn "out_irc: connection is closed. try to reconnect"
|
123
|
-
@conn = create_connection
|
124
|
-
end
|
125
|
-
|
126
|
-
es.each do |time,record|
|
127
|
-
if @send_queue.size >= @max_send_queue
|
128
|
-
log.warn "out_irc: send queue size exceeded max_send_queue(#{@max_send_queue}), discards"
|
129
|
-
break
|
130
|
-
end
|
131
|
-
|
132
|
-
filter_record(tag, time, record)
|
133
|
-
command, channel, message = build_command(record), build_channel(record), build_message(record)
|
134
|
-
log.debug { "out_irc: push {command:\"#{command}\", channel:\"#{channel}\", message:\"#{message}\"}" }
|
135
|
-
@send_queue.push([command, channel, message])
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
def on_timer
|
140
|
-
return if @send_queue.empty?
|
141
|
-
command, channel, message = @send_queue.shift
|
142
|
-
log.info { "out_irc: send {command:\"#{command}\", channel:\"#{channel}\", message:\"#{message}\"}" }
|
143
|
-
@conn.send_message(command, channel, message)
|
144
|
-
end
|
145
|
-
|
146
|
-
private
|
147
|
-
|
148
|
-
def create_connection
|
149
|
-
conn = IRCConnection.connect(@host, @port)
|
150
|
-
conn.log = log
|
151
|
-
conn.nick = @nick
|
152
|
-
conn.user = @user
|
153
|
-
conn.real = @real
|
154
|
-
conn.password = @password
|
155
|
-
conn.attach(@loop)
|
156
|
-
conn
|
157
|
-
end
|
158
|
-
|
159
|
-
def build_message(record)
|
160
|
-
values = fetch_keys(record, @out_keys)
|
161
|
-
@message % values
|
162
|
-
end
|
163
|
-
|
164
|
-
def build_channel(record)
|
165
|
-
return @channel unless @channel_keys
|
166
|
-
|
167
|
-
values = fetch_keys(record, @channel_keys)
|
168
|
-
@channel % values
|
169
|
-
end
|
170
|
-
|
171
|
-
def build_command(record)
|
172
|
-
return @command unless @command_keys
|
173
|
-
|
174
|
-
values = fetch_keys(record, @command_keys)
|
175
|
-
unless command = COMMAND_MAP[@command % values]
|
176
|
-
log.warn "out_irc: command is not one of #{COMMAND_MAP.keys.join(', ')}, use privmsg"
|
177
|
-
end
|
178
|
-
command || :priv_msg
|
179
|
-
end
|
180
|
-
|
181
|
-
def fetch_keys(record, keys)
|
182
|
-
Array(keys).map do |key|
|
183
|
-
begin
|
184
|
-
record.fetch(key).to_s
|
185
|
-
rescue KeyError
|
186
|
-
log.warn "out_irc: the specified key '#{key}' not found in record. [#{record}]"
|
187
|
-
''
|
188
|
-
end
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
class TimerWatcher < Coolio::TimerWatcher
|
193
|
-
def initialize(interval, repeat, log, &callback)
|
194
|
-
@callback = callback
|
195
|
-
@log = log
|
196
|
-
super(interval, repeat)
|
197
|
-
end
|
198
|
-
|
199
|
-
def on_timer
|
200
|
-
@callback.call
|
201
|
-
rescue
|
202
|
-
@log.error $!.to_s
|
203
|
-
@log.error_backtrace
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
class IRCConnection < Cool.io::TCPSocket
|
208
|
-
attr_reader :joined # for test
|
209
|
-
attr_accessor :log, :nick, :user, :real, :password
|
210
|
-
|
211
|
-
def initialize(*args)
|
212
|
-
super
|
213
|
-
@joined = {}
|
214
|
-
end
|
215
|
-
|
216
|
-
def on_connect
|
217
|
-
if @password
|
218
|
-
IRCParser.message(:pass) do |m|
|
219
|
-
m.password = @password
|
220
|
-
write m
|
221
|
-
end
|
222
|
-
end
|
223
|
-
IRCParser.message(:nick) do |m|
|
224
|
-
m.nick = @nick
|
225
|
-
write m
|
226
|
-
end
|
227
|
-
IRCParser.message(:user) do |m|
|
228
|
-
m.user = @user
|
229
|
-
m.postfix = @real
|
230
|
-
write m
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
def on_read(data)
|
235
|
-
err_nick_name_in_use = nil
|
236
|
-
data.each_line do |line|
|
237
|
-
begin
|
238
|
-
msg = IRCParser.parse(line)
|
239
|
-
log.debug { "out_irc: on_read :#{msg.class.to_sym}" }
|
240
|
-
case msg.class.to_sym
|
241
|
-
when :rpl_welcome
|
242
|
-
log.info { "out_irc: welcome \"#{msg.nick}\" to \"#{msg.prefix}\"" }
|
243
|
-
when :ping
|
244
|
-
IRCParser.message(:pong) do |m|
|
245
|
-
m.target = msg.target
|
246
|
-
m.body = msg.body
|
247
|
-
write m
|
248
|
-
end
|
249
|
-
when :join
|
250
|
-
log.info { "out_irc: joined to #{msg.channels.join(', ')}" }
|
251
|
-
msg.channels.each {|channel| @joined[channel] = true }
|
252
|
-
when :err_nick_name_in_use
|
253
|
-
log.warn "out_irc: nickname \"#{msg.error_nick}\" is already in use. use \"#{msg.error_nick}_\" instead."
|
254
|
-
err_nick_name_in_use = true
|
255
|
-
@nick = "#{msg.error_nick}_"
|
256
|
-
when :error
|
257
|
-
log.warn "out_irc: an error occured. \"#{msg.error_message}\""
|
258
|
-
end
|
259
|
-
rescue
|
260
|
-
#TODO
|
261
|
-
end
|
262
|
-
end
|
263
|
-
|
264
|
-
if err_nick_name_in_use
|
265
|
-
self.on_connect
|
266
|
-
end
|
267
|
-
end
|
268
|
-
|
269
|
-
def joined?(channel)
|
270
|
-
@joined[channel]
|
271
|
-
end
|
272
|
-
|
273
|
-
def join(channel)
|
274
|
-
IRCParser.message(:join) do |m|
|
275
|
-
m.channels = channel
|
276
|
-
write m
|
277
|
-
end
|
278
|
-
log.debug { "out_irc: join to #{channel}" }
|
279
|
-
end
|
280
|
-
|
281
|
-
def send_message(command, channel, message)
|
282
|
-
join(channel) unless joined?(channel)
|
283
|
-
IRCParser.message(command) do |m|
|
284
|
-
m.target = channel
|
285
|
-
m.body = message
|
286
|
-
write m
|
287
|
-
end
|
288
|
-
channel # return channel for test
|
289
|
-
end
|
290
|
-
end
|
291
|
-
end
|
292
|
-
end
|