fluent-plugin-aws-sqs 1.0.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2e0e807c91cfb9c16b261fbf2302ddd2537856f9eacaca6b5a17bea6c451f904
4
+ data.tar.gz: 702ca145ce473611c73ea372a810e8c35bdbdc319c95d80bc1ae1600bf71c4e9
5
+ SHA512:
6
+ metadata.gz: b4f6aa63ee94baac86ac116378e9f795d3bc431234f92e5e989aa197e75dcea8d7ce58dc069016b9c028237fb5f57b93bc552df9e2eb8fab79c5f6cab13fbe18
7
+ data.tar.gz: 8b51ce8aa459d03962c2fef4ffffd7f31a7788d44a992bb033e99bf0f374c621d479b047504dfe85392c944676cbf51dcda80e6459dbc11905ac0388cdc5d6a2
@@ -0,0 +1,7 @@
1
+ .vscode/*
2
+ !.vscode/settings.json
3
+ !.vscode/tasks.json
4
+ !.vscode/launch.json
5
+ !.vscode/extensions.json
6
+ .history/
7
+ .idea/*
@@ -0,0 +1,73 @@
1
+ image: ruby:2.6.3
2
+
3
+ # Cache gems in between builds
4
+ cache:
5
+ key: ${CI_COMMIT_REF_SLUG}
6
+ paths:
7
+ - vendor/ruby
8
+
9
+ before_script:
10
+ - gem install bundler:2.0.2
11
+ - bundle install -j $(nproc) --path vendor # Install dependencies into ./vendor/ruby
12
+
13
+ stages:
14
+ - test
15
+ - release
16
+
17
+ variables:
18
+ DOCKER_TLS_CERTDIR: ""
19
+
20
+ unit-test:
21
+ tags:
22
+ - dcos-multi-runner
23
+ stage: test
24
+ script:
25
+ - bundle exec rake test
26
+ except:
27
+ - tags
28
+
29
+ .release: &release
30
+ tags:
31
+ - dcos-multi-runner
32
+ stage: release
33
+ before_script:
34
+ - echo "Setup ssh inside the runner.."
35
+ - git config --global user.email $GITLAB_USER_EMAIL
36
+ - git config --global user.name $GITLAB_USER_LOGIN
37
+ - 'which ssh-agent || ( apk --update add openssh-client )'
38
+ - eval $(ssh-agent -s)
39
+ - ssh-add <(echo "$SSH_PRIVATE_KEY")
40
+ - mkdir -p ~/.ssh
41
+ - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
42
+ - echo "Clone the source code.."
43
+ - GIT_URL=$(echo $CI_PROJECT_URL | cut -d'/' -f3)
44
+ - git clone git@$GIT_URL:$CI_PROJECT_PATH.git
45
+ - cd $CI_PROJECT_NAME
46
+ - git reset --hard $CI_COMMIT_SHA
47
+ script:
48
+ - mkdir -p ~/.gem
49
+ - 'echo -e "---\n:rubygems_api_key: $GEM_HOST_API_KEY" > ~/.gem/credentials && echo "created gem credentials"'
50
+ - chmod 0600 ~/.gem/credentials
51
+ - gem install gem-release
52
+ - gem bump fluent-plugin-aws-sqs --version $TYPE --file ./lib/fluent/plugin/version.rb --commit --push --tag
53
+ - gem build fluent-plugin-aws-sqs.gemspec
54
+ - export VERSION=$(cat ./lib/fluent/plugin/version.rb | grep VERSION | sed -ne 's/[^0-9]*\(\([0-9]\.\)\{0,4\}[0-9][^.]\).*/\1/p' | sed 's/"$//')
55
+ - gem push fluent-plugin-aws-sqs-$VERSION.gem
56
+ when: manual
57
+ only:
58
+ - master
59
+
60
+ release:patch:
61
+ extends: .release
62
+ variables:
63
+ TYPE: patch
64
+
65
+ release:minor:
66
+ extends: .release
67
+ variables:
68
+ TYPE: minor
69
+
70
+ release:major:
71
+ extends: .release
72
+ variables:
73
+ TYPE: major
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in fluent_parser_s.gemspec
4
+ gemspec
File without changes
@@ -0,0 +1,7 @@
1
+ # in Rakefile
2
+ require 'rake/testtask'
3
+ Rake::TestTask.new(:test) do |test|
4
+ test.libs << 'lib' << 'test'
5
+ test.pattern = 'test/**/test_*.rb'
6
+ test.verbose = true
7
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,28 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+
4
+ require ('./lib/fluent/plugin/version.rb')
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "fluent-plugin-aws-sqs"
8
+ spec.version = SQS::VERSION
9
+
10
+ spec.authors = ["Shai Moria", "Niv Lipetz", "Jacob Goldenberg"]
11
+ spec.email = ["shai.moria@zooz.com", "niv.lipetz@zooz.com", "jacob.goldenberg@zooz.com"]
12
+ spec.description = "Fluentd SQS plugin to read data from AWS SQS"
13
+ spec.summary = "Fluentd SQS plugin to read data from AWS SQS"
14
+ spec.homepage = "https://github.com/zooz/fluent-plugin-aws-sqs"
15
+
16
+ spec.files = `git ls-files`.split($\)
17
+ spec.require_paths = ["lib"]
18
+ spec.license = "Apache-2.0"
19
+
20
+ spec.required_ruby_version = '>= 2.1'
21
+
22
+ spec.add_runtime_dependency "fluentd", ">= 0.14.0"
23
+ spec.add_runtime_dependency "aws-sdk-sqs", ">= 1.22.0"
24
+ spec.add_development_dependency "bundler"
25
+ spec.add_development_dependency "rake", "~> 12.0"
26
+ spec.add_development_dependency "test-unit", ">= 3.1.0"
27
+ spec.add_development_dependency "test-unit-rr"
28
+ end
@@ -0,0 +1,80 @@
1
+ require 'fluent/plugin/input'
2
+ require 'aws-sdk-sqs'
3
+
4
+ module Fluent::Plugin
5
+ class SQSInput < Input
6
+ Fluent::Plugin.register_input('sqs', self)
7
+
8
+ helpers :timer
9
+
10
+ config_param :aws_key_id, :string, default: nil, secret: true
11
+ config_param :aws_sec_key, :string, default: nil, secret: true
12
+ config_param :tag, :string
13
+ config_param :region, :string, default: 'ap-northeast-1'
14
+ config_param :sqs_url, :string, default: nil
15
+ config_param :receive_interval, :time, default: 0.1
16
+ config_param :max_number_of_messages, :integer, default: 10
17
+ config_param :wait_time_seconds, :integer, default: 10
18
+ config_param :visibility_timeout, :integer, default: nil
19
+ config_param :delete_message, :bool, default: false
20
+ config_param :stub_responses, :bool, default: false
21
+
22
+ def configure(conf)
23
+ super
24
+
25
+ Aws.config = {
26
+ access_key_id: @aws_key_id,
27
+ secret_access_key: @aws_sec_key,
28
+ region: @region
29
+ }
30
+ end
31
+
32
+ def start
33
+ super
34
+
35
+ timer_execute(:in_sqs_run_periodic_timer, @receive_interval, &method(:run))
36
+ end
37
+
38
+ def client
39
+ @client ||= Aws::SQS::Client.new(stub_responses: @stub_responses)
40
+ end
41
+
42
+ def queue
43
+ @queue ||= Aws::SQS::Resource.new(client: client).queue(@sqs_url)
44
+ end
45
+
46
+ def shutdown
47
+ super
48
+ end
49
+
50
+ def run
51
+ queue.receive_messages(
52
+ max_number_of_messages: @max_number_of_messages,
53
+ wait_time_seconds: @wait_time_seconds,
54
+ visibility_timeout: @visibility_timeout
55
+ ).each do |message|
56
+ record = parse_message(message)
57
+
58
+ message.delete if @delete_message
59
+
60
+ router.emit(@tag, Fluent::Engine.now, record)
61
+ end
62
+ rescue
63
+ log.error 'failed to emit or receive', error: $ERROR_INFO.to_s, error_class: $ERROR_INFO.class.to_s
64
+ log.warn_backtrace $ERROR_INFO.backtrace
65
+ end
66
+
67
+ private
68
+
69
+ def parse_message(message)
70
+ {
71
+ 'body' => message.body.to_s,
72
+ 'receipt_handle' => message.receipt_handle.to_s,
73
+ 'message_id' => message.message_id.to_s,
74
+ 'md5_of_body' => message.md5_of_body.to_s,
75
+ 'queue_url' => message.queue_url.to_s,
76
+ 'sender_id' => message.attributes['SenderId'].to_s
77
+ }
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,3 @@
1
+ module SQS
2
+ VERSION = "1.0.2"
3
+ end
@@ -0,0 +1,120 @@
1
+ require 'spec_helper'
2
+ require 'fluent/plugin/in_sqs'
3
+
4
+ describe Fluent::Plugin::SQSInput do
5
+ let(:driver) do
6
+ Fluent::Test.setup
7
+ Fluent::Test::Driver::Input.new(Fluent::Plugin::SQSInput).configure(config)
8
+ end
9
+ subject { driver.instance }
10
+
11
+ describe '#configure' do
12
+ let(:config) do
13
+ %(
14
+ aws_key_id AWS_KEY_ID
15
+ aws_sec_key AWS_SEC_KEY
16
+ tag TAG
17
+ region REGION
18
+ sqs_url http://SQS_URL
19
+ receive_interval 1
20
+ max_number_of_messages 10
21
+ wait_time_seconds 10
22
+ visibility_timeout 1
23
+ delete_message true
24
+ stub_responses true
25
+ )
26
+ end
27
+
28
+ context 'fluentd input configuration settings' do
29
+ it { expect(subject.aws_key_id).to eq('AWS_KEY_ID') }
30
+ it { expect(subject.aws_sec_key).to eq('AWS_SEC_KEY') }
31
+ it { expect(subject.tag).to eq('TAG') }
32
+ it { expect(subject.region).to eq('REGION') }
33
+ it { expect(subject.sqs_url).to eq('http://SQS_URL') }
34
+ it { expect(subject.receive_interval).to eq(1) }
35
+ it { expect(subject.max_number_of_messages).to eq(10) }
36
+ it { expect(subject.wait_time_seconds).to eq(10) }
37
+ it { expect(subject.visibility_timeout).to eq(1) }
38
+ it { expect(subject.delete_message).to eq(true) }
39
+ it { expect(subject.stub_responses).to eq(true) }
40
+ end
41
+
42
+ context 'AWS configuration settings' do
43
+ subject { Aws.config }
44
+
45
+ before { driver.instance }
46
+
47
+ it { expect(subject[:access_key_id]).to eq('AWS_KEY_ID') }
48
+ it { expect(subject[:secret_access_key]).to eq('AWS_SEC_KEY') }
49
+ it { expect(subject[:region]).to eq('REGION') }
50
+ end
51
+ end
52
+
53
+ describe '#run' do
54
+ let(:message_attributes) do
55
+ {
56
+ body: 'body',
57
+ receipt_handle: 'receipt_handle',
58
+ message_id: 'message_id',
59
+ md5_of_body: 'md5_of_body',
60
+ queue_url: 'queue_url',
61
+ attributes: { 'SenderId' => 'sender_id' }
62
+ }
63
+ end
64
+ let(:queue) { double(:queue, receive_messages: true) }
65
+ let(:message) { double(:message, **message_attributes.merge(delete: nil)) }
66
+ let(:messages) { [message] }
67
+
68
+ context 'with no delete messages param' do
69
+ let(:config) do
70
+ %(
71
+ tag TAG
72
+ max_number_of_messages 10
73
+ wait_time_seconds 10
74
+ visibility_timeout 1
75
+ delete_message false
76
+ )
77
+ end
78
+
79
+ before do
80
+ allow(subject).to receive(:queue) { queue }
81
+ end
82
+
83
+ it 'parse through messages and emit it' do
84
+ expect(queue).to receive(:receive_messages)
85
+ .with(max_number_of_messages: 10, wait_time_seconds: 10, visibility_timeout: 1) { messages }
86
+ expect(subject).to receive(:parse_message).with(message) { message_attributes }
87
+ expect(message).not_to receive(:delete)
88
+ expect(subject.router).to receive(:emit).with('TAG', kind_of(Fluent::EventTime), message_attributes)
89
+
90
+ subject.run
91
+ end
92
+ end
93
+
94
+ context 'with no delete messages param' do
95
+ let(:config) do
96
+ %(
97
+ tag TAG
98
+ max_number_of_messages 10
99
+ wait_time_seconds 10
100
+ visibility_timeout 1
101
+ delete_message true
102
+ )
103
+ end
104
+
105
+ before do
106
+ allow(subject).to receive(:queue) { queue }
107
+ end
108
+
109
+ it 'parse through messages and emit it' do
110
+ expect(queue).to receive(:receive_messages)
111
+ .with(max_number_of_messages: 10, wait_time_seconds: 10, visibility_timeout: 1) { messages }
112
+ expect(subject).to receive(:parse_message).with(message) { message_attributes }
113
+ expect(message).to receive(:delete)
114
+ expect(subject.router).to receive(:emit).with('TAG', kind_of(Fluent::EventTime), message_attributes)
115
+
116
+ subject.run
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,28 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.run_all_when_everything_filtered = true
9
+ config.filter_run :focus
10
+
11
+ # Run specs in random order to surface order dependencies. If you find an
12
+ # order dependency and want to debug it, you can fix the order by providing
13
+ # the seed, which is printed after each run.
14
+ # --seed 1234
15
+ config.order = 'random'
16
+
17
+ require 'fluent/load'
18
+ require 'fluent/test'
19
+ require 'fluent/test/helpers'
20
+ require 'fluent/test/driver/output'
21
+ require 'fluent/test/driver/input'
22
+
23
+ require 'ostruct'
24
+ require 'pry'
25
+ require 'rr'
26
+ # prevent Test::Unit's AutoRunner from executing during RSpec's rake task
27
+ Test::Unit.run = true if defined?(Test::Unit) && Test::Unit.respond_to?(:run=)
28
+ end
metadata ADDED
@@ -0,0 +1,142 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-aws-sqs
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Shai Moria
8
+ - Niv Lipetz
9
+ - Jacob Goldenberg
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2019-09-19 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: fluentd
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: 0.14.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: 0.14.0
29
+ - !ruby/object:Gem::Dependency
30
+ name: aws-sdk-sqs
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 1.22.0
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 1.22.0
43
+ - !ruby/object:Gem::Dependency
44
+ name: bundler
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: rake
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '12.0'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '12.0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: test-unit
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: 3.1.0
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 3.1.0
85
+ - !ruby/object:Gem::Dependency
86
+ name: test-unit-rr
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ description: Fluentd SQS plugin to read data from AWS SQS
100
+ email:
101
+ - shai.moria@zooz.com
102
+ - niv.lipetz@zooz.com
103
+ - jacob.goldenberg@zooz.com
104
+ executables: []
105
+ extensions: []
106
+ extra_rdoc_files: []
107
+ files:
108
+ - ".gitignore"
109
+ - ".gitlab-ci.yml"
110
+ - Gemfile
111
+ - README.md
112
+ - Rakefile
113
+ - VERSION
114
+ - fluent-plugin-aws-sqs.gemspec
115
+ - lib/fluent/plugin/in_sqs.rb
116
+ - lib/fluent/plugin/version.rb
117
+ - spec/lib/fluent/plugin/in_sqs_spec.rb
118
+ - spec/spec_helper.rb
119
+ homepage: https://github.com/zooz/fluent-plugin-aws-sqs
120
+ licenses:
121
+ - Apache-2.0
122
+ metadata: {}
123
+ post_install_message:
124
+ rdoc_options: []
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '2.1'
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ requirements: []
138
+ rubygems_version: 3.0.3
139
+ signing_key:
140
+ specification_version: 4
141
+ summary: Fluentd SQS plugin to read data from AWS SQS
142
+ test_files: []