fluent-plugin-jfrog-metrics 0.2.6 → 0.2.8

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: b93ecb5ecea1f1ab7144d5f1032951346c68427c6f2797a9c1799562ab609835
4
- data.tar.gz: baa93977ee4ee4015fa1779a3d2c7ae4dc442e1084b730d944e5820664a1ff40
3
+ metadata.gz: be1f993ce6a17cbbd55addf9bd1c2c987861373b86d0c9e5bf57fba2391b89c6
4
+ data.tar.gz: 42caf47f85ef0005eae2b35b35c6c4f7cf9c0cb39bd8f8b361cdf282f8e5ea2c
5
5
  SHA512:
6
- metadata.gz: e6fc16c13405a355a325f4bd91e0be810e7b84325fdacb638ffa5403c3a6e1fff3d4914231916378d484725f439903ea0e720f5b62c9d6e1270d5f9c867dd871
7
- data.tar.gz: d50066d93ceec87c01396a5730531d6bc0018fe50c6ba3f63c62832db5db38009c22b0d1d0a8773c959625b0aa46885ab26e21601d3ac0036079c230993b32cf
6
+ metadata.gz: 459aa4c98d67051b19e5c3947277ade652eaaea9fb868bd41ac9ba1d0126bc15247d9b1f4076c21abe526ae74e9e0f68d565578916077ffcf3385717354f7b64
7
+ data.tar.gz: 41008a0e14481e8b1b0a9881ada4559cc4d2edbc13d5af4d43d294b26ebebab58710cd0dfcda55815541b77a129cc68f5fc3b668abcb460a0b8069d0465f5091
data/Gemfile.lock CHANGED
@@ -1,16 +1,16 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fluent-plugin-jfrog-metrics (0.2.6)
4
+ fluent-plugin-jfrog-metrics (0.2.8)
5
5
  fluentd (>= 0.14.10, < 2)
6
- rest-client (~> 2.0)
6
+ rest-client (~> 2.1.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
11
  ansi (1.5.0)
12
12
  builder (3.2.4)
13
- concurrent-ruby (1.1.9)
13
+ concurrent-ruby (1.2.2)
14
14
  cool.io (1.7.1)
15
15
  domain_name (0.5.20190701)
16
16
  unf (>= 0.0.5, < 1.0.0)
data/README.md CHANGED
@@ -93,12 +93,14 @@ Integration is done by setting up Xray. Obtain JPD url and access token for API.
93
93
  - Default value: false
94
94
  - **target_platform** (string) (optional): Output format of target platform allowed values SPLUNK and ELASTIC
95
95
  - Default value: `SPLUNK`
96
+ - **verify_ssl** (true / false) (optional): This flag should be set as false in order to bypass client's ssl certificate verification. When false, sets ssl_opts['verify_ssl'] to OpenSSL::SSL::VERIFY_NONE. Otherwise, sets ssl_opts['verify_ssl'] to OpenSSL::SSL::VERIFY_PEER
97
+ - Default value: true
96
98
 
97
99
  Note:
98
100
 
99
101
  - For Artifactory v7.4 and below only API Key must be used,
100
- - For Artifactory v7.4 to 7.29 either Token or API Key can be used,
101
- - For Artifactory v7.30 and above token only must be used.
102
+ - For Artifactory v7.4 to 7.46 either Token or API Key can be used,
103
+ - For Artifactory v7.47 and above token only must be used.
102
104
 
103
105
  ## Copyright
104
106
 
@@ -3,8 +3,8 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
 
4
4
  Gem::Specification.new do |spec|
5
5
  spec.name = 'fluent-plugin-jfrog-metrics'
6
- spec.version = '0.2.6'
7
- spec.authors = ['MahithaB, VasukiN, giri-vsr']
6
+ spec.version = '0.2.8'
7
+ spec.authors = ['MahithaB, BenHarosh']
8
8
  spec.email = ['cpe-support@jfrog.com']
9
9
 
10
10
  spec.summary = %q{Fluentd Plugin for converting JFrog Artifactory, Xray generated metrics (Prometheus Exposition Format) to target observability platform format (Splunk HEC, New Relic, Elastic)}
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency 'bundler', '~> 1.14'
25
25
  spec.add_development_dependency 'rake', '~> 12.0'
26
26
  spec.add_development_dependency 'test-unit', '~> 3.0'
27
- spec.add_development_dependency "rest-client", "~> 2.0"
27
+ spec.add_development_dependency "rest-client", "~> 2.1.0"
28
28
  spec.add_runtime_dependency 'fluentd', ['>= 0.14.10', '< 2']
29
- spec.add_runtime_dependency "rest-client", "~> 2.0"
29
+ spec.add_runtime_dependency "rest-client", "~> 2.1.0"
30
30
  end
@@ -20,18 +20,12 @@ class DatadogMetricsParser < BaseMetricsParser
20
20
  points = []
21
21
  if interim_data =~ /{/ && interim_data =~ /}/
22
22
  metric_name, additional_dims, metric_val_and_time = interim_data.match(/(.*){(.*)}(.*)/i).captures
23
- if additional_dims =~ /,/
24
- additional_dims.split(/,/).map do |interim_data|
25
- interim_data_value = interim_data.split(/=/)[1].gsub(/"/, '') if interim_data =~ /=/
26
- interim_data_key = interim_data.split(/=/)[0]
27
- interim_data_tag = interim_data_key + ':' + interim_data_value
28
- tags << interim_data_tag
29
- end
30
- else
31
- attribute_name, attribute_value = additional_dims.split('=')
32
- attribute_value = attribute_value.delete_prefix('"').delete_suffix('"')
33
- attribute_tag = attribute_name + ':' + attribute_value
34
- tags << attribute_tag
23
+ additional_dims.split("\",").each do |interim_data|
24
+ pair_data = interim_data.gsub("\"", "").gsub("{", "").gsub("}", "")
25
+ interim_data_value = pair_data.split("=", 2)[1]
26
+ interim_data_key = pair_data.split("=", 2)[0]
27
+ interim_data_tag = interim_data_key + ':' + interim_data_value
28
+ tags << interim_data_tag
35
29
  end
36
30
  if metric_val_and_time =~ / /
37
31
  metrics_hash['metric'] = prefix + separator + metric_name
@@ -42,6 +42,7 @@ module Fluent
42
42
  config_param :metric_prefix, :string, default: ''
43
43
  config_param :target_platform, :string, default: 'SPLUNK'
44
44
  config_param :common_jpd, :bool, default: false
45
+ config_param :verify_ssl, :bool, default: true
45
46
 
46
47
  # `configure` is called before `start`.
47
48
  # 'conf' is a `Hash` that includes the configuration parameters.
@@ -85,8 +86,8 @@ module Fluent
85
86
  end
86
87
 
87
88
  def do_execute
88
- puts('Executing metrics collection')
89
- metrics_helper = MetricsHelper.new(@metric_prefix, @jpd_url, @username, @apikey, @token, @common_jpd)
89
+ puts('Metrics collection started')
90
+ metrics_helper = MetricsHelper.new(@metric_prefix, @jpd_url, @username, @apikey, @token, @common_jpd, @verify_ssl)
90
91
  platform_metrics = metrics_helper.get_metrics
91
92
 
92
93
  additional_metrics = metrics_helper.get_additional_metrics
@@ -95,16 +96,15 @@ module Fluent
95
96
  end
96
97
  if @target_platform == 'SPLUNK'
97
98
  parser = SplunkMetricsParser.new(@metric_prefix, router, @tag)
98
- elsif @target_platform == 'ELASTIC'
99
- parser = ElasticMetricsParser.new(@metric_prefix, router, @tag)
100
99
  elsif @target_platform == 'NEWRELIC'
101
100
  parser = NewRelicMetricsParser.new(@metric_prefix, router, @tag)
102
101
  elsif @target_platform == 'DATADOG'
103
102
  parser = DatadogMetricsParser.new(@metric_prefix, router, @tag)
104
103
  else
105
- raise 'Parser Type is not valid.Should be SPLUNK or ELASTIC or NEWRELIC'
104
+ raise 'Parser Type is not valid.Should be SPLUNK or NEWRELIC or DATADOG'
106
105
  end
107
106
  parser.emit_parsed_metrics(platform_metrics)
107
+ puts('Metrics collection finished')
108
108
  end
109
109
  end
110
110
  end
@@ -5,13 +5,14 @@ require 'rest-client'
5
5
  class MetricsHelper
6
6
  @@obs_endpoint_exists = false
7
7
 
8
- def initialize(metric_prefix, jpd_url, username, apikey, token, common_jpd)
8
+ def initialize(metric_prefix, jpd_url, username, apikey, token, common_jpd, verify_ssl)
9
9
  @metric_prefix = metric_prefix
10
10
  @jpd_url = jpd_url
11
11
  @username = username
12
12
  @apikey = apikey
13
13
  @token = token
14
14
  @common_jpd = common_jpd
15
+ @verify_ssl = verify_ssl
15
16
  end
16
17
 
17
18
  def get_metrics
@@ -24,60 +25,63 @@ class MetricsHelper
24
25
  else
25
26
  "#{@jpd_url}/artifactory/api/v1/metrics"
26
27
  end
28
+
29
+ puts "Executing #{@metric_prefix} metrics collection from: #{url}"
27
30
  if !@token.nil? && @token != ''
28
- execute_rest_call(url, @username, nil, @token, false, true)
31
+ execute_rest_call(url, @username, nil, @token, true, @verify_ssl)
29
32
  elsif !@apikey.nil? && @apikey != ''
30
- execute_rest_call(url, @username, @apikey, nil, false, false)
33
+ execute_rest_call(url, @username, @apikey, nil, false, @verify_ssl)
31
34
  end
32
35
 
33
36
  end
34
37
 
35
38
  def get_additional_metrics
36
39
  if (@metric_prefix == 'jfrog.artifactory' || @common_jpd == false) && !@token.nil? && @token != ''
37
- puts 'Executing additional metrics collection'
38
40
  url = "#{@jpd_url}/observability/api/v1/metrics"
39
- check_endpoint(url, @token) if @@obs_endpoint_exists == nil? || !@@obs_endpoint_exists
40
- execute_rest_call(url, @username, nil, @token, true, true) if @@obs_endpoint_exists
41
+ puts "Executing additional metrics collection from: #{url}"
42
+ check_endpoint(url, @token, @verify_ssl) if @@obs_endpoint_exists == nil? || !@@obs_endpoint_exists
43
+ execute_rest_call(url, @username, nil, @token, true, @verify_ssl) if @@obs_endpoint_exists
41
44
  end
42
45
  end
43
46
 
44
- def check_endpoint(url, token)
47
+ def check_endpoint(url, token, verify_ssl)
45
48
  response = RestClient::Request.new(
46
49
  method: :get,
47
50
  url: url,
48
- headers: { Authorization: "Bearer #{token}" }
51
+ headers: { Authorization: "Bearer #{token}"},
52
+ verify_ssl: verify_ssl
49
53
  ).execute do |response, request, result|
50
54
  @@obs_endpoint_exists = true if response.code == 200
51
55
  puts "#{url} exists? -> #{@@obs_endpoint_exists}, storing the result for next executions"
52
56
  end
53
57
  end
54
58
 
55
- def execute_rest_call(url, user, password, token, ignore_exception, use_token)
59
+ def execute_rest_call(url, user, password, token, use_token, verify_ssl)
56
60
  request = if use_token == true
57
61
  RestClient::Request.new(
58
62
  method: :get,
59
63
  url: url,
60
- headers: { Authorization: "Bearer #{token}" }
64
+ headers: { Authorization: "Bearer #{token}" },
65
+ verify_ssl: verify_ssl
61
66
  )
62
67
  else
63
68
  RestClient::Request.new(
64
69
  method: :get,
65
70
  url: url,
66
71
  user: user,
67
- password: password
72
+ password: password,
73
+ verify_ssl: verify_ssl
68
74
  )
69
75
  end
70
76
 
71
77
  request.execute do |response, request, result|
72
78
  case response.code
73
79
  when 200
80
+ puts "#{@metric_prefix} metrics were successfully collected from url: #{url}"
74
81
  return response.body
75
82
  else
76
- if ignore_exception == true
77
- return ''
78
- else
79
- raise Fluent::ConfigError, 'Cannot fetch #{@metric_prefix} metrics'
80
- end
83
+ puts "Cannot fetch #{@metric_prefix} metrics from url: #{url}. Received response code: #{response.code}, Response body:\n#{response.body}"
84
+ raise Fluent::ConfigError, 'Cannot fetch #{@metric_prefix} metrics'
81
85
  end
82
86
  end
83
87
  end
@@ -13,18 +13,18 @@ class NewRelicMetricsParser < BaseMetricsParser
13
13
  hash_data_array = []
14
14
  data_hash = {}
15
15
  data_array = []
16
+ puts cleaned_data
16
17
  cleaned_data.each do |interim_data|
17
18
  metrics_hash = {}
18
19
  if interim_data =~ /{/ && interim_data =~ /}/
19
20
  attributes = {}
20
21
  metric_name, additional_dims, metric_val_and_time = interim_data.match(/(.*){(.*)}(.*)/i).captures
21
- if additional_dims =~ /,/
22
- additional_dims.split(/,/).map do |interim_data|
23
- attributes[interim_data.split(/=/)[0]] = interim_data.split(/=/)[1].gsub(/"/, '') if interim_data =~ /=/
24
- end
25
- else
26
- attribute_name, attribute_value = additional_dims.split('=')
27
- attributes[attribute_name] = attribute_value.delete_prefix('"').delete_suffix('"')
22
+ additional_dims.split("\",").each do |interim_data|
23
+ puts interim_data
24
+ pair_data = interim_data.gsub("\"", "").gsub("{", "").gsub("}", "")
25
+ interim_data_value = pair_data.split("=", 2)[1]
26
+ interim_data_key = pair_data.split("=", 2)[0]
27
+ attributes[interim_data_key] = interim_data_value
28
28
  end
29
29
  if metric_val_and_time =~ / /
30
30
  metrics_hash['name'] = prefix + separator + metric_name
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-jfrog-metrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
- - MahithaB, VasukiN, giri-vsr
7
+ - MahithaB, BenHarosh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-26 00:00:00.000000000 Z
11
+ date: 2024-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.0'
61
+ version: 2.1.0
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.0'
68
+ version: 2.1.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: fluentd
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -92,14 +92,14 @@ dependencies:
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '2.0'
95
+ version: 2.1.0
96
96
  type: :runtime
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '2.0'
102
+ version: 2.1.0
103
103
  description: Fluentd Plugin for converting JFrog Artifactory, Xray generated metrics
104
104
  (Prometheus Exposition Format) to target observability platform format (Splunk HEC,
105
105
  New Relic, Elastic)
@@ -153,7 +153,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
153
153
  - !ruby/object:Gem::Version
154
154
  version: '0'
155
155
  requirements: []
156
- rubygems_version: 3.1.6
156
+ rubygems_version: 3.5.3
157
157
  signing_key:
158
158
  specification_version: 4
159
159
  summary: Fluentd Plugin for converting JFrog Artifactory, Xray generated metrics (Prometheus