fluent-plugin-azurefunctions 0.1.1 → 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 +4 -4
- data/ChangeLog.md +5 -0
- data/README.md +10 -4
- data/VERSION +1 -1
- data/fluent-plugin-azurefunctions.gemspec +1 -2
- data/lib/fluent/plugin/out_azurefunctions.rb +30 -15
- data/test/helper.rb +3 -0
- data/test/plugin/test_azurefunctions.rb +54 -47
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83eccba4bb49d6569a791d111c80e6a74d61e565
|
4
|
+
data.tar.gz: 5c1d87ecc87033efbc85f4e57d30636a6e540fd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca82ecfd1960a970ad8a6a7e96c2474035bf66abfc75b36d85e281299905d354f2d486607e28c3aaad77a04b04885836c22170b6dc8525a51d39249bead89848
|
7
|
+
data.tar.gz: 73886b67f142ab5aa8bb47ffa84259d3fd23c930c71d6abf9b8e6a20da1222c54eecf4220364177ad74bad765622c229c935186bd441cf04404622b0cc86eea7
|
data/ChangeLog.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
## 0.2.0
|
2
|
+
|
3
|
+
* Migrate to use fluentd v0.14 API - [PR#2](https://github.com/yokawasa/fluent-plugin-azurefunctions/pull/2)
|
4
|
+
* Support plugin specific log level - [PR#1](https://github.com/yokawasa/fluent-plugin-azurefunctions/pull/1)
|
5
|
+
|
1
6
|
## 0.1.1
|
2
7
|
|
3
8
|
* Changed Azure functions API key authorization from simply adding it to query string as code param to including it to x-functions-key HTTP header
|
data/README.md
CHANGED
@@ -4,6 +4,13 @@
|
|
4
4
|

|
5
5
|
|
6
6
|
|
7
|
+
## Requirements
|
8
|
+
|
9
|
+
| fluent-plugin-documentdb | fluentd | ruby |
|
10
|
+
|------------------------|---------|------|
|
11
|
+
| >= 0.2.0 | >= v0.14.15 | >= 2.1 |
|
12
|
+
| < 0.2.0 | >= v0.12.0 | >= 1.9 |
|
13
|
+
|
7
14
|
## Installation
|
8
15
|
```
|
9
16
|
$ gem install fluent-plugin-azurefunctions
|
@@ -30,6 +37,7 @@ examples/function-csharp
|
|
30
37
|
```
|
31
38
|
<match azurefunctions.**>
|
32
39
|
@type azurefunctions
|
40
|
+
@log_level info
|
33
41
|
endpoint AZURE_FUNCTION_ENDPOINT # ex. https://<accountname>.azurewebsites.net/api/<functionname>
|
34
42
|
function_key AZURE_FUNCTION_KEY # ex. aRVQ7Lj0vzDhY0JBYF8gpxYyEBxLwhO51JSC7X5dZFbTvROs7uNg==
|
35
43
|
key_names key1,key2,key3
|
@@ -52,6 +60,7 @@ examples/function-csharp
|
|
52
60
|
* **add\_tag\_field (optional)** - Default:false. This option allows to insert a tag field to record
|
53
61
|
* **tag\_field\_name (optional)** - Default:tag. This is required only when add_time_field is true
|
54
62
|
|
63
|
+
[note] @log_level is a fluentd built-in parameter (optional) that controls verbosity of logging: fatal|error|warn|info|debug|trace (See also [Logging of Fluentd](http://docs.fluentd.org/articles/logging#log-level))
|
55
64
|
|
56
65
|
## Configuration examples
|
57
66
|
|
@@ -81,10 +90,6 @@ echo ' { "key1":"value1", "key2":"value2", "key3":"value3"}' | fluent-cat azuref
|
|
81
90
|
{
|
82
91
|
"payload": '{"key1":"value1", "key2":"value2", "key3":"value3", "time":"1479741633"}'
|
83
92
|
}
|
84
|
-
|
85
|
-
mytime=1479741633
|
86
|
-
|
87
|
-
|
88
93
|
```
|
89
94
|
|
90
95
|
|
@@ -151,6 +156,7 @@ $ echo ' { "key1":"value1", "key2":"value2", "key3":"value3"}' | fluent-cat azur
|
|
151
156
|
|
152
157
|
## Links
|
153
158
|
|
159
|
+
* https://yokawasa.github.io/fluent-plugin-azurefunctions
|
154
160
|
* https://rubygems.org/gems/fluent-plugin-azurefunctions
|
155
161
|
* http://unofficialism.info/posts/fluent-plugin-azurefunctions/
|
156
162
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -18,10 +18,9 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.test_files = gem.files.grep(%r{^(test|gem|features)/})
|
19
19
|
gem.require_paths = ["lib"]
|
20
20
|
|
21
|
-
gem.add_dependency "fluentd", [">= 0.
|
21
|
+
gem.add_dependency "fluentd", [">= 0.14.15", "< 2"]
|
22
22
|
gem.add_dependency "rest-client"
|
23
23
|
gem.add_development_dependency "bundler", "~> 1.11"
|
24
24
|
gem.add_development_dependency "rake", "~> 10.0"
|
25
25
|
gem.add_development_dependency "test-unit"
|
26
26
|
end
|
27
|
-
|
@@ -1,15 +1,17 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
require 'fluent/plugin/output'
|
4
|
+
require 'msgpack'
|
5
|
+
require 'time'
|
6
|
+
require 'fluent/plugin/azurefunctions/client'
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
8
|
+
module Fluent::Plugin
|
9
|
+
class AzureFunctionsOutput < Output
|
10
|
+
Fluent::Plugin.register_output('azurefunctions', self)
|
11
|
+
|
12
|
+
helpers :compat_parameters
|
13
|
+
|
14
|
+
DEFAULT_BUFFER_TYPE = "memory"
|
13
15
|
|
14
16
|
config_param :endpoint, :string,
|
15
17
|
:desc => "Azure Functions Endpoint URL"
|
@@ -30,20 +32,25 @@ module Fluent
|
|
30
32
|
config_param :tag_field_name, :string, :default => "tag",
|
31
33
|
:desc => "This is required only when add_time_field is true"
|
32
34
|
|
35
|
+
config_section :buffer do
|
36
|
+
config_set_default :@type, DEFAULT_BUFFER_TYPE
|
37
|
+
end
|
38
|
+
|
33
39
|
def configure(conf)
|
40
|
+
compat_parameters_convert(conf, :buffer)
|
34
41
|
super
|
35
|
-
raise ConfigError, 'no endpoint' if @endpoint.empty?
|
36
|
-
raise ConfigError, 'no function_key' if @function_key.empty?
|
42
|
+
raise Fluent::ConfigError, 'no endpoint' if @endpoint.empty?
|
43
|
+
raise Fluent::ConfigError, 'no function_key' if @function_key.empty?
|
37
44
|
if not @key_names.nil?
|
38
45
|
@key_names = @key_names.split(',')
|
39
46
|
end
|
40
47
|
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'
|
42
49
|
end
|
43
50
|
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'
|
45
52
|
end
|
46
|
-
@timef = TimeFormatter.new(@time_format, @localtime)
|
53
|
+
@timef = Fluent::TimeFormatter.new(@time_format, @localtime)
|
47
54
|
end
|
48
55
|
|
49
56
|
def start
|
@@ -86,6 +93,14 @@ module Fluent
|
|
86
93
|
record.to_msgpack
|
87
94
|
end
|
88
95
|
|
96
|
+
def formatted_to_msgpack_binary?
|
97
|
+
true
|
98
|
+
end
|
99
|
+
|
100
|
+
def multi_workers_ready?
|
101
|
+
true
|
102
|
+
end
|
103
|
+
|
89
104
|
def write(chunk)
|
90
105
|
chunk.msgpack_each { |record|
|
91
106
|
payload = JSON.dump(record)
|
@@ -95,7 +110,7 @@ module Fluent
|
|
95
110
|
begin
|
96
111
|
@client.post(payload)
|
97
112
|
rescue Exception => ex
|
98
|
-
|
113
|
+
log.fatal "Error occured in posting to Azure Functions HTTP trigger function: "
|
99
114
|
+ "'#{ex}', .rid=>#{unique_identifier}, payload=>" + payload
|
100
115
|
end
|
101
116
|
}
|
data/test/helper.rb
CHANGED
@@ -20,69 +20,77 @@ class AzureFunctionsOutputTest < Test::Unit::TestCase
|
|
20
20
|
# utc
|
21
21
|
# ]
|
22
22
|
|
23
|
-
def create_driver(conf = CONFIG
|
24
|
-
Fluent::Test::
|
23
|
+
def create_driver(conf = CONFIG)
|
24
|
+
Fluent::Test::Driver::Output.new(Fluent::Plugin::AzureFunctionsOutput).configure(conf)
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_configure
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
28
|
+
d = create_driver
|
29
|
+
|
30
|
+
assert_equal 'https://yoichikademo1.azurewebsites.net/api/HttpTriggerFunction',
|
31
|
+
d.instance.endpoint
|
32
|
+
assert_equal 'aRVQ7Lj0vzDhY0JBYF8gpDzDCyEBxLwhO51JSC7X5dZFbTvROs7uNg==',
|
33
|
+
d.instance.function_key
|
34
|
+
assert_equal ["postid", "user", "content", "tag"], d.instance.key_names
|
35
|
+
assert_true d.instance.localtime
|
36
|
+
assert_true d.instance.add_time_field
|
37
|
+
assert_equal 'time', d.instance.time_field_name
|
38
|
+
assert_true d.instance.add_tag_field
|
39
|
+
assert_equal 'tag', d.instance.tag_field_name
|
36
40
|
end
|
37
41
|
|
38
42
|
def test_format
|
39
43
|
d = create_driver
|
40
44
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
# d.expect_format %[2011-01-02T13:14:15Z\ttest\t{"a":2}\n]
|
45
|
+
time = event_time("2011-01-02 13:14:15 UTC")
|
46
|
+
d.run(default_tag: 'documentdb.test') do
|
47
|
+
d.feed(time, {"a"=>1})
|
48
|
+
d.feed(time, {"a"=>2})
|
49
|
+
end
|
47
50
|
|
48
|
-
# d.
|
51
|
+
# assert_equal EXPECTED1, d.formatted[0]
|
52
|
+
# assert_equal EXPECTED2, d.formatted[1]
|
49
53
|
end
|
50
54
|
|
51
55
|
def test_write
|
52
56
|
d = create_driver
|
53
57
|
|
54
|
-
time =
|
55
|
-
d.
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
58
|
+
time = event_time("2016-01-28 13:14:15 UTC")
|
59
|
+
data = d.run(default_tag: 'azurefunctions.test') do
|
60
|
+
d.feed(
|
61
|
+
time,
|
62
|
+
{
|
63
|
+
"postid" => "10001",
|
64
|
+
"user"=> "ladygaga",
|
65
|
+
"content" => "post by ladygaga",
|
66
|
+
"tag" => "azurefunctions.debug",
|
67
|
+
"posttime" =>"2016-11-31T00:00:00Z"
|
68
|
+
})
|
63
69
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
70
|
+
d.feed(
|
71
|
+
time,
|
72
|
+
{
|
73
|
+
"postid" => "10002",
|
74
|
+
"user"=> "katyperry",
|
75
|
+
"content" => "post by katyperry",
|
76
|
+
"tag" => "azurefunctions.debug",
|
77
|
+
"posttime" =>"2016-11-31T00:00:00Z"
|
78
|
+
})
|
72
79
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
80
|
+
d.feed(
|
81
|
+
time,
|
82
|
+
{
|
83
|
+
"postid" => "10003",
|
84
|
+
"tag" => "azurefunctions.debug",
|
85
|
+
"time" =>"2016-11-31T00:00:00Z"
|
86
|
+
})
|
79
87
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
88
|
+
d.feed(
|
89
|
+
time,
|
90
|
+
{
|
91
|
+
"posttime" => "2016-11-31T00:00:00Z"
|
92
|
+
})
|
93
|
+
end
|
86
94
|
puts data
|
87
95
|
# ### FileOutput#write returns path
|
88
96
|
# path = d.run
|
@@ -90,4 +98,3 @@ class AzureFunctionsOutputTest < Test::Unit::TestCase
|
|
90
98
|
# assert_equal expect_path, path
|
91
99
|
end
|
92
100
|
end
|
93
|
-
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-azurefunctions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoichi Kawasaki
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fluentd
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.14.15
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '2'
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 0.
|
29
|
+
version: 0.14.15
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '2'
|