rest-client-jogger 1.1.0 → 1.2.0

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
- SHA1:
3
- metadata.gz: 254a3539166588b4e3714b707f3fc9fe3863eab4
4
- data.tar.gz: 98b917ea8c0f63746d9355332b7c60a9d3e75007
2
+ SHA256:
3
+ metadata.gz: 9a0a62a17950b37627e424ef0c17fc446f51689aae27a1818d28c16f74b3852e
4
+ data.tar.gz: 052a357239835355293654cad1823ba3986b2419169381d8e4e456fd47523967
5
5
  SHA512:
6
- metadata.gz: 1865224976e1177abfde1289937bc1ee0fe55d70978c7952425df09aedfefd2c0d36ef2e858d8049fb3ee0c97734d0fbc41d65929cdddb21ee123eb3fa2d76ff
7
- data.tar.gz: af9bfd166bc96f7dc5fd03a58c38503d6859f2662e5ce9897f39a644a87e74b00348b9f43aefc7f04ba5e2f753c1ba470084b6d824ae285b338b4073ed15b88c
6
+ metadata.gz: 3549ff1e7d43c69b90e8b5b275274aab4e012260a28b77494f9dcb4ec34a13bf64aa7ba78a3e414ac262f17875fbc5acc18fd90d099626c3a987dd0940096e2e
7
+ data.tar.gz: 410ac3b52d87e846006061114c0f78a6e18a03d25998420cc0d80c9c0b007809f242b415ed8a787ebfa452b836c9d4767645463da6dc8685339bd73b378444d3
data/.rspec CHANGED
@@ -1,3 +1,2 @@
1
- --require spec_helper
2
- --format documentation
3
1
  --color
2
+ --require spec_helper
@@ -1,11 +1,13 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.1.2
5
4
  - 2.2.0
6
5
  - 2.2.1
7
6
  - 2.2.2
8
7
  - 2.2.3
9
8
  - 2.3.0
10
9
  - 2.5.1
11
- before_install: gem install bundler -v 1.12.3
10
+ - 2.6.3
11
+ before_install: gem install bundler -v '1.17.3'
12
+ install: bundle _1.17.3_ install
13
+ script: bundle _1.17.3_ exec rake
@@ -30,7 +30,8 @@ module LoggedRequest
30
30
  end
31
31
 
32
32
  def filtered_headers(opts)
33
- opts.fetch(:headers, {}).reject { |k, _| k.to_s.casecmp('authorization').zero? }
33
+ headers = opts.fetch(:headers) { {} }
34
+ RestClient::Jogger::Filters::Headers.new(data: headers).filter
34
35
  end
35
36
 
36
37
  def log_request(opts, started)
@@ -1,4 +1,6 @@
1
+ require 'cgi'
1
2
  require 'json'
3
+ require 'uri'
2
4
  require 'mime/types'
3
5
  require 'active_model'
4
6
  require 'active_support/all'
@@ -11,16 +13,19 @@ require 'rest_client/jogger/action'
11
13
  require 'rest_client/jogger/request'
12
14
  require 'rest_client/jogger/response'
13
15
  require 'rest_client/jogger/filters/base'
16
+ require 'rest_client/jogger/filters/headers'
14
17
  require 'rest_client/jogger/filters/json'
15
18
  require 'rest_client/jogger/filters/xml'
19
+ require 'rest_client/jogger/filters/query_parameters'
16
20
  require 'rest_client/core_ext/logged_request'
17
21
 
18
22
  module RestClient
19
23
  class Request
20
24
  extend LoggedRequest
21
25
  end
22
-
26
+
23
27
  module Jogger
28
+ AGENT_VERSION = "rest-client-jogger:#{VERSION}".freeze
24
29
  ROOT_PATH = File.expand_path(File.dirname(__FILE__)).freeze
25
30
 
26
31
  class << self
@@ -14,19 +14,8 @@ module RestClient
14
14
  end
15
15
 
16
16
  def call(name, start, finish, id, payload)
17
- start_time = payload.fetch(:start_time)
18
- render_params = {
19
- args: payload,
20
- payload: filter(payload),
21
- verify_ssl: payload[:verify_ssl],
22
- read_timeout: payload.fetch(:timeout) { payload[:read_timeout] },
23
- open_timeout: payload.fetch(:timeout) { payload[:open_timeout] },
24
- event_id: id,
25
- timestamp: start,
26
- time_elapsed: (finish - start_time).round(10),
27
- ip_address: ip_address
28
- }
29
- json = template.render nil, render_params
17
+ params = render_params(start, finish, id, payload)
18
+ json = template.render(nil, params)
30
19
  name =~ /error/ ? logger.error(json) : logger.debug(json)
31
20
  rescue StandardError => e
32
21
  notifier.error e, payload: payload
@@ -38,8 +27,27 @@ module RestClient
38
27
 
39
28
  private
40
29
 
30
+ def render_params(start, finish, id, opts)
31
+ start_time = opts.fetch(:start_time)
32
+ url = opts.fetch(:url)
33
+ headers = opts.fetch(:headers) { {} }
34
+ {
35
+ method: opts[:method],
36
+ headers: headers,
37
+ url: RestClient::Jogger::Filters::QueryParameters.new(data: url).filter,
38
+ payload: filter(body: opts[:payload], headers: headers),
39
+ verify_ssl: opts[:verify_ssl],
40
+ read_timeout: opts.fetch(:timeout) { opts[:read_timeout] },
41
+ open_timeout: opts.fetch(:timeout) { opts[:open_timeout] },
42
+ event_id: id,
43
+ timestamp: start,
44
+ time_elapsed: (finish - start_time).round(10),
45
+ ip_address: ip_address
46
+ }
47
+ end
48
+
41
49
  def filter(opts = {})
42
- filter_class(opts[:headers] || {}).new(data: opts[:payload].to_s).filter
50
+ filter_class(opts.fetch(:headers)).new(data: opts[:body].to_s).filter
43
51
  end
44
52
 
45
53
  def filter_class(headers = {})
@@ -43,7 +43,7 @@ module RestClient
43
43
  @content_type ||= RestClient::Jogger.default_content_type
44
44
  end
45
45
 
46
- private
46
+ private
47
47
 
48
48
  def filter_parameters
49
49
  defined?(Rails) ? Rails.configuration.filter_parameters : RestClient::Jogger.filter_parameters
@@ -0,0 +1,32 @@
1
+ module RestClient
2
+ module Jogger
3
+ module Filters
4
+ class Headers < Base
5
+ DEFAULT_FILTERS = %w[authorization].freeze
6
+
7
+ def filter
8
+ filtered_keys = string_filters
9
+ data.each_with_object({}) do |(key, value), memo|
10
+ if filtered_keys.include?(key.to_s.downcase)
11
+ memo[key] = filter_replacement
12
+ else
13
+ memo[key] = value
14
+ end
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def string_filters
21
+ DEFAULT_FILTERS | normalized_filters
22
+ end
23
+
24
+ def normalized_filters
25
+ filters
26
+ .select { |e| e.is_a?(Symbol) || e.is_a?(String) }
27
+ .map { |e| e.to_s.downcase }
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,9 +1,9 @@
1
1
  module RestClient
2
2
  module Jogger
3
3
  module Filters
4
- class Json < RestClient::Jogger::Filters::Base
4
+ class Json < Base
5
5
 
6
- private
6
+ private
7
7
 
8
8
  def filter_data(filter)
9
9
  data.gsub! /"#{filter}":\s*"[^"]*"/, %{"#{filter}": "#{filter_replacement}"}
@@ -0,0 +1,30 @@
1
+ module RestClient
2
+ module Jogger
3
+ module Filters
4
+ class QueryParameters < Base
5
+ def filter
6
+ return uri.to_s if uri.query.blank?
7
+ uri.dup.tap { |u| u.query = parameters }.to_s
8
+ end
9
+
10
+ private
11
+
12
+ def parameters
13
+ CGI.parse(uri.query.to_s).each_with_object([]) do |(key, values), memo|
14
+ values.each do |value|
15
+ memo << "#{key}=#{filtered_value(key, value)}"
16
+ end
17
+ end.join('&')
18
+ end
19
+
20
+ def filtered_value(key, value)
21
+ filters.include?(key.to_sym) ? filter_replacement : value
22
+ end
23
+
24
+ def uri
25
+ @uri ||= URI.parse(data)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,9 +1,9 @@
1
1
  module RestClient
2
2
  module Jogger
3
3
  module Filters
4
- class Xml < RestClient::Jogger::Filters::Base
4
+ class Xml < Base
5
5
 
6
- private
6
+ private
7
7
 
8
8
  def filter_data(filter)
9
9
  data.gsub! /<#{filter}>(.*)<\/#{filter}>/, %{<#{filter}>#{filter_replacement}</#{filter}>}
@@ -2,7 +2,29 @@ module RestClient
2
2
  module Jogger
3
3
  class Response < Action
4
4
  def template
5
- Tilt::JbuilderTemplate.new root.join('templates', 'response_logging_template.json.jbuilder')
5
+ Tilt::JbuilderTemplate.new(root.join('templates', 'response_logging_template.json.jbuilder'))
6
+ end
7
+
8
+ private
9
+
10
+ def render_params(start, finish, id, opts)
11
+ params = response_params(opts)
12
+ super.merge(params)
13
+ end
14
+
15
+ def response_params(opts = {})
16
+ response_headers = opts[:response].try(:headers) || {}
17
+ response_body = opts[:response].try(:body).to_s.force_encoding('UTF-8')
18
+ {
19
+ exception: opts[:exception],
20
+ response_headers: filtered_headers(response_headers),
21
+ response_body: filter(body: response_body, headers: response_headers),
22
+ code: opts[:response].try(:code)
23
+ }
24
+ end
25
+
26
+ def filtered_headers(headers = {})
27
+ Filters::Headers.new(data: headers).filter
6
28
  end
7
29
  end
8
30
  end
@@ -1,5 +1,5 @@
1
1
  module RestClient
2
2
  module Jogger
3
- VERSION = '1.1.0'.freeze
3
+ VERSION = '1.2.0'.freeze
4
4
  end
5
5
  end
@@ -1,13 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
  json.ignore_nil!
3
- json.url args[:url]
4
- json.method args[:method]
3
+ json.url url
4
+ json.method method
5
5
  json.verifySsl verify_ssl
6
- json.requestHeaders args.fetch(:headers, {})
6
+ json.requestHeaders headers
7
7
  json.requestBody payload
8
8
  json.sourceIp ip_address
9
9
  json.eventName RestClient::Jogger.request_pattern
10
10
  json.eventId event_id
11
+ json.eventAgent RestClient::Jogger::AGENT_VERSION
11
12
  json.timeElapsed time_elapsed
12
13
  json.openTimeout open_timeout
13
14
  json.readTimeout read_timeout
@@ -1,18 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
  json.ignore_nil!
3
- json.exception args[:exception]
4
- json.url args[:url]
5
- json.method args[:method]
3
+ json.url url
4
+ json.exception exception
5
+ json.method method
6
6
  json.verifySsl verify_ssl
7
- json.requestHeaders args.fetch(:headers, {})
8
- json.responseHeaders args[:response].try(:headers)
7
+ json.requestHeaders headers
8
+ json.responseHeaders response_headers
9
9
  json.requestBody payload
10
- json.responseBody args[:response].try(:body).to_s.force_encoding('UTF-8')
10
+ json.responseBody response_body
11
11
  json.sourceIp ip_address
12
12
  json.eventName RestClient::Jogger.response_pattern
13
13
  json.eventId event_id
14
+ json.eventAgent RestClient::Jogger::AGENT_VERSION
14
15
  json.timeElapsed time_elapsed
15
16
  json.openTimeout open_timeout
16
17
  json.readTimeout read_timeout
17
- json.code args[:response].try(:code)
18
+ json.code code
18
19
  json.timestamp timestamp.iso8601
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rest-client-jogger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Babe
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2019-02-04 00:00:00.000000000 Z
13
+ date: 2019-08-27 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -263,7 +263,9 @@ files:
263
263
  - lib/rest_client/jogger/configuration.rb
264
264
  - lib/rest_client/jogger/event_subscriber.rb
265
265
  - lib/rest_client/jogger/filters/base.rb
266
+ - lib/rest_client/jogger/filters/headers.rb
266
267
  - lib/rest_client/jogger/filters/json.rb
268
+ - lib/rest_client/jogger/filters/query_parameters.rb
267
269
  - lib/rest_client/jogger/filters/xml.rb
268
270
  - lib/rest_client/jogger/request.rb
269
271
  - lib/rest_client/jogger/response.rb
@@ -291,7 +293,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
291
293
  version: '0'
292
294
  requirements: []
293
295
  rubyforge_project:
294
- rubygems_version: 2.5.1
296
+ rubygems_version: 2.7.6
295
297
  signing_key:
296
298
  specification_version: 4
297
299
  summary: Logs RestClient requests in a JSON format