logstash-output-datadog_logs 0.4.1 → 0.5.1

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
  SHA256:
3
- metadata.gz: 8148c91e062cc8e1999b780d95f529d9cd1516664f7872a96da51e1656c2b71d
4
- data.tar.gz: 6fd0ddbf65b8240e1609c0c74a57f7ffcf50e7945cf2601484007725ff5465b2
3
+ metadata.gz: bbfe2fc6bf43df61e35e421486e1f7143e4acce4725386decdc05f946249009d
4
+ data.tar.gz: 36bdf364a1d4ae4d522712914cca7eff722b7f115bf553c6cfeee3d4869a7744
5
5
  SHA512:
6
- metadata.gz: ce5a190b7c1550eb4edcec848aee451abd9814894da3e9c4302611c83c1e9414373086b69e60372bfde6cd6ad3da611146ac82413563b95c49721bdb0a024c68
7
- data.tar.gz: 33c1d8afda9da935ccb5f9ee43388f424ab7c8fefdb61b16ef9ac474f5d1c5834c053f911bfadce596291ea62148ff0f0a1beaf7bf56819ad433ac7fea92ae71
6
+ metadata.gz: 44eb1829c931dda34c65c962084d4be14ae5ef510000b32dec93e5b465a2e12dcc4ac27b7a53cb603f9c4d1e8a36c6c1262279f3c86317fef76d9448fcb0c125
7
+ data.tar.gz: ee06691a2c65deb5bf743f47072e35cf9615a238dd2a8f40f4db4459ff4e3fed3025908993f4ddf8f4814cd81117961919037c891d53e76b448058f838d77834
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
+ ## 0.5.1
2
+ - Support using HTTP proxies, adding the `http_proxy` parameter.
3
+
4
+ ## 0.5.0
5
+ - Support Datadog v2 endpoints #28
6
+
1
7
  ## 0.4.1
2
- - Fix HTTP bug when remote server is timing out
8
+ - Fix HTTP bug when remote server is timing out
3
9
 
4
10
  ## 0.4.0
5
11
  - Enable HTTP forwarding for logs
data/Gemfile CHANGED
@@ -1,2 +1,11 @@
1
1
  source 'https://rubygems.org'
2
+
2
3
  gemspec
4
+
5
+ logstash_path = ENV["LOGSTASH_PATH"] || "../../logstash"
6
+ use_logstash_source = ENV["LOGSTASH_SOURCE"] && ENV["LOGSTASH_SOURCE"].to_s == "1"
7
+
8
+ if Dir.exist?(logstash_path) && use_logstash_source
9
+ gem 'logstash-core', :path => "#{logstash_path}/logstash-core"
10
+ gem 'logstash-core-plugin-api', :path => "#{logstash_path}/logstash-core-plugin-api"
11
+ end
data/README.md CHANGED
@@ -58,8 +58,8 @@ output {
58
58
  | Property | Description | Default value |
59
59
  |-------------|--------------------------------------------------------------------------|----------------|
60
60
  | **api_key** | The API key of your Datadog platform | nil |
61
- | **host** | Proxy endpoint when logs are not directly forwarded to Datadog | intake.logs.datadoghq.com |
62
- | **port** | Proxy port when logs are not directly forwarded to Datadog | 443 |
61
+ | **host** | Endpoint when logs are not directly forwarded to Datadog | intake.logs.datadoghq.com |
62
+ | **port** | Port when logs are not directly forwarded to Datadog | 443 |
63
63
  | **use_ssl** | If true, the agent initializes a secure connection to Datadog. Ensure to update the port if you disable it. | true |
64
64
  | **max_retries** | The number of retries before the output plugin stops | 5 |
65
65
  | **max_backoff** | The maximum time waited between each retry in seconds | 30 |
@@ -67,6 +67,7 @@ output {
67
67
  | **use_compression** | Enable log compression for HTTP | true |
68
68
  | **compression_level** | Set the log compression level for HTTP (1 to 9, 9 being the best ratio) | 6 |
69
69
  | **no_ssl_validation** | Disable SSL validation (useful for proxy forwarding) | false |
70
+ | **http_proxy** | Proxy address for http proxies | none |
70
71
 
71
72
 
72
73
 
@@ -8,6 +8,7 @@ require "logstash/outputs/base"
8
8
  require "logstash/namespace"
9
9
  require "zlib"
10
10
 
11
+ require_relative "version"
11
12
 
12
13
  # DatadogLogs lets you send logs to Datadog
13
14
  # based on LogStash events.
@@ -33,11 +34,13 @@ class LogStash::Outputs::DatadogLogs < LogStash::Outputs::Base
33
34
  config :use_compression, :validate => :boolean, :required => false, :default => true
34
35
  config :compression_level, :validate => :number, :required => false, :default => 6
35
36
  config :no_ssl_validation, :validate => :boolean, :required => false, :default => false
37
+ config :force_v1_routes, :validate => :boolean, :required => false, :default => false # force using deprecated v1 routes
38
+ config :http_proxy, :validate => :string, :required => false, :default => ""
36
39
 
37
40
  # Register the plugin to logstash
38
41
  public
39
42
  def register
40
- @client = new_client(@logger, @api_key, @use_http, @use_ssl, @no_ssl_validation, @host, @port, @use_compression)
43
+ @client = new_client(@logger, @api_key, @use_http, @use_ssl, @no_ssl_validation, @host, @port, @use_compression, @force_v1_routes, @http_proxy)
41
44
  end
42
45
 
43
46
  # Logstash shutdown hook
@@ -143,9 +146,9 @@ class LogStash::Outputs::DatadogLogs < LogStash::Outputs::Base
143
146
  end
144
147
 
145
148
  # Build a new transport client
146
- def new_client(logger, api_key, use_http, use_ssl, no_ssl_validation, host, port, use_compression)
149
+ def new_client(logger, api_key, use_http, use_ssl, no_ssl_validation, host, port, use_compression, force_v1_routes, http_proxy)
147
150
  if use_http
148
- DatadogHTTPClient.new logger, use_ssl, no_ssl_validation, host, port, use_compression, api_key
151
+ DatadogHTTPClient.new logger, use_ssl, no_ssl_validation, host, port, use_compression, api_key, force_v1_routes, http_proxy
149
152
  else
150
153
  DatadogTCPClient.new logger, use_ssl, no_ssl_validation, host, port
151
154
  end
@@ -168,6 +171,7 @@ class LogStash::Outputs::DatadogLogs < LogStash::Outputs::Base
168
171
  retries += 1
169
172
  retry
170
173
  end
174
+ @logger.error("Max number of retries reached, dropping message. Last exception: #{ex.message}")
171
175
  rescue => ex
172
176
  @logger.error("Unmanaged exception while sending log to datadog #{ex.message}")
173
177
  end
@@ -192,24 +196,39 @@ class LogStash::Outputs::DatadogLogs < LogStash::Outputs::Base
192
196
  ::Manticore::ResolutionFailure
193
197
  ]
194
198
 
195
- def initialize(logger, use_ssl, no_ssl_validation, host, port, use_compression, api_key)
199
+ def initialize(logger, use_ssl, no_ssl_validation, host, port, use_compression, api_key, force_v1_routes, http_proxy)
196
200
  @logger = logger
197
201
  protocol = use_ssl ? "https" : "http"
198
- @url = "#{protocol}://#{host}:#{port.to_s}/v1/input/#{api_key}"
202
+
199
203
  @headers = {"Content-Type" => "application/json"}
200
204
  if use_compression
201
205
  @headers["Content-Encoding"] = "gzip"
202
206
  end
203
- logger.info("Starting HTTP connection to #{protocol}://#{host}:#{port.to_s} with compression " + (use_compression ? "enabled" : "disabled"))
207
+
208
+ if force_v1_routes
209
+ @url = "#{protocol}://#{host}:#{port.to_s}/v1/input/#{api_key}"
210
+ else
211
+ @url = "#{protocol}://#{host}:#{port.to_s}/api/v2/logs"
212
+ @headers["DD-API-KEY"] = api_key
213
+ @headers["DD-EVP-ORIGIN"] = "logstash"
214
+ @headers["DD-EVP-ORIGIN-VERSION"] = DatadogLogStashPlugin::VERSION
215
+ end
216
+
217
+ logger.info("Starting HTTP connection to #{protocol}://#{host}:#{port.to_s} with compression " + (use_compression ? "enabled" : "disabled") + (force_v1_routes ? " using v1 routes" : " using v2 routes"))
218
+
204
219
  config = {}
205
220
  config[:ssl][:verify] = :disable if no_ssl_validation
221
+ if http_proxy != ""
222
+ config[:proxy] = http_proxy
223
+ end
206
224
  @client = Manticore::Client.new(config)
207
225
  end
208
226
 
209
227
  def send(payload)
210
228
  begin
211
229
  response = @client.post(@url, :body => payload, :headers => @headers).call
212
- if response.code >= 500
230
+ # in case of error or 429, we will retry sending this payload
231
+ if response.code >= 500 || response.code == 429
213
232
  raise RetryableError.new "Unable to send payload: #{response.code} #{response.body}"
214
233
  end
215
234
  if response.code >= 400
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DatadogLogStashPlugin
4
+ VERSION = '0.5.1'
5
+ end
@@ -1,6 +1,12 @@
1
+ # Load version.rb containing the DatadogLogStashPlugin::VERSION
2
+ # for current Gem version.
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require "logstash/outputs/version.rb"
6
+
1
7
  Gem::Specification.new do |s|
2
8
  s.name = 'logstash-output-datadog_logs'
3
- s.version = '0.4.1'
9
+ s.version = DatadogLogStashPlugin::VERSION
4
10
  s.licenses = ['Apache-2.0']
5
11
  s.summary = 'DatadogLogs lets you send logs to Datadog based on LogStash events.'
6
12
  s.homepage = 'https://www.datadoghq.com/'
@@ -9,7 +15,7 @@ Gem::Specification.new do |s|
9
15
  s.require_paths = ['lib']
10
16
 
11
17
  # Files
12
- s.files = Dir['lib/**/*', 'spec/**/*', 'vendor/**/*', '*.gemspec', '*.md', 'CONTRIBUTORS', 'Gemfile', 'LICENSE', 'NOTICE.TXT']
18
+ s.files = Dir['lib/**/*', 'spec/**/*', 'vendor/**/*', "vendor/jar-dependencies/**/*.jar", "vendor/jar-dependencies/**/*.rb", '*.gemspec', '*.md', 'CONTRIBUTORS', 'Gemfile', 'LICENSE', 'NOTICE.TXT']
13
19
  # Tests
14
20
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
15
21
 
@@ -17,7 +23,7 @@ Gem::Specification.new do |s|
17
23
  s.metadata = {"logstash_plugin" => "true", "logstash_group" => "output"}
18
24
 
19
25
  # Gem dependencies
20
- s.add_runtime_dependency "logstash-core-plugin-api", "~> 2.0"
26
+ s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99"
21
27
  s.add_runtime_dependency 'manticore', '>= 0.5.2', '< 1.0.0'
22
28
  s.add_runtime_dependency 'logstash-codec-json'
23
29
 
@@ -2,7 +2,7 @@
2
2
  # under the Apache License Version 2.0.
3
3
  # This product includes software developed at Datadog (https://www.datadoghq.com/).
4
4
  # Copyright 2017 Datadog, Inc.
5
-
5
+ # encoding: utf-8
6
6
  require "logstash/devutils/rspec/spec_helper"
7
7
  require "logstash/outputs/datadog_logs"
8
8
  require 'webmock/rspec'
@@ -90,76 +90,87 @@ describe LogStash::Outputs::DatadogLogs do
90
90
  end
91
91
 
92
92
  context "when facing HTTP connection issues" do
93
- it "should retry when server is returning 5XX" do
94
- api_key = 'XXX'
95
- stub_dd_request_with_return_code(api_key, 500)
96
- payload = '{}'
97
- client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key
98
- expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
99
- end
100
-
101
- it "should not retry when server is returning 4XX" do
102
- api_key = 'XXX'
103
- stub_dd_request_with_return_code(api_key, 400)
104
- payload = '{}'
105
- client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key
106
- expect { client.send(payload) }.to_not raise_error
107
- end
108
-
109
- it "should retry when facing a timeout exception from manticore" do
110
- api_key = 'XXX'
111
- stub_dd_request_with_error(api_key, Manticore::Timeout)
112
- payload = '{}'
113
- client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key
114
- expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
115
- end
116
-
117
- it "should retry when facing a socket exception from manticore" do
118
- api_key = 'XXX'
119
- stub_dd_request_with_error(api_key, Manticore::SocketException)
120
- payload = '{}'
121
- client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key
122
- expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
123
- end
124
-
125
- it "should retry when facing a client protocol exception from manticore" do
126
- api_key = 'XXX'
127
- stub_dd_request_with_error(api_key, Manticore::ClientProtocolException)
128
- payload = '{}'
129
- client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key
130
- expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
131
- end
132
-
133
- it "should retry when facing a dns failure from manticore" do
134
- api_key = 'XXX'
135
- stub_dd_request_with_error(api_key, Manticore::ResolutionFailure)
136
- payload = '{}'
137
- client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key
138
- expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
139
- end
140
-
141
- it "should retry when facing a socket timeout from manticore" do
142
- api_key = 'XXX'
143
- stub_dd_request_with_error(api_key, Manticore::SocketTimeout)
144
- payload = '{}'
145
- client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key
146
- expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
147
- end
148
-
149
- it "should not retry when facing any other general error" do
150
- api_key = 'XXX'
151
- stub_dd_request_with_error(api_key, StandardError)
152
- payload = '{}'
153
- client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key
154
- expect { client.send(payload) }.to raise_error(StandardError)
155
- end
156
-
157
- it "should not stop the forwarder when facing any client uncaught exception" do
158
- api_key = 'XXX'
159
- stub_dd_request_with_error(api_key, StandardError)
160
- payload = '{}'
161
- client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key
162
- expect { client.send_retries(payload, 2, 2) }.to_not raise_error
93
+ http_proxy = ""
94
+ [true, false].each do |force_v1_routes|
95
+ it "should retry when server is returning 5XX " + (force_v1_routes ? "using v1 routes" : "using v2 routes") do
96
+ api_key = 'XXX'
97
+ stub_dd_request_with_return_code(api_key, 500, force_v1_routes)
98
+ payload = '{}'
99
+ client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
100
+ expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
101
+ end
102
+
103
+ it "should not retry when server is returning 4XX" do
104
+ api_key = 'XXX'
105
+ stub_dd_request_with_return_code(api_key, 400, force_v1_routes)
106
+ payload = '{}'
107
+ client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
108
+ expect { client.send(payload) }.to_not raise_error
109
+ end
110
+
111
+ it "should retry when server is returning 429" do
112
+ api_key = 'XXX'
113
+ stub_dd_request_with_return_code(api_key, 429, force_v1_routes)
114
+ payload = '{}'
115
+ client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
116
+ expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
117
+ end
118
+
119
+ it "should retry when facing a timeout exception from manticore" do
120
+ api_key = 'XXX'
121
+ stub_dd_request_with_error(api_key, Manticore::Timeout, force_v1_routes)
122
+ payload = '{}'
123
+ client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
124
+ expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
125
+ end
126
+
127
+ it "should retry when facing a socket exception from manticore" do
128
+ api_key = 'XXX'
129
+ stub_dd_request_with_error(api_key, Manticore::SocketException, force_v1_routes)
130
+ payload = '{}'
131
+ client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
132
+ expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
133
+ end
134
+
135
+ it "should retry when facing a client protocol exception from manticore" do
136
+ api_key = 'XXX'
137
+ stub_dd_request_with_error(api_key, Manticore::ClientProtocolException, force_v1_routes)
138
+ payload = '{}'
139
+ client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
140
+ expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
141
+ end
142
+
143
+ it "should retry when facing a dns failure from manticore" do
144
+ api_key = 'XXX'
145
+ stub_dd_request_with_error(api_key, Manticore::ResolutionFailure, force_v1_routes)
146
+ payload = '{}'
147
+ client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
148
+ expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
149
+ end
150
+
151
+ it "should retry when facing a socket timeout from manticore" do
152
+ api_key = 'XXX'
153
+ stub_dd_request_with_error(api_key, Manticore::SocketTimeout, force_v1_routes)
154
+ payload = '{}'
155
+ client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
156
+ expect { client.send(payload) }.to raise_error(LogStash::Outputs::DatadogLogs::RetryableError)
157
+ end
158
+
159
+ it "should not retry when facing any other general error" do
160
+ api_key = 'XXX'
161
+ stub_dd_request_with_error(api_key, StandardError, force_v1_routes)
162
+ payload = '{}'
163
+ client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
164
+ expect { client.send(payload) }.to raise_error(StandardError)
165
+ end
166
+
167
+ it "should not stop the forwarder when facing any client uncaught exception" do
168
+ api_key = 'XXX'
169
+ stub_dd_request_with_error(api_key, StandardError, force_v1_routes)
170
+ payload = '{}'
171
+ client = LogStash::Outputs::DatadogLogs::DatadogHTTPClient.new Logger.new(STDOUT), false, false, "datadog.com", 80, false, api_key, force_v1_routes, http_proxy
172
+ expect { client.send_retries(payload, 2, 2) }.to_not raise_error
173
+ end
163
174
  end
164
175
  end
165
176
 
@@ -177,24 +188,36 @@ describe LogStash::Outputs::DatadogLogs do
177
188
  end
178
189
  end
179
190
 
180
- def stub_dd_request_with_return_code(api_key, return_code)
181
- stub_dd_request(api_key).
191
+ def stub_dd_request_with_return_code(api_key, return_code, force_v1_routes)
192
+ stub_dd_request(api_key, force_v1_routes).
182
193
  to_return(status: return_code, body: "", headers: {})
183
194
  end
184
195
 
185
- def stub_dd_request_with_error(api_key, error)
186
- stub_dd_request(api_key).
196
+ def stub_dd_request_with_error(api_key, error, force_v1_routes)
197
+ stub_dd_request(api_key, force_v1_routes).
187
198
  to_raise(error)
188
199
  end
189
200
 
190
- def stub_dd_request(api_key)
191
- stub_request(:post, "http://datadog.com/v1/input/#{api_key}").
201
+ def stub_dd_request(api_key, force_v1_routes)
202
+ if force_v1_routes
203
+ stub_request(:post, "http://datadog.com/v1/input/#{api_key}").
204
+ with(
205
+ body: "{}",
206
+ headers: {
207
+ 'Connection' => 'Keep-Alive',
208
+ 'Content-Type' => 'application/json'
209
+ })
210
+ else
211
+ stub_request(:post, "http://datadog.com/api/v2/logs").
192
212
  with(
193
- body: "{}",
194
- headers: {
195
- 'Connection' => 'Keep-Alive',
196
- 'Content-Type' => 'application/json'
197
- })
213
+ body: "{}",
214
+ headers: {
215
+ 'Connection' => 'Keep-Alive',
216
+ 'Content-Type' => 'application/json',
217
+ 'DD-API-KEY' => "#{api_key}",
218
+ 'DD-EVP-ORIGIN' => 'logstash',
219
+ 'DD-EVP-ORIGIN-VERSION' => DatadogLogStashPlugin::VERSION
220
+ })
221
+ end
198
222
  end
199
-
200
- end
223
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-datadog_logs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Datadog
@@ -9,22 +9,28 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-03-13 00:00:00.000000000 Z
12
+ date: 2023-03-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.60'
20
+ - - "<="
18
21
  - !ruby/object:Gem::Version
19
- version: '2.0'
22
+ version: '2.99'
20
23
  name: logstash-core-plugin-api
21
- prerelease: false
22
24
  type: :runtime
25
+ prerelease: false
23
26
  version_requirements: !ruby/object:Gem::Requirement
24
27
  requirements:
25
- - - "~>"
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ version: '1.60'
31
+ - - "<="
26
32
  - !ruby/object:Gem::Version
27
- version: '2.0'
33
+ version: '2.99'
28
34
  - !ruby/object:Gem::Dependency
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
@@ -35,8 +41,8 @@ dependencies:
35
41
  - !ruby/object:Gem::Version
36
42
  version: 1.0.0
37
43
  name: manticore
38
- prerelease: false
39
44
  type: :runtime
45
+ prerelease: false
40
46
  version_requirements: !ruby/object:Gem::Requirement
41
47
  requirements:
42
48
  - - ">="
@@ -52,8 +58,8 @@ dependencies:
52
58
  - !ruby/object:Gem::Version
53
59
  version: '0'
54
60
  name: logstash-codec-json
55
- prerelease: false
56
61
  type: :runtime
62
+ prerelease: false
57
63
  version_requirements: !ruby/object:Gem::Requirement
58
64
  requirements:
59
65
  - - ">="
@@ -66,8 +72,8 @@ dependencies:
66
72
  - !ruby/object:Gem::Version
67
73
  version: '0'
68
74
  name: logstash-devutils
69
- prerelease: false
70
75
  type: :development
76
+ prerelease: false
71
77
  version_requirements: !ruby/object:Gem::Requirement
72
78
  requirements:
73
79
  - - ">="
@@ -80,8 +86,8 @@ dependencies:
80
86
  - !ruby/object:Gem::Version
81
87
  version: '0'
82
88
  name: webmock
83
- prerelease: false
84
89
  type: :development
90
+ prerelease: false
85
91
  version_requirements: !ruby/object:Gem::Requirement
86
92
  requirements:
87
93
  - - ">="
@@ -100,6 +106,7 @@ files:
100
106
  - NOTICE.TXT
101
107
  - README.md
102
108
  - lib/logstash/outputs/datadog_logs.rb
109
+ - lib/logstash/outputs/version.rb
103
110
  - logstash-output-datadog_logs.gemspec
104
111
  - spec/outputs/datadog_logs_spec.rb
105
112
  homepage: https://www.datadoghq.com/
@@ -123,8 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
130
  - !ruby/object:Gem::Version
124
131
  version: '0'
125
132
  requirements: []
126
- rubyforge_project:
127
- rubygems_version: 2.7.10
133
+ rubygems_version: 3.2.29
128
134
  signing_key:
129
135
  specification_version: 4
130
136
  summary: DatadogLogs lets you send logs to Datadog based on LogStash events.