api_hammer 0.3.3 → 0.4.0

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: 62d257b84cb30c253738ffe4485eac1a378d9443
4
- data.tar.gz: 804dfcd511a7c027f64d72eb62070f4c6698a058
3
+ metadata.gz: 5c7392029cd2bb252222f1f27c3040d6feb8ad6d
4
+ data.tar.gz: e93c54825807dc89e3772fd3221195f56d5aac0e
5
5
  SHA512:
6
- metadata.gz: 587cd1a5b4e437b1871dfbb890b1c333c9d427cd178f5af2dd3ef0b52de6eade49504ba460259eecd57e10ffefb8413bf8917f64f66f0ad82ccfdbdefd7e4493
7
- data.tar.gz: cf1a2c017ff9690c7245626a8609e56c4ec0a4d56cc102285913a7ac6132fa6a2090380cb1129b575175ded4aa7eadc0f61f77d47186f5ee2c4a6b5e86eee262
6
+ metadata.gz: f7f7900b48a6fec0843e12cadd3bed80bf769ac818f806af2aa2f2aad09fb05d8159ec6c2e9e38ff84cda55dacb8e7ec63f6a2d59f96dbb926675063d1771c8a
7
+ data.tar.gz: c6179c9bde78883ad9fa6927b52ad56c2e63af4a9cbbd31aa70b538b0e7136fb3f7ea51b292746876d6cdd67b39ba85c7db832acf4a5faf9a50fc87f13413d5d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ # 0.4.0
2
+ - ApiHammer::Faraday::RequestLogger
3
+
1
4
  # 0.3.3
2
5
  - be a little lazier about initializing ActiveRecord::Base.finder_cache - only on first actual usage
3
6
 
@@ -0,0 +1,89 @@
1
+ require 'faraday'
2
+ require 'rack'
3
+ require 'term/ansicolor'
4
+ require 'json'
5
+
6
+ if Faraday.respond_to?(:register_middleware)
7
+ Faraday.register_middleware(:request, :api_hammer_request_logger => proc { ApiHammer::Faraday::RequestLogger })
8
+ end
9
+ if Faraday::Request.respond_to?(:register_middleware)
10
+ Faraday::Request.register_middleware(:api_hammer_request_logger => proc { ApiHammer::Faraday::RequestLogger })
11
+ end
12
+
13
+ module ApiHammer
14
+ class Faraday
15
+ # Faraday middleware for logging.
16
+ #
17
+ # two lines:
18
+ #
19
+ # - an info line, colored prettily to show a brief summary of the request and response
20
+ # - a debug line of json to record all relevant info. this is a lot of stuff jammed into one line, not
21
+ # pretty, but informative.
22
+ class RequestLogger < ::Faraday::Middleware
23
+ include Term::ANSIColor
24
+
25
+ def initialize(app, logger, options={})
26
+ @app = app
27
+ @logger = logger
28
+ @options = options
29
+ end
30
+
31
+ def call(request_env)
32
+ began_at = Time.now
33
+
34
+ log_tags = Thread.current[:activesupport_tagged_logging_tags]
35
+ saved_log_tags = log_tags.dup if log_tags && log_tags.any?
36
+
37
+ request_body = request_env[:body].dup if request_env[:body]
38
+
39
+ @app.call(request_env).on_complete do |response_env|
40
+ now = Time.now
41
+
42
+ status_color = case response_env.status.to_i
43
+ when 200..299
44
+ :intense_green
45
+ when 400..499
46
+ :intense_yellow
47
+ when 500..599
48
+ :intense_red
49
+ else
50
+ :white
51
+ end
52
+ status_s = bold(send(status_color, response_env.status.to_s))
53
+ data = {
54
+ 'request' => {
55
+ 'method' => request_env[:method],
56
+ 'uri' => request_env[:url].normalize.to_s,
57
+ 'headers' => request_env.request_headers,
58
+ 'body' => request_body,
59
+ }.reject{|k,v| v.nil? },
60
+ 'response' => {
61
+ 'status' => response_env.status,
62
+ 'headers' => response_env.response_headers,
63
+ 'body' => response_env.body,
64
+ }.reject{|k,v| v.nil? },
65
+ 'processing' => {
66
+ 'began_at' => began_at.utc.to_i,
67
+ 'duration' => now - began_at,
68
+ 'activesupport_tagged_logging_tags' => @log_tags,
69
+ }.reject{|k,v| v.nil? },
70
+ }
71
+
72
+ json_data = JSON.dump(data)
73
+ dolog = proc do
74
+ now_s = now.strftime('%Y-%m-%d %H:%M:%S %Z')
75
+ @logger.info "#{bold(intense_magenta('>'))} #{status_s} : #{bold(intense_magenta(request_env[:method].to_s.upcase))} #{intense_magenta(request_env[:url].normalize.to_s)} @ #{intense_magenta(now_s)}"
76
+ @logger.info json_data
77
+ end
78
+
79
+ # reapply log tags from the request if they are not applied
80
+ if @logger.respond_to?(:tagged) && saved_log_tags && Thread.current[:activesupport_tagged_logging_tags] != saved_log_tags
81
+ @logger.tagged(saved_log_tags, &dolog)
82
+ else
83
+ dolog.call
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -108,7 +108,7 @@ module ApiHammer
108
108
  json_data = JSON.dump(data)
109
109
  dolog = proc do
110
110
  now_s = now.strftime('%Y-%m-%d %H:%M:%S %Z')
111
- @logger.info "#{status_s} : #{bold(intense_cyan(request.request_method))} #{intense_cyan(request_uri.normalize)} @ #{intense_magenta(now_s)}"
111
+ @logger.info "#{bold(intense_cyan('<'))} #{status_s} : #{bold(intense_cyan(request.request_method))} #{intense_cyan(request_uri.normalize)} @ #{intense_cyan(now_s)}"
112
112
  @logger.info json_data
113
113
  end
114
114
  # do the logging with tags that applied to the request if appropriate
@@ -1,3 +1,3 @@
1
1
  module ApiHammer
2
- VERSION = "0.3.3"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -0,0 +1,44 @@
1
+ proc { |p| $:.unshift(p) unless $:.any? { |lp| File.expand_path(lp) == p } }.call(File.expand_path('.', File.dirname(__FILE__)))
2
+ require 'helper'
3
+ require 'logger'
4
+ require 'stringio'
5
+ require 'api_hammer/faraday/request_logger'
6
+
7
+ describe ApiHammer::RequestLogger do
8
+ let(:logio) { StringIO.new }
9
+ let(:logger) { Logger.new(logio) }
10
+
11
+ it 'logs' do
12
+ conn = Faraday.new do |f|
13
+ f.use ApiHammer::Faraday::RequestLogger, logger
14
+ f.use Faraday::Adapter::Rack, proc { |env| [200, {}, []] }
15
+ end
16
+ conn.get '/'
17
+ assert_match(/200/, logio.string)
18
+ lines = logio.string.split("\n")
19
+ assert_equal(2, lines.size)
20
+ assert lines.last =~ /INFO -- : /
21
+ json_bit = $'
22
+ JSON.parse json_bit # should not raise
23
+ end
24
+
25
+ {200 => :intense_green, 400 => :intense_yellow, 500 => :intense_red, 300 => :white}.each do |status, color|
26
+ it "colors by #{status} status" do
27
+ conn = Faraday.new do |f|
28
+ f.use ApiHammer::Faraday::RequestLogger, logger
29
+ f.use Faraday::Adapter::Rack, proc { |env| [status, {}, []] }
30
+ end
31
+ conn.get '/'
32
+ assert(logio.string.include?(Term::ANSIColor.send(color, status.to_s)))
33
+ end
34
+ end
35
+
36
+ it 'registers by name' do
37
+ conn = Faraday.new do |f|
38
+ f.request :api_hammer_request_logger, logger
39
+ f.use Faraday::Adapter::Rack, proc { |env| [200, {}, []] }
40
+ end
41
+ conn.get '/'
42
+ assert_match(/200/, logio.string)
43
+ end
44
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_hammer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-19 00:00:00.000000000 Z
11
+ date: 2014-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rack-test
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: minitest
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -226,6 +240,7 @@ files:
226
240
  - lib/api_hammer/active_record_cache_find_by.rb
227
241
  - lib/api_hammer/check_required_params.rb
228
242
  - lib/api_hammer/faraday/outputter.rb
243
+ - lib/api_hammer/faraday/request_logger.rb
229
244
  - lib/api_hammer/halt.rb
230
245
  - lib/api_hammer/public_instance_exec.rb
231
246
  - lib/api_hammer/rails.rb
@@ -241,6 +256,7 @@ files:
241
256
  - lib/api_hammer/weblink.rb
242
257
  - test/active_record_cache_find_by_test.rb
243
258
  - test/check_required_params_test.rb
259
+ - test/faraday_request_logger_test.rb
244
260
  - test/halt_test.rb
245
261
  - test/helper.rb
246
262
  - test/public_instance_exec_test.rb
@@ -275,6 +291,7 @@ summary: an API tool
275
291
  test_files:
276
292
  - test/active_record_cache_find_by_test.rb
277
293
  - test/check_required_params_test.rb
294
+ - test/faraday_request_logger_test.rb
278
295
  - test/halt_test.rb
279
296
  - test/helper.rb
280
297
  - test/public_instance_exec_test.rb