fluent-plugin-buffered-hipchat 0.2.0
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 +15 -0
- data/.gitignore +5 -0
- data/.travis.yml +5 -0
- data/AUTHORS +1 -0
- data/Gemfile +4 -0
- data/README.rdoc +39 -0
- data/Rakefile +17 -0
- data/VERSION +1 -0
- data/fluent-plugin-buffered-hipchat.gemspec +25 -0
- data/lib/fluent/plugin/out_buffered_hipchat.rb +68 -0
- data/test/plugin/out_buffered_hipchat.rb +68 -0
- data/test/test_helper.rb +20 -0
- metadata +139 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MWIwYzFlOWJlN2RhOTUzZmE2NTZkNzUxZDFlNjkyNzVkMTU3YzNjMA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MWJjMGZiYzQ2NDdkNWQxZDM5MWIyMmY3MmExZjVhNDgyNmY3OGU3YQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MzI1ZDM3NmU0M2RhNmNmODMyZWU5OWRhNGE3ZjQ4OGY4OWQ2MmQ5N2NiNzQ0
|
10
|
+
ODE3ODY5OWNjZjcwOTljNzRiMmM4ZjczM2E0YWZmOWZlZmJkODIyODk1MDRj
|
11
|
+
NDEwNDNkZGEyOTczNWM5NTA4YTEyN2IyZWIyM2EyZTM3NzUxYmU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZWZhNTNiNjkzOTIzZDk1NDE5NTg4OGMwNGZiNzg1NmY3YmE3ZWMyNWVmMzBh
|
14
|
+
NGYyNmFmNGQzOTZlOWQ1OGE5ODZmYTQ1NWFiMzNlNjZhODI0YTA2Mjc5ZDU4
|
15
|
+
MzJmYjdlOTg2NTFlYmRlYjU1OWIxZDk0MjU3ODc1NGRjMTI5MGQ=
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/AUTHORS
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Keisuke SOGAWA <keisuke.sogawa _at_ gmail.com>
|
data/Gemfile
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
= Fluent event to hipchat plugin.
|
2
|
+
|
3
|
+
= Installation
|
4
|
+
|
5
|
+
$ fluent-gem install fluent-plugin-buffered-hipchat
|
6
|
+
|
7
|
+
= Usage
|
8
|
+
|
9
|
+
<match hipchat>
|
10
|
+
type buffered_hipchat
|
11
|
+
api_token XXX
|
12
|
+
default_room my_room
|
13
|
+
default_from fluentd
|
14
|
+
default_color yellow
|
15
|
+
default_notify 0
|
16
|
+
default_format html
|
17
|
+
|
18
|
+
# proxy settings
|
19
|
+
# http_proxy_host localhost
|
20
|
+
# http_proxy_port 8080
|
21
|
+
# http_proxy_user username
|
22
|
+
# http_proxy_pass password
|
23
|
+
</match>
|
24
|
+
|
25
|
+
fluent_logger.post('hipchat', {
|
26
|
+
:from => 'alice',
|
27
|
+
:message => 'Hello<br>World!',
|
28
|
+
:color => 'red',
|
29
|
+
:room => 'my_room',
|
30
|
+
:notify => 1,
|
31
|
+
:format => 'text',
|
32
|
+
})
|
33
|
+
|
34
|
+
= Copyright
|
35
|
+
|
36
|
+
Copyright:: Copyright (c) 2014- Keisuke SOGAWA
|
37
|
+
License:: Apache License, Version 2.0
|
38
|
+
|
39
|
+
This plugin is forked from Yuichi Tateno's fluent-plugin-hipchat[https://github.com/hotchpotch/fluent-plugin-hipchat]
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'rake/testtask'
|
5
|
+
|
6
|
+
Rake::TestTask.new(:test) do |test|
|
7
|
+
test.libs << 'lib' << 'test'
|
8
|
+
test.test_files = FileList['test/plugin/*.rb']
|
9
|
+
test.verbose = true
|
10
|
+
end
|
11
|
+
|
12
|
+
task :coverage do |t|
|
13
|
+
ENV['SIMPLE_COV'] = '1'
|
14
|
+
Rake::Task["test"].invoke
|
15
|
+
end
|
16
|
+
|
17
|
+
task :default => [:build]
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.2.0
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = "fluent-plugin-buffered-hipchat"
|
6
|
+
gem.description = "fluent buffered HipChat plugin"
|
7
|
+
gem.homepage = "https://github.com/sowawa/fluent-plugin-buffered-hipchat"
|
8
|
+
gem.summary = gem.description
|
9
|
+
gem.version = File.read("VERSION").strip
|
10
|
+
gem.authors = ["Keisuke SOGAWA"]
|
11
|
+
gem.email = "keisuke.sogawa@gmail.com"
|
12
|
+
gem.has_rdoc = false
|
13
|
+
gem.files = `git ls-files`.split("\n")
|
14
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
|
+
gem.require_paths = ['lib']
|
17
|
+
|
18
|
+
gem.add_dependency "fluentd", ">= 0.10.8"
|
19
|
+
gem.add_dependency "hipchat-api", ">= 1.0.0"
|
20
|
+
|
21
|
+
gem.add_development_dependency "rake", ">= 0.9.2"
|
22
|
+
gem.add_development_dependency "simplecov", ">= 0.5.4"
|
23
|
+
gem.add_development_dependency "rr", ">= 1.0.0"
|
24
|
+
gem.add_development_dependency "pry"
|
25
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Fluent
|
2
|
+
class BufferedHipchatOutput < Fluent::TimeSlicedOutput
|
3
|
+
Fluent::Plugin.register_output('buffered_hipchat', self)
|
4
|
+
config_param :api_token, :string
|
5
|
+
config_param :default_room, :string, :default => nil
|
6
|
+
config_param :default_color, :string, :default => nil
|
7
|
+
config_param :default_from, :string, :default => nil
|
8
|
+
config_param :default_notify, :bool, :default => nil
|
9
|
+
config_param :default_format, :string, :default => nil
|
10
|
+
config_param :http_proxy_host, :string, :default => nil
|
11
|
+
config_param :http_proxy_port, :integer, :default => nil
|
12
|
+
config_param :http_proxy_user, :string, :default => nil
|
13
|
+
config_param :http_proxy_pass, :string, :default => nil
|
14
|
+
|
15
|
+
attr_reader :hipchat
|
16
|
+
|
17
|
+
def format(tag, time, record)
|
18
|
+
[tag, time, record].to_json + "\n"
|
19
|
+
end
|
20
|
+
|
21
|
+
def write(chunk)
|
22
|
+
messages = {}
|
23
|
+
chunk.open {|io|
|
24
|
+
io.each {|line|
|
25
|
+
line_json = JSON.parse(line)
|
26
|
+
tag = line_json[0]
|
27
|
+
time = line_json[1]
|
28
|
+
record = line_json[2]
|
29
|
+
messages[tag] = '' unless messages[tag]
|
30
|
+
messages[tag] << "[#{Time.at(time)}] #{record['message']}\n"
|
31
|
+
}
|
32
|
+
}
|
33
|
+
# hoge = "ajshdfjalksfjlkasdjf\nlaksjfdl\naksfksadflka;"
|
34
|
+
# hoge.scan(/.{1,24}\Z|.{1,24}\n/m)
|
35
|
+
messages.each do |tag, message|
|
36
|
+
message.scan(/.{1,9500}/m).each {|chunked_message|
|
37
|
+
@hipchat.rooms_message(@default_room, @default_from, "#{tag} >>\n" + chunked_message, @default_notify, @default_color, @default_format)
|
38
|
+
}
|
39
|
+
end
|
40
|
+
rescue => e
|
41
|
+
$log.error("HipChat Error: #{e} / #{e.message}")
|
42
|
+
end
|
43
|
+
|
44
|
+
def initialize
|
45
|
+
super
|
46
|
+
require 'hipchat-api'
|
47
|
+
end
|
48
|
+
|
49
|
+
def configure(conf)
|
50
|
+
super
|
51
|
+
|
52
|
+
@hipchat = HipChat::API.new(conf['api_token'])
|
53
|
+
@default_room = conf['default_room']
|
54
|
+
@default_from = conf['default_from'] || 'fluentd'
|
55
|
+
@default_notify = conf['default_notify'] || 0
|
56
|
+
@default_color = conf['default_color'] || 'yellow'
|
57
|
+
@default_format = conf['default_format'] || 'html'
|
58
|
+
if conf['http_proxy_host']
|
59
|
+
HipChat::API.http_proxy(
|
60
|
+
conf['http_proxy_host'],
|
61
|
+
conf['http_proxy_port'],
|
62
|
+
conf['http_proxy_user'],
|
63
|
+
conf['http_proxy_pass'])
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'fluent/plugin/out_buffered_hipchat'
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
class BufferedHipchatOutputTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
super
|
9
|
+
Fluent::Test.setup
|
10
|
+
end
|
11
|
+
|
12
|
+
CONFIG = %[
|
13
|
+
type buffered_hipchat
|
14
|
+
api_token testtoken
|
15
|
+
default_room testroom
|
16
|
+
default_from testuser
|
17
|
+
default_color yellow
|
18
|
+
default_format text
|
19
|
+
buffer_type memory
|
20
|
+
compress gz
|
21
|
+
utc
|
22
|
+
]
|
23
|
+
|
24
|
+
CONFIG_FOR_PROXY = %[
|
25
|
+
http_proxy_host localhost
|
26
|
+
http_proxy_port 8080
|
27
|
+
http_proxy_user user
|
28
|
+
http_proxy_pass password
|
29
|
+
]
|
30
|
+
|
31
|
+
def create_driver(conf = CONFIG)
|
32
|
+
Fluent::Test::BufferedOutputTestDriver.new(Fluent::BufferedHipchatOutput).configure(conf)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_format
|
36
|
+
d = create_driver
|
37
|
+
time = Time.parse("2013-09-12 05:00:00 UTC").to_i
|
38
|
+
d.emit({message: 'sowawa'}, time)
|
39
|
+
d.expect_format %[#{['test', time, {message: 'sowawa'}].to_json}\n]
|
40
|
+
d.run
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_write
|
44
|
+
d = create_driver
|
45
|
+
time = Time.parse("2013-09-12 05:00:00 UTC").to_i
|
46
|
+
d.tag = 'test'
|
47
|
+
stub(d.instance.hipchat).rooms_message(
|
48
|
+
'testroom',
|
49
|
+
'testuser',
|
50
|
+
"#{d.tag} >>\n" +
|
51
|
+
"[#{Time.at(time)}] sowawa1\n" +
|
52
|
+
"[#{Time.at(time)}] sowawa2\n",
|
53
|
+
0,
|
54
|
+
'yellow',
|
55
|
+
'text')
|
56
|
+
d.emit({message: 'sowawa1'}, time)
|
57
|
+
d.emit({message: 'sowawa2'}, time)
|
58
|
+
d.run
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_http_proxy
|
62
|
+
create_driver(CONFIG + CONFIG_FOR_PROXY)
|
63
|
+
assert_equal 'localhost', HipChat::API.default_options[:http_proxyaddr]
|
64
|
+
assert_equal '8080', HipChat::API.default_options[:http_proxyport]
|
65
|
+
assert_equal 'user', HipChat::API.default_options[:http_proxyuser]
|
66
|
+
assert_equal 'password', HipChat::API.default_options[:http_proxypass]
|
67
|
+
end
|
68
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
require 'rr'
|
5
|
+
require 'test/unit'
|
6
|
+
class Test::Unit::TestCase
|
7
|
+
include RR::Adapters::TestUnit
|
8
|
+
end
|
9
|
+
|
10
|
+
if ENV['SIMPLE_COV']
|
11
|
+
require 'simplecov'
|
12
|
+
SimpleCov.start do
|
13
|
+
add_filter 'test/'
|
14
|
+
add_filter 'pkg/'
|
15
|
+
add_filter 'vendor/'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
require 'test/unit'
|
20
|
+
require 'fluent/test'
|
metadata
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fluent-plugin-buffered-hipchat
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Keisuke SOGAWA
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-01-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: fluentd
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.10.8
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.10.8
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: hipchat-api
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.9.2
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.9.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.5.4
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.5.4
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rr
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.0.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.0.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: fluent buffered HipChat plugin
|
98
|
+
email: keisuke.sogawa@gmail.com
|
99
|
+
executables: []
|
100
|
+
extensions: []
|
101
|
+
extra_rdoc_files: []
|
102
|
+
files:
|
103
|
+
- .gitignore
|
104
|
+
- .travis.yml
|
105
|
+
- AUTHORS
|
106
|
+
- Gemfile
|
107
|
+
- README.rdoc
|
108
|
+
- Rakefile
|
109
|
+
- VERSION
|
110
|
+
- fluent-plugin-buffered-hipchat.gemspec
|
111
|
+
- lib/fluent/plugin/out_buffered_hipchat.rb
|
112
|
+
- test/plugin/out_buffered_hipchat.rb
|
113
|
+
- test/test_helper.rb
|
114
|
+
homepage: https://github.com/sowawa/fluent-plugin-buffered-hipchat
|
115
|
+
licenses: []
|
116
|
+
metadata: {}
|
117
|
+
post_install_message:
|
118
|
+
rdoc_options: []
|
119
|
+
require_paths:
|
120
|
+
- lib
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ! '>='
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
131
|
+
requirements: []
|
132
|
+
rubyforge_project:
|
133
|
+
rubygems_version: 2.2.0
|
134
|
+
signing_key:
|
135
|
+
specification_version: 4
|
136
|
+
summary: fluent buffered HipChat plugin
|
137
|
+
test_files:
|
138
|
+
- test/plugin/out_buffered_hipchat.rb
|
139
|
+
- test/test_helper.rb
|