fluent-plugin-typetalk 0.0.10 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +6 -1
- data/README.md +7 -0
- data/Rakefile +6 -4
- data/fluent-plugin-typetalk.gemspec +7 -12
- data/lib/fluent/plugin/out_typetalk.rb +3 -5
- data/test/helper.rb +6 -26
- data/test/plugin/test_out_typetalk.rb +42 -32
- metadata +18 -46
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c26fbbe7bb559565f3bdb6c7846430282d91b879
|
4
|
+
data.tar.gz: 79b971d2139d25436bed76ba7163bbadb4937443
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea738ab0a0bf841ec1ce1156891f3142f64c50b5d9d5a3b143afe58b12c912c1215e16811a80e0070872f1040ddec1a5dc94b973f324213dfda5a48ca4e4e25d
|
7
|
+
data.tar.gz: bbf2962d634e073ba597be18f1a7240946ade5e644b06b52d32053eacfe115b0acbaaad9a3c4c62fc1779052ff7d379c84fba3760bcd69241c52eddb851f6ecb
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -4,6 +4,13 @@
|
|
4
4
|
|
5
5
|
[Fluentd](http://fluentd.org) plugin to emit notifications to [Typetalk](http://typetalk.in/).
|
6
6
|
|
7
|
+
## Requirements
|
8
|
+
|
9
|
+
| fluent-plugin-typetalk | fluentd | ruby |
|
10
|
+
|------------------------|------------|--------|
|
11
|
+
| >= 0.1.0 | >= v0.14.0 | >= 2.1 |
|
12
|
+
| < 0.1.0 | >= v0.12.0 | >= 1.9 |
|
13
|
+
|
7
14
|
## Installation
|
8
15
|
|
9
16
|
Install with gem or fluent-gem command as:
|
data/Rakefile
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'rake/testtask'
|
3
5
|
|
4
6
|
Rake::TestTask.new(:test) do |test|
|
5
7
|
test.libs << 'lib' << 'test'
|
6
|
-
test.
|
8
|
+
test.test_files = FileList['test/plugin/*.rb']
|
7
9
|
test.verbose = true
|
8
10
|
end
|
9
11
|
|
10
|
-
task :default => :test
|
12
|
+
task :default => :test
|
@@ -1,10 +1,9 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
4
3
|
|
5
4
|
Gem::Specification.new do |spec|
|
6
5
|
spec.name = "fluent-plugin-typetalk"
|
7
|
-
spec.version = "0.0
|
6
|
+
spec.version = "0.1.0"
|
8
7
|
spec.authors = ["tksmd","umakoz"]
|
9
8
|
spec.email = ["someda@isenshi.com"]
|
10
9
|
spec.description = %q{fluent plugin to send message to typetalk}
|
@@ -18,14 +17,10 @@ Gem::Specification.new do |spec|
|
|
18
17
|
spec.require_paths = ["lib"]
|
19
18
|
|
20
19
|
spec.add_development_dependency "bundler", "~> 1.3"
|
21
|
-
spec.add_development_dependency "rake"
|
22
|
-
spec.add_development_dependency "
|
23
|
-
spec.add_development_dependency "test-unit", "
|
24
|
-
spec.add_development_dependency "test-unit-rr"
|
25
|
-
# not to use mime-types 3.0 that doesn't support ruby 1.9.x
|
26
|
-
spec.add_runtime_dependency "mime-types", "~> 2.6", "< 2.99"
|
27
|
-
spec.add_runtime_dependency "fluentd"
|
28
|
-
spec.add_runtime_dependency "typetalk"
|
20
|
+
spec.add_development_dependency "rake", ">= 0.9.2"
|
21
|
+
spec.add_development_dependency "test-unit", ">= 3.1.0"
|
22
|
+
spec.add_development_dependency "test-unit-rr", ">= 1.0.5"
|
29
23
|
|
30
|
-
spec.
|
24
|
+
spec.add_runtime_dependency "fluentd", [">= 0.14.0", "< 2"]
|
25
|
+
spec.add_runtime_dependency "typetalk"
|
31
26
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module Fluent
|
2
|
-
class TypetalkOutput < Fluent::Output
|
1
|
+
module Fluent::Plugin
|
2
|
+
class TypetalkOutput < Fluent::Plugin::Output
|
3
3
|
Fluent::Plugin.register_output('typetalk', self)
|
4
4
|
|
5
5
|
config_param :client_id, :string
|
@@ -73,7 +73,7 @@ module Fluent
|
|
73
73
|
super
|
74
74
|
end
|
75
75
|
|
76
|
-
def
|
76
|
+
def process(tag, es)
|
77
77
|
es.each do |time, record|
|
78
78
|
if @need_throttle && throttle(time)
|
79
79
|
log.error("out_typetalk:", :error => "number of posting message within #{@interval}(sec) reaches to the limit #{@limit}")
|
@@ -86,8 +86,6 @@ module Fluent
|
|
86
86
|
log.error("out_typetalk:", :error_class => e.class, :error => e.message)
|
87
87
|
end
|
88
88
|
end
|
89
|
-
|
90
|
-
chain.next
|
91
89
|
end
|
92
90
|
|
93
91
|
def throttle(time)
|
data/test/helper.rb
CHANGED
@@ -1,29 +1,9 @@
|
|
1
|
-
require
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.puts e.message
|
7
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
exit e.status_code
|
9
|
-
end
|
1
|
+
require "bundler/setup"
|
2
|
+
$LOAD_PATH.unshift(File.join(__dir__, '..', 'lib'))
|
3
|
+
$LOAD_PATH.unshift(__dir__)
|
4
|
+
|
10
5
|
require 'test/unit'
|
11
6
|
require 'test/unit/rr'
|
12
|
-
|
13
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
15
7
|
require 'fluent/test'
|
16
|
-
|
17
|
-
|
18
|
-
nulllogger.instance_eval {|obj|
|
19
|
-
def method_missing(method, *args)
|
20
|
-
# pass
|
21
|
-
end
|
22
|
-
}
|
23
|
-
$log = nulllogger
|
24
|
-
end
|
25
|
-
|
26
|
-
require 'fluent/plugin/out_typetalk'
|
27
|
-
|
28
|
-
class Test::Unit::TestCase
|
29
|
-
end
|
8
|
+
require 'fluent/test/driver/output'
|
9
|
+
require 'fluent/test/helpers'
|
@@ -1,9 +1,10 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
3
|
require 'helper'
|
4
|
+
require 'fluent/plugin/out_typetalk'
|
4
5
|
|
5
6
|
class TypetalkOutputTest < Test::Unit::TestCase
|
6
|
-
|
7
|
+
|
7
8
|
def setup
|
8
9
|
Fluent::Test.setup
|
9
10
|
end
|
@@ -50,8 +51,8 @@ class TypetalkOutputTest < Test::Unit::TestCase
|
|
50
51
|
]
|
51
52
|
|
52
53
|
|
53
|
-
def create_driver(conf = CONFIG
|
54
|
-
Fluent::Test::
|
54
|
+
def create_driver(conf = CONFIG)
|
55
|
+
Fluent::Test::Driver::Output.new(Fluent::Plugin::TypetalkOutput).configure(conf)
|
55
56
|
end
|
56
57
|
|
57
58
|
def test_configure
|
@@ -71,20 +72,22 @@ class TypetalkOutputTest < Test::Unit::TestCase
|
|
71
72
|
def test_write
|
72
73
|
d = create_driver()
|
73
74
|
mock(d.instance.typetalk).post_message(1, 'notice : test1')
|
74
|
-
d.
|
75
|
-
|
75
|
+
d.run(default_tag: "test") do
|
76
|
+
d.feed({'message' => 'test1'})
|
77
|
+
end
|
76
78
|
end
|
77
79
|
|
78
80
|
def test_template
|
79
|
-
d = create_driver(
|
81
|
+
d = create_driver()
|
80
82
|
d.instance.message = "notice : %s [%s]"
|
81
83
|
d.instance.out_keys = ["message", "time"]
|
82
84
|
mock(d.instance.typetalk).post_message(1, "notice : test1 [1399910738]")
|
83
85
|
|
84
86
|
ENV["TZ"]="Asia/Tokyo"
|
85
87
|
t = Time.strptime('2014-05-13 01:05:38', '%Y-%m-%d %T')
|
86
|
-
d.
|
87
|
-
|
88
|
+
d.run(default_tag: "warn") do
|
89
|
+
d.feed(t.to_i, {'message' => 'test1'})
|
90
|
+
end
|
88
91
|
end
|
89
92
|
|
90
93
|
def test_post_message_unauthorized_error
|
@@ -94,11 +97,12 @@ class TypetalkOutputTest < Test::Unit::TestCase
|
|
94
97
|
}
|
95
98
|
stub(d.instance.log).error {|name, params|
|
96
99
|
assert_equal "out_typetalk:", name
|
97
|
-
assert_equal Fluent::TypetalkError, params[:error_class]
|
100
|
+
assert_equal Fluent::Plugin::TypetalkError, params[:error_class]
|
98
101
|
assert_equal "invalid credentials used. check client_id and client_secret in your configuration.", params[:error]
|
99
102
|
}
|
100
|
-
d.
|
101
|
-
|
103
|
+
d.run(default_tag: "test") do
|
104
|
+
d.feed({'message' => 'test1'})
|
105
|
+
end
|
102
106
|
end
|
103
107
|
|
104
108
|
def test_post_message_invalid_request_error
|
@@ -108,11 +112,12 @@ class TypetalkOutputTest < Test::Unit::TestCase
|
|
108
112
|
}
|
109
113
|
stub(d.instance.log).error {|name, params|
|
110
114
|
assert_equal "out_typetalk:", name
|
111
|
-
assert_equal Fluent::TypetalkError, params[:error_class]
|
115
|
+
assert_equal Fluent::Plugin::TypetalkError, params[:error_class]
|
112
116
|
assert_equal "failed to post, msg: invalid_client, code: 400", params[:error]
|
113
117
|
}
|
114
|
-
d.
|
115
|
-
|
118
|
+
d.run(default_tag: "test") do
|
119
|
+
d.feed({'message' => 'test1'})
|
120
|
+
end
|
116
121
|
end
|
117
122
|
|
118
123
|
def test_post_message_maxlength_error
|
@@ -122,11 +127,12 @@ class TypetalkOutputTest < Test::Unit::TestCase
|
|
122
127
|
}
|
123
128
|
stub(d.instance.log).error {|name, params|
|
124
129
|
assert_equal "out_typetalk:", name
|
125
|
-
assert_equal Fluent::TypetalkError, params[:error_class]
|
130
|
+
assert_equal Fluent::Plugin::TypetalkError, params[:error_class]
|
126
131
|
assert_equal "failed to post, msg: message : Maximum length is 4,096 characters., code: 400", params[:error]
|
127
132
|
}
|
128
|
-
d.
|
129
|
-
|
133
|
+
d.run(default_tag: "test") do
|
134
|
+
d.feed({'message' => 'test1'})
|
135
|
+
end
|
130
136
|
end
|
131
137
|
|
132
138
|
def test_post_message_notfound_error
|
@@ -136,11 +142,12 @@ class TypetalkOutputTest < Test::Unit::TestCase
|
|
136
142
|
}
|
137
143
|
stub(d.instance.log).error {|name, params|
|
138
144
|
assert_equal "out_typetalk:", name
|
139
|
-
assert_equal Fluent::TypetalkError, params[:error_class]
|
145
|
+
assert_equal Fluent::Plugin::TypetalkError, params[:error_class]
|
140
146
|
assert_equal "failed to post, msg: , code: 404", params[:error]
|
141
147
|
}
|
142
|
-
d.
|
143
|
-
|
148
|
+
d.run(default_tag: "test") do
|
149
|
+
d.feed({'message' => 'test1'})
|
150
|
+
end
|
144
151
|
end
|
145
152
|
|
146
153
|
def test_oauth2_error
|
@@ -150,11 +157,12 @@ class TypetalkOutputTest < Test::Unit::TestCase
|
|
150
157
|
}
|
151
158
|
stub(d.instance.log).error {|name, params|
|
152
159
|
assert_equal "out_typetalk:", name
|
153
|
-
assert_equal Fluent::TypetalkError, params[:error_class]
|
160
|
+
assert_equal Fluent::Plugin::TypetalkError, params[:error_class]
|
154
161
|
assert_equal "failed to post, msg: Bearer error=\"invalid_scope\", code: 400", params[:error]
|
155
162
|
}
|
156
|
-
d.
|
157
|
-
|
163
|
+
d.run(default_tag: "test") do
|
164
|
+
d.feed({'message' => 'test1'})
|
165
|
+
end
|
158
166
|
end
|
159
167
|
|
160
168
|
def test_throttle
|
@@ -165,11 +173,12 @@ class TypetalkOutputTest < Test::Unit::TestCase
|
|
165
173
|
assert_equal "out_typetalk:", name
|
166
174
|
assert_equal "number of posting message within 5.0(sec) reaches to the limit 1", params[:error]
|
167
175
|
}
|
168
|
-
d.
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
176
|
+
d.run(default_tag: "test") do
|
177
|
+
d.feed({'message' => 'test1'})
|
178
|
+
d.feed({'message' => 'test2'})
|
179
|
+
sleep 5
|
180
|
+
d.feed({'message' => 'test3'})
|
181
|
+
end
|
173
182
|
end
|
174
183
|
|
175
184
|
def test_truncate
|
@@ -177,10 +186,11 @@ class TypetalkOutputTest < Test::Unit::TestCase
|
|
177
186
|
mock(d.instance.typetalk).post_message(1, '1')
|
178
187
|
mock(d.instance.typetalk).post_message(1, '1'*3999)
|
179
188
|
mock(d.instance.typetalk).post_message(1, '1'*3995 + ' ...')
|
180
|
-
d.
|
181
|
-
|
182
|
-
|
183
|
-
|
189
|
+
d.run(default_tag: "test") do
|
190
|
+
d.feed({'message' => '1'})
|
191
|
+
d.feed({'message' => '1'*3999}) # not truncated
|
192
|
+
d.feed({'message' => '1'*4000}) # should be truncated
|
193
|
+
end
|
184
194
|
end
|
185
195
|
|
186
196
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-typetalk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tksmd
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-06-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -31,90 +31,62 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
version: 0.9.2
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
41
|
+
version: 0.9.2
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: test-unit
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 1.0
|
48
|
+
version: 3.1.0
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: 1.0
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: test-unit
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
59
|
-
requirements:
|
60
|
-
- - ">"
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '3'
|
63
|
-
type: :development
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - ">"
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '3'
|
55
|
+
version: 3.1.0
|
70
56
|
- !ruby/object:Gem::Dependency
|
71
57
|
name: test-unit-rr
|
72
58
|
requirement: !ruby/object:Gem::Requirement
|
73
59
|
requirements:
|
74
60
|
- - ">="
|
75
61
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
62
|
+
version: 1.0.5
|
77
63
|
type: :development
|
78
64
|
prerelease: false
|
79
65
|
version_requirements: !ruby/object:Gem::Requirement
|
80
66
|
requirements:
|
81
67
|
- - ">="
|
82
68
|
- !ruby/object:Gem::Version
|
83
|
-
version:
|
69
|
+
version: 1.0.5
|
84
70
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
71
|
+
name: fluentd
|
86
72
|
requirement: !ruby/object:Gem::Requirement
|
87
73
|
requirements:
|
88
|
-
- - "
|
74
|
+
- - ">="
|
89
75
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
76
|
+
version: 0.14.0
|
91
77
|
- - "<"
|
92
78
|
- !ruby/object:Gem::Version
|
93
|
-
version: '2
|
79
|
+
version: '2'
|
94
80
|
type: :runtime
|
95
81
|
prerelease: false
|
96
82
|
version_requirements: !ruby/object:Gem::Requirement
|
97
|
-
requirements:
|
98
|
-
- - "~>"
|
99
|
-
- !ruby/object:Gem::Version
|
100
|
-
version: '2.6'
|
101
|
-
- - "<"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '2.99'
|
104
|
-
- !ruby/object:Gem::Dependency
|
105
|
-
name: fluentd
|
106
|
-
requirement: !ruby/object:Gem::Requirement
|
107
83
|
requirements:
|
108
84
|
- - ">="
|
109
85
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
111
|
-
|
112
|
-
prerelease: false
|
113
|
-
version_requirements: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
86
|
+
version: 0.14.0
|
87
|
+
- - "<"
|
116
88
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
89
|
+
version: '2'
|
118
90
|
- !ruby/object:Gem::Dependency
|
119
91
|
name: typetalk
|
120
92
|
requirement: !ruby/object:Gem::Requirement
|
@@ -158,7 +130,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
158
130
|
requirements:
|
159
131
|
- - ">="
|
160
132
|
- !ruby/object:Gem::Version
|
161
|
-
version:
|
133
|
+
version: '0'
|
162
134
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
135
|
requirements:
|
164
136
|
- - ">="
|
@@ -166,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
138
|
version: '0'
|
167
139
|
requirements: []
|
168
140
|
rubyforge_project:
|
169
|
-
rubygems_version: 2.6.
|
141
|
+
rubygems_version: 2.6.11
|
170
142
|
signing_key:
|
171
143
|
specification_version: 4
|
172
144
|
summary: fluent plugin to send message to typetalk
|