fluent-plugin-formatter-protobuf 0.0.5 → 0.1.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/.github/workflows/codeql-analysis.yml +49 -0
- data/README.md +10 -12
- data/RELEASE.md +4 -4
- data/fluent-plugin-formatter-protobuf.gemspec +5 -5
- data/lib/fluent/plugin/formatter_protobuf.rb +10 -20
- data/lib/fluent/plugin/version.rb +1 -1
- data/test/plugin/test_formatter_protobuf.rb +22 -6
- metadata +13 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f49ca0a97713b1a0771cb9c73b38f49660b5fb4103a6d3f989140013fbd21bab
|
4
|
+
data.tar.gz: d547aaeef78fb13b4d5747dcf26fa27f1912e33ee6b4f699db401f335525fa94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c17daaf911ea6a58cdbd8bd39b25bdf500630a506ab29f384d1abcf01e178578bea74ecf4e9ebff6c0496bf67304324f49b00744d49911bd1db32177d7fbcaed
|
7
|
+
data.tar.gz: bc2167f0f05d20594b453a7a40ba25c8e72ae085ed6c72a14714e2cdf617e9050f650b1c1aa1b82b5626f2c83666ef4015c19149deed227c4e0d39d79df910f2
|
@@ -0,0 +1,49 @@
|
|
1
|
+
name: "CodeQL"
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ main ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ main ]
|
8
|
+
schedule:
|
9
|
+
- cron: '18 11 * * 4'
|
10
|
+
|
11
|
+
jobs:
|
12
|
+
analyze:
|
13
|
+
name: Analyze
|
14
|
+
runs-on: ubuntu-latest
|
15
|
+
permissions:
|
16
|
+
actions: read
|
17
|
+
contents: read
|
18
|
+
security-events: write
|
19
|
+
|
20
|
+
strategy:
|
21
|
+
fail-fast: false
|
22
|
+
matrix:
|
23
|
+
language: [ 'ruby' ]
|
24
|
+
|
25
|
+
steps:
|
26
|
+
- name: Checkout repository
|
27
|
+
uses: actions/checkout@v2
|
28
|
+
|
29
|
+
- name: Initialize CodeQL
|
30
|
+
uses: github/codeql-action/init@v1
|
31
|
+
with:
|
32
|
+
languages: ${{ matrix.language }}
|
33
|
+
|
34
|
+
- name: Autobuild
|
35
|
+
uses: github/codeql-action/autobuild@v1
|
36
|
+
|
37
|
+
# ℹ️ Command-line programs to run using the OS shell.
|
38
|
+
# 📚 https://git.io/JvXDl
|
39
|
+
|
40
|
+
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
41
|
+
# and modify them (or add more) to build your code if your project
|
42
|
+
# uses a compiled language
|
43
|
+
|
44
|
+
#- run: |
|
45
|
+
# make bootstrap
|
46
|
+
# make release
|
47
|
+
|
48
|
+
- name: Perform CodeQL Analysis
|
49
|
+
uses: github/codeql-action/analyze@v1
|
data/README.md
CHANGED
@@ -18,7 +18,7 @@ $ gem install fluent-plugin-formatter-protobuf
|
|
18
18
|
$ gem install \
|
19
19
|
fluent-plugin-formatter-protobuf \
|
20
20
|
--version "<version>" \
|
21
|
-
--source "https://rubygems.pkg.github.com/
|
21
|
+
--source "https://rubygems.pkg.github.com/fluent-plugins-nursery"
|
22
22
|
```
|
23
23
|
|
24
24
|
### Bundler (RubyGems)
|
@@ -32,7 +32,7 @@ gem "fluent-plugin-formatter-protobuf", "<version>"
|
|
32
32
|
### Bundler (GitHub RubyGems Registry),
|
33
33
|
|
34
34
|
```shell
|
35
|
-
source "https://rubygems.pkg.github.com/
|
35
|
+
source "https://rubygems.pkg.github.com/fluent-plugins-nursery" do
|
36
36
|
gem "fluent-plugin-formatter-protobuf", "<version>"
|
37
37
|
end
|
38
38
|
```
|
@@ -43,11 +43,12 @@ And then execute:
|
|
43
43
|
$ bundle
|
44
44
|
```
|
45
45
|
|
46
|
-
##
|
46
|
+
## Quick start
|
47
47
|
|
48
48
|
1. Generate the protobuf ruby methods
|
49
49
|
1. e.g `protoc --proto_path=. --ruby_out=. ./log.proto`
|
50
|
-
2. Modify the `<format>` section to include `
|
50
|
+
2. Modify the `<format>` section to include `class_name`, which is your Protobuf message name, and `include_paths`, the path where the generated Ruby types are stored
|
51
|
+
1. Given protobuf class `Your::Protobuf::Class::Name` class should be given as `Your.Protobuf.Class.Name` in `class_name`. The exact name can be found in the generated Ruby files
|
51
52
|
|
52
53
|
|
53
54
|
## Example
|
@@ -74,7 +75,7 @@ $ bundle
|
|
74
75
|
|
75
76
|
<format>
|
76
77
|
@type protobuf
|
77
|
-
|
78
|
+
class_name "Log"
|
78
79
|
include_paths ["/opt/fluent-plugin-formatter-protobuf/log_pb.rb"]
|
79
80
|
</format>
|
80
81
|
</match>
|
@@ -82,13 +83,10 @@ $ bundle
|
|
82
83
|
|
83
84
|
## Configuration
|
84
85
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
```
|
90
|
-
|
91
|
-
You can copy and paste generated documents here.
|
86
|
+
|parameter|type|description|default|
|
87
|
+
|---|---|---|---|
|
88
|
+
|include_paths|array (optional)| Generated Ruby Protobuf class files path |`[]`|
|
89
|
+
|class_name|string (required)| Ruby Protobuf class name. Used to encode into Protobuf binary||
|
92
90
|
|
93
91
|
## Copyright
|
94
92
|
|
data/RELEASE.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
## Instructions
|
4
4
|
To release the gem to Github package manager and Ruby Gems,
|
5
5
|
|
6
|
-
1. Update `lib/fluent/version.rb`
|
7
|
-
2.
|
8
|
-
3.
|
9
|
-
4.
|
6
|
+
1. Update `lib/fluent/plugin/version.rb`
|
7
|
+
2. Create a pull request and merge it into `main`
|
8
|
+
3. Manually creating a release on Github with a tag indicating the new version number e.g. `vMAJOR.MINOR.PATCH`
|
9
|
+
4. GitHub Actions will automatically run and publish to RubyGems and GitHub repository
|
@@ -28,11 +28,11 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.test_files = test_files
|
29
29
|
spec.require_paths = ['lib']
|
30
30
|
|
31
|
-
spec.add_development_dependency 'bundler', '~> 2.2
|
32
|
-
spec.add_development_dependency 'rake', '~> 13.0
|
33
|
-
spec.add_development_dependency 'rubocop', '~> 1.22
|
34
|
-
spec.add_development_dependency 'rubocop-rake', '~> 0.6
|
35
|
-
spec.add_development_dependency 'test-unit', '~> 3.3
|
31
|
+
spec.add_development_dependency 'bundler', '~> 2.2'
|
32
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
33
|
+
spec.add_development_dependency 'rubocop', '~> 1.22'
|
34
|
+
spec.add_development_dependency 'rubocop-rake', '~> 0.6'
|
35
|
+
spec.add_development_dependency 'test-unit', '~> 3.3'
|
36
36
|
spec.add_runtime_dependency 'fluentd', ['>= 1.0', '< 2']
|
37
37
|
spec.add_runtime_dependency 'google-protobuf', ['~> 3.18']
|
38
38
|
end
|
@@ -29,11 +29,9 @@ module Fluent
|
|
29
29
|
class ProtobufFormatter < Fluent::Plugin::Formatter
|
30
30
|
Fluent::Plugin.register_formatter('protobuf', self)
|
31
31
|
|
32
|
-
|
33
|
-
config_param :include_paths, :array, default: []
|
32
|
+
config_param :include_paths, :array, default: [], desc: 'Generated Ruby Protobuf class files path'
|
34
33
|
|
35
|
-
|
36
|
-
config_param :message_name, :string
|
34
|
+
config_param :class_name, :string, desc: 'Ruby Protobuf class name. Used to encode into Protobuf binary'
|
37
35
|
|
38
36
|
def configure(conf)
|
39
37
|
super(conf)
|
@@ -42,10 +40,10 @@ module Fluent
|
|
42
40
|
|
43
41
|
@include_paths.each { |path| require_proto!(path) } unless @include_paths.empty?
|
44
42
|
|
45
|
-
|
46
|
-
raise Fluent::ConfigError, "
|
43
|
+
class_lookup = Google::Protobuf::DescriptorPool.generated_pool.lookup(@class_name)
|
44
|
+
raise Fluent::ConfigError, "class name '#{@class_name}' not found" if class_lookup.nil?
|
47
45
|
|
48
|
-
@protobuf_class =
|
46
|
+
@protobuf_class = class_lookup.msgclass
|
49
47
|
end
|
50
48
|
|
51
49
|
def formatter_type
|
@@ -57,22 +55,14 @@ module Fluent
|
|
57
55
|
@protobuf_class.encode(protobuf_msg)
|
58
56
|
end
|
59
57
|
|
60
|
-
# @param [string] filename
|
61
|
-
# @return [void]
|
62
58
|
def require_proto!(filename)
|
63
|
-
|
64
|
-
raise Fluent::ConfigError, "Unable to load file '#{filename}'. It is not a Ruby file"
|
65
|
-
end
|
66
|
-
|
67
|
-
unless Pathname.new(filename).absolute?
|
68
|
-
raise Fluent::ConfigError, "Unable to load file '#{filename}'. Please provide absolute paths"
|
69
|
-
end
|
70
|
-
|
71
|
-
begin
|
59
|
+
if Pathname.new(filename).absolute?
|
72
60
|
require filename
|
73
|
-
|
74
|
-
|
61
|
+
else
|
62
|
+
require_relative filename
|
75
63
|
end
|
64
|
+
rescue LoadError => e
|
65
|
+
raise Fluent::ConfigError, "Unable to load file '#{filename}'. Reason: #{e.inspect}"
|
76
66
|
end
|
77
67
|
end
|
78
68
|
end
|
@@ -8,31 +8,47 @@ class ProtobufFormatterTest < Test::Unit::TestCase
|
|
8
8
|
Fluent::Test.setup
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
VALID_INCLUDE_PATHS_ABSOLUTE = [File.expand_path(File.join(__dir__, '..', 'proto', 'addressbook_pb.rb'))].freeze
|
12
|
+
|
13
|
+
# Relative to the plugin file
|
14
|
+
VALID_INCLUDE_PATHS_RELATIVE = '../../../test/proto/addressbook_pb.rb'
|
12
15
|
|
13
16
|
sub_test_case 'configure' do
|
14
17
|
test 'fail if include_paths is empty' do
|
15
18
|
assert_raise(Fluent::ConfigError) do
|
16
|
-
create_driver({
|
19
|
+
create_driver({ class_name: '', include_paths: [] })
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
test 'fail if ruby files not found in the provided include paths' do
|
24
|
+
assert_raise(Fluent::ConfigError) do
|
25
|
+
create_driver({ class_name: 'tutorial.AddressBook', include_paths: ['some/random/path'] })
|
17
26
|
end
|
18
27
|
end
|
19
28
|
|
20
|
-
test 'fail if no protobuf class can be found with
|
29
|
+
test 'fail if no protobuf class can be found with class_name' do
|
21
30
|
assert_raise(Fluent::ConfigError) do
|
22
|
-
create_driver({
|
31
|
+
create_driver({ class_name: 'Some.Name', include_paths: VALID_INCLUDE_PATHS_ABSOLUTE })
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
test 'success if given valid relative paths in include paths' do
|
36
|
+
assert_nothing_raised do
|
37
|
+
create_driver({ class_name: 'tutorial.AddressBook', include_paths: [VALID_INCLUDE_PATHS_RELATIVE] })
|
23
38
|
end
|
24
39
|
end
|
25
40
|
|
26
41
|
test 'passes on valid configuration' do
|
27
42
|
assert_nothing_raised do
|
28
|
-
create_driver({
|
43
|
+
create_driver({ class_name: 'tutorial.AddressBook', include_paths: VALID_INCLUDE_PATHS_ABSOLUTE })
|
29
44
|
end
|
30
45
|
end
|
31
46
|
end
|
32
47
|
|
33
48
|
sub_test_case 'format' do
|
34
49
|
test 'encodes into Protobuf binary' do
|
35
|
-
formatter = create_formatter({
|
50
|
+
formatter = create_formatter({ class_name: 'tutorial.AddressBook',
|
51
|
+
include_paths: VALID_INCLUDE_PATHS_ABSOLUTE })
|
36
52
|
|
37
53
|
formatted = formatter.format('some-tag', 1234,
|
38
54
|
{ people: [{ name: 'Masahiro', id: 1337, email: 'repeatedly _at_ gmail.com' }] })
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fluent-plugin-formatter-protobuf
|
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
|
- Ray Tung
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-10-
|
11
|
+
date: 2021-10-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,70 +16,70 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 2.2
|
19
|
+
version: '2.2'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.2
|
26
|
+
version: '2.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 13.0
|
33
|
+
version: '13.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 13.0
|
40
|
+
version: '13.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rubocop
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.22
|
47
|
+
version: '1.22'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.22
|
54
|
+
version: '1.22'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rubocop-rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.6
|
61
|
+
version: '0.6'
|
62
62
|
type: :development
|
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: 0.6
|
68
|
+
version: '0.6'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: test-unit
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 3.3
|
75
|
+
version: '3.3'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 3.3
|
82
|
+
version: '3.3'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: fluentd
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,6 +123,7 @@ extensions: []
|
|
123
123
|
extra_rdoc_files: []
|
124
124
|
files:
|
125
125
|
- ".github/workflows/build-and-test.yml"
|
126
|
+
- ".github/workflows/codeql-analysis.yml"
|
126
127
|
- ".github/workflows/publish.yml"
|
127
128
|
- ".gitignore"
|
128
129
|
- ".rubocop.yml"
|