logstash-output-edge_loki 1.0.8 → 1.0.11

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: a5ec89dff9f872d7371462dc0e39118ac9e0fa9d662fa5eecd4e99e9565f29d7
4
- data.tar.gz: b598d411be65be2e16c9ce26d6d954cc63496085b714e66bc6274af6c42ef765
3
+ metadata.gz: 5853b6587938a56259061c3bb90d770d233f3a204efe9867d5d35f761d85fb21
4
+ data.tar.gz: da0b9595f03cd605c6aa28fc66864bcf4375466879636385cef8816491be6494
5
5
  SHA512:
6
- metadata.gz: 8eef5ab0b6d08ab8968575e33cb60b88ecc6b45775df95c7abde04229bcc80577f394a976d4041bdd954772f598b67b94ce9da028c4f4ce32cd67a03bd5739da
7
- data.tar.gz: b7f7529cc7d32de3e6c47a579f5db49595f2671d156660add48091ff4be26a83621ecb1196b3769854d7eae22ade1e0dbf4ad9bbd3008327a9c6fe83b0b6ee9f
6
+ metadata.gz: 7fb2656179619773e32aa46625819b2809c31da737e229033f483d5429d63f585a9b9dffd22a1fcd4daed1971137cc189badaee468c32a83a53f029caffcc99e
7
+ data.tar.gz: 19cb39bc4d5d9e6b79bf2014f3106615ea788e8abdb3d2abb2d90856234a766853ef859bc7ed0934cf2298c5ce8664d93ca2a7cd9d50725de7c56f8aa3cbc442
data/Gemfile CHANGED
File without changes
data/README.md CHANGED
File without changes
@@ -8,6 +8,7 @@ require 'time'
8
8
  require 'uri'
9
9
  require 'json'
10
10
  require 'oauth2'
11
+ require "zlib"
11
12
 
12
13
  class LogStash::Outputs::EDGE_Loki < LogStash::Outputs::Base
13
14
  include Loki
@@ -16,31 +17,34 @@ class LogStash::Outputs::EDGE_Loki < LogStash::Outputs::Base
16
17
  ## 'A single instance of the Output will be shared among the pipeline worker threads'
17
18
  concurrency :single
18
19
 
19
- ## 'Loki Domain'
20
- config :domain, :validate => :string, :required => true
21
-
22
- ## 'Loki Endpoint'
23
- config :endpoint, :validate => :string, :required => true
20
+ ## 'Loki URL'
21
+ config :url, :validate => :string, :required => true
24
22
 
25
23
  ## 'BasicAuth credentials'
26
- config :client_id, :validate => :string, :required => false
27
- config :client_secret, :validate => :string, secret: true, :required => false
24
+ config :client_id, :validate => :string, :required => true
25
+ config :client_secret, :validate => :string, secret: true, :required => true
28
26
 
29
- ## 'Client certificate'
30
- config :cert, :validate => :path, :required => false
31
- config :key, :validate => :path, :required => false
27
+ ## 'Loki Token URL Domain'
28
+ config :tokenurl_domain, :validate => :string, :required => true
32
29
 
33
- ## 'TLS'
34
- config :ca_cert, :validate => :path, :required => false
30
+ ## 'Loki Token URL Endpoint'
31
+ config :tokenurl_endpoint, :validate => :string, :default => "oauth2/v2.0/token", :required => false
32
+
33
+ ## 'Scopes'
34
+ config :scopes, :validate => :string, :required => true
35
+
36
+ ## 'Proxy URL'
37
+ config :proxy_url, :validate => :string, :required => false
35
38
 
36
39
  ## 'Disable server certificate verification'
37
40
  config :insecure_skip_verify, :validate => :boolean, :default => false, :required => false
38
41
 
39
- ## 'Loki Tenant ID'
40
- config :tenant_id, :validate => :string, :required => false
42
+ ## 'Client certificate'
43
+ config :cert, :validate => :path, :required => false
44
+ config :key, :validate => :path, :required => false
41
45
 
42
- ## 'Loki Token URL'
43
- config :token_url, :validate => :string, :required => false
46
+ ## 'TLS'
47
+ config :ca_cert, :validate => :path, :required => false
44
48
 
45
49
  ## 'Maximum batch size to accrue before pushing to loki. Defaults to 102400 bytes'
46
50
  config :batch_size, :validate => :number, :default => 102400, :required => false
@@ -48,6 +52,9 @@ class LogStash::Outputs::EDGE_Loki < LogStash::Outputs::Base
48
52
  ## 'Interval in seconds to wait before pushing a batch of records to loki. Defaults to 1 second'
49
53
  config :batch_wait, :validate => :number, :default => 1, :required => false
50
54
 
55
+ # Set this to true if you want to enable gzip compression for your http requests
56
+ config :http_compression, :validate => :boolean, :default => false
57
+
51
58
  ## 'Log line field to pick from logstash. Defaults to "message"'
52
59
  config :message_field, :validate => :string, :default => "message", :required => false
53
60
 
@@ -97,7 +104,7 @@ class LogStash::Outputs::EDGE_Loki < LogStash::Outputs::Base
97
104
  end
98
105
 
99
106
  def max_batch_size
100
- @logger.info("max_batch_size: started method")
107
+ #@logger.info("max_batch_size: started method")
101
108
  loop do
102
109
  @mutex.synchronize do
103
110
  return if @stop
@@ -108,7 +115,7 @@ class LogStash::Outputs::EDGE_Loki < LogStash::Outputs::Base
108
115
 
109
116
  @mutex.synchronize do
110
117
  if !add_entry_to_batch(e)
111
- @logger.debug("Max batch_size is reached. Sending batch to loki")
118
+ @logger.debug("Max batch_size is reached. Sending batch to edge-loki")
112
119
  send(@batch)
113
120
  @batch = Batch.new(e)
114
121
  end
@@ -183,8 +190,7 @@ class LogStash::Outputs::EDGE_Loki < LogStash::Outputs::Base
183
190
  opts
184
191
  end
185
192
 
186
- # Add an entry to the current batch returns false if the batch is full
187
- # and the entry can't be added.
193
+ # Add an entry to the current batch returns false if the batch is full and the entry can't be added.
188
194
  def add_entry_to_batch(e)
189
195
  line = e.entry['line']
190
196
  # we don't want to send empty lines.
@@ -226,52 +232,68 @@ class LogStash::Outputs::EDGE_Loki < LogStash::Outputs::Base
226
232
  end
227
233
 
228
234
  def send(batch)
229
- @logger.info("send: started method")
230
- token = createClient()
235
+ #@logger.info("send: started method")
231
236
  payload = batch.to_json
232
- res = pensive_http_request(token, payload)
233
- @logger.info("send result: ", res => res)
234
- if res.is_a?(Net::HTTPSuccess)
235
- @logger.debug("Successfully pushed data to loki")
237
+ if @proxy_url == ""
238
+ client = createClient()
236
239
  else
237
- @logger.debug("failed payload", :payload => payload)
240
+ client = createClientwithProxy()
238
241
  end
239
- end
240
-
241
- def send1(batch)
242
- @logger.info("send: started method")
243
- token = createClient()
244
- payload = batch.to_json
245
- res = loki_http_request(token, payload)
246
- if res.is_a?(Net::HTTPSuccess)
247
- @logger.debug("Successfully pushed data to loki")
242
+ access = getToken(client)
243
+ res = edge_http_request(access, payload)
244
+ if res == "200"
245
+ cntLines = JSON.parse(payload)["streams"][0]["values"].size
246
+ @logger.info("Successfully pushed data to edge_loki")
247
+ @logger.info("Sent #{cntLines} lines to edge-loki")
248
248
  else
249
- @logger.debug("failed payload", :payload => payload)
249
+ @logger.debug("failed payload", :payload => JSON.parse(payload)["streams"][0]["values"])
250
250
  end
251
251
  end
252
252
 
253
- def loki_http_request(token, payload)
254
- @logger.info("loki_http_request: started method")
255
- req = Net::HTTP::Post.new(
256
- @uri.request_uri
257
- )
258
-
259
- req.add_field('Content-Type', 'application/json')
260
- req.add_field('X-Scope-OrgID', @tenant_id) if @tenant_id
261
- req['User-Agent']= 'loki-logstash'
262
- req.basic_auth(@client_id, @client_secret) if @client_id
263
- req.body = payload
264
-
265
- opts = ssl_opts(@uri)
266
-
267
- @logger.debug("sending #{req.body.length} bytes to loki")
253
+ def createClient()
254
+ #@logger.info("createClient: started method")
255
+ client = OAuth2::Client.new(@client_id, @client_secret, auth_scheme: "basic_auth", site: @tokenurl_domain,:token_url => @tokenurl_endpoint)
256
+ return client
257
+ end
258
+
259
+ def createClientwithProxy()
260
+ #@logger.info("createClient: started method")
261
+ conn_opts = {}
262
+ conn_opts = conn_opts.merge('ssl' => {verify: false})
263
+ conn_opts = conn_opts.merge('proxy' => @proxy_url)
264
+ client = OAuth2::Client.new(@client_id, @client_secret, auth_scheme: "basic_auth", site: @tokenurl_domain,:token_url => @tokenurl_endpoint, :connection_opts => conn_opts)
265
+ return client
266
+ end
267
+
268
+ def getToken(client)
269
+ params = {}
270
+ opts = {}
271
+ params = params.merge('scope' => @scopes)
272
+ access = client.client_credentials.get_token(params, opts)
273
+ return access
274
+ end
275
+
276
+ def edge_http_request(token, payload)
277
+ #@logger.info("edge_http_request: started method")
278
+ headers = {}
279
+ cntLines = JSON.parse(payload)["streams"][0]["values"].size
280
+ @logger.info("processing #{cntLines} lines to edge-loki")
268
281
  retry_count = 0
269
282
  delay = @min_delay
270
283
  begin
271
- res = Net::HTTP.start(@uri.host, @uri.port, **opts) { |http|
272
- http.request(req)
273
- }
274
- return res if !res.nil? && res.code.to_i != 429 && res.code.to_i.div(100) != 5
284
+ puts payload
285
+ headers["Content-Type"] = "application/json"
286
+ # Compress the payload and add appropriate header
287
+ if @http_compression == true
288
+ headers["Content-Encoding"] = "gzip"
289
+ payload1 = payload
290
+ payload = gzip(payload1)
291
+ end
292
+ puts payload
293
+ res = token.post(@uri, {:body => payload, :headers => headers})
294
+ status_code = "#{res.status}"
295
+ return status_code if !status_code.nil? && status_code.to_i != 429 && status_code.to_i.div(100) != 5
296
+ return res
275
297
  raise StandardError.new res
276
298
  rescue StandardError => e
277
299
  retry_count += 1
@@ -291,21 +313,14 @@ class LogStash::Outputs::EDGE_Loki < LogStash::Outputs::Base
291
313
  end
292
314
  end
293
315
 
294
- def createClient
295
- @logger.info("createClient: started method")
296
- client = OAuth2::Client.new(@client_id, @client_secret, site: @domain + @endpoint)
297
- client.auth_code.authorize_url(redirect_uri: @token_url)
298
- token = client.auth_code.get_token(code, :redirect_uri => @token_url)
299
- @logger.info("createClient: started method", :client => client)
300
- return token
301
- end
302
-
303
- def pensive_http_request(token, payload)
304
- @logger.info("pensive_http_request: started method")
305
- response = token.get(@endpoint, :headers => { 'Accept' => 'application/json', 'X-Scope-OrgID', @tenant_id }, :params => { page: 1 })
306
- hash = JSON.parse(response.body)
307
- @logger.info("pensive_http_request: ", :token_output => hash)
308
- return hash
316
+ # gzip data
317
+ def gzip(data)
318
+ gz = StringIO.new
319
+ gz.set_encoding("BINARY")
320
+ z = Zlib::GzipWriter.new(gz)
321
+ z.write(data)
322
+ z.close
323
+ gz.string
309
324
  end
310
- end
311
325
 
326
+ end
@@ -0,0 +1,303 @@
1
+ # encoding: utf-8
2
+ require "logstash/outputs/base"
3
+ require "logstash/outputs/loki/entry"
4
+ require "logstash/outputs/loki/batch"
5
+ require "logstash/namespace"
6
+ require 'net/http'
7
+ require 'time'
8
+ require 'uri'
9
+ require 'json'
10
+ require 'oauth2'
11
+
12
+ class LogStash::Outputs::EDGE_Loki < LogStash::Outputs::Base
13
+ include Loki
14
+ config_name "edge_loki"
15
+
16
+ ## 'A single instance of the Output will be shared among the pipeline worker threads'
17
+ concurrency :single
18
+
19
+ ## 'Loki URL'
20
+ config :url, :validate => :string, :required => true
21
+
22
+ ## 'BasicAuth credentials'
23
+ config :client_id, :validate => :string, :required => true
24
+ config :client_secret, :validate => :string, secret: true, :required => true
25
+
26
+ ## 'Loki Token URL Domain'
27
+ config :tokenurl_domain, :validate => :string, :required => true
28
+
29
+ ## 'Loki Token URL Endpoint'
30
+ config :tokenurl_endpoint, :validate => :string, :default => "oauth2/v2.0/token", :required => false
31
+
32
+ ## 'Scopes'
33
+ config :scopes, :validate => :string, :required => true
34
+
35
+ ## 'Proxy URL'
36
+ config :proxy_url, :validate => :string, :required => false
37
+
38
+ ## 'Disable server certificate verification'
39
+ config :insecure_skip_verify, :validate => :boolean, :default => false, :required => false
40
+
41
+ ## 'Client certificate'
42
+ config :cert, :validate => :path, :required => false
43
+ config :key, :validate => :path, :required => false
44
+
45
+ ## 'TLS'
46
+ config :ca_cert, :validate => :path, :required => false
47
+
48
+ ## 'Maximum batch size to accrue before pushing to loki. Defaults to 102400 bytes'
49
+ config :batch_size, :validate => :number, :default => 102400, :required => false
50
+
51
+ ## 'Interval in seconds to wait before pushing a batch of records to loki. Defaults to 1 second'
52
+ config :batch_wait, :validate => :number, :default => 1, :required => false
53
+
54
+ ## 'Log line field to pick from logstash. Defaults to "message"'
55
+ config :message_field, :validate => :string, :default => "message", :required => false
56
+
57
+ ## 'Backoff configuration. Initial backoff time between retries. Default 1s'
58
+ config :min_delay, :validate => :number, :default => 1, :required => false
59
+
60
+ ## 'An array of fields to map to labels, if defined only fields in this list will be mapped.'
61
+ config :include_fields, :validate => :array, :default => [], :required => false
62
+
63
+ ## 'Backoff configuration. Maximum backoff time between retries. Default 300s'
64
+ config :max_delay, :validate => :number, :default => 300, :required => false
65
+
66
+ ## 'Backoff configuration. Maximum number of retries to do'
67
+ config :retries, :validate => :number, :default => 10, :required => false
68
+
69
+ attr_reader :batch
70
+ public
71
+ def register
72
+ @uri = URI.parse(@url)
73
+ unless @uri.is_a?(URI::HTTP) || @uri.is_a?(URI::HTTPS)
74
+ raise LogStash::ConfigurationError, "url parameter must be valid HTTP, currently '#{@url}'"
75
+ end
76
+
77
+ if @min_delay > @max_delay
78
+ raise LogStash::ConfigurationError, "Min delay should be less than Max delay, currently 'Min delay is #{@min_delay} and Max delay is #{@max_delay}'"
79
+ end
80
+
81
+ @logger.info("Loki output plugin", :class => self.class.name)
82
+
83
+ # initialize Queue and Mutex
84
+ @entries = Queue.new
85
+ @mutex = Mutex.new
86
+ @stop = false
87
+
88
+ # create nil batch object.
89
+ @batch = nil
90
+
91
+ # validate certs
92
+ if ssl_cert?
93
+ load_ssl
94
+ validate_ssl_key
95
+ end
96
+
97
+ # start batch_max_wait and batch_max_size threads
98
+ @batch_wait_thread = Thread.new{max_batch_wait()}
99
+ @batch_size_thread = Thread.new{max_batch_size()}
100
+ end
101
+
102
+ def max_batch_size
103
+ #@logger.info("max_batch_size: started method")
104
+ loop do
105
+ @mutex.synchronize do
106
+ return if @stop
107
+ end
108
+
109
+ e = @entries.deq
110
+ return if e.nil?
111
+
112
+ @mutex.synchronize do
113
+ if !add_entry_to_batch(e)
114
+ @logger.debug("Max batch_size is reached. Sending batch to edge-loki")
115
+ send(@batch)
116
+ @batch = Batch.new(e)
117
+ end
118
+ end
119
+ end
120
+ end
121
+
122
+ def max_batch_wait
123
+ # minimum wait frequency is 10 milliseconds
124
+ min_wait_checkfrequency = 1/100
125
+ max_wait_checkfrequency = @batch_wait
126
+ if max_wait_checkfrequency < min_wait_checkfrequency
127
+ max_wait_checkfrequency = min_wait_checkfrequency
128
+ end
129
+
130
+ loop do
131
+ @mutex.synchronize do
132
+ return if @stop
133
+ end
134
+
135
+ sleep(max_wait_checkfrequency)
136
+ if is_batch_expired
137
+ @mutex.synchronize do
138
+ @logger.debug("Max batch_wait time is reached. Sending batch to loki")
139
+ send(@batch)
140
+ @batch = nil
141
+ end
142
+ end
143
+ end
144
+ end
145
+
146
+ def ssl_cert?
147
+ !@key.nil? && !@cert.nil?
148
+ end
149
+
150
+ def load_ssl
151
+ @cert = OpenSSL::X509::Certificate.new(File.read(@cert)) if @cert
152
+ @key = OpenSSL::PKey.read(File.read(@key)) if @key
153
+ end
154
+
155
+ def validate_ssl_key
156
+ if !@key.is_a?(OpenSSL::PKey::RSA) && !@key.is_a?(OpenSSL::PKey::DSA)
157
+ raise LogStash::ConfigurationError, "Unsupported private key type '#{@key.class}''"
158
+ end
159
+ end
160
+
161
+ def ssl_opts(uri)
162
+ opts = {
163
+ use_ssl: uri.scheme == 'https'
164
+ }
165
+
166
+ # disable server certificate verification
167
+ if @insecure_skip_verify
168
+ opts = opts.merge(
169
+ verify_mode: OpenSSL::SSL::VERIFY_NONE
170
+ )
171
+ end
172
+
173
+ if !@cert.nil? && !@key.nil?
174
+ opts = opts.merge(
175
+ verify_mode: OpenSSL::SSL::VERIFY_PEER,
176
+ cert: @cert,
177
+ key: @key
178
+ )
179
+ end
180
+
181
+ unless @ca_cert.nil?
182
+ opts = opts.merge(
183
+ ca_file: @ca_cert
184
+ )
185
+ end
186
+ opts
187
+ end
188
+
189
+ # Add an entry to the current batch returns false if the batch is full and the entry can't be added.
190
+ def add_entry_to_batch(e)
191
+ line = e.entry['line']
192
+ # we don't want to send empty lines.
193
+ return true if line.to_s.strip.empty?
194
+
195
+ if @batch.nil?
196
+ @batch = Batch.new(e)
197
+ return true
198
+ end
199
+
200
+ if @batch.size_bytes_after(line) > @batch_size
201
+ return false
202
+ end
203
+ @batch.add(e)
204
+ return true
205
+ end
206
+
207
+ def is_batch_expired
208
+ return !@batch.nil? && @batch.age() >= @batch_wait
209
+ end
210
+
211
+ ## Receives logstash events
212
+ public
213
+ def receive(event)
214
+ @entries << Entry.new(event, @message_field, @include_fields)
215
+ end
216
+
217
+ def close
218
+ @entries.close
219
+ @mutex.synchronize do
220
+ @stop = true
221
+ end
222
+ @batch_wait_thread.join
223
+ @batch_size_thread.join
224
+
225
+ # if by any chance we still have a forming batch, we need to send it.
226
+ send(@batch) if !@batch.nil?
227
+ @batch = nil
228
+ end
229
+
230
+ def send(batch)
231
+ #@logger.info("send: started method")
232
+ payload = batch.to_json
233
+ if @proxy_url == ""
234
+ client = createClient()
235
+ else
236
+ client = createClientwithProxy()
237
+ end
238
+ access = getToken(client)
239
+ res = edge_http_request(access, payload)
240
+ if res == "200"
241
+ cntLines = JSON.parse(payload)["streams"][0]["values"].size
242
+ @logger.info("Successfully pushed data to edge_loki")
243
+ @logger.info("Sent #{cntLines} lines to edge-loki")
244
+ else
245
+ @logger.debug("failed payload", :payload => JSON.parse(payload)["streams"][0]["values"])
246
+ end
247
+ end
248
+
249
+ def createClient()
250
+ #@logger.info("createClient: started method")
251
+ client = OAuth2::Client.new(@client_id, @client_secret, auth_scheme: "basic_auth", site: @tokenurl_domain,:token_url => @tokenurl_endpoint)
252
+ return client
253
+ end
254
+
255
+ def createClientwithProxy()
256
+ #@logger.info("createClient: started method")
257
+ conn_opts = {}
258
+ conn_opts = conn_opts.merge('ssl' => {verify: false})
259
+ conn_opts = conn_opts.merge('proxy' => @proxy_url)
260
+ client = OAuth2::Client.new(@client_id, @client_secret, auth_scheme: "basic_auth", site: @tokenurl_domain,:token_url => @tokenurl_endpoint, :connection_opts => conn_opts)
261
+ return client
262
+ end
263
+
264
+ def getToken(client)
265
+ params = {}
266
+ opts = {}
267
+ params = params.merge('scope' => @scopes)
268
+ access = client.client_credentials.get_token(params, opts)
269
+ return access
270
+ end
271
+
272
+ def edge_http_request(token, payload)
273
+ #@logger.info("edge_http_request: started method")
274
+ cntLines = JSON.parse(payload)["streams"][0]["values"].size
275
+ @logger.info("processing #{cntLines} lines to edge-loki")
276
+ retry_count = 0
277
+ delay = @min_delay
278
+ begin
279
+ puts payload
280
+ res = token.post(@uri, {:body => payload, :headers => {'Content-Type' => 'application/json'}})
281
+ status_code = "#{res.status}"
282
+ return status_code if !status_code.nil? && status_code.to_i != 429 && status_code.to_i.div(100) != 5
283
+ return res
284
+ raise StandardError.new res
285
+ rescue StandardError => e
286
+ retry_count += 1
287
+ @logger.warn("Failed to send batch, attempt: #{retry_count}/#{@retries}", :error_inspect => e.inspect, :error => e)
288
+ if retry_count < @retries
289
+ sleep delay
290
+ if delay * 2 <= @max_delay
291
+ delay = delay * 2
292
+ else
293
+ delay = @max_delay
294
+ end
295
+ retry
296
+ else
297
+ @logger.error("Failed to send batch", :error_inspect => e.inspect, :error => e)
298
+ return res
299
+ end
300
+ end
301
+ end
302
+
303
+ end
File without changes
File without changes
@@ -1,11 +1,11 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-edge_loki'
3
- s.version = '1.0.8'
3
+ s.version = '1.0.11'
4
4
  s.authors = ['Britto Prabhu']
5
5
  s.email = ['britto.prabhu@apmterminals.com']
6
6
 
7
- s.summary = 'Output plugin to ship logs to Pensive Loki server'
8
- s.description = 'Output plugin to ship logs to Pensive Loki server'
7
+ s.summary = 'Output plugin to ship logs to Loki server with oAuth2'
8
+ s.description = 'Output plugin to ship logs to Loki server with oAuth2'
9
9
  s.homepage = 'https://github.com/Maersk-Global/apmt-observability-deployment'
10
10
  s.license = 'Apache-2.0'
11
11
  s.require_paths = ["lib"]
File without changes
File without changes
metadata CHANGED
@@ -1,30 +1,31 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-edge_loki
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Britto Prabhu
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-04 00:00:00.000000000 Z
11
+ date: 2024-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
+ name: oauth2
14
15
  requirement: !ruby/object:Gem::Requirement
15
16
  requirements:
16
17
  - - "~>"
17
18
  - !ruby/object:Gem::Version
18
19
  version: 2.0.9
19
- name: oauth2
20
- prerelease: false
21
20
  type: :runtime
21
+ prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.0.9
27
27
  - !ruby/object:Gem::Dependency
28
+ name: logstash-core-plugin-api
28
29
  requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
30
31
  - - ">="
@@ -33,9 +34,8 @@ dependencies:
33
34
  - - "<="
34
35
  - !ruby/object:Gem::Version
35
36
  version: '2.99'
36
- name: logstash-core-plugin-api
37
- prerelease: false
38
37
  type: :runtime
38
+ prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - ">="
@@ -45,34 +45,34 @@ dependencies:
45
45
  - !ruby/object:Gem::Version
46
46
  version: '2.99'
47
47
  - !ruby/object:Gem::Dependency
48
+ name: logstash-codec-plain
48
49
  requirement: !ruby/object:Gem::Requirement
49
50
  requirements:
50
51
  - - '='
51
52
  - !ruby/object:Gem::Version
52
53
  version: 3.1.0
53
- name: logstash-codec-plain
54
- prerelease: false
55
54
  type: :runtime
55
+ prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - '='
59
59
  - !ruby/object:Gem::Version
60
60
  version: 3.1.0
61
61
  - !ruby/object:Gem::Dependency
62
+ name: logstash-devutils
62
63
  requirement: !ruby/object:Gem::Requirement
63
64
  requirements:
64
65
  - - '='
65
66
  - !ruby/object:Gem::Version
66
67
  version: 2.0.2
67
- name: logstash-devutils
68
- prerelease: false
69
68
  type: :development
69
+ prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - '='
73
73
  - !ruby/object:Gem::Version
74
74
  version: 2.0.2
75
- description: Output plugin to ship logs to Pensive Loki server
75
+ description: Output plugin to ship logs to Loki server with oAuth2
76
76
  email:
77
77
  - britto.prabhu@apmterminals.com
78
78
  executables: []
@@ -82,6 +82,7 @@ files:
82
82
  - Gemfile
83
83
  - README.md
84
84
  - lib/logstash/outputs/edge_loki.rb
85
+ - lib/logstash/outputs/edge_loki_20240722.rb
85
86
  - lib/logstash/outputs/loki/batch.rb
86
87
  - lib/logstash/outputs/loki/entry.rb
87
88
  - logstash-output-edge_loki.gemspec
@@ -93,7 +94,7 @@ licenses:
93
94
  metadata:
94
95
  logstash_plugin: 'true'
95
96
  logstash_group: output
96
- post_install_message:
97
+ post_install_message:
97
98
  rdoc_options: []
98
99
  require_paths:
99
100
  - lib
@@ -108,10 +109,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
109
  - !ruby/object:Gem::Version
109
110
  version: '0'
110
111
  requirements: []
111
- rubygems_version: 3.2.33
112
- signing_key:
112
+ rubygems_version: 3.0.3.1
113
+ signing_key:
113
114
  specification_version: 4
114
- summary: Output plugin to ship logs to Pensive Loki server
115
+ summary: Output plugin to ship logs to Loki server with oAuth2
115
116
  test_files:
116
117
  - spec/outputs/loki/entry_spec.rb
117
118
  - spec/outputs/loki_spec.rb