fluent-plugin-gcloud-metadata 1.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 135a1e2e9934318488499e58501d0cee9617691a
4
+ data.tar.gz: dcf9c91aae07f032a25d016a01f750eb5525907e
5
+ SHA512:
6
+ metadata.gz: feac76eca0f0401b2a8d2c2df41c3dfaac295a99f579e65dfd49b538c2d5834eb0d0cb078508857f4f1d81ff71c8688925327bb263825a9686677922fafad4ca
7
+ data.tar.gz: cccc34125a376067cf8e7e5e31687387bc5e71a5b65dc92a0a85c9d7fdcdab81b8d8d79d4dfca5a6f3768361aeed6aeca65ff377d917351643e96581b400b003
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .DS_Store
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.1
5
+ - 2.2
6
+ - 2.3.1
7
+
8
+ gemfile:
9
+ - Gemfile
10
+
11
+ script: bundle exec rake test
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fluent-plugin-gcloud-metadata.gemspec
4
+ gemspec
5
+
6
+ gem 'simplecov', require: false
7
+ gem 'coveralls', require: false
8
+ gem 'strptime', require: false if RUBY_ENGINE == "ruby" && RUBY_VERSION =~ /^2/
data/README.md ADDED
@@ -0,0 +1,22 @@
1
+ # Fluentd GoogleCloud Metadata Filter Pluging
2
+
3
+ [![Build Status](https://travis-ci.org/tourstream/fluentd-plugin-gcloud-metadata.svg?branch=master)](https://travis-ci.org/tourstream/fluentd-plugin-gcloud-metadata)
4
+
5
+
6
+ The plugin uses the google cloud metadata api in [version1](https://cloud.google.com/compute/docs/storing-retrieving-metadata)
7
+
8
+ ## Installation
9
+ ```bash
10
+ gem install fluent-plugin-gcloud-metadata
11
+ ```
12
+
13
+ ## plugin configuration
14
+ ```
15
+ <filter **>
16
+ @type gcloud_metadata
17
+ <metadata>
18
+ project_name project/project-id
19
+ ...
20
+ </metadata>
21
+ </filter>
22
+ ```
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:test) do |test|
5
+ test.libs << 'test'
6
+ test.pattern = 'test/**/test_*.rb'
7
+ test.verbose = true
8
+ test.warning = false
9
+ end
10
+
11
+ task :default => :test
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path('../lib', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'fluent-plugin-gcloud-metadata'
6
+ s.version = '1.0.0'
7
+ s.authors = ['engerim']
8
+ s.email = ['alexander.miehe@tourstream.eu']
9
+ s.description = %q{gcloud metadata filter plugin for Fluent. The Plugin adds gcloud metadata to the record }
10
+ s.summary = s.description
11
+ s.homepage = 'https://github.com/tourstream/fluent-plugin-gcloud-metadata'
12
+ s.license = 'MIT'
13
+
14
+ s.files = `git ls-files`.split($/)
15
+ s.executables = s.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
16
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
17
+ s.require_paths = ['lib']
18
+
19
+ s.required_ruby_version = Gem::Requirement.new(">= 2.1".freeze)
20
+
21
+ s.add_runtime_dependency 'fluentd', '~> 0.14'
22
+
23
+ s.add_development_dependency 'rake', '~> 0'
24
+ s.add_development_dependency 'webmock', '~> 2.3'
25
+ s.add_development_dependency 'test-unit', '~> 3.1'
26
+ s.add_development_dependency 'minitest', '~> 5.8'
27
+ s.add_development_dependency 'vcr', '~> 3.0'
28
+ end
@@ -0,0 +1,56 @@
1
+ require 'fluent/filter'
2
+ require 'net/http'
3
+ require 'uri'
4
+
5
+ module Fluent
6
+
7
+ class GcloudMetadataFilter < Fluent::Filter
8
+ class ConnectionFailure < StandardError; end
9
+ Fluent::Plugin.register_filter('gcloud_metadata', self)
10
+
11
+ def configure(conf)
12
+ super
13
+ @map = {}
14
+ @cache = {}
15
+ # <record></record> directive
16
+ conf.elements.select { |element| element.name == 'metadata' }.each do |element|
17
+ element.each_pair do |k, v|
18
+ element.has_key?(k) # to suppress unread configuration warning
19
+ @map[k] = v
20
+ end
21
+ end
22
+ end
23
+
24
+ def filter(tag, time, record)
25
+ @map.each do |recordName, pathSegment|
26
+
27
+ if @cache.has_key?(recordName)
28
+ record[recordName] = @cache[recordName]
29
+ next
30
+ end
31
+
32
+ begin
33
+ uri = URI.parse("http://metadata.google.internal/computeMetadata/v1/#{pathSegment}")
34
+ request = Net::HTTP::Get.new(uri)
35
+ request['Metadata-Flavor'] = 'Google'
36
+
37
+ req_options = {
38
+ use_ssl: uri.scheme == 'https',
39
+ }
40
+
41
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
42
+ http.request(request)
43
+ end
44
+
45
+ record[recordName] = response.body
46
+ @cache[recordName] = record[recordName]
47
+ rescue => e
48
+ log.warn "failed to get metadata for #{recordName} from #{pathSegment}. ", error: e
49
+ end
50
+ end
51
+
52
+ record
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,55 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://metadata.google.internal/computeMetadata/v1/project/project-id
6
+ body:
7
+ encoding: UTF-8
8
+ string: ''
9
+ headers:
10
+ Metadata-Flavor:
11
+ - "Google"
12
+ User-Agent:
13
+ - Ruby
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: OK
18
+ headers:
19
+ Content-Type:
20
+ - application/text
21
+ Date:
22
+ - Fri, 08 May 2015 10:35:37 GMT
23
+ body:
24
+ encoding: UTF-8
25
+ string: foobar_project
26
+
27
+ http_version:
28
+ recorded_at: Tue, 23 May 2017 04:58:44 GMT
29
+
30
+ - request:
31
+ method: get
32
+ uri: http://metadata.google.internal/computeMetadata/v1/instance/attributes/cluster-name
33
+ body:
34
+ encoding: UTF-8
35
+ string: ''
36
+ headers:
37
+ Metadata-Flavor:
38
+ - "Google"
39
+ User-Agent:
40
+ - Ruby
41
+ response:
42
+ status:
43
+ code: 200
44
+ message: OK
45
+ headers:
46
+ Content-Type:
47
+ - application/text
48
+ Date:
49
+ - Fri, 08 May 2015 10:35:37 GMT
50
+ body:
51
+ encoding: UTF-8
52
+ string: testing
53
+
54
+ http_version:
55
+ recorded_at: Tue, 23 May 2017 04:58:44 GMT
data/test/helper.rb ADDED
@@ -0,0 +1,24 @@
1
+ # simplecov must be loaded before any of target code
2
+ #if ENV['SIMPLE_COV']
3
+ require 'simplecov'
4
+ if defined?(SimpleCov::SourceFile)
5
+ mod = SimpleCov::SourceFile
6
+ def mod.new(*args, &block)
7
+ m = allocate
8
+ m.instance_eval do
9
+ begin
10
+ initialize(*args, &block)
11
+ rescue Encoding::UndefinedConversionError
12
+ @src = "".force_encoding('UTF-8')
13
+ end
14
+ end
15
+ m
16
+ end
17
+ end
18
+ unless SimpleCov.running
19
+ SimpleCov.start do
20
+ add_filter '/test/'
21
+ add_filter '/gems/'
22
+ end
23
+ end
24
+ #end
@@ -0,0 +1,78 @@
1
+ require_relative '../helper'
2
+ require 'test/unit'
3
+ require 'fluent/test'
4
+ require 'fluent/plugin/filter_gcloud_metadata'
5
+ require 'vcr'
6
+
7
+ VCR.configure do |config|
8
+ config.cassette_library_dir = 'test/cassettes'
9
+ config.hook_into :webmock
10
+ end
11
+
12
+
13
+ class TestGcloudMetadataFilter < Test::Unit::TestCase
14
+
15
+ def setup
16
+ Fluent::Test.setup
17
+ end
18
+
19
+ CONFIG = %[
20
+ <metadata>
21
+ gce_project project/project-id
22
+ environment instance/attributes/cluster-name
23
+ </metadata>
24
+ ]
25
+
26
+ def create_driver(conf = CONFIG, tag='test.input')
27
+ Fluent::Test::FilterTestDriver.new(Fluent::GcloudMetadataFilter, tag).configure(conf)
28
+ end
29
+
30
+ def test_filter_metadata
31
+
32
+ input = {'message' => 'foobar'}
33
+
34
+ d = create_driver
35
+ VCR.use_cassette('metadata', :allow_unused_http_interactions => false) do
36
+ d.run do
37
+ d.filter input
38
+ end
39
+ end
40
+ expected = {'message' => 'foobar', 'gce_project' => 'foobar_project', 'environment' => 'testing'}
41
+
42
+ assert_equal expected, d.filtered_as_array[0][2]
43
+ end
44
+
45
+ def test_filter_metadata_with_cache
46
+
47
+ inputs = [
48
+ {'message' => 'foobar'},
49
+ {'message' => 'foobar2'},
50
+ ]
51
+
52
+ d = create_driver
53
+ VCR.use_cassette('metadata', :allow_unused_http_interactions => false) do
54
+ d.run do
55
+ inputs.each do |dat|
56
+ d.filter dat
57
+ end
58
+ end
59
+ end
60
+ expected = {'message' => 'foobar2', 'gce_project' => 'foobar_project', 'environment' => 'testing'}
61
+
62
+ assert_equal expected, d.filtered_as_array[1][2]
63
+ end
64
+
65
+ def test_filter_return_orignal_record_for_error
66
+
67
+ input = {'message' => 'foobar'}
68
+
69
+ d = create_driver
70
+ d.run do
71
+ d.filter input
72
+ end
73
+
74
+ expected = {'message' => 'foobar'}
75
+
76
+ assert_equal expected, d.filtered_as_array[0][2]
77
+ end
78
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-gcloud-metadata
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - engerim
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-05-23 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.14'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.14'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: webmock
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: test-unit
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '5.8'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '5.8'
83
+ - !ruby/object:Gem::Dependency
84
+ name: vcr
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '3.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '3.0'
97
+ description: 'gcloud metadata filter plugin for Fluent. The Plugin adds gcloud metadata
98
+ to the record '
99
+ email:
100
+ - alexander.miehe@tourstream.eu
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - ".travis.yml"
107
+ - Gemfile
108
+ - README.md
109
+ - Rakefile
110
+ - fluent-plugin-gcloud-metadata.gemspec
111
+ - lib/fluent/plugin/filter_gcloud_metadata.rb
112
+ - test/cassettes/metadata.yml
113
+ - test/helper.rb
114
+ - test/plugin/test_filter_gcloud_metadata.rb
115
+ homepage: https://github.com/tourstream/fluent-plugin-gcloud-metadata
116
+ licenses:
117
+ - MIT
118
+ metadata: {}
119
+ post_install_message:
120
+ rdoc_options: []
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '2.1'
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ requirements: []
134
+ rubyforge_project:
135
+ rubygems_version: 2.6.11
136
+ signing_key:
137
+ specification_version: 4
138
+ summary: gcloud metadata filter plugin for Fluent. The Plugin adds gcloud metadata
139
+ to the record
140
+ test_files:
141
+ - test/cassettes/metadata.yml
142
+ - test/helper.rb
143
+ - test/plugin/test_filter_gcloud_metadata.rb