rack-request-object-logger 3.0.3 → 5.0.1
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 +4 -4
- data/.github/workflows/ruby.yml +26 -0
- data/README.md +8 -23
- data/Rakefile +8 -2
- data/examples/rails7/config/initializers/log_http_request.rb +9 -0
- data/examples/rails7/db/migrate/20240917151639_create_analytics_requests.rb +14 -0
- data/examples/rails7/models/analytics_request.rb +3 -0
- data/lib/rack-request-object-logger/version.rb +1 -1
- data/lib/rack-request-object-logger.rb +2 -3
- data/rack-request-object-logger.gemspec +16 -13
- metadata +33 -49
- data/.travis.yml +0 -18
- data/examples/rails5/app/models/http_request.rb +0 -3
- data/examples/rails5/config/log_http_request.rb +0 -1
- data/examples/rails5/db/migrate/20170211004327_create_http_requests.rb +0 -15
- data/performance/active_record_model_spec.rb +0 -41
- data/performance/in_memory_model_spec.rb +0 -20
- data/performance/performance_helper.rb +0 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a41cacc30a49c5172af149d755b438f29ffb17872d55df6debf95fa74fa08cd8
|
|
4
|
+
data.tar.gz: 3d5c2c6f8025e378156326aa9c8432fe0034b74981b810eea30bd87829897000
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 91776ab809841fc6782fd5380620acb0c73dbcc8afa116d6aedaf9b8cd2e39532e682eb453a148a10a9f2ef8cafcc4e7e0c7b4b9b8846cdf99444b796ac7fb22
|
|
7
|
+
data.tar.gz: 6984bdd8d5456449d363c03717e84694264d2d079da72604a5b5503c435f1ca397c295a2327bb7653fd1527427417d52e1a9ffc4cf789864cdcd93832cd1b423
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: github-actions-rails
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: ["*"]
|
|
6
|
+
push:
|
|
7
|
+
branches: [master]
|
|
8
|
+
jobs:
|
|
9
|
+
test:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
strategy:
|
|
12
|
+
fail-fast: false
|
|
13
|
+
matrix:
|
|
14
|
+
ruby: ["2.7", "3.2", "3.3", "3.4", "4.0", head, truffleruby, truffleruby-head]
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
- name: Set up Ruby ${{ matrix.ruby }}
|
|
18
|
+
uses: ruby/setup-ruby@v1
|
|
19
|
+
with:
|
|
20
|
+
ruby-version: ${{ matrix.ruby }}
|
|
21
|
+
bundler: default
|
|
22
|
+
bundler-cache: true
|
|
23
|
+
- name: Run tests
|
|
24
|
+
env:
|
|
25
|
+
RAILS_ENV: test
|
|
26
|
+
run: bundle exec rake
|
data/README.md
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+

|
|
2
2
|
[](https://rubygems.org/gems/rack-request-object-logger)
|
|
3
3
|
[](http://www.apache.org/licenses/LICENSE-2.0.html)
|
|
4
4
|
|
|
5
5
|
# rack-request-object-logger
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
The project is a Rack middleware to automatically log a HTTP request to a custom object.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
Don't be confused with no commits in months or years. Rack middlewares rarely change. They just work.
|
|
9
|
+
There might be no commits in months or years. Rack middlewares rarely change.
|
|
12
10
|
|
|
13
11
|
## Install gem
|
|
14
12
|
|
|
@@ -24,9 +22,9 @@ gem 'rack-request-object-logger'
|
|
|
24
22
|
|
|
25
23
|
## Rubies Support
|
|
26
24
|
|
|
27
|
-
Tested with Matz Ruby 2.
|
|
25
|
+
Tested with Matz Ruby 2.7, 3.2, 3.3, 3.4, 4.0, head, and ruffleruby, truffleruby-head.
|
|
28
26
|
|
|
29
|
-
Should work with
|
|
27
|
+
Should work also with 3.0, 3.1, jRuby, just sqlite3 adapter supports only Rails 7-8 and tests require a more recent Rails.
|
|
30
28
|
|
|
31
29
|
## Roadmap
|
|
32
30
|
|
|
@@ -39,26 +37,13 @@ Bug: I learned at EuRuKo 2018 that my implementation of timings is wrong and not
|
|
|
39
37
|
generate a model for storage
|
|
40
38
|
|
|
41
39
|
```bash
|
|
42
|
-
|
|
43
|
-
# to have subsecond resolution please see examples/db/migrate/
|
|
44
|
-
$ bin/rails g model AnalyticsHttpRequest uid:string data:text status_code:integer application_server_request_start:datetime application_server_request_end:datetime
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
add JSON serialization
|
|
49
|
-
|
|
50
|
-
```ruby
|
|
51
|
-
# app/models/analytics_http_request.rb
|
|
52
|
-
class AnalyticsHttpRequest < ApplicationRecord
|
|
53
|
-
serialize :data, JSON
|
|
54
|
-
end
|
|
55
|
-
|
|
40
|
+
$ bin/rails g model AnalyticsRequest uid:string data:jsonb status_code:integer application_server_request_start:datetime application_server_request_end:datetime
|
|
56
41
|
```
|
|
57
42
|
|
|
58
43
|
add automatic logging via initializer
|
|
59
44
|
|
|
60
45
|
```ruby
|
|
61
|
-
# config/initializers/
|
|
46
|
+
# config/initializers/log_requests.rb
|
|
62
47
|
|
|
63
48
|
Rails.application.config.middleware.use(RackRequestObjectLogger, AnalyticsHttpRequest)
|
|
64
49
|
```
|
|
@@ -79,7 +64,7 @@ I've seen applications sending sensitive data in GET and even POST requests in a
|
|
|
79
64
|
|
|
80
65
|
## License & Author
|
|
81
66
|
|
|
82
|
-
Copyright 2016-
|
|
67
|
+
Copyright 2016-2026 Ivan Stana
|
|
83
68
|
|
|
84
69
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
85
70
|
you may not use this file except in compliance with the License.
|
data/Rakefile
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
require "bundler/gem_tasks"
|
|
2
2
|
require "rspec/core/rake_task"
|
|
3
3
|
|
|
4
|
-
RSpec::Core::RakeTask.new(:spec)
|
|
4
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
|
5
|
+
t.pattern = 'spec'
|
|
6
|
+
end
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
RSpec::Core::RakeTask.new(:spec_performance) do |t|
|
|
9
|
+
t.pattern = 'performance'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
task :default => [:spec, :spec_performance]
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
require Rails.root.join('app', 'models', 'application_record').to_s
|
|
2
|
+
require Rails.root.join('app', 'models', 'analytics_request').to_s
|
|
3
|
+
|
|
4
|
+
Rails.configuration.before_initialize do
|
|
5
|
+
Rails.application.config.middleware.use(
|
|
6
|
+
RackRequestObjectLogger,
|
|
7
|
+
::AnalyticsRequest
|
|
8
|
+
)
|
|
9
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class CreateAnalyticsRequests < ActiveRecord::Migration[7.2]
|
|
2
|
+
def change
|
|
3
|
+
create_table :analytics_requests, id: :uuid do |t|
|
|
4
|
+
t.text :uid
|
|
5
|
+
t.json :data
|
|
6
|
+
t.integer :status_code
|
|
7
|
+
t.datetime :application_server_request_start
|
|
8
|
+
t.datetime :application_server_request_end
|
|
9
|
+
t.references :requestable, polymorphic: true, null: true, type: :uuid, index: true
|
|
10
|
+
|
|
11
|
+
t.timestamps
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -17,8 +17,7 @@ class RackRequestObjectLogger
|
|
|
17
17
|
logger_object = @model.new
|
|
18
18
|
logger_object.application_server_request_start = start_time
|
|
19
19
|
logger_object.application_server_request_end = end_time
|
|
20
|
-
|
|
21
|
-
logger_object.data = request.env.select do |header, value|
|
|
20
|
+
logger_object.data = env.select do |header, value|
|
|
22
21
|
# don't bother with values other than a string
|
|
23
22
|
next if !value.is_a?(String)
|
|
24
23
|
# https://tools.ietf.org/html/rfc3875 CGI 1.1 spec
|
|
@@ -38,7 +37,7 @@ class RackRequestObjectLogger
|
|
|
38
37
|
].include?(header) || ['HTTP', 'HTTPS'].include?(header) || header =~ /\AHTTP_\w+\z/ ||
|
|
39
38
|
['REQUEST_URI', 'ORIGINAL_FULLPATH', 'ORIGINAL_SCRIPT_NAME'].include?(header)
|
|
40
39
|
end
|
|
41
|
-
logger_object.uid =
|
|
40
|
+
logger_object.uid = env['action_dispatch.request_id'] || SecureRandom.uuid
|
|
42
41
|
logger_object.status_code = app_result.first
|
|
43
42
|
logger_object.save
|
|
44
43
|
app_result
|
|
@@ -11,25 +11,28 @@ Gem::Specification.new do |spec|
|
|
|
11
11
|
spec.authors = ["Ivan Stana"]
|
|
12
12
|
spec.email = ["ronon@myrtana.sk"]
|
|
13
13
|
|
|
14
|
-
spec.summary = %q{
|
|
15
|
-
spec.description = %q{
|
|
16
|
-
spec.homepage = "https://github.com/
|
|
14
|
+
spec.summary = %q{The project is a Rack middleware to automatically log a HTTP request to a custom object.}
|
|
15
|
+
spec.description = %q{The project is a Rack middleware to automatically log a HTTP request to a custom object.}
|
|
16
|
+
spec.homepage = "https://github.com/istana/rack-request-object-logger"
|
|
17
17
|
spec.license = "Apache-2.0"
|
|
18
18
|
|
|
19
19
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
|
20
|
-
f.match(%r{^(test|spec|features)/})
|
|
20
|
+
f.match(%r{^(test|spec|features|performance)/})
|
|
21
21
|
end
|
|
22
|
-
spec.bindir = "exe"
|
|
23
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
24
22
|
spec.require_paths = ["lib"]
|
|
25
23
|
|
|
26
|
-
spec.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
spec.metadata = {
|
|
25
|
+
"bug_tracker_uri" => "https://github.com/istana/rack-request-object-logger/issues",
|
|
26
|
+
"homepage_uri" => "https://github.com/istana/rack-request-object-logger",
|
|
27
|
+
"source_code_uri" => "https://github.com/istana/rack-request-object-logger",
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
spec.add_dependency "rack", "> 0", "< 4.0"
|
|
31
|
+
spec.add_development_dependency "bundler", "< 5.0"
|
|
32
|
+
spec.add_development_dependency "rake", "~> 13"
|
|
33
|
+
spec.add_development_dependency "rspec", "~> 3.13"
|
|
30
34
|
spec.add_development_dependency "rspec-benchmark", "~> 0"
|
|
31
35
|
spec.add_development_dependency "pry", "~> 0"
|
|
32
|
-
spec.add_development_dependency "activerecord", '>= 6.0', "<
|
|
33
|
-
spec.add_development_dependency "sqlite3", "
|
|
34
|
-
spec.add_development_dependency "mysql2", "~> 0.5" unless RUBY_PLATFORM == 'java'
|
|
36
|
+
spec.add_development_dependency "activerecord", '>= 6.0', "< 9"
|
|
37
|
+
spec.add_development_dependency "sqlite3", "<= 3" unless RUBY_PLATFORM == "java"
|
|
35
38
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rack-request-object-logger
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 5.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ivan Stana
|
|
8
|
-
|
|
9
|
-
bindir: exe
|
|
8
|
+
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: rack
|
|
@@ -19,7 +18,7 @@ dependencies:
|
|
|
19
18
|
version: '0'
|
|
20
19
|
- - "<"
|
|
21
20
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: '
|
|
21
|
+
version: '4.0'
|
|
23
22
|
type: :runtime
|
|
24
23
|
prerelease: false
|
|
25
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -29,49 +28,49 @@ dependencies:
|
|
|
29
28
|
version: '0'
|
|
30
29
|
- - "<"
|
|
31
30
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '
|
|
31
|
+
version: '4.0'
|
|
33
32
|
- !ruby/object:Gem::Dependency
|
|
34
33
|
name: bundler
|
|
35
34
|
requirement: !ruby/object:Gem::Requirement
|
|
36
35
|
requirements:
|
|
37
|
-
- - "
|
|
36
|
+
- - "<"
|
|
38
37
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '
|
|
38
|
+
version: '5.0'
|
|
40
39
|
type: :development
|
|
41
40
|
prerelease: false
|
|
42
41
|
version_requirements: !ruby/object:Gem::Requirement
|
|
43
42
|
requirements:
|
|
44
|
-
- - "
|
|
43
|
+
- - "<"
|
|
45
44
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: '
|
|
45
|
+
version: '5.0'
|
|
47
46
|
- !ruby/object:Gem::Dependency
|
|
48
47
|
name: rake
|
|
49
48
|
requirement: !ruby/object:Gem::Requirement
|
|
50
49
|
requirements:
|
|
51
50
|
- - "~>"
|
|
52
51
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: '
|
|
52
|
+
version: '13'
|
|
54
53
|
type: :development
|
|
55
54
|
prerelease: false
|
|
56
55
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
56
|
requirements:
|
|
58
57
|
- - "~>"
|
|
59
58
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: '
|
|
59
|
+
version: '13'
|
|
61
60
|
- !ruby/object:Gem::Dependency
|
|
62
61
|
name: rspec
|
|
63
62
|
requirement: !ruby/object:Gem::Requirement
|
|
64
63
|
requirements:
|
|
65
64
|
- - "~>"
|
|
66
65
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: '3.
|
|
66
|
+
version: '3.13'
|
|
68
67
|
type: :development
|
|
69
68
|
prerelease: false
|
|
70
69
|
version_requirements: !ruby/object:Gem::Requirement
|
|
71
70
|
requirements:
|
|
72
71
|
- - "~>"
|
|
73
72
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: '3.
|
|
73
|
+
version: '3.13'
|
|
75
74
|
- !ruby/object:Gem::Dependency
|
|
76
75
|
name: rspec-benchmark
|
|
77
76
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -109,7 +108,7 @@ dependencies:
|
|
|
109
108
|
version: '6.0'
|
|
110
109
|
- - "<"
|
|
111
110
|
- !ruby/object:Gem::Version
|
|
112
|
-
version: '
|
|
111
|
+
version: '9'
|
|
113
112
|
type: :development
|
|
114
113
|
prerelease: false
|
|
115
114
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -119,46 +118,32 @@ dependencies:
|
|
|
119
118
|
version: '6.0'
|
|
120
119
|
- - "<"
|
|
121
120
|
- !ruby/object:Gem::Version
|
|
122
|
-
version: '
|
|
121
|
+
version: '9'
|
|
123
122
|
- !ruby/object:Gem::Dependency
|
|
124
123
|
name: sqlite3
|
|
125
124
|
requirement: !ruby/object:Gem::Requirement
|
|
126
125
|
requirements:
|
|
127
|
-
- - "
|
|
126
|
+
- - "<="
|
|
128
127
|
- !ruby/object:Gem::Version
|
|
129
|
-
version: '
|
|
128
|
+
version: '3'
|
|
130
129
|
type: :development
|
|
131
130
|
prerelease: false
|
|
132
131
|
version_requirements: !ruby/object:Gem::Requirement
|
|
133
132
|
requirements:
|
|
134
|
-
- - "
|
|
135
|
-
- !ruby/object:Gem::Version
|
|
136
|
-
version: '1.4'
|
|
137
|
-
- !ruby/object:Gem::Dependency
|
|
138
|
-
name: mysql2
|
|
139
|
-
requirement: !ruby/object:Gem::Requirement
|
|
140
|
-
requirements:
|
|
141
|
-
- - "~>"
|
|
142
|
-
- !ruby/object:Gem::Version
|
|
143
|
-
version: '0.5'
|
|
144
|
-
type: :development
|
|
145
|
-
prerelease: false
|
|
146
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
147
|
-
requirements:
|
|
148
|
-
- - "~>"
|
|
133
|
+
- - "<="
|
|
149
134
|
- !ruby/object:Gem::Version
|
|
150
|
-
version: '
|
|
151
|
-
description:
|
|
152
|
-
|
|
135
|
+
version: '3'
|
|
136
|
+
description: The project is a Rack middleware to automatically log a HTTP request
|
|
137
|
+
to a custom object.
|
|
153
138
|
email:
|
|
154
139
|
- ronon@myrtana.sk
|
|
155
140
|
executables: []
|
|
156
141
|
extensions: []
|
|
157
142
|
extra_rdoc_files: []
|
|
158
143
|
files:
|
|
144
|
+
- ".github/workflows/ruby.yml"
|
|
159
145
|
- ".gitignore"
|
|
160
146
|
- ".rspec"
|
|
161
|
-
- ".travis.yml"
|
|
162
147
|
- CODE_OF_CONDUCT.md
|
|
163
148
|
- Gemfile
|
|
164
149
|
- LICENSE
|
|
@@ -166,20 +151,19 @@ files:
|
|
|
166
151
|
- Rakefile
|
|
167
152
|
- bin/console
|
|
168
153
|
- bin/setup
|
|
169
|
-
- examples/
|
|
170
|
-
- examples/
|
|
171
|
-
- examples/
|
|
154
|
+
- examples/rails7/config/initializers/log_http_request.rb
|
|
155
|
+
- examples/rails7/db/migrate/20240917151639_create_analytics_requests.rb
|
|
156
|
+
- examples/rails7/models/analytics_request.rb
|
|
172
157
|
- lib/rack-request-object-logger.rb
|
|
173
158
|
- lib/rack-request-object-logger/version.rb
|
|
174
|
-
- performance/active_record_model_spec.rb
|
|
175
|
-
- performance/in_memory_model_spec.rb
|
|
176
|
-
- performance/performance_helper.rb
|
|
177
159
|
- rack-request-object-logger.gemspec
|
|
178
|
-
homepage: https://github.com/
|
|
160
|
+
homepage: https://github.com/istana/rack-request-object-logger
|
|
179
161
|
licenses:
|
|
180
162
|
- Apache-2.0
|
|
181
|
-
metadata:
|
|
182
|
-
|
|
163
|
+
metadata:
|
|
164
|
+
bug_tracker_uri: https://github.com/istana/rack-request-object-logger/issues
|
|
165
|
+
homepage_uri: https://github.com/istana/rack-request-object-logger
|
|
166
|
+
source_code_uri: https://github.com/istana/rack-request-object-logger
|
|
183
167
|
rdoc_options: []
|
|
184
168
|
require_paths:
|
|
185
169
|
- lib
|
|
@@ -194,8 +178,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
194
178
|
- !ruby/object:Gem::Version
|
|
195
179
|
version: '0'
|
|
196
180
|
requirements: []
|
|
197
|
-
rubygems_version: 3.
|
|
198
|
-
signing_key:
|
|
181
|
+
rubygems_version: 3.6.7
|
|
199
182
|
specification_version: 4
|
|
200
|
-
summary:
|
|
183
|
+
summary: The project is a Rack middleware to automatically log a HTTP request to a
|
|
184
|
+
custom object.
|
|
201
185
|
test_files: []
|
data/.travis.yml
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
sudo: false
|
|
2
|
-
language: ruby
|
|
3
|
-
services:
|
|
4
|
-
- mysql
|
|
5
|
-
rvm:
|
|
6
|
-
- 2.5.4
|
|
7
|
-
- 2.6.3
|
|
8
|
-
- truffleruby
|
|
9
|
-
before_install:
|
|
10
|
-
- gem update --system
|
|
11
|
-
- gem install bundler
|
|
12
|
-
cache: bundler
|
|
13
|
-
matrix:
|
|
14
|
-
include:
|
|
15
|
-
- rvm: ruby-head
|
|
16
|
-
allow_failures:
|
|
17
|
-
- rvm: ruby-head
|
|
18
|
-
fast_finish: true
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
Rails.application.config.middleware.use "RackRequestObjectLogger", AnalyticsHttpRequest
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
class CreateAnalyticsHttpRequests < ActiveRecord::Migration[5.0]
|
|
2
|
-
def change
|
|
3
|
-
create_table :analytics_http_requests do |t|
|
|
4
|
-
t.string :uid
|
|
5
|
-
t.text :data
|
|
6
|
-
t.integer :status_code
|
|
7
|
-
# with limit: 6 we will store nanosecond resolution
|
|
8
|
-
# for statistics and performance monitoring sub-second resolution is a must
|
|
9
|
-
t.datetime :application_server_request_start, limit: 6
|
|
10
|
-
t.datetime :application_server_request_end, limit: 6
|
|
11
|
-
|
|
12
|
-
t.timestamps
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require_relative 'performance_helper'
|
|
3
|
-
require_relative '../spec/spec_data'
|
|
4
|
-
require 'active_record'
|
|
5
|
-
|
|
6
|
-
RSpec.describe "Performance testing with an ActiveRecord class and SQLite3 database", performance: true do
|
|
7
|
-
include RSpec::Benchmark::Matchers
|
|
8
|
-
include_context 'spec_data'
|
|
9
|
-
|
|
10
|
-
class RequestActiveRecordLog < ActiveRecord::Base
|
|
11
|
-
serialize :headers, JSON
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
class CreateRequestActiveRecordLog < ActiveRecord::Migration[4.2]
|
|
15
|
-
def change
|
|
16
|
-
create_table :request_active_record_logs do |t|
|
|
17
|
-
t.integer :uid
|
|
18
|
-
t.text :data
|
|
19
|
-
t.time :application_server_request_start
|
|
20
|
-
t.time :application_server_request_end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
let(:app) { proc{ [200, {}, ['Hello, world.']] } }
|
|
26
|
-
let(:stack) { RackRequestObjectLogger.new(app, RequestActiveRecordLog) }
|
|
27
|
-
let(:request) { Rack::MockRequest.new(stack) }
|
|
28
|
-
|
|
29
|
-
after { File.unlink 'active_record_performance.sqlite3' }
|
|
30
|
-
|
|
31
|
-
it 'much fast. wow' do
|
|
32
|
-
set_headers(rails5_puma_headers)
|
|
33
|
-
|
|
34
|
-
ActiveRecord::Base.establish_connection(
|
|
35
|
-
adapter: 'sqlite3',
|
|
36
|
-
database: 'active_record_performance.sqlite3'
|
|
37
|
-
)
|
|
38
|
-
CreateRequestActiveRecordLog.migrate(:up)
|
|
39
|
-
expect { request.get('http://localhost:4000/doge') }.to perform_at_least(500).ips
|
|
40
|
-
end
|
|
41
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require_relative 'performance_helper'
|
|
3
|
-
require_relative '../spec/spec_data'
|
|
4
|
-
|
|
5
|
-
RSpec.describe "Performance testing with a dummy class", performance: true do
|
|
6
|
-
include RSpec::Benchmark::Matchers
|
|
7
|
-
include_context 'spec_data'
|
|
8
|
-
|
|
9
|
-
let(:app) { proc{ [200, {}, ['Hello, world.']] } }
|
|
10
|
-
let(:stack) { RackRequestObjectLogger.new(app, RequestDummyLog) }
|
|
11
|
-
let(:request) { Rack::MockRequest.new(stack) }
|
|
12
|
-
|
|
13
|
-
let(:logger_object) { RequestDummyLog.new }
|
|
14
|
-
before { allow(RequestDummyLog).to receive(:new).and_return(logger_object) }
|
|
15
|
-
|
|
16
|
-
it 'much fast. wow' do
|
|
17
|
-
set_headers(rails5_puma_headers)
|
|
18
|
-
expect { request.get('http://localhost:4000/doge') }.to perform_at_least(5000).ips
|
|
19
|
-
end
|
|
20
|
-
end
|