Skip to content

Commit 9ef338e

Browse files
author
Yoichi Kawasaki
authored
Merge pull request #1 from cosmo0920/migrate-v0.14
Migrate to use v0.14 API
2 parents e839d81 + 0437f3a commit 9ef338e

File tree

4 files changed

+95
-70
lines changed

4 files changed

+95
-70
lines changed

fluent-plugin-azure-loganalytics.gemspec

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,10 @@ Gem::Specification.new do |gem|
1818
gem.test_files = gem.files.grep(%r{^(test|gem|features)/})
1919
gem.require_paths = ["lib"]
2020

21-
gem.add_dependency "fluentd", [">= 0.10.58", "< 2"]
21+
gem.add_dependency "fluentd", [">= 0.14.15", "< 2"]
2222
gem.add_dependency "rest-client"
2323
gem.add_dependency "azure-loganalytics-datacollector-api", [">= 0.1.2"]
2424
gem.add_development_dependency "bundler", "~> 1.11"
2525
gem.add_development_dependency "rake", "~> 10.0"
2626
gem.add_development_dependency "test-unit"
2727
end
28-

lib/fluent/plugin/out_azure-loganalytics.rb

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
# -*- coding: utf-8 -*-
2+
require 'msgpack'
3+
require 'time'
4+
require "azure/loganalytics/datacollectorapi/client"
5+
require 'fluent/plugin/output'
26

3-
module Fluent
4-
class AzureLogAnalyticsOutput < BufferedOutput
5-
Plugin.register_output('azure-loganalytics', self)
7+
module Fluent::Plugin
8+
class AzureLogAnalyticsOutput < Output
9+
Fluent::Plugin.register_output('azure-loganalytics', self)
610

7-
def initialize
8-
super
9-
require 'msgpack'
10-
require 'time'
11-
require "azure/loganalytics/datacollectorapi/client"
12-
end
11+
helpers :compat_parameters
12+
13+
DEFAULT_BUFFER_TYPE = "memory"
1314

1415
config_param :customer_id, :string,
1516
:desc => "Your Operations Management Suite workspace ID"
@@ -32,18 +33,24 @@ def initialize
3233
config_param :tag_field_name, :string, :default => "tag",
3334
:desc => "This is required only when add_time_field is true"
3435

36+
config_section :buffer do
37+
config_set_default :@type, DEFAULT_BUFFER_TYPE
38+
config_set_default :chunk_keys, ['tag']
39+
end
40+
3541
def configure(conf)
42+
compat_parameters_convert(conf, :buffer)
3643
super
37-
raise ConfigError, 'no customer_id' if @customer_id.empty?
38-
raise ConfigError, 'no shared_key' if @shared_key.empty?
39-
raise ConfigError, 'no log_type' if @log_type.empty?
44+
raise Fluent::ConfigError, 'no customer_id' if @customer_id.empty?
45+
raise Fluent::ConfigError, 'no shared_key' if @shared_key.empty?
46+
raise Fluent::ConfigError, 'no log_type' if @log_type.empty?
4047
if @add_time_field and @time_field_name.empty?
41-
raise ConfigError, 'time_field_name must be set if add_time_field is true'
48+
raise Fluent::ConfigError, 'time_field_name must be set if add_time_field is true'
4249
end
4350
if @add_tag_field and @tag_field_name.empty?
44-
raise ConfigError, 'tag_field_name must be set if add_tag_field is true'
51+
raise Fluent::ConfigError, 'tag_field_name must be set if add_tag_field is true'
4552
end
46-
@timef = TimeFormatter.new(@time_format, @localtime)
53+
@timef = Fluent::TimeFormatter.new(@time_format, @localtime)
4754
end
4855

4956
def start
@@ -67,6 +74,14 @@ def format(tag, time, record)
6774
record.to_msgpack
6875
end
6976

77+
def formatted_to_msgpack_binary?
78+
true
79+
end
80+
81+
def multi_workers_ready?
82+
true
83+
end
84+
7085
def write(chunk)
7186
records = []
7287
chunk.msgpack_each { |record|
@@ -75,11 +90,11 @@ def write(chunk)
7590
begin
7691
res = @client.post_data(@log_type, records, @time_generated_field)
7792
if not Azure::Loganalytics::Datacollectorapi::Client.is_success(res)
78-
$log.fatal "DataCollector API request failure: error code: "
93+
log.fatal "DataCollector API request failure: error code: "
7994
+ "#{res.code}, data=>" + records.to_json
8095
end
8196
rescue Exception => ex
82-
$log.fatal "Exception occured in posting to DataCollector API: "
97+
log.fatal "Exception occured in posting to DataCollector API: "
8398
+ "'#{ex}', data=>" + records.to_json
8499
end
85100
end

test/helper.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ def method_missing(method, *args)
2323
$log = nulllogger
2424
end
2525

26+
require 'fluent/test/driver/output'
27+
require 'fluent/test/helpers'
2628
require 'fluent/plugin/out_azure-loganalytics'
2729

2830
class Test::Unit::TestCase
31+
include Fluent::Test::Helpers
2932
end

test/plugin/test_azure_loganalytics.rb

Lines changed: 59 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -16,73 +16,81 @@ def setup
1616
tag_field_name tag
1717
]
1818

19-
def create_driver(conf = CONFIG, tag='azure-loganalytics.test')
20-
Fluent::Test::BufferedOutputTestDriver.new(Fluent::AzureLogAnalyticsOutput, tag).configure(conf)
19+
def create_driver(conf = CONFIG)
20+
Fluent::Test::Driver::Output.new(Fluent::Plugin::AzureLogAnalyticsOutput).configure(conf)
2121
end
2222

2323
def test_configure
24-
#### set configurations
25-
# d = create_driver %[
26-
# path test_path
27-
# compress gz
28-
# ]
29-
#### check configurations
30-
# assert_equal 'test_path', d.instance.path
31-
# assert_equal :gz, d.instance.compress
24+
d = create_driver
25+
assert_equal '<Customer ID aka WorkspaceID String>', d.instance.customer_id
26+
assert_equal '<Primary Key String>', d.instance.shared_key
27+
assert_equal 'ApacheAccessLog', d.instance.log_type
28+
assert_true d.instance.add_time_field
29+
assert_true d.instance.localtime
30+
assert_true d.instance.add_tag_field
31+
assert_equal 'tag', d.instance.tag_field_name
3232
end
3333

3434
def test_format
35-
# d = create_driver
36-
# time = Time.parse("2011-01-02 13:14:15 UTC").to_i
37-
# d.emit({"a"=>1}, time)
38-
# d.emit({"a"=>2}, time)
39-
40-
# d.expect_format %[2011-01-02T13:14:15Z\ttest\t{"a":1}\n]
41-
# d.expect_format %[2011-01-02T13:14:15Z\ttest\t{"a":2}\n]
42-
43-
# d.run
35+
d = create_driver
36+
time = event_time("2011-01-02 13:14:15 UTC")
37+
d.run(default_tag: 'test') do
38+
d.feed(time, {"a"=>1})
39+
d.feed(time, {"a"=>2})
40+
end
41+
formatted = d.formatted
42+
unpacker = Fluent::Engine.msgpack_factory.unpacker
43+
formatted.each_with_index {|f, idx|
44+
unpacker.feed_each(f).each {|e|
45+
assert_equal idx+1, e["a"]
46+
assert_equal "test", e["tag"]
47+
assert_equal "#{time.to_i}", e["time"]
48+
}
49+
}
4450
end
4551

4652
def test_write
4753
d = create_driver
4854

49-
time = Time.parse("2016-12-10 13:14:15 UTC").to_i
50-
d.emit(
51-
{
52-
:Log_ID => "5cdad72f-c848-4df0-8aaa-ffe033e75d57",
53-
:date => "2016-12-10 09:44:32 JST",
54-
:processing_time => "372",
55-
:remote => "101.202.74.59",
56-
:user => "-",
57-
:method => "GET / HTTP/1.1",
58-
:status => "304",
59-
:size => "-",
60-
:referer => "-",
61-
:agent => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:27.0) Gecko/20100101 Firefox/27.0",
62-
:eventtime => "2016-12-10T09:44:32Z"
63-
}, time)
64-
65-
d.emit(
66-
{
67-
:Log_ID => "7260iswx-8034-4cc3-uirtx-f068dd4cd659",
68-
:date => "2016-12-10 09:45:14 JST",
69-
:processing_time => "105",
70-
:remote => "201.78.74.59",
71-
:user => "-",
72-
:method => "GET /manager/html HTTP/1.1",
73-
:status =>"200",
74-
:size => "-",
75-
:referer => "-",
76-
:agent => "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0",
77-
:eventtime => "2016-12-10T09:45:14Z"
78-
}, time)
55+
time = event_time("2016-12-10 13:14:15 UTC")
56+
d.run(default_tag: 'azure-loganalytics.test') do
57+
d.feed(
58+
time,
59+
{
60+
:Log_ID => "5cdad72f-c848-4df0-8aaa-ffe033e75d57",
61+
:date => "2016-12-10 09:44:32 JST",
62+
:processing_time => "372",
63+
:remote => "101.202.74.59",
64+
:user => "-",
65+
:method => "GET / HTTP/1.1",
66+
:status => "304",
67+
:size => "-",
68+
:referer => "-",
69+
:agent => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:27.0) Gecko/20100101 Firefox/27.0",
70+
:eventtime => "2016-12-10T09:44:32Z"
71+
})
7972

80-
data = d.run
73+
d.feed(
74+
time,
75+
{
76+
:Log_ID => "7260iswx-8034-4cc3-uirtx-f068dd4cd659",
77+
:date => "2016-12-10 09:45:14 JST",
78+
:processing_time => "105",
79+
:remote => "201.78.74.59",
80+
:user => "-",
81+
:method => "GET /manager/html HTTP/1.1",
82+
:status =>"200",
83+
:size => "-",
84+
:referer => "-",
85+
:agent => "Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0",
86+
:eventtime => "2016-12-10T09:45:14Z"
87+
})
88+
end
89+
data = d.events
8190
puts data
8291
# ### FileOutput#write returns path
8392
# path = d.run
8493
# expect_path = "#{TMP_DIR}/out_file_test._0.log.gz"
8594
# assert_equal expect_path, path
8695
end
8796
end
88-

0 commit comments

Comments
 (0)