logstash-filter-kafka_time_machine 3.0.0 → 3.0.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: f8ebc093ec36312aa92be6f7b158cd840021cad43bc1cacda8a8e9b816c9f2cf
4
- data.tar.gz: 821bbb0f5b29ba23c4e650366da3eeb0ebaa94b6f55eb49f33d2b05c13571fbb
3
+ metadata.gz: 61eed3c10584ae85f6fed99b68b4a217e628d37a61471cf6d36fe3a1abcbf74d
4
+ data.tar.gz: 9e73985ed0bc52b621c9fc68539c8eac0bc9f6fadfa66f429ec8011d86c67891
5
5
  SHA512:
6
- metadata.gz: 8c341477b352621f6eb708b63637b1caa1f39aeb9c9e2e399ec2d28c8c8aeb96e813cdbaa0f2f409811f75bb42fdc03cf741ac9acd22c861ff1727f49f523c78
7
- data.tar.gz: bca9c8ef6a474f761403e298ad9e494316a50b109e3aa666e85390db556dc749b732eee30a4399a430c4d81854fe1561b8c13f47fe97c0eabd44bac38e1a0776
6
+ metadata.gz: b8e9551aa515878242d9528048ba731e6a1c59bc4bbadffd6f916a736685dd6749cdeed9cad1b55498eb1519366e8c07acf7eeb2e74ccf2f71686fa08835c456
7
+ data.tar.gz: 332d6d9f0756db77f0176337a370430cb622e6968e20f470727cd3d6f9979509b54472f398701b500651f0f6f30dcdeb4e0ff54db65d34c0c687c76fc661b307
@@ -49,7 +49,7 @@ class LogStash::Filters::KafkaTimeMachine < LogStash::Filters::Base
49
49
 
50
50
  public
51
51
  def register
52
-
52
+
53
53
  end
54
54
 
55
55
  public
@@ -57,7 +57,7 @@ class LogStash::Filters::KafkaTimeMachine < LogStash::Filters::Base
57
57
 
58
58
  @logger.debug("Starting filter calculations")
59
59
 
60
- # Note - It was considered to error check for strings that are invalid, i.e. "%{[@metadata][ktm][kafka_datacenter_shipper]}". However, this string being present is a good way to identify
60
+ # Note - It was considered to error check for strings that are invalid, i.e. "%{[@metadata][ktm][kafka_datacenter_shipper]}". However, this string being present is a good way to identify
61
61
  # shipper/indexer logstash configs that are wrong so its allowed to pass through unaltered.
62
62
  #
63
63
  # Extract all string values to local variables.
@@ -78,7 +78,7 @@ class LogStash::Filters::KafkaTimeMachine < LogStash::Filters::Base
78
78
  shipper_logstash_kafka_read_time = get_numeric(event.sprintf(@logstash_kafka_read_time_shipper))
79
79
  indexer_kafka_append_time = get_numeric(event.sprintf(@kafka_append_time_indexer))
80
80
  indexer_logstash_kafka_read_time = get_numeric(event.sprintf(@logstash_kafka_read_time_indexer))
81
-
81
+
82
82
  # Validate the shipper data
83
83
  shipper_kafka_array = Array[shipper_kafka_datacenter, shipper_kafka_topic, shipper_kafka_consumer_group, shipper_kafka_append_time, shipper_logstash_kafka_read_time, event_owner, event_time_ms, elasticsearch_cluster, elasticsearch_cluster_index]
84
84
  if (shipper_kafka_array.any? { |text| text.nil? || text.to_s.empty? })
@@ -109,10 +109,18 @@ class LogStash::Filters::KafkaTimeMachine < LogStash::Filters::Base
109
109
  indexer_kafka_lag_ms = indexer_logstash_kafka_read_time - indexer_kafka_append_time
110
110
  end
111
111
 
112
- # Add in the size of the payload field
113
- payload_size_bytes = 0
112
+ # Add in the size of the payload field if it exist
114
113
  if event.get("[payload]")
115
- payload_size_bytes = event.get("[payload]").bytesize
114
+ # pipeline gets random poison pill that crashes KTM with error: "error=>"(NoMethodError) undefined method `bytesize' for #Hash:0x38fe76d4", :exception=>Java::OrgJrubyExceptions::NoMethodError"
115
+ # This should prevent the crash and log the error
116
+ begin
117
+ payload_size_bytes = event.get("[payload]").bytesize
118
+ rescue NoMethodError => e
119
+ payload_size_bytes = 0
120
+ @logger.fatal("payload bytesize operation failed: #{e.message}")
121
+ end
122
+ else
123
+ payload_size_bytes = 0
116
124
  end
117
125
 
118
126
  # Set time (nanoseconds) for event that is generated
@@ -152,7 +160,7 @@ class LogStash::Filters::KafkaTimeMachine < LogStash::Filters::Base
152
160
 
153
161
  error_string = sprintf("Error kafka_time_machine: Could not build valid response --> %s, %s", error_string_shipper, error_string_indexer)
154
162
  @logger.debug(error_string)
155
-
163
+
156
164
  else
157
165
 
158
166
  point_ktm = create_point_ktm_error(shipper_kafka_datacenter, event_owner, epoch_time_ns, "unknown", elasticsearch_cluster, elasticsearch_cluster_index)
@@ -165,14 +173,14 @@ class LogStash::Filters::KafkaTimeMachine < LogStash::Filters::Base
165
173
 
166
174
  # Publish even event in our array
167
175
  ktm_metric_event_array.each do |metric_event|
168
-
176
+
169
177
  # Create new event for KTM metric
170
178
  event_ktm = LogStash::Event.new(metric_event)
171
179
  event_ktm.set("[@metadata][ktm_tags][ktm_metric]", "true")
172
180
 
173
181
  filter_matched(event_ktm)
174
182
  yield event_ktm
175
-
183
+
176
184
  end
177
185
 
178
186
  end # def filter
@@ -180,7 +188,7 @@ class LogStash::Filters::KafkaTimeMachine < LogStash::Filters::Base
180
188
  # Creates hash with ktm data point to return
181
189
  public
182
190
  def create_point_ktm(datacenter, event_owner, payload_size_bytes, lag_type, lag_ms, epoch_time_ns, elasticsearch_cluster, elasticsearch_cluster_index)
183
-
191
+
184
192
  point = Hash.new
185
193
 
186
194
  # Name of point and time created
@@ -225,33 +233,33 @@ class LogStash::Filters::KafkaTimeMachine < LogStash::Filters::Base
225
233
  # Name of point and time created
226
234
  point["name"] = "ktm_error"
227
235
  point["epoch_time_ns"] = epoch_time_ns
228
-
236
+
229
237
  # tags
230
238
  point["datacenter"] = datacenter
231
239
  point["owner"] = event_owner
232
240
  point["source"] = type
233
241
  point["es_cluster"] = elasticsearch_cluster
234
242
  point["es_cluster_index"] = elasticsearch_cluster_index
235
-
243
+
236
244
  # fields
237
245
  point["count"] = 1
238
-
246
+
239
247
  return point
240
248
 
241
249
  end # def create_point_ktm_error
242
250
 
243
251
  # Ensures the provided value is numeric; if not returns 'nil'
244
252
  public
245
- def get_numeric(input_str)
253
+ def get_numeric(input_str)
246
254
 
247
255
  # @logger.debug("Aggregate timeout for '#{@task_id}' pattern: #{@timeout} seconds")
248
256
  @logger.debug("get_numeric operating on: #{input_str} ")
249
-
257
+
250
258
  is_numeric = input_str.to_s.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? false : true
251
259
  if (true == is_numeric)
252
260
  @logger.debug("get_numeric - valid value provided")
253
261
  num_value = Float(sprintf(input_str))
254
-
262
+
255
263
  if (false == num_value.positive?)
256
264
  @logger.debug("get_numeric - negative value provided")
257
265
  num_value = nil
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-filter-kafka_time_machine'
3
- s.version = '3.0.0'
3
+ s.version = '3.0.1'
4
4
  s.licenses = ['Apache-2.0']
5
5
  s.summary = "Calculate total time of logstash event that traversed 2 Kafka queues from a shipper site to an indexer site"
6
6
  s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
 
12
12
  # Files
13
13
  s.files = Dir['lib/**/*','spec/**/*','vendor/**/*','*.gemspec','*.md','CONTRIBUTORS','Gemfile','LICENSE','NOTICE.TXT']
14
-
14
+
15
15
  # Tests
16
16
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
17
17
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-kafka_time_machine
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Foster
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-11-10 00:00:00.000000000 Z
11
+ date: 2024-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-core-plugin-api