resurfaceio-logger 1.7.14 → 1.8.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 43259eb0b70a63bd2d27ff40915e5046a0296784
4
- data.tar.gz: 011033a042cdc4642b50edfc29148d55ffca0926
3
+ metadata.gz: b3be2e4cca1408ec107b7311ee3719b89ba23bd0
4
+ data.tar.gz: 98406ab661b3dbfb74e3f62b231c288363e444b8
5
5
  SHA512:
6
- metadata.gz: ec22698b4ca603ab73fc1d68d73ccb958a207679f147755a517bdc20f330c1266d719d3807c00696eba4823a858fe97de19c3aeb77808238720832ef7fe4e508
7
- data.tar.gz: 0ffd311454eca86d67b465316116c067b9aa811d2f02bd01b4ee8cdb142f4bd880a9566f98a64b7b7b3adc3fd35d5bfa13c599bcd21bf4196bc6735be56a8f58
6
+ metadata.gz: 90a62d981f55556545de8350709e967206f0c2f706afa7fdf988dfb435219c57d235b6ee212761249ddeb1c19c95de18336c2c0ab2dd1d010e7de0528017b04d
7
+ data.tar.gz: 5f94610eb8077981971636bca25cbe322773a3241fb03b2b6845ab4a84e3db9479535dff239a81dc506cff76d4d1bd525ddea030f46e84d9fabdbc9192391f16
@@ -4,12 +4,15 @@
4
4
  require 'uri'
5
5
  require 'net/http'
6
6
  require 'net/https'
7
+ require 'zlib'
7
8
  require 'resurfaceio/usage_loggers'
8
9
 
9
10
  class BaseLogger
10
11
 
11
- def initialize(agent, options={})
12
+ def initialize(agent, options = {})
12
13
  @agent = agent
14
+ @skip_compression = false
15
+ @skip_submission = false
13
16
  @version = BaseLogger.version_lookup
14
17
 
15
18
  # set options in priority order
@@ -65,8 +68,24 @@ class BaseLogger
65
68
  @enabled && UsageLoggers.enabled?
66
69
  end
67
70
 
71
+ def skip_compression?
72
+ @skip_compression
73
+ end
74
+
75
+ def skip_compression=(value)
76
+ @skip_compression = value
77
+ end
78
+
79
+ def skip_submission?
80
+ @skip_submission
81
+ end
82
+
83
+ def skip_submission=(value)
84
+ @skip_submission = value
85
+ end
86
+
68
87
  def submit(json)
69
- if !enabled?
88
+ if @skip_submission || !enabled?
70
89
  true
71
90
  elsif @queue
72
91
  @queue << json
@@ -77,7 +96,12 @@ class BaseLogger
77
96
  @url_connection ||= Net::HTTP.new(@url_parsed.host, @url_parsed.port)
78
97
  @url_connection.use_ssl = @url.include?('https')
79
98
  request = Net::HTTP::Post.new(@url_parsed.path)
80
- request.body = json
99
+ if @skip_compression
100
+ request.body = json
101
+ else
102
+ request.add_field('Content-Encoding', 'deflated')
103
+ request.body = Zlib::Deflate.deflate(json)
104
+ end
81
105
  response = @url_connection.request(request)
82
106
  response.code.to_i == 204
83
107
  rescue SocketError
@@ -12,27 +12,29 @@ class HttpLogger < BaseLogger
12
12
  super(AGENT, options)
13
13
  end
14
14
 
15
- def format(request, request_body, response, response_body, now=nil)
15
+ def format(request, response, response_body=nil, request_body=nil, now=nil)
16
16
  message = []
17
17
  append_value message, 'request_method', request.request_method
18
18
  append_value message, 'request_url', request.url
19
19
  append_value message, 'response_code', response.status
20
20
  append_request_headers message, request
21
+ append_request_params message, request
21
22
  append_response_headers message, response
22
- append_value message, 'request_body', request_body.nil? ? request.body : request_body
23
- append_value message, 'response_body', response_body.nil? ? response.body : response_body
23
+ append_value message, 'request_body', request_body unless request_body == ''
24
+ final_response_body = response_body.nil? ? response.body : response_body
25
+ append_value message, 'response_body', final_response_body unless final_response_body == ''
24
26
  message << ['agent', @agent]
25
27
  message << ['version', @version]
26
28
  message << ['now', now.nil? ? (Time.now.to_f * 1000).floor.to_s : now]
27
29
  JSON.generate message
28
30
  end
29
31
 
30
- def log(request, request_body, response, response_body)
31
- !enabled? || submit(format(request, request_body, response, response_body))
32
+ def log(request, response, response_body=nil, request_body=nil)
33
+ !enabled? || submit(format(request, response, response_body, request_body))
32
34
  end
33
35
 
34
- def string_content_type?(s)
35
- !s.nil? && s =~ /^(text\/(html|plain|xml))|(application\/(json|soap|xml|x-www-form-urlencoded))/i
36
+ def self.string_content_type?(s)
37
+ !s.nil? && !(s =~ /^(text\/(html|plain|xml))|(application\/(json|soap|xml|x-www-form-urlencoded))/i).nil?
36
38
  end
37
39
 
38
40
  protected
@@ -50,7 +52,23 @@ class HttpLogger < BaseLogger
50
52
  message << ["request_header.#{name[5..-1].downcase.tr('_', '-')}", value]
51
53
  end
52
54
  end
53
- end
55
+ end unless headers.nil?
56
+ end
57
+ end
58
+
59
+ def append_request_params(message, request)
60
+ respond_to_env = request.respond_to?(:env)
61
+ if respond_to_env || request.respond_to?(:form_hash)
62
+ hash = respond_to_env ? request.env['rack.request.form_hash'] : request.form_hash
63
+ hash.each do |name, value|
64
+ append_value message, "request_param.#{name.downcase}", value
65
+ end unless hash.nil?
66
+ end
67
+ if respond_to_env || request.respond_to?(:query_hash)
68
+ hash = respond_to_env ? request.env['rack.request.query_hash'] : request.query_hash
69
+ hash.each do |name, value|
70
+ append_value message, "request_param.#{name.downcase}", value
71
+ end unless hash.nil?
54
72
  end
55
73
  end
56
74
 
@@ -63,7 +81,7 @@ class HttpLogger < BaseLogger
63
81
  found_content_type = true if name =~ /^content-type/
64
82
  message << ["response_header.#{name}", value]
65
83
  end
66
- end
84
+ end unless response.headers.nil?
67
85
  end
68
86
  unless found_content_type || response.content_type.nil?
69
87
  message << ['response_header.content-type', response.content_type]
@@ -79,11 +97,7 @@ class HttpLogger < BaseLogger
79
97
  when String
80
98
  message << [key, value]
81
99
  else
82
- if value.respond_to?(:read)
83
- message << [key, value.read]
84
- else
85
- message << [key, value.to_s]
86
- end
100
+ message << [key, value.to_s]
87
101
  end
88
102
  end
89
103
  end
@@ -11,13 +11,17 @@ class HttpLoggerForRack # http://rack.rubyforge.org/doc/SPEC.html
11
11
  @logger = HttpLogger.new(options)
12
12
  end
13
13
 
14
+ def logger
15
+ @logger
16
+ end
17
+
14
18
  def call(env)
15
19
  status, headers, body = @app.call(env)
16
- if @logger.enabled? && status < 300
20
+ if @logger.enabled? && (status < 300 || status == 302)
17
21
  response = Rack::Response.new(body, status, headers)
18
- if @logger.string_content_type?(response.content_type)
22
+ if HttpLogger::string_content_type?(response.content_type)
19
23
  request = Rack::Request.new(env)
20
- @logger.log(request, nil, response, nil)
24
+ @logger.log(request, response)
21
25
  end
22
26
  end
23
27
  [status, headers, body]
@@ -9,11 +9,17 @@ class HttpLoggerForRails
9
9
  @logger = HttpLogger.new(options)
10
10
  end
11
11
 
12
+ def logger
13
+ @logger
14
+ end
15
+
12
16
  def around(controller)
13
17
  yield
18
+ request = controller.request
14
19
  response = controller.response
15
- if response.status < 300 && @logger.string_content_type?(response.content_type)
16
- @logger.log(controller.request, nil, response, nil)
20
+ status = response.status
21
+ if (status < 300 || status == 302) && HttpLogger::string_content_type?(response.content_type)
22
+ @logger.log(request, response)
17
23
  end
18
24
  end
19
25
 
@@ -4,8 +4,9 @@
4
4
  class HttpRequestImpl
5
5
 
6
6
  def initialize
7
+ @form_hash = Hash.new
7
8
  @headers = Hash.new
8
- @raw_body = nil
9
+ @query_hash = Hash.new
9
10
  end
10
11
 
11
12
  def add_header(key, value)
@@ -19,10 +20,6 @@ class HttpRequestImpl
19
20
  end
20
21
  end
21
22
 
22
- def body
23
- @raw_body ? StringIO.new(@raw_body) : nil
24
- end
25
-
26
23
  def content_type
27
24
  @headers['CONTENT_TYPE']
28
25
  end
@@ -31,11 +28,18 @@ class HttpRequestImpl
31
28
  @headers['CONTENT_TYPE'] = content_type
32
29
  end
33
30
 
31
+ def form_hash
32
+ @form_hash
33
+ end
34
+
34
35
  def headers
35
36
  @headers
36
37
  end
37
38
 
38
- attr_accessor :raw_body
39
+ def query_hash
40
+ @query_hash
41
+ end
42
+
39
43
  attr_accessor :request_method
40
44
  attr_accessor :url
41
45
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resurfaceio-logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.14
4
+ version: 1.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - RobDickinson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-22 00:00:00.000000000 Z
11
+ date: 2017-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler