logstash-input-kinesis 1.1.0-java → 1.2.0-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bb43b802dabbacadd3bb00a085e4b5916c6751d5
4
- data.tar.gz: 03d11ef552c46c7022c37f38cb0a379363bc9e02
3
+ metadata.gz: f080dee0175be6a16a2a124590f0e92a20ccf45e
4
+ data.tar.gz: 7e3bf28cf181418701f9ac5041512c1b7c2000a7
5
5
  SHA512:
6
- metadata.gz: 13eac6fc73411ce0c353557cbfba14b5ff0dffa7e3994c4277db3fcb65b43c70b013538d840ab2d619ccf54244af217f68d32e4c33fe75cb9980bd229e025c57
7
- data.tar.gz: c5abf46b322cbb4c84d681178db838782aa06bd7e0936ddfbcc7fd7fda91b581479b28b4697be4d6814968f4f8043c04c3e2e14ca36cf0d13d2f7b3873ea14c3
6
+ metadata.gz: c79c16f7b23a7607c852aa6570f8ab807812cf85087d0aab152ce3fc73b6a2e0f365e606670e8c22393aa173c56df26c7c7ea05afc2b1d758049494dfc64d49a
7
+ data.tar.gz: 562275486d2548074591e98063f5e54ba5f8a39fd0c45a3f2011aec6e009465afd05bc2bf81fcc7eccc4c400ccebd2e883ae6ca549167dd7b798421639a12b6b
data/Rakefile CHANGED
@@ -1,2 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
+ begin
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
6
+ rescue LoadError
7
+ end
8
+
9
+ task default: "spec"
@@ -4,15 +4,34 @@ require "logstash/errors"
4
4
  require "logstash/environment"
5
5
  require "logstash/namespace"
6
6
 
7
- require "logstash/inputs/kinesis/version"
8
7
  require 'logstash-input-kinesis_jars'
8
+ require "logstash/inputs/kinesis/version"
9
9
 
10
+ # Receive events through an AWS Kinesis stream.
11
+ #
12
+ # This input plugin uses the Java Kinesis Client Library underneath, so the
13
+ # documentation at https://github.com/awslabs/amazon-kinesis-client will be
14
+ # useful.
15
+ #
16
+ # AWS credentials can be specified either through environment variables, or an
17
+ # IAM instance role. The library uses a DynamoDB table for worker coordination,
18
+ # so you'll need to grant access to that as well as to the Kinesis stream. The
19
+ # DynamoDB table has the same name as the `application_name` configuration
20
+ # option, which defaults to "logstash".
21
+ #
22
+ # The library can optionally also send worker statistics to CloudWatch.
10
23
  class LogStash::Inputs::Kinesis < LogStash::Inputs::Base
11
24
  KCL = com.amazonaws.services.kinesis.clientlibrary.lib.worker
25
+ require "logstash/inputs/kinesis/worker"
12
26
 
13
27
  config_name 'kinesis'
14
28
  milestone 1
15
29
 
30
+ attr_reader(
31
+ :kcl_config,
32
+ :kcl_worker,
33
+ )
34
+
16
35
  # The application name used for the dynamodb coordination table. Must be
17
36
  # unique for this kinesis stream.
18
37
  config :application_name, :validate => :string, :default => "logstash"
@@ -23,6 +42,15 @@ class LogStash::Inputs::Kinesis < LogStash::Inputs::Base
23
42
  # How many seconds between worker checkpoints to dynamodb.
24
43
  config :checkpoint_interval_seconds, :validate => :number, :default => 60
25
44
 
45
+ # Worker metric tracking. By default this is disabled, set it to "cloudwatch"
46
+ # to enable the cloudwatch integration in the Kinesis Client Library.
47
+ config :metrics, :validate => [nil, "cloudwatch"], :default => nil
48
+
49
+ def initialize(params = {}, kcl_class = KCL::Worker)
50
+ @kcl_class = kcl_class
51
+ super(params)
52
+ end
53
+
26
54
  def register
27
55
  # the INFO log level is extremely noisy in KCL
28
56
  org.apache.commons.logging::LogFactory.getLog("com.amazonaws.services.kinesis").
@@ -30,7 +58,7 @@ class LogStash::Inputs::Kinesis < LogStash::Inputs::Base
30
58
 
31
59
  worker_id = java.util::UUID.randomUUID.to_s
32
60
  creds = com.amazonaws.auth::DefaultAWSCredentialsProviderChain.new()
33
- @config = KCL::KinesisClientLibConfiguration.new(
61
+ @kcl_config = KCL::KinesisClientLibConfiguration.new(
34
62
  @application_name,
35
63
  @kinesis_stream_name,
36
64
  creds,
@@ -38,62 +66,33 @@ class LogStash::Inputs::Kinesis < LogStash::Inputs::Base
38
66
  end
39
67
 
40
68
  def run(output_queue)
41
- @worker = KCL::Worker.new(
42
- proc { Worker.new(@codec, output_queue, method(:decorate), @checkpoint_interval_seconds) },
43
- @config,
44
- com.amazonaws.services.kinesis.metrics.impl::NullMetricsFactory.new)
45
- @worker.run()
69
+ worker_factory = proc { Worker.new(@codec.clone, output_queue, method(:decorate), @checkpoint_interval_seconds, @logger) }
70
+ if metrics_factory
71
+ @kcl_worker = @kcl_class.new(
72
+ worker_factory,
73
+ @kcl_config,
74
+ metrics_factory)
75
+ else
76
+ @kcl_worker = @kcl_class.new(
77
+ worker_factory,
78
+ @kcl_config)
79
+ end
80
+
81
+ @kcl_worker.run()
46
82
  end
47
83
 
48
84
  def teardown
49
- @worker.shutdown if @worker
85
+ @kcl_worker.shutdown if @kcl_worker
50
86
  end
51
87
 
52
- class Worker
53
- include com.amazonaws.services.kinesis.clientlibrary.interfaces::IRecordProcessor
54
-
55
- def initialize(*args)
56
- # nasty hack, because this is the name of a method on IRecordProcessor, but also ruby's constructor
57
- if !@constructed
58
- @codec, @output_queue, @decorator, @checkpoint_interval = args
59
- @next_checkpoint = Time.now - 600
60
- @constructed = true
61
- else
62
- _shard_id, _ = args
63
- @decoder = java.nio.charset::Charset.forName("UTF-8").newDecoder()
64
- end
65
- end
66
-
67
- def processRecords(records, checkpointer)
68
- records.each { |record| process_record(record) }
69
- if Time.now >= @next_checkpoint
70
- checkpoint(checkpointer)
71
- @next_checkpoint = Time.now + @checkpoint_interval
72
- end
73
- end
74
-
75
- def shutdown(checkpointer, reason)
76
- if reason == com.amazonaws.services.kinesis.clientlibrary.types::ShutdownReason::TERMINATE
77
- checkpoint(checkpointer)
78
- end
79
- end
80
-
81
- protected
82
-
83
- def checkpoint(checkpointer)
84
- checkpointer.checkpoint()
85
- rescue => error
86
- @logger.error("Kinesis worker failed checkpointing: #{error}")
87
- end
88
+ protected
88
89
 
89
- def process_record(record)
90
- raw = @decoder.decode(record.getData).to_s
91
- @codec.decode(raw) do |event|
92
- @decorator.call(event)
93
- @output_queue << event
94
- end
95
- rescue => error
96
- @logger.error("Error processing record: #{error}")
90
+ def metrics_factory
91
+ case @metrics
92
+ when nil
93
+ com.amazonaws.services.kinesis.metrics.impl::NullMetricsFactory.new
94
+ when 'cloudwatch'
95
+ nil # default in the underlying library
97
96
  end
98
97
  end
99
98
  end
@@ -1,7 +1,7 @@
1
1
  module Logstash
2
2
  module Input
3
3
  module Kinesis
4
- VERSION = "1.1.0"
4
+ VERSION = "1.2.0"
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,56 @@
1
+ class LogStash::Inputs::Kinesis::Worker
2
+ include com.amazonaws.services.kinesis.clientlibrary.interfaces::IRecordProcessor
3
+
4
+ attr_reader(
5
+ :checkpoint_interval,
6
+ :codec,
7
+ :decorator,
8
+ :logger,
9
+ :output_queue,
10
+ )
11
+
12
+ def initialize(*args)
13
+ # nasty hack, because this is the name of a method on IRecordProcessor, but also ruby's constructor
14
+ if !@constructed
15
+ @codec, @output_queue, @decorator, @checkpoint_interval, @logger = args
16
+ @next_checkpoint = Time.now - 600
17
+ @constructed = true
18
+ else
19
+ _shard_id, _ = args
20
+ @decoder = java.nio.charset::Charset.forName("UTF-8").newDecoder()
21
+ end
22
+ end
23
+ public :initialize
24
+
25
+ def processRecords(records, checkpointer)
26
+ records.each { |record| process_record(record) }
27
+ if Time.now >= @next_checkpoint
28
+ checkpoint(checkpointer)
29
+ @next_checkpoint = Time.now + @checkpoint_interval
30
+ end
31
+ end
32
+
33
+ def shutdown(checkpointer, reason)
34
+ if reason == com.amazonaws.services.kinesis.clientlibrary.types::ShutdownReason::TERMINATE
35
+ checkpoint(checkpointer)
36
+ end
37
+ end
38
+
39
+ protected
40
+
41
+ def checkpoint(checkpointer)
42
+ checkpointer.checkpoint()
43
+ rescue => error
44
+ @logger.error("Kinesis worker failed checkpointing: #{error}")
45
+ end
46
+
47
+ def process_record(record)
48
+ raw = @decoder.decode(record.getData).to_s
49
+ @codec.decode(raw) do |event|
50
+ @decorator.call(event)
51
+ @output_queue << event
52
+ end
53
+ rescue => error
54
+ @logger.error("Error processing record: #{error}")
55
+ end
56
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-input-kinesis
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: java
6
6
  authors:
7
7
  - Brian Palmer
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.0.7
55
+ - !ruby/object:Gem::Dependency
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ name: logstash-core
62
+ prerelease: false
63
+ type: :runtime
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  requirement: !ruby/object:Gem::Requirement
57
71
  requirements:
@@ -80,6 +94,34 @@ dependencies:
80
94
  - - ~>
81
95
  - !ruby/object:Gem::Version
82
96
  version: '10.0'
97
+ - !ruby/object:Gem::Dependency
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ~>
101
+ - !ruby/object:Gem::Version
102
+ version: 3.2.0
103
+ name: rspec
104
+ prerelease: false
105
+ type: :development
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 3.2.0
111
+ - !ruby/object:Gem::Dependency
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ name: logstash-codec-json
118
+ prerelease: false
119
+ type: :development
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
83
125
  description: This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program
84
126
  email:
85
127
  - brian@codekitchen.net
@@ -93,6 +135,7 @@ files:
93
135
  - Rakefile
94
136
  - lib/logstash/inputs/kinesis.rb
95
137
  - lib/logstash/inputs/kinesis/version.rb
138
+ - lib/logstash/inputs/kinesis/worker.rb
96
139
  homepage: https://github.com/codekitchen/logstash-input-kinesis
97
140
  licenses:
98
141
  - Apache License (2.0)