sql_optimizer 0.1.2 → 0.1.3
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/app/controllers/sql_optimizer/sql_optimizer_controller.rb +28 -32
- data/app/views/sql_optimizer/{sql_optimizer/index.slim → index.slim} +0 -0
- data/config/routes.rb +4 -4
- data/lib/generators/sql_optimizer_generator.rb +43 -0
- data/lib/sql_optimizer/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 575fa5b95bc8bfbba54f463ed2753ce63c04acc7fd4cad14acec35f4ce774086
|
4
|
+
data.tar.gz: f7439edbd9a1465a172bde51599265308114b3127f2649cc34b67af2afb2d875
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b58712ab51595b818e4d74c148b29cdfd0ea83725a76352b13f6f55e04627a95cb5938fc1b90489e8d50566475da80058014b54cfa96dc4f22cc3af68f5a524
|
7
|
+
data.tar.gz: 61a0de99cf1ca80c832d9f7caa492a37075384fcdaf0aa87d4854599ad5047a34d0eb4b0f04b742881dfad40ff32e2c42e5d760c211da2ac92bf5903d64b5a13
|
@@ -1,41 +1,37 @@
|
|
1
|
-
|
1
|
+
class SqlOptimizerController < ApplicationController
|
2
2
|
|
3
|
-
|
3
|
+
layout false
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
@min_query = @query_logs.order(:duration).first
|
13
|
-
end
|
14
|
-
|
15
|
-
# GET /graph
|
16
|
-
def graph
|
17
|
-
@query_logs = QueryLog.where.not(source: nil)
|
18
|
-
render json: collect_graph.to_json
|
19
|
-
end
|
5
|
+
# GET /sql_optimizer
|
6
|
+
def index
|
7
|
+
@query_logs = QueryLog.where.not(source: nil)
|
8
|
+
@popular_queries = @query_logs.group_by(&:query).sort_by { |_, val| val.size }.last(3)
|
9
|
+
@max_query = @query_logs.order(duration: :desc).first
|
10
|
+
@min_query = @query_logs.order(:duration).first
|
11
|
+
end
|
20
12
|
|
21
|
-
|
13
|
+
# GET /graph
|
14
|
+
def graph
|
15
|
+
@query_logs = QueryLog.where.not(source: nil)
|
16
|
+
render json: collect_graph.to_json
|
17
|
+
end
|
22
18
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
19
|
+
private
|
20
|
+
|
21
|
+
def collect_graph
|
22
|
+
@query_logs.group_by(&:query).first(10).map.with_index do |query, i|
|
23
|
+
durations = query[1].map(&:duration)
|
24
|
+
avg_time = durations.reduce(:+) / durations.size.to_f
|
25
|
+
{
|
26
|
+
index: i,
|
27
|
+
avg_time: avg_time.round(2),
|
28
|
+
data: {
|
29
|
+
query: query[1].first.query,
|
30
|
+
name: query[1].first.source,
|
31
|
+
size: query[1].size
|
35
32
|
}
|
36
|
-
|
33
|
+
}
|
37
34
|
end
|
38
|
-
|
39
35
|
end
|
40
36
|
|
41
37
|
end
|
File without changes
|
data/config/routes.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Rails.application.routes.draw do
|
2
|
-
|
3
|
-
|
4
|
-
end
|
1
|
+
# Rails.application.routes.draw do
|
2
|
+
# get 'sql_optimizer', to: 'sql_optimizer/sql_optimizer#index'
|
3
|
+
# get 'graph', to: 'sql_optimizer/sql_optimizer#graph'
|
4
|
+
# end
|
@@ -5,6 +5,7 @@ class SqlOptimizerGenerator < Rails::Generators::Base
|
|
5
5
|
migration_number = Dir.glob("#{Rails.root}/db/migrate/*").max_by { |name| name[/\d+/].to_i }[/\d+/].to_i + 1
|
6
6
|
create_file "db/migrate/#{migration_number}_create_query_logs.rb", migration_content
|
7
7
|
create_file 'app/models/query_log.rb', model_content
|
8
|
+
create_file 'app/controllers/sql_optimizer.rb', controller_content
|
8
9
|
application(nil, env: :development) { initializer_content }
|
9
10
|
route route_content
|
10
11
|
rake 'db:migrate'
|
@@ -54,4 +55,46 @@ class SqlOptimizerGenerator < Rails::Generators::Base
|
|
54
55
|
RUBY
|
55
56
|
end
|
56
57
|
|
58
|
+
def controller_content
|
59
|
+
<<~RUBY
|
60
|
+
class SqlOptimizerController < ApplicationController
|
61
|
+
|
62
|
+
layout false
|
63
|
+
|
64
|
+
# GET /sql_optimizer
|
65
|
+
def index
|
66
|
+
@query_logs = QueryLog.where.not(source: nil)
|
67
|
+
@popular_queries = @query_logs.group_by(&:query).sort_by { |_, val| val.size }.last(3)
|
68
|
+
@max_query = @query_logs.order(duration: :desc).first
|
69
|
+
@min_query = @query_logs.order(:duration).first
|
70
|
+
end
|
71
|
+
|
72
|
+
# GET /graph
|
73
|
+
def graph
|
74
|
+
@query_logs = QueryLog.where.not(source: nil)
|
75
|
+
render json: collect_graph.to_json
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def collect_graph
|
81
|
+
@query_logs.group_by(&:query).first(10).map.with_index do |query, i|
|
82
|
+
durations = query[1].map(&:duration)
|
83
|
+
avg_time = durations.reduce(:+) / durations.size.to_f
|
84
|
+
{
|
85
|
+
index: i,
|
86
|
+
avg_time: avg_time.round(2),
|
87
|
+
data: {
|
88
|
+
query: query[1].first.query,
|
89
|
+
name: query[1].first.source,
|
90
|
+
size: query[1].size
|
91
|
+
}
|
92
|
+
}
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
RUBY
|
98
|
+
end
|
99
|
+
|
57
100
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sql_optimizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nikita Korchma
|
@@ -69,7 +69,7 @@ files:
|
|
69
69
|
- README.md
|
70
70
|
- Rakefile
|
71
71
|
- app/controllers/sql_optimizer/sql_optimizer_controller.rb
|
72
|
-
- app/views/sql_optimizer/
|
72
|
+
- app/views/sql_optimizer/index.slim
|
73
73
|
- bin/console
|
74
74
|
- bin/setup
|
75
75
|
- config/routes.rb
|