sapience 2.8 → 2.9.1

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: 024b1f87a65b6939586988761c7efb9cddb9a283
4
- data.tar.gz: 5e5e3643ce29f0d069a21b74ffd498c1524f02df
3
+ metadata.gz: a5e40be4c3c23734786e06c3be620bab6a2c1a9a
4
+ data.tar.gz: 3397ec7107fc0ac63f23809262c7cd793cd43e91
5
5
  SHA512:
6
- metadata.gz: d9b3871d833007b403e53d8ff2fb8e60d55b3f00ac9b6e9f1c1f1bd64a3c26710253e3c95341faf41921990d964103797f13fb453ae0ae30f899f217c53708ae
7
- data.tar.gz: 565af71953174f4528a4c30f4177e7c691eb95116ccedc0ea27ffd8b4ff459fe4243d1b7ac01912db279b0a2b94d4b70bde8b989048298eb5db517590b1e5b2b
6
+ metadata.gz: 5def20affb7f31b2ef491d458d1e8095cc54ab2db62ff6ca12016e200f20d91f7104b494702c45084431cc93006f60ef753314817f94ed34e1805a42dfcd677b
7
+ data.tar.gz: 15a71d7c1491305fda7a7157bbcd82caf01f6bdc7ca6fa409aa2cca4e2192629f128e223054db957ccb73afddc6a0139233e39e2e8c3485c193706d95b031373
@@ -1 +1 @@
1
- 2.3.1
1
+ 2.4.1
@@ -27,6 +27,7 @@ script:
27
27
  - docker-compose run rails42
28
28
  - docker-compose run rails50
29
29
  - docker-compose run grape
30
+ - docker-compose run sinatra
30
31
 
31
32
  after_success:
32
33
  - chown -R $(whoami) coverage
@@ -1,3 +1,6 @@
1
+ ## v2.9.0
2
+ - Sapience will return more parameters in logs created by Rails::Rack::Logger
3
+
1
4
  ## v2.8.0
2
5
  - Silence rails rack logger for rails 3 by setting `silent_rack: true` in sapience.yml
3
6
 
data/README.md CHANGED
@@ -22,6 +22,33 @@ Add the gem:
22
22
  gem "sapience", require: "sapience/rails"
23
23
  ```
24
24
 
25
+ ### Sinatra
26
+ Add the gem:
27
+
28
+ ```ruby
29
+ gem "sapience", require: "sapience/sinatra"
30
+ ```
31
+
32
+ In your Base API class
33
+
34
+ ```ruby
35
+ require "sapience/grape"
36
+
37
+ module Aslan
38
+ module API
39
+ class Base < Sinatra::Base
40
+ use Sapience::Extensions::Sinatra::Middleware::Logging, logger: Sapience[self]
41
+
42
+ get "/ping" do
43
+ { ping: "PONG" }
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ ```
50
+
51
+
25
52
  ### Grape
26
53
  Add the gem:
27
54
 
@@ -49,11 +76,11 @@ end
49
76
 
50
77
  ```
51
78
 
52
- Also make sure you only use "rescue_from" when you want to return a 500 status. For any other status "dont" use
79
+ Also make sure you only use "rescue_from" when you want to return a 500 status. For any other status "dont" use
53
80
  "rescue_from".
54
81
 
55
- For example if you have some authentication code that raises an exception when the user is not authenticated,
56
- dont use "rescue_from" to catch this exception and change the status to 403 within the rescue_from, handle this
82
+ For example if you have some authentication code that raises an exception when the user is not authenticated,
83
+ dont use "rescue_from" to catch this exception and change the status to 403 within the rescue_from, handle this
57
84
  exception instead on the "before" block, or alternatively within your endpoint, like below:
58
85
 
59
86
 
@@ -67,10 +94,10 @@ before do
67
94
  end
68
95
  ```
69
96
 
70
- Likewise, for capturing any other exception for which you want to return a code other than 500, capture your
71
- exception in the "before" block or within your endpoint, but make sure "rescue_from" is "only" used for 500
72
- status, as grape will call rescue_from once is gone through all the middleware, so if you change the status
73
- in a rescue_from, Sapience would not be able to log it correctly. So the below is ok because the rescue_from
97
+ Likewise, for capturing any other exception for which you want to return a code other than 500, capture your
98
+ exception in the "before" block or within your endpoint, but make sure "rescue_from" is "only" used for 500
99
+ status, as grape will call rescue_from once is gone through all the middleware, so if you change the status
100
+ in a rescue_from, Sapience would not be able to log it correctly. So the below is ok because the rescue_from
74
101
  is using status 500:
75
102
 
76
103
  ```ruby
@@ -79,7 +106,7 @@ rescue_from :all do |e|
79
106
  end
80
107
  ```
81
108
 
82
- **Note**: if you already have got your grape applications sprinkled with calls to API.logger, and you do
109
+ **Note**: if you already have got your grape applications sprinkled with calls to API.logger, and you do
83
110
  not want to have to replace all those calls to Sapience.logger manually, then just re-assign your logger
84
111
  after including the Sapience middleware, like below:
85
112
 
@@ -89,7 +116,7 @@ API.logger = Sapience.logger
89
116
  ```
90
117
 
91
118
 
92
- **Note**: If you're using the rackup command to run your server in development, pass the -q flag to silence the default
119
+ **Note**: If you're using the rackup command to run your server in development, pass the -q flag to silence the default
93
120
  rack logger so you don't get double logging.
94
121
 
95
122
  ### Standalone
@@ -149,7 +176,7 @@ development:
149
176
  - stream:
150
177
  file_name: log/development.log
151
178
  formatter: color
152
-
179
+
153
180
  staging:
154
181
  log_level: info
155
182
  error_handler:
@@ -162,7 +189,7 @@ staging:
162
189
  - stream:
163
190
  io: STDOUT
164
191
  formatter: json
165
-
192
+
166
193
  production:
167
194
  log_level: info
168
195
  silent_rails: true # make rails logging less noisy
@@ -108,3 +108,13 @@ services:
108
108
  environment:
109
109
  APP_NAME: grape_app
110
110
  PATH: /usr/src/app/bin:/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
111
+
112
+ sinatra:
113
+ extends:
114
+ service: base
115
+ working_dir: /usr/src/app/test_apps/sinatra
116
+ entrypoint: /usr/src/app/dev-entrypoint.sh
117
+ command: bundle exec rspec
118
+ environment:
119
+ APP_NAME: sinatra_app
120
+ PATH: /usr/src/app/bin:/usr/local/bundle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
@@ -1,13 +1,23 @@
1
1
  # frozen_string_literal: true
2
2
  # Replace rack started message with a semantic equivalent
3
+ # request attributes taken from:
4
+ # https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_dispatch/http/request.rb
5
+
3
6
  class Rails::Rack::Logger # rubocop:disable ClassAndModuleChildren
4
7
  alias started_request_message_original started_request_message
5
- def started_request_message(request)
8
+ def started_request_message(request) # rubocop:disable AbcSize
6
9
  {
7
- message: "Started",
10
+ message: "Started #{request.request_method} #{request.filtered_path}",
8
11
  method: request.request_method,
9
12
  path: request.filtered_path,
10
- ip: request.ip,
13
+ fullpath: request.fullpath,
14
+ original_fullpath: request.original_fullpath,
15
+ ip: request.env["HTTP_X_FORWARDED_FOR"] || request.remote_addr,
16
+ client_ip: request.ip,
17
+ remote_ip: request.remote_ip,
18
+ remote_host: request.env["HTTP_X_FORWARDED_HOST"] || request.remote_host,
19
+ content_type: request.media_type,
20
+ request_id: request.uuid,
11
21
  }
12
22
  end
13
23
  end
@@ -0,0 +1,122 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sapience
4
+ module Extensions
5
+ module Sinatra
6
+ module Middleware
7
+ class Logging
8
+
9
+ if defined?(ActiveRecord)
10
+ ActiveSupport::Notifications.subscribe("sql.active_record") do |*args|
11
+ event = ActiveSupport::Notifications::Event.new(*args)
12
+ Sinatra::Timings.append_db_runtime(event)
13
+ end
14
+ end
15
+
16
+ def initialize(app, options = {})
17
+ @app = app
18
+ @logger = options[:logger]
19
+ end
20
+
21
+ def call(env)
22
+ call!(env)
23
+ end
24
+
25
+ protected
26
+
27
+ def call!(env)
28
+ @env = env
29
+ before
30
+ error = catch(:error) do
31
+ begin
32
+ @app_response = @app.call(@env)
33
+ rescue StandardError => e
34
+ after_exception(e)
35
+ raise e
36
+ end
37
+ nil
38
+ end
39
+ if error
40
+ after_failure(error)
41
+ throw(:error, error)
42
+ else
43
+ @status, = *@app_response
44
+ after
45
+ end
46
+ @app_response
47
+ end
48
+
49
+ def before
50
+ reset_db_runtime
51
+ start_time
52
+ end
53
+
54
+ def after
55
+ stop_time
56
+ @logger.info(parameters)
57
+ end
58
+
59
+ def after_exception(exc) # rubocop:disable Lint/UnusedMethodArgument
60
+ @status = 500
61
+ after
62
+ end
63
+
64
+ def after_failure(error)
65
+ @status = error[:status]
66
+ after
67
+ end
68
+
69
+ def parameters # rubocop:disable AbcSize
70
+ {
71
+ method: request.request_method,
72
+ request_path: @env["REQUEST_URI"] || @env["PATH_INFO"],
73
+ status: @status,
74
+ route: @env["sinatra.route"].to_s,
75
+ host: request.host,
76
+ ip: (request.env["HTTP_X_FORWARDED_FOR"] || request.env["REMOTE_ADDR"]),
77
+ ua: request.env["HTTP_USER_AGENT"],
78
+ tags: Sapience.tags,
79
+ params: request.params,
80
+ runtimes: {
81
+ total: total_runtime,
82
+ view: view_runtime,
83
+ db: db_runtime,
84
+ },
85
+ }
86
+ end
87
+
88
+ private
89
+
90
+ def request
91
+ @request ||= ::Rack::Request.new(@env)
92
+ end
93
+
94
+ def total_runtime
95
+ ((stop_time - start_time) * 1000).round(3)
96
+ end
97
+
98
+ def view_runtime
99
+ total_runtime - db_runtime
100
+ end
101
+
102
+ def db_runtime
103
+ Sinatra::Timings.db_runtime.round(3)
104
+ end
105
+
106
+ def reset_db_runtime
107
+ Sinatra::Timings.reset_db_runtime
108
+ end
109
+
110
+ def start_time
111
+ @start_time ||= Time.now
112
+ end
113
+
114
+ def stop_time
115
+ @stop_time ||= Time.now
116
+ end
117
+
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+ module Sapience
3
+ module Extensions
4
+ module Sinatra
5
+ module Timings
6
+ extend self
7
+
8
+ def db_runtime=(value)
9
+ Thread.current[:grape_db_runtime] = value
10
+ end
11
+
12
+ def db_runtime
13
+ Thread.current[:grape_db_runtime] ||= 0
14
+ end
15
+
16
+ def reset_db_runtime
17
+ self.db_runtime = 0
18
+ end
19
+
20
+ def append_db_runtime(event)
21
+ self.db_runtime += event.duration
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ require "sapience"
3
+ require "sapience/extensions/sinatra/timings"
4
+ require "sapience/extensions/sinatra/middleware/logging"
5
+
6
+ module Sinatra
7
+ class Base
8
+ extend Sapience::Descendants
9
+ end
10
+ end
11
+
12
+ module Sapience
13
+ class Sinatra
14
+ Sapience.configure
15
+ ::Sinatra::Base.send(:include, Sapience::Loggable)
16
+ end
17
+ end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Sapience
3
- VERSION = "2.8"
3
+ VERSION = "2.9.1"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sapience
3
3
  version: !ruby/object:Gem::Version
4
- version: '2.8'
4
+ version: 2.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikael Henriksson
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-02-13 00:00:00.000000000 Z
12
+ date: 2019-09-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: concurrent-ruby
@@ -358,6 +358,8 @@ files:
358
358
  - lib/sapience/extensions/notifications.rb
359
359
  - lib/sapience/extensions/rails/rack/logger.rb
360
360
  - lib/sapience/extensions/rails/rack/logger_info_as_debug.rb
361
+ - lib/sapience/extensions/sinatra/middleware/logging.rb
362
+ - lib/sapience/extensions/sinatra/timings.rb
361
363
  - lib/sapience/formatters/base.rb
362
364
  - lib/sapience/formatters/color.rb
363
365
  - lib/sapience/formatters/default.rb
@@ -376,6 +378,7 @@ files:
376
378
  - lib/sapience/rails/railtie.rb
377
379
  - lib/sapience/rails/silencer.rb
378
380
  - lib/sapience/sapience.rb
381
+ - lib/sapience/sinatra.rb
379
382
  - lib/sapience/sneakers.rb
380
383
  - lib/sapience/subscriber.rb
381
384
  - lib/sapience/version.rb
@@ -402,7 +405,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
402
405
  version: '0'
403
406
  requirements: []
404
407
  rubyforge_project:
405
- rubygems_version: 2.5.1
408
+ rubygems_version: 2.6.11
406
409
  signing_key:
407
410
  specification_version: 4
408
411
  summary: Hasslefree autoconfiguration for logging, metrics and exception collection.