awesome_explain 0.3.0 → 1.0.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.
Files changed (78) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/mongodb.yml +53 -0
  3. data/.github/workflows/postgres.yml +56 -0
  4. data/.gitignore +11 -0
  5. data/Appraisals +11 -0
  6. data/Gemfile.lock +209 -49
  7. data/LICENSE.txt +4 -20
  8. data/README.md +155 -7
  9. data/Rakefile +35 -1
  10. data/app/models/awesome_explain/application_record.rb +5 -0
  11. data/app/models/awesome_explain/controller.rb +20 -0
  12. data/app/models/awesome_explain/delayed_job.rb +7 -0
  13. data/app/models/awesome_explain/explain.rb +23 -0
  14. data/app/models/awesome_explain/log.rb +7 -0
  15. data/app/models/awesome_explain/pg_dml_stat.rb +4 -0
  16. data/app/models/awesome_explain/pg_seq_scan.rb +4 -0
  17. data/app/models/awesome_explain/plan_node.rb +52 -0
  18. data/app/models/awesome_explain/plan_tree.rb +66 -0
  19. data/app/models/awesome_explain/sidekiq_worker.rb +7 -0
  20. data/app/models/awesome_explain/sql_explain.rb +14 -0
  21. data/app/models/awesome_explain/sql_plan_node.rb +73 -0
  22. data/app/models/awesome_explain/sql_plan_stats.rb +34 -0
  23. data/app/models/awesome_explain/sql_plan_tree.rb +133 -0
  24. data/app/models/awesome_explain/sql_query.rb +7 -0
  25. data/app/models/awesome_explain/stacktrace.rb +11 -0
  26. data/awesome_explain.gemspec +16 -5
  27. data/bin/rails +14 -0
  28. data/data/mongodb/customers.bson +0 -0
  29. data/data/mongodb/customers.metadata.json +1 -0
  30. data/data/mongodb/line_items.bson +0 -0
  31. data/data/mongodb/line_items.metadata.json +1 -0
  32. data/data/mongodb/orders.bson +0 -0
  33. data/data/mongodb/orders.metadata.json +1 -0
  34. data/data/mongodb/products.bson +0 -0
  35. data/data/mongodb/products.metadata.json +1 -0
  36. data/data/postgresql/dvdrental.tar +0 -0
  37. data/db/migrate/20200507214801_stacktraces.rb +12 -0
  38. data/db/migrate/20200507214949_controllers.rb +16 -0
  39. data/db/migrate/20200507215205_logs.rb +22 -0
  40. data/db/migrate/20200507215243_explains.rb +27 -0
  41. data/gemfiles/rails_4.gemfile +7 -0
  42. data/gemfiles/rails_4.gemfile.lock +208 -0
  43. data/gemfiles/rails_5.gemfile +7 -0
  44. data/gemfiles/rails_5.gemfile.lock +209 -0
  45. data/gemfiles/rails_6.gemfile +7 -0
  46. data/gemfiles/rails_6.gemfile.lock +233 -0
  47. data/images/universe.png +0 -0
  48. data/lib/awesome_explain.rb +79 -2
  49. data/lib/awesome_explain/config.rb +196 -0
  50. data/lib/awesome_explain/engine.rb +5 -0
  51. data/lib/awesome_explain/insights/active_record_insights.rb +137 -0
  52. data/lib/awesome_explain/insights/base.rb +18 -0
  53. data/lib/awesome_explain/insights/mongoid_insights.rb +44 -0
  54. data/lib/awesome_explain/insights/sql_plans_insights.rb +64 -0
  55. data/lib/awesome_explain/kernel.rb +17 -0
  56. data/lib/awesome_explain/mongodb/base.rb +4 -0
  57. data/lib/awesome_explain/mongodb/command_start.rb +84 -0
  58. data/lib/awesome_explain/mongodb/command_success.rb +58 -0
  59. data/lib/awesome_explain/mongodb/formatter.rb +62 -0
  60. data/lib/awesome_explain/mongodb/helpers.rb +71 -0
  61. data/lib/awesome_explain/queue/command.rb +17 -0
  62. data/lib/awesome_explain/queue/simple_queue.rb +88 -0
  63. data/lib/awesome_explain/renderers/active_record.rb +114 -0
  64. data/lib/awesome_explain/renderers/base.rb +2 -0
  65. data/lib/awesome_explain/renderers/mongoid.rb +20 -33
  66. data/lib/awesome_explain/sidekiq_middleware.rb +17 -0
  67. data/lib/awesome_explain/stats/postgresql.rb +54 -0
  68. data/lib/awesome_explain/subscribers/active_record_passive_subscriber.rb +82 -0
  69. data/lib/awesome_explain/subscribers/active_record_subscriber.rb +187 -0
  70. data/lib/awesome_explain/subscribers/base.rb +3 -0
  71. data/lib/awesome_explain/subscribers/command_subscriber.rb +53 -0
  72. data/lib/awesome_explain/tasks/db.rb +325 -0
  73. data/lib/awesome_explain/utils/color.rb +16 -0
  74. data/lib/awesome_explain/version.rb +1 -1
  75. data/lib/tasks/ae.rake +28 -0
  76. data/lib/tasks/awesome_explain_tasks.rake +4 -0
  77. metadata +242 -25
  78. data/.travis.yml +0 -19
@@ -0,0 +1,16 @@
1
+ module AwesomeExplain
2
+ module Utils
3
+ class Color
4
+ COLOR_ESCAPES = {
5
+ none: 0, bright: 1, black: 30,
6
+ red: 31, green: 32, yellow: 33,
7
+ blue: 34, magenta: 35, cyan: 36,
8
+ white: 37, default: 39
9
+ }
10
+
11
+ def self.fg_color(clr, text)
12
+ "\x1B[" + (COLOR_ESCAPES[clr] || 0).to_s + 'm' + (text ? text + "\x1B[0m" : '')
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module AwesomeExplain
2
- VERSION = '0.3.0'
2
+ VERSION = '1.0.0'
3
3
  end
data/lib/tasks/ae.rake ADDED
@@ -0,0 +1,28 @@
1
+ namespace :ae do
2
+ desc "Drop AwesomeExplain's Postgres database"
3
+ task drop_pg: :environment do
4
+ AwesomeExplain::Tasks::DB.drop_postgres_db
5
+ end
6
+
7
+ desc 'Truncate all tables'
8
+ task clean: :environment do
9
+ puts 'Running AwesomeExplain Clean Task'
10
+ [
11
+ AwesomeExplain::Controller,
12
+ AwesomeExplain::DelayedJob,
13
+ AwesomeExplain::Explain,
14
+ AwesomeExplain::Log,
15
+ AwesomeExplain::SidekiqWorker,
16
+ AwesomeExplain::SqlExplain,
17
+ AwesomeExplain::SqlQuery,
18
+ AwesomeExplain::Stacktrace,
19
+ ].each do |klass|
20
+ klass.delete_all
21
+ end
22
+ end
23
+
24
+ desc 'Create database tables'
25
+ task build: :environment do
26
+ AwesomeExplain::Tasks::DB.build
27
+ end
28
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :awesome_explain do
3
+ # # Task goes here
4
+ # end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awesome_explain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ahmed El.Hussaini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-17 00:00:00.000000000 Z
11
+ date: 2021-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: awesome_print
@@ -38,20 +38,174 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sqlite3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '4.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '4.2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: kaminari
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: activerecord-import
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0.25'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0.25'
97
+ - !ruby/object:Gem::Dependency
98
+ name: niceql
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pg
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
41
125
  - !ruby/object:Gem::Dependency
42
126
  name: bundler
43
127
  requirement: !ruby/object:Gem::Requirement
44
128
  requirements:
45
- - - "~>"
129
+ - - ">="
46
130
  - !ruby/object:Gem::Version
47
- version: '1.16'
131
+ version: '0'
48
132
  type: :development
49
133
  prerelease: false
50
134
  version_requirements: !ruby/object:Gem::Requirement
51
135
  requirements:
52
- - - "~>"
136
+ - - ">="
53
137
  - !ruby/object:Gem::Version
54
- version: '1.16'
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: appraisal
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: wwtd
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: binding_of_caller
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: pry-byebug
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: pry-rails
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - ">="
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
55
209
  - !ruby/object:Gem::Dependency
56
210
  name: mongoid
57
211
  requirement: !ruby/object:Gem::Requirement
@@ -70,58 +224,58 @@ dependencies:
70
224
  name: rake
71
225
  requirement: !ruby/object:Gem::Requirement
72
226
  requirements:
73
- - - "~>"
227
+ - - ">="
74
228
  - !ruby/object:Gem::Version
75
229
  version: '10.0'
76
230
  type: :development
77
231
  prerelease: false
78
232
  version_requirements: !ruby/object:Gem::Requirement
79
233
  requirements:
80
- - - "~>"
234
+ - - ">="
81
235
  - !ruby/object:Gem::Version
82
236
  version: '10.0'
83
237
  - !ruby/object:Gem::Dependency
84
238
  name: rspec
85
239
  requirement: !ruby/object:Gem::Requirement
86
240
  requirements:
87
- - - "~>"
241
+ - - ">="
88
242
  - !ruby/object:Gem::Version
89
- version: '3.0'
243
+ version: '3.10'
90
244
  type: :development
91
245
  prerelease: false
92
246
  version_requirements: !ruby/object:Gem::Requirement
93
247
  requirements:
94
- - - "~>"
248
+ - - ">="
95
249
  - !ruby/object:Gem::Version
96
- version: '3.0'
250
+ version: '3.10'
97
251
  - !ruby/object:Gem::Dependency
98
- name: simplecov-console
252
+ name: simplecov
99
253
  requirement: !ruby/object:Gem::Requirement
100
254
  requirements:
101
- - - "~>"
255
+ - - ">="
102
256
  - !ruby/object:Gem::Version
103
- version: 0.4.2
257
+ version: 0.21.2
104
258
  type: :development
105
259
  prerelease: false
106
260
  version_requirements: !ruby/object:Gem::Requirement
107
261
  requirements:
108
- - - "~>"
262
+ - - ">="
109
263
  - !ruby/object:Gem::Version
110
- version: 0.4.2
264
+ version: 0.21.2
111
265
  - !ruby/object:Gem::Dependency
112
- name: simplecov
266
+ name: simplecov-console
113
267
  requirement: !ruby/object:Gem::Requirement
114
268
  requirements:
115
- - - "~>"
269
+ - - ">="
116
270
  - !ruby/object:Gem::Version
117
- version: 0.16.1
271
+ version: 0.9.1
118
272
  type: :development
119
273
  prerelease: false
120
274
  version_requirements: !ruby/object:Gem::Requirement
121
275
  requirements:
122
- - - "~>"
276
+ - - ">="
123
277
  - !ruby/object:Gem::Version
124
- version: 0.16.1
278
+ version: 0.9.1
125
279
  description: An awesome and simple approach to explain Mongoid queries that provides
126
280
  winning plan stages and overall statistics
127
281
  email:
@@ -131,20 +285,84 @@ extensions: []
131
285
  extra_rdoc_files: []
132
286
  files:
133
287
  - ".codeclimate.yml"
288
+ - ".github/workflows/mongodb.yml"
289
+ - ".github/workflows/postgres.yml"
134
290
  - ".gitignore"
135
291
  - ".rspec"
136
- - ".travis.yml"
292
+ - Appraisals
137
293
  - CODE_OF_CONDUCT.md
138
294
  - Gemfile
139
295
  - Gemfile.lock
140
296
  - LICENSE.txt
141
297
  - README.md
142
298
  - Rakefile
299
+ - app/models/awesome_explain/application_record.rb
300
+ - app/models/awesome_explain/controller.rb
301
+ - app/models/awesome_explain/delayed_job.rb
302
+ - app/models/awesome_explain/explain.rb
303
+ - app/models/awesome_explain/log.rb
304
+ - app/models/awesome_explain/pg_dml_stat.rb
305
+ - app/models/awesome_explain/pg_seq_scan.rb
306
+ - app/models/awesome_explain/plan_node.rb
307
+ - app/models/awesome_explain/plan_tree.rb
308
+ - app/models/awesome_explain/sidekiq_worker.rb
309
+ - app/models/awesome_explain/sql_explain.rb
310
+ - app/models/awesome_explain/sql_plan_node.rb
311
+ - app/models/awesome_explain/sql_plan_stats.rb
312
+ - app/models/awesome_explain/sql_plan_tree.rb
313
+ - app/models/awesome_explain/sql_query.rb
314
+ - app/models/awesome_explain/stacktrace.rb
143
315
  - awesome_explain.gemspec
316
+ - bin/rails
317
+ - data/mongodb/customers.bson
318
+ - data/mongodb/customers.metadata.json
319
+ - data/mongodb/line_items.bson
320
+ - data/mongodb/line_items.metadata.json
321
+ - data/mongodb/orders.bson
322
+ - data/mongodb/orders.metadata.json
323
+ - data/mongodb/products.bson
324
+ - data/mongodb/products.metadata.json
325
+ - data/postgresql/dvdrental.tar
326
+ - db/migrate/20200507214801_stacktraces.rb
327
+ - db/migrate/20200507214949_controllers.rb
328
+ - db/migrate/20200507215205_logs.rb
329
+ - db/migrate/20200507215243_explains.rb
330
+ - gemfiles/rails_4.gemfile
331
+ - gemfiles/rails_4.gemfile.lock
332
+ - gemfiles/rails_5.gemfile
333
+ - gemfiles/rails_5.gemfile.lock
334
+ - gemfiles/rails_6.gemfile
335
+ - gemfiles/rails_6.gemfile.lock
336
+ - images/universe.png
144
337
  - lib/awesome_explain.rb
338
+ - lib/awesome_explain/config.rb
339
+ - lib/awesome_explain/engine.rb
340
+ - lib/awesome_explain/insights/active_record_insights.rb
341
+ - lib/awesome_explain/insights/base.rb
342
+ - lib/awesome_explain/insights/mongoid_insights.rb
343
+ - lib/awesome_explain/insights/sql_plans_insights.rb
145
344
  - lib/awesome_explain/kernel.rb
345
+ - lib/awesome_explain/mongodb/base.rb
346
+ - lib/awesome_explain/mongodb/command_start.rb
347
+ - lib/awesome_explain/mongodb/command_success.rb
348
+ - lib/awesome_explain/mongodb/formatter.rb
349
+ - lib/awesome_explain/mongodb/helpers.rb
350
+ - lib/awesome_explain/queue/command.rb
351
+ - lib/awesome_explain/queue/simple_queue.rb
352
+ - lib/awesome_explain/renderers/active_record.rb
353
+ - lib/awesome_explain/renderers/base.rb
146
354
  - lib/awesome_explain/renderers/mongoid.rb
355
+ - lib/awesome_explain/sidekiq_middleware.rb
356
+ - lib/awesome_explain/stats/postgresql.rb
357
+ - lib/awesome_explain/subscribers/active_record_passive_subscriber.rb
358
+ - lib/awesome_explain/subscribers/active_record_subscriber.rb
359
+ - lib/awesome_explain/subscribers/base.rb
360
+ - lib/awesome_explain/subscribers/command_subscriber.rb
361
+ - lib/awesome_explain/tasks/db.rb
362
+ - lib/awesome_explain/utils/color.rb
147
363
  - lib/awesome_explain/version.rb
364
+ - lib/tasks/ae.rake
365
+ - lib/tasks/awesome_explain_tasks.rake
148
366
  homepage: https://github.com/sandboxws/awesome_explain
149
367
  licenses:
150
368
  - MIT
@@ -164,8 +382,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
164
382
  - !ruby/object:Gem::Version
165
383
  version: '0'
166
384
  requirements: []
167
- rubyforge_project:
168
- rubygems_version: 2.6.14
385
+ rubygems_version: 3.2.15
169
386
  signing_key:
170
387
  specification_version: 4
171
388
  summary: Awesome and simple approach to explain Mongoid queries
data/.travis.yml DELETED
@@ -1,19 +0,0 @@
1
- addons:
2
- code_climate:
3
- repo_token:
4
- secure: "iLix2/7jYzbxfOe4hGvikPIfDL/xhIz5h0z6h0aZg1UMagnAue5UStYcvk5u1UtyTBW/aAW8WIgGVZG09a4J2Ker6+PaLskt94FytqTwQzAN6jONAdIlpreCdfFM5KbFVA7v9VszfkEcuYmAde4n1GbN4Hle84WeHAGI9dPd9sgvrbmIwAxcYSlYrDhqnMCzi0Z4Fqpbw0pLP6ZYWgoV1DywlFvCKjOcWaY1M0QoPZnJT/AGA9BGiJk42KfXCwY3b80VnixGFXtIgRqfFU1b0ZGptdtjETnDNeG2CA63sQoyAxOAStKxpTRKXRG/sI8fxuDdLDeqMOdrSpc19zqbr4hvUCn2+ukJMe3r4iKt5m4VjffcJVEXI8h7e16bbsBFvsgLQcxjBWcH5p9vOAl8aEHttUnaGvjtwza5MGTg2yI1CnIG+zMgb/MaR04zhI6YbKiZ88E5QXlyKBfA7DaT8ojRlpIIBFWhF7WpXBgCIxMB6afG8DaUTCCyFsa3xmvU+DR31xbgvKIYsv7etcCOqqmpbx+sQDIXUK6t4iF+d+ZWzj+CL1DtSw0I4Qkfmvj4nl4Zy3MRNZdr8vJbJf39bf2JTGqjd1qfCW/q1XV+2Bqtjp4wIOP/LWGlmcQYVnZ2q+13mP7wKyE6JVzX8khqkiggvtK255C8ETXc1BVBx6E="
5
- sudo: false
6
- language: ruby
7
- cache: bundler
8
- rvm:
9
- - 2.3.4
10
- before_install: gem install bundler -v 1.16.0
11
- notifications: false
12
- before_script:
13
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
14
- - chmod +x ./cc-test-reporter
15
- - ./cc-test-reporter before-build
16
- script:
17
- - bundle exec rspec
18
- after_script:
19
- - ./cc-test-reporter after-build -t simplecov -p /home/travis/build/sandboxws/awesome_explain