logstash-output-datadog_logs 0.4.1 → 0.5.1

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 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.