pg_peek 0.1.1 → 0.2.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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/pg_peek/application.js +25 -1
  3. data/app/assets/stylesheets/pg_peek/application.css +48 -2
  4. data/app/controllers/pg_peek/databases_controller.rb +12 -10
  5. data/app/controllers/pg_peek/endpoints_controller.rb +15 -3
  6. data/app/controllers/pg_peek/jobs_controller.rb +1 -1
  7. data/app/controllers/pg_peek/pg_stat_statements_controller.rb +17 -6
  8. data/app/controllers/pg_peek/tables_controller.rb +11 -1
  9. data/app/helpers/pg_peek/application_helper.rb +27 -11
  10. data/app/helpers/pg_peek/report_helper.rb +32 -8
  11. data/app/models/pg_peek/pg_stat_statements.rb +51 -4
  12. data/app/models/pg_peek/sql_format.rb +74 -0
  13. data/app/models/pg_peek/table.rb +4 -3
  14. data/app/queries/pg_peek/pg14/pg_stat_statements/outliers.sql +1 -1
  15. data/app/queries/pg_peek/pg14/pg_stat_statements/outliers_by_endpoint.sql +24 -0
  16. data/app/queries/pg_peek/pg14/pg_stat_statements/outliers_by_job.sql +1 -1
  17. data/app/queries/pg_peek/pg14/tables/dead_tuples.sql +7 -3
  18. data/app/queries/pg_peek/pg15/pg_stat_statements/outliers.sql +1 -1
  19. data/app/queries/pg_peek/pg15/pg_stat_statements/outliers_by_endpoint.sql +24 -0
  20. data/app/queries/pg_peek/pg15/pg_stat_statements/outliers_by_job.sql +1 -1
  21. data/app/queries/pg_peek/pg15/tables/dead_tuples.sql +7 -3
  22. data/app/queries/pg_peek/pg16/pg_stat_statements/outliers.sql +1 -1
  23. data/app/queries/pg_peek/pg16/pg_stat_statements/outliers_by_endpoint.sql +24 -0
  24. data/app/queries/pg_peek/pg16/pg_stat_statements/outliers_by_job.sql +1 -1
  25. data/app/queries/pg_peek/pg16/tables/dead_tuples.sql +7 -3
  26. data/app/queries/pg_peek/pg17/pg_stat_statements/outliers.sql +1 -1
  27. data/app/queries/pg_peek/pg17/pg_stat_statements/outliers_by_endpoint.sql +24 -0
  28. data/app/queries/pg_peek/pg17/pg_stat_statements/outliers_by_job.sql +1 -1
  29. data/app/queries/pg_peek/pg17/tables/dead_tuples.sql +7 -3
  30. data/app/queries/pg_peek/pg18/pg_stat_statements/outliers.sql +1 -1
  31. data/app/queries/pg_peek/pg18/pg_stat_statements/outliers_by_endpoint.sql +24 -0
  32. data/app/queries/pg_peek/pg18/pg_stat_statements/outliers_by_job.sql +1 -1
  33. data/app/queries/pg_peek/pg18/tables/dead_tuples.sql +7 -3
  34. data/app/reports/pg_peek/column.rb +6 -1
  35. data/app/reports/pg_peek/report.rb +1 -2
  36. data/app/reports/pg_peek/reports/endpoint_queries.rb +14 -0
  37. data/app/reports/pg_peek/reports/endpoints.rb +5 -8
  38. data/app/reports/pg_peek/reports/jobs.rb +7 -7
  39. data/app/reports/pg_peek/reports/queries.rb +2 -1
  40. data/app/views/layouts/pg_peek/application.html.erb +1 -0
  41. data/app/views/pg_peek/databases/show.html.erb +8 -60
  42. data/app/views/pg_peek/endpoints/index.html.erb +14 -1
  43. data/app/views/pg_peek/endpoints/show.html.erb +18 -0
  44. data/app/views/pg_peek/jobs/index.html.erb +1 -8
  45. data/app/views/pg_peek/jobs/show.html.erb +2 -1
  46. data/app/views/pg_peek/pg_stat_statements/show.html.erb +87 -0
  47. data/app/views/pg_peek/tables/index.html.erb +18 -0
  48. data/app/views/pg_peek/tables/show.html.erb +2 -2
  49. data/config/routes.rb +5 -2
  50. data/lib/generators/pg_peek/install/templates/initializer.rb +9 -0
  51. data/lib/pg_peek/configuration.rb +8 -1
  52. data/lib/pg_peek/version.rb +1 -1
  53. metadata +12 -2
@@ -0,0 +1,18 @@
1
+ <div class="toolbar">
2
+ <h1>tables</h1>
3
+ </div>
4
+
5
+ <input type="search"
6
+ placeholder="filter tables… (press / to focus)"
7
+ data-filter-input
8
+ data-filter-noun="table"
9
+ autofocus
10
+ autocomplete="off">
11
+ <p class="dim" data-filter-count></p>
12
+
13
+ <%= render "pg_peek/reports/report",
14
+ report: @tables,
15
+ link_column: :name,
16
+ link: ->(row) { database_table_path(@database, row["name"]) } %>
17
+
18
+ <p class="dim" data-filter-empty hidden>No tables match that filter.</p>
@@ -1,6 +1,6 @@
1
1
  <div class="toolbar">
2
- <h1><%= @table.name %></h1>
3
- <%= link_to "← tables", database_path(@database, anchor: "tables") %>
2
+ <h1><code class="name"><%= @table.name %></code></h1>
3
+ <%= link_to "← tables", database_tables_path(@database) %>
4
4
  </div>
5
5
 
6
6
  <% seconds_elapsed = @table.seconds_since_reset %>
data/config/routes.rb CHANGED
@@ -1,13 +1,16 @@
1
1
  PgPeek::Engine.routes.draw do
2
2
  resources :databases, only: [ :index, :show ] do
3
3
  resources :queries, only: [ :index ]
4
- resources :tables, only: [ :show ], param: :name
4
+ resources :tables, only: [ :index, :show ], param: :name
5
5
  resources :endpoints, only: [ :index ]
6
+ # admin/posts#index lives at endpoints/admin/posts/index: the slashes of a
7
+ # namespace stay as they are, and no # needs encoding.
8
+ get "endpoints/*endpoint_controller/:endpoint_action", to: "endpoints#show", as: :endpoint, format: false
6
9
  resources :indexes, only: [ :index ]
7
10
  resource :activity, only: [ :show ], controller: "activity"
8
11
  resources :jobs, only: [ :index, :show ], param: :job_class
9
12
 
10
- resource :pg_stat_statements, only: [] do
13
+ resource :pg_stat_statements, only: [ :show ] do
11
14
  delete :reset
12
15
  end
13
16
  end
@@ -29,6 +29,15 @@ Rails.application.config.pg_peek.tap do |config|
29
29
  # Dead tuple ratio threshold (percentage) for warnings.
30
30
  # config.dead_tuple_warning_threshold = 10
31
31
 
32
+ # Index scan counts start from zero when statistics are reset, so right
33
+ # after a reset every index looks unused. The overview waits this long
34
+ # before calling unused indexes out.
35
+ # config.unused_index_min_stats_age = 1.day
36
+
37
+ # Unused indexes smaller than this (in bytes) are left out of the overview;
38
+ # the indexes page still lists them all.
39
+ # config.unused_index_min_size = 1.megabyte
40
+
32
41
  # A query running longer than this is called out on the overview.
33
42
  # config.long_query_warning_seconds = 5
34
43
 
@@ -1,3 +1,5 @@
1
+ require "active_support/core_ext/integer/time"
2
+
1
3
  module PgPeek
2
4
  class Configuration
3
5
  DEFAULT_EXCLUDED_TABLES = %w[schema_migrations ar_internal_metadata].freeze
@@ -6,10 +8,13 @@ module PgPeek
6
8
  DEFAULT_CACHE_HIT_WARNING_THRESHOLD = 99 # percentage
7
9
  DEFAULT_LONG_QUERY_WARNING_SECONDS = 5
8
10
  DEFAULT_IDLE_IN_TRANSACTION_WARNING_SECONDS = 60
11
+ DEFAULT_UNUSED_INDEX_MIN_STATS_AGE = 1.day
12
+ DEFAULT_UNUSED_INDEX_MIN_SIZE = 1.megabyte
9
13
 
10
14
  attr_accessor :connections, :excluded_tables, :dead_tuple_warning_threshold, :outliers_limit,
11
15
  :cache_hit_warning_threshold, :long_query_warning_seconds,
12
- :idle_in_transaction_warning_seconds, :public_dashboard
16
+ :idle_in_transaction_warning_seconds, :unused_index_min_stats_age,
17
+ :unused_index_min_size, :public_dashboard
13
18
  attr_writer :username, :password
14
19
 
15
20
  def initialize
@@ -20,6 +25,8 @@ module PgPeek
20
25
  @cache_hit_warning_threshold = DEFAULT_CACHE_HIT_WARNING_THRESHOLD
21
26
  @long_query_warning_seconds = DEFAULT_LONG_QUERY_WARNING_SECONDS
22
27
  @idle_in_transaction_warning_seconds = DEFAULT_IDLE_IN_TRANSACTION_WARNING_SECONDS
28
+ @unused_index_min_stats_age = DEFAULT_UNUSED_INDEX_MIN_STATS_AGE
29
+ @unused_index_min_size = DEFAULT_UNUSED_INDEX_MIN_SIZE
23
30
  @public_dashboard = false
24
31
  end
25
32
 
@@ -1,3 +1,3 @@
1
1
  module PgPeek
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_peek
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomasz Mazur
@@ -69,6 +69,7 @@ files:
69
69
  - app/models/pg_peek/database.rb
70
70
  - app/models/pg_peek/pg_stat_statements.rb
71
71
  - app/models/pg_peek/sql_comment.rb
72
+ - app/models/pg_peek/sql_format.rb
72
73
  - app/models/pg_peek/table.rb
73
74
  - app/queries/pg_peek/pg14/activity/sessions.sql
74
75
  - app/queries/pg_peek/pg14/activity/summary.sql
@@ -78,6 +79,7 @@ files:
78
79
  - app/queries/pg_peek/pg14/pg_stat_statements/endpoints.sql
79
80
  - app/queries/pg_peek/pg14/pg_stat_statements/jobs.sql
80
81
  - app/queries/pg_peek/pg14/pg_stat_statements/outliers.sql
82
+ - app/queries/pg_peek/pg14/pg_stat_statements/outliers_by_endpoint.sql
81
83
  - app/queries/pg_peek/pg14/pg_stat_statements/outliers_by_job.sql
82
84
  - app/queries/pg_peek/pg14/tables/dead_tuples.sql
83
85
  - app/queries/pg_peek/pg14/tables/inline_stats.sql
@@ -90,6 +92,7 @@ files:
90
92
  - app/queries/pg_peek/pg15/pg_stat_statements/endpoints.sql
91
93
  - app/queries/pg_peek/pg15/pg_stat_statements/jobs.sql
92
94
  - app/queries/pg_peek/pg15/pg_stat_statements/outliers.sql
95
+ - app/queries/pg_peek/pg15/pg_stat_statements/outliers_by_endpoint.sql
93
96
  - app/queries/pg_peek/pg15/pg_stat_statements/outliers_by_job.sql
94
97
  - app/queries/pg_peek/pg15/tables/dead_tuples.sql
95
98
  - app/queries/pg_peek/pg15/tables/inline_stats.sql
@@ -102,6 +105,7 @@ files:
102
105
  - app/queries/pg_peek/pg16/pg_stat_statements/endpoints.sql
103
106
  - app/queries/pg_peek/pg16/pg_stat_statements/jobs.sql
104
107
  - app/queries/pg_peek/pg16/pg_stat_statements/outliers.sql
108
+ - app/queries/pg_peek/pg16/pg_stat_statements/outliers_by_endpoint.sql
105
109
  - app/queries/pg_peek/pg16/pg_stat_statements/outliers_by_job.sql
106
110
  - app/queries/pg_peek/pg16/tables/dead_tuples.sql
107
111
  - app/queries/pg_peek/pg16/tables/inline_stats.sql
@@ -114,6 +118,7 @@ files:
114
118
  - app/queries/pg_peek/pg17/pg_stat_statements/endpoints.sql
115
119
  - app/queries/pg_peek/pg17/pg_stat_statements/jobs.sql
116
120
  - app/queries/pg_peek/pg17/pg_stat_statements/outliers.sql
121
+ - app/queries/pg_peek/pg17/pg_stat_statements/outliers_by_endpoint.sql
117
122
  - app/queries/pg_peek/pg17/pg_stat_statements/outliers_by_job.sql
118
123
  - app/queries/pg_peek/pg17/tables/dead_tuples.sql
119
124
  - app/queries/pg_peek/pg17/tables/inline_stats.sql
@@ -126,6 +131,7 @@ files:
126
131
  - app/queries/pg_peek/pg18/pg_stat_statements/endpoints.sql
127
132
  - app/queries/pg_peek/pg18/pg_stat_statements/jobs.sql
128
133
  - app/queries/pg_peek/pg18/pg_stat_statements/outliers.sql
134
+ - app/queries/pg_peek/pg18/pg_stat_statements/outliers_by_endpoint.sql
129
135
  - app/queries/pg_peek/pg18/pg_stat_statements/outliers_by_job.sql
130
136
  - app/queries/pg_peek/pg18/tables/dead_tuples.sql
131
137
  - app/queries/pg_peek/pg18/tables/inline_stats.sql
@@ -134,6 +140,7 @@ files:
134
140
  - app/reports/pg_peek/report.rb
135
141
  - app/reports/pg_peek/reports/blocked.rb
136
142
  - app/reports/pg_peek/reports/databases.rb
143
+ - app/reports/pg_peek/reports/endpoint_queries.rb
137
144
  - app/reports/pg_peek/reports/endpoints.rb
138
145
  - app/reports/pg_peek/reports/indexes.rb
139
146
  - app/reports/pg_peek/reports/job_queries.rb
@@ -147,13 +154,16 @@ files:
147
154
  - app/views/pg_peek/databases/index.html.erb
148
155
  - app/views/pg_peek/databases/show.html.erb
149
156
  - app/views/pg_peek/endpoints/index.html.erb
157
+ - app/views/pg_peek/endpoints/show.html.erb
150
158
  - app/views/pg_peek/indexes/index.html.erb
151
159
  - app/views/pg_peek/jobs/index.html.erb
152
160
  - app/views/pg_peek/jobs/show.html.erb
153
161
  - app/views/pg_peek/pg_stat_statements/_preload_instructions.html.erb
154
162
  - app/views/pg_peek/pg_stat_statements/not_preloaded.html.erb
163
+ - app/views/pg_peek/pg_stat_statements/show.html.erb
155
164
  - app/views/pg_peek/queries/index.html.erb
156
165
  - app/views/pg_peek/reports/_report.html.erb
166
+ - app/views/pg_peek/tables/index.html.erb
157
167
  - app/views/pg_peek/tables/show.html.erb
158
168
  - config/routes.rb
159
169
  - lib/generators/pg_peek/install/install_generator.rb
@@ -187,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
197
  - !ruby/object:Gem::Version
188
198
  version: '0'
189
199
  requirements: []
190
- rubygems_version: 3.6.9
200
+ rubygems_version: 4.0.21
191
201
  specification_version: 4
192
202
  summary: PostgreSQL query performance monitoring for Rails applications
193
203
  test_files: []