awesome_explain 0.3.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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