rails-pg-extras 4.4.0 → 4.8.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +19 -6
- data/README.md +11 -11
- data/Rakefile +1 -1
- data/app/controllers/rails_pg_extras/web/application_controller.rb +8 -1
- data/app/controllers/rails_pg_extras/web/queries_controller.rb +1 -1
- data/app/views/rails_pg_extras/web/queries/_unavailable_extensions_warning.html.erb +1 -1
- data/app/views/rails_pg_extras/web/queries/index.html.erb +1 -1
- data/app/views/rails_pg_extras/web/shared/_queries_selector.html.erb +6 -6
- data/docker-compose.yml.sample +12 -3
- data/lib/rails_pg_extras/tasks/all.rake +4 -14
- data/lib/rails_pg_extras/version.rb +1 -1
- data/lib/rails_pg_extras/web/engine.rb +2 -0
- data/lib/rails_pg_extras/web.rb +1 -1
- data/spec/spec_helper.rb +2 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: acfc146396c33697f24aa0e96d251c77fd94e2a5d10a8154dcff9df02a981ac8
|
4
|
+
data.tar.gz: 5290474635b58a4e35afd3c075726b24e75a6194acd691e5b90b5b3289f2b5f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3db2562f135d7b904239f5481d5050f1404062b679fa9dc1399379bea58f66c981d7adadee8d5af34ff4e5c0ffc10f6cd1de2c3fab03923083c45fa11d24785b
|
7
|
+
data.tar.gz: 91b734c2c9bc9e6678d50def9cc4603e5444f35b16ec90514e14644954fa1d8d8e4b014c287dc2beb2cb9edfc3cadd29f517ad3f4fd42a37872304b91c5c553b
|
data/.circleci/config.yml
CHANGED
@@ -2,39 +2,47 @@ version: 2
|
|
2
2
|
jobs:
|
3
3
|
test:
|
4
4
|
docker:
|
5
|
-
- image:
|
5
|
+
- image: cimg/ruby:2.7.6
|
6
6
|
environment:
|
7
7
|
DATABASE_URL: postgresql://postgres:secret@localhost:5432/rails-pg-extras-test
|
8
|
-
- image:
|
8
|
+
- image: cimg/postgres:11.15
|
9
9
|
command: postgres -c shared_preload_libraries=pg_stat_statements
|
10
10
|
name: postgres11
|
11
11
|
environment:
|
12
12
|
POSTGRES_USER: postgres
|
13
13
|
POSTGRES_DB: rails-pg-extras-test
|
14
14
|
POSTGRES_PASSWORD: secret
|
15
|
-
- image:
|
15
|
+
- image: cimg/postgres:12.10
|
16
16
|
command: postgres -c shared_preload_libraries=pg_stat_statements
|
17
17
|
name: postgres12
|
18
18
|
environment:
|
19
19
|
POSTGRES_USER: postgres
|
20
20
|
POSTGRES_DB: rails-pg-extras-test
|
21
21
|
POSTGRES_PASSWORD: secret
|
22
|
-
- image:
|
22
|
+
- image: cimg/postgres:13.6
|
23
23
|
command: postgres -c shared_preload_libraries=pg_stat_statements
|
24
24
|
name: postgres13
|
25
25
|
environment:
|
26
26
|
POSTGRES_USER: postgres
|
27
27
|
POSTGRES_DB: rails-pg-extras-test
|
28
28
|
POSTGRES_PASSWORD: secret
|
29
|
+
- image: cimg/postgres:14.2
|
30
|
+
command: postgres -c shared_preload_libraries=pg_stat_statements
|
31
|
+
name: postgres14
|
32
|
+
environment:
|
33
|
+
POSTGRES_USER: postgres
|
34
|
+
POSTGRES_DB: rails-pg-extras-test
|
35
|
+
POSTGRES_PASSWORD: secret
|
29
36
|
parallelism: 1
|
30
37
|
steps:
|
31
38
|
- checkout
|
32
39
|
- run: gem update --system
|
33
40
|
- run: gem install bundler
|
34
|
-
- run: bundle config set --local path 'vendor/bundle'
|
35
|
-
- run: bundle install
|
36
41
|
- run: sudo apt-get update --allow-releaseinfo-change
|
37
42
|
- run: sudo apt install postgresql-client
|
43
|
+
- run: sudo apt install libpq-dev
|
44
|
+
- run: bundle config set --local path 'vendor/bundle'
|
45
|
+
- run: bundle install
|
38
46
|
- run: dockerize -wait tcp://postgres11:5432 -timeout 1m
|
39
47
|
- run:
|
40
48
|
name: Run specs for PG 11
|
@@ -51,6 +59,11 @@ jobs:
|
|
51
59
|
environment:
|
52
60
|
DATABASE_URL: postgresql://postgres:secret@postgres13:5432/rails-pg-extras-test
|
53
61
|
command: bundle exec rspec spec/
|
62
|
+
- run:
|
63
|
+
name: Run specs for PG 14
|
64
|
+
environment:
|
65
|
+
DATABASE_URL: postgresql://postgres:secret@postgres14:5432/rails-pg-extras-test
|
66
|
+
command: bundle exec rspec spec/
|
54
67
|
workflows:
|
55
68
|
version: 2
|
56
69
|
test:
|
data/README.md
CHANGED
@@ -20,7 +20,7 @@ Alternative versions:
|
|
20
20
|
|
21
21
|
- [Elixir](https://github.com/pawurb/ecto_psql_extras)
|
22
22
|
|
23
|
-
- [Python](https://github.com/
|
23
|
+
- [Python Flask](https://github.com/nickjj/flask-pg-extras)
|
24
24
|
|
25
25
|
- [Haskell](https://github.com/pawurb/haskell-pg-extras)
|
26
26
|
|
@@ -119,7 +119,7 @@ You can enable UI using a Rails engine by adding the following code in `config/r
|
|
119
119
|
mount RailsPgExtras::Web::Engine, at: 'pg_extras'
|
120
120
|
```
|
121
121
|
|
122
|
-
You can enable HTTP basic auth by specifying `RAILS_PG_EXTRAS_USER` and `RAILS_PG_EXTRAS_PASSWORD` variables.
|
122
|
+
You can enable HTTP basic auth by specifying `RAILS_PG_EXTRAS_USER` and `RAILS_PG_EXTRAS_PASSWORD` variables. Authentication is mandatory unless you specify `RAILS_PG_EXTRAS_PUBLIC_DASHBOARD=true`.
|
123
123
|
|
124
124
|
You can configure available web actions in `config/initializers/rails_pg_extras.rb`:
|
125
125
|
|
@@ -128,7 +128,7 @@ RailsPgExtras.configure do |config|
|
|
128
128
|
# Rails-pg-extras does not enable all the web actions by default. You can check all available actions via `RailsPgExtras::Web::ACTIONS`.
|
129
129
|
# For example, you may want to enable the dangerous `kill_all` action.
|
130
130
|
|
131
|
-
config.enabled_web_actions = %i[kill_all pg_stat_statements_reset
|
131
|
+
config.enabled_web_actions = %i[kill_all pg_stat_statements_reset add_extensions]
|
132
132
|
end
|
133
133
|
```
|
134
134
|
|
@@ -286,14 +286,14 @@ RailsPgExtras.locks
|
|
286
286
|
|
287
287
|
$ rake pg_extras:locks
|
288
288
|
|
289
|
-
procpid | relname | transactionid | granted | query_snippet | mode | age
|
290
|
-
|
291
|
-
31776 | | | t | <IDLE> in transaction | ExclusiveLock | 00:19:29.837898
|
292
|
-
31776 | | 1294 | t | <IDLE> in transaction | RowExclusiveLock | 00:19:29.837898
|
293
|
-
31912 | | | t | select * from hello; | ExclusiveLock | 00:19:17.94259
|
294
|
-
3443 | | | t | +| ExclusiveLock | 00:00:00
|
295
|
-
| | | | select +| |
|
296
|
-
| | | | pg_stat_activi | |
|
289
|
+
procpid | relname | transactionid | granted | query_snippet | mode | age | application |
|
290
|
+
---------+---------+---------------+---------+-----------------------+------------------------------------------------------
|
291
|
+
31776 | | | t | <IDLE> in transaction | ExclusiveLock | 00:19:29.837898 | bin/rails
|
292
|
+
31776 | | 1294 | t | <IDLE> in transaction | RowExclusiveLock | 00:19:29.837898 | bin/rails
|
293
|
+
31912 | | | t | select * from hello; | ExclusiveLock | 00:19:17.94259 | bin/rails
|
294
|
+
3443 | | | t | +| ExclusiveLock | 00:00:00 | bin/sidekiq
|
295
|
+
| | | | select +| | |
|
296
|
+
| | | | pg_stat_activi | | |
|
297
297
|
(4 rows)
|
298
298
|
```
|
299
299
|
|
data/Rakefile
CHANGED
@@ -5,6 +5,6 @@ RSpec::Core::RakeTask.new(:spec)
|
|
5
5
|
|
6
6
|
desc 'Test all PG versions'
|
7
7
|
task :test_all do
|
8
|
-
system("PG_VERSION=11 bundle exec rspec spec/ && PG_VERSION=12 bundle exec rspec spec/ && PG_VERSION=13 bundle exec rspec spec/")
|
8
|
+
system("PG_VERSION=11 bundle exec rspec spec/ && PG_VERSION=12 bundle exec rspec spec/ && PG_VERSION=13 bundle exec rspec spec/ && PG_VERSION=14 bundle exec rspec spec/")
|
9
9
|
end
|
10
10
|
|
@@ -3,6 +3,7 @@ require "rails_pg_extras/version"
|
|
3
3
|
|
4
4
|
module RailsPgExtras::Web
|
5
5
|
class ApplicationController < ActionController::Base
|
6
|
+
before_action :validate_credentials!
|
6
7
|
layout "rails_pg_extras/web/application"
|
7
8
|
|
8
9
|
REQUIRED_EXTENSIONS = {
|
@@ -14,7 +15,13 @@ module RailsPgExtras::Web
|
|
14
15
|
ACTIONS = %i[kill_all pg_stat_statements_reset add_extensions]
|
15
16
|
|
16
17
|
if ENV['RAILS_PG_EXTRAS_USER'].present? && ENV['RAILS_PG_EXTRAS_PASSWORD'].present?
|
17
|
-
http_basic_authenticate_with name: ENV
|
18
|
+
http_basic_authenticate_with name: ENV.fetch('RAILS_PG_EXTRAS_USER'), password: ENV.fetch('RAILS_PG_EXTRAS_PASSWORD')
|
19
|
+
end
|
20
|
+
|
21
|
+
def validate_credentials!
|
22
|
+
if (ENV['RAILS_PG_EXTRAS_USER'].blank? || ENV['RAILS_PG_EXTRAS_PASSWORD'].blank?) && ENV["RAILS_PG_EXTRAS_PUBLIC_DASHBOARD"] != "true"
|
23
|
+
raise "Missing credentials for rails-pg-extras dashboard! If you want to enable public dashboard please set RAILS_PG_EXTRAS_PUBLIC_DASHBOARD=true"
|
24
|
+
end
|
18
25
|
end
|
19
26
|
end
|
20
27
|
end
|
@@ -21,7 +21,7 @@ module RailsPgExtras::Web
|
|
21
21
|
private
|
22
22
|
|
23
23
|
def load_queries
|
24
|
-
@all_queries = (RailsPgExtras::QUERIES - ACTIONS).inject({}) do |memo, query_name|
|
24
|
+
@all_queries = (RailsPgExtras::QUERIES - RailsPgExtras::Web::ACTIONS).inject({}) do |memo, query_name|
|
25
25
|
unless query_name.in? %i[mandelbrot]
|
26
26
|
memo[query_name] = { disabled: query_disabled?(query_name) }
|
27
27
|
end
|
@@ -15,7 +15,7 @@
|
|
15
15
|
%>
|
16
16
|
<% end %>
|
17
17
|
|
18
|
-
<% if RailsPgExtras::Web.action_enabled?(:pg_stat_statements_reset) %>
|
18
|
+
<% if RailsPgExtras::Web.action_enabled?(:pg_stat_statements_reset) && unavailable_extensions.exclude?(:pg_stat_statements) %>
|
19
19
|
<%= link_to "pg_stat_statements_reset", pg_stat_statements_reset_action_path,
|
20
20
|
method: "post",
|
21
21
|
data: {
|
@@ -1,11 +1,11 @@
|
|
1
|
-
<%=
|
2
|
-
<%=
|
3
|
-
{prompt: "--- select query ---"}
|
4
|
-
{class: "border p-2 font-bold", autofocus: true}
|
1
|
+
<%= form_tag queries_path, id: "queries", method: :get do |f| %>
|
2
|
+
<%= select_tag :query_name, options_for_select(@all_queries, params[:query_name]),
|
3
|
+
{prompt: "--- select query ---", class: "border p-2 font-bold", autofocus: true}
|
5
4
|
%>
|
6
5
|
<% end %>
|
7
|
-
|
6
|
+
|
7
|
+
<%= javascript_tag nonce: true do -%>
|
8
8
|
document.getElementById('queries').addEventListener('change', (e) => {
|
9
9
|
e.target.form.submit()
|
10
10
|
})
|
11
|
-
|
11
|
+
<% end -%>
|
data/docker-compose.yml.sample
CHANGED
@@ -2,7 +2,7 @@ version: '3'
|
|
2
2
|
|
3
3
|
services:
|
4
4
|
postgres11:
|
5
|
-
image: postgres:11.
|
5
|
+
image: postgres:11.16-alpine
|
6
6
|
command: postgres -c shared_preload_libraries=pg_stat_statements
|
7
7
|
environment:
|
8
8
|
POSTGRES_USER: postgres
|
@@ -11,7 +11,7 @@ services:
|
|
11
11
|
ports:
|
12
12
|
- '5432:5432'
|
13
13
|
postgres12:
|
14
|
-
image: postgres:12.
|
14
|
+
image: postgres:12.11-alpine
|
15
15
|
command: postgres -c shared_preload_libraries=pg_stat_statements
|
16
16
|
environment:
|
17
17
|
POSTGRES_USER: postgres
|
@@ -20,7 +20,7 @@ services:
|
|
20
20
|
ports:
|
21
21
|
- '5433:5432'
|
22
22
|
postgres13:
|
23
|
-
image: postgres:13.
|
23
|
+
image: postgres:13.7-alpine
|
24
24
|
command: postgres -c shared_preload_libraries=pg_stat_statements
|
25
25
|
environment:
|
26
26
|
POSTGRES_USER: postgres
|
@@ -28,3 +28,12 @@ services:
|
|
28
28
|
POSTGRES_PASSWORD: secret
|
29
29
|
ports:
|
30
30
|
- '5434:5432'
|
31
|
+
postgres14:
|
32
|
+
image: postgres:14.3-alpine
|
33
|
+
command: postgres -c shared_preload_libraries=pg_stat_statements
|
34
|
+
environment:
|
35
|
+
POSTGRES_USER: postgres
|
36
|
+
POSTGRES_DB: rails-pg-extras-test
|
37
|
+
POSTGRES_PASSWORD: secret
|
38
|
+
ports:
|
39
|
+
- '5435:5432'
|
@@ -3,35 +3,25 @@
|
|
3
3
|
require 'rails-pg-extras'
|
4
4
|
|
5
5
|
namespace :pg_extras do
|
6
|
-
task :establish_connection do
|
7
|
-
if ENV['DATABASE_URL'].present?
|
8
|
-
ActiveRecord::Base.establish_connection(ENV['DATABASE_URL'])
|
9
|
-
else
|
10
|
-
db_config_file = File.read('config/database.yml')
|
11
|
-
db_config = YAML::load(ERB.new(db_config_file).result, aliases: true)
|
12
|
-
ActiveRecord::Base.establish_connection(db_config[Rails.env])
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
6
|
RailsPgExtras::QUERIES.each do |query_name|
|
17
7
|
desc RubyPgExtras.description_for(query_name: query_name)
|
18
|
-
task query_name.to_sym => :
|
8
|
+
task query_name.to_sym => :environment do
|
19
9
|
RailsPgExtras.public_send(query_name)
|
20
10
|
end
|
21
11
|
end
|
22
12
|
|
23
13
|
desc "Generate a PostgreSQL healthcheck report"
|
24
|
-
task diagnose: :
|
14
|
+
task diagnose: :environment do
|
25
15
|
RailsPgExtras.diagnose
|
26
16
|
end
|
27
17
|
|
28
18
|
desc "Display tables metadata metrics"
|
29
|
-
task table_info: :
|
19
|
+
task table_info: :environment do
|
30
20
|
RailsPgExtras.table_info
|
31
21
|
end
|
32
22
|
|
33
23
|
desc "Display indexes metadata metrics"
|
34
|
-
task index_info: :
|
24
|
+
task index_info: :environment do
|
35
25
|
RailsPgExtras.index_info
|
36
26
|
end
|
37
27
|
end
|
data/lib/rails_pg_extras/web.rb
CHANGED
@@ -2,7 +2,7 @@ require "rails_pg_extras/web/engine"
|
|
2
2
|
|
3
3
|
module RailsPgExtras
|
4
4
|
module Web
|
5
|
-
ACTIONS = %i[kill_all pg_stat_statements_reset
|
5
|
+
ACTIONS = %i[kill_all pg_stat_statements_reset add_extensions].freeze
|
6
6
|
|
7
7
|
def self.action_enabled?(action_name)
|
8
8
|
RailsPgExtras.configuration.enabled_web_actions.include?(action_name.to_sym)
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-pg-extras
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- pawurb
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-pg-extras
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4.
|
19
|
+
version: 4.8.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 4.
|
26
|
+
version: 4.8.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rails
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|