fluent-plugin-aws-sqs 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []