rails-pg-extras 3.0.6 → 3.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7e964bd79450c28fff1d34129197b25e09b5dad8a3a6a355a1370ba7de725a2e
4
- data.tar.gz: bf67d3b1929cd8495fce8cc9b4f867e8367564b26c118d9147af7dfb32e58115
3
+ metadata.gz: 4e031e302ba7d1d37ee90ac720128a69fb39c75d83b98bf2f7163e6689019b71
4
+ data.tar.gz: 5dc53d1aa42831aaa4b208efb60ea0757e2703e47260b63c886d5b242577a216
5
5
  SHA512:
6
- metadata.gz: d82267114ee40e3ed8d39b2d12427f101a98a9c98f0505ca6ae84a60637e98e676193ba9e21727f1989bb32b95e41ac8414ab6dd6b7084d0f3bba381a4889901
7
- data.tar.gz: 32a5bdee701af1f3407a092016a36360000d459ac447e770507c6ec723de072574f52270862f22c8d129bcb055402631121b83c55b54058347e05b098080ee84
6
+ metadata.gz: febe02de1484d4b29d444bdba8b74b731a6516c93ece6d3f798a39022a93c9447eb14b39edcaa5a6685c39da8d02e107fda3e5760a02922ef2172fbf08bb82a2
7
+ data.tar.gz: 863595f41a38414e4f8e2fc18cddea442b5f90f9ba2ebc2e906a8db704ef3a9a39c9fc7ad504ba332e8c780018fe1ebbd590d98914e5edadb664afae29b3ad49
data/README.md CHANGED
@@ -103,6 +103,8 @@ The simplest way to start using pg-extras is to execute a `diagnose` method. It
103
103
 
104
104
  ```ruby
105
105
  RailsPGExtras.diagnose
106
+
107
+ $ rake pg_extras:diagnose
106
108
  ```
107
109
 
108
110
  ![Diagnose report](https://github.com/pawurb/rails-pg-extras/raw/master/rails-pg-extras-diagnose.png)
@@ -111,6 +113,38 @@ Keep reading to learn about methods that `diagnose` uses under the hood.
111
113
 
112
114
  ## Available methods
113
115
 
116
+ ### `table_info`
117
+
118
+ This method displays metadata metrics for all or a selected table. You can use it to check the table's size, its cache hit metrics, and whether it is correctly indexed. Many sequential scans or no index scans are potential indicators of misconfigured indexes. This method aggregates data provided by other methods in an easy to analyze summary format.
119
+
120
+ ```ruby
121
+ RailsPGExtras.table_info(args: { table_name: "users" })
122
+
123
+ | Table name | Table size | Table cache hit | Indexes cache hit | Estimated rows | Sequential scans | Indexes scans |
124
+ +------------+------------+-------------------+--------------------+----------------+------------------+---------------+
125
+ | users | 2432 kB | 0.999966685701511 | 0.9988780464661853 | 16650 | 2128 | 512496 |
126
+
127
+ ```
128
+
129
+ ### `index_info`
130
+
131
+ This method returns summary info about database indexes. You can check index size, how often it is used and what percentage of its total size are NULL values. Like the previous method, it aggregates data from other helper methods in an easy-to-digest format.
132
+
133
+ ```ruby
134
+
135
+ RailsPGExtras.index_info(args: { table_name: "users" })
136
+
137
+ | Index name | Table name | Columns | Index size | Index scans | Null frac |
138
+ +-------------------------------+------------+----------------+------------+-------------+-----------+
139
+ | users_pkey | users | id | 1152 kB | 163007 | 0.00% |
140
+ | index_users_on_slack_id | users | slack_id | 1080 kB | 258870 | 0.00% |
141
+ | index_users_on_team_id | users | team_id | 816 kB | 70962 | 0.00% |
142
+ | index_users_on_uuid | users | uuid | 1032 kB | 0 | 0.00% |
143
+ | index_users_on_block_uuid | users | block_uuid | 776 kB | 19502 | 100.00% |
144
+ | index_users_on_api_auth_token | users | api_auth_token | 1744 kB | 156 | 0.00% |
145
+
146
+ ```
147
+
114
148
  ### `cache_hit`
115
149
 
116
150
  ```ruby
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsPGExtras
4
+ class IndexInfo < RubyPGExtras::IndexInfo
5
+ private
6
+
7
+ def query_module
8
+ RailsPGExtras
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsPGExtras
4
+ class IndexInfoPrint < RubyPGExtras::IndexInfoPrint
5
+ end
6
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsPGExtras
4
+ class TableInfo < RubyPGExtras::TableInfo
5
+ private
6
+
7
+ def query_module
8
+ RailsPGExtras
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsPGExtras
4
+ class TableInfoPrint < RubyPGExtras::TableInfoPrint
5
+ end
6
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsPGExtras
4
- VERSION = "3.0.6"
4
+ VERSION = "3.2.4"
5
5
  end
@@ -4,6 +4,10 @@ require 'terminal-table'
4
4
  require 'ruby-pg-extras'
5
5
  require 'rails-pg-extras/diagnose_data'
6
6
  require 'rails-pg-extras/diagnose_print'
7
+ require 'rails-pg-extras/index_info'
8
+ require 'rails-pg-extras/index_info_print'
9
+ require 'rails-pg-extras/table_info'
10
+ require 'rails-pg-extras/table_info_print'
7
11
 
8
12
  module RailsPGExtras
9
13
  QUERIES = RubyPGExtras::QUERIES
@@ -58,6 +62,34 @@ module RailsPGExtras
58
62
  end
59
63
  end
60
64
 
65
+ def self.index_info(args: {}, in_format: :display_table)
66
+ data = RailsPGExtras::IndexInfo.call(args[:table_name])
67
+
68
+ if in_format == :display_table
69
+ RailsPGExtras::IndexInfoPrint.call(data)
70
+ elsif in_format == :hash
71
+ data
72
+ elsif in_format == :array
73
+ data.map(&:values)
74
+ else
75
+ raise "Invalid 'in_format' argument!"
76
+ end
77
+ end
78
+
79
+ def self.table_info(args: {}, in_format: :display_table)
80
+ data = RailsPGExtras::TableInfo.call(args[:table_name])
81
+
82
+ if in_format == :display_table
83
+ RailsPGExtras::TableInfoPrint.call(data)
84
+ elsif in_format == :hash
85
+ data
86
+ elsif in_format == :array
87
+ data.map(&:values)
88
+ else
89
+ raise "Invalid 'in_format' argument!"
90
+ end
91
+ end
92
+
61
93
  def self.connection
62
94
  ActiveRecord::Base.connection
63
95
  end
data/spec/smoke_spec.rb CHANGED
@@ -3,11 +3,6 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe RailsPGExtras do
6
- before(:all) do
7
- RailsPGExtras.connection.execute("CREATE EXTENSION IF NOT EXISTS pg_buffercache;")
8
- RubyPGExtras.connection.exec("CREATE EXTENSION IF NOT EXISTS pg_stat_statements;")
9
- end
10
-
11
6
  RailsPGExtras::QUERIES.each do |query_name|
12
7
  it "#{query_name} query can be executed" do
13
8
  expect do
@@ -18,4 +13,18 @@ describe RailsPGExtras do
18
13
  end.not_to raise_error
19
14
  end
20
15
  end
16
+
17
+ it "runs the custom methods" do
18
+ expect do
19
+ RailsPGExtras.diagnose(in_format: :hash)
20
+ end.not_to raise_error
21
+
22
+ expect do
23
+ RailsPGExtras.index_info(in_format: :hash)
24
+ end.not_to raise_error
25
+
26
+ expect do
27
+ RailsPGExtras.table_info(in_format: :hash)
28
+ end.not_to raise_error
29
+ end
21
30
  end
data/spec/spec_helper.rb CHANGED
@@ -24,6 +24,9 @@ RSpec.configure do |config|
24
24
  ActiveRecord::Base.establish_connection(
25
25
  ENV.fetch("DATABASE_URL")
26
26
  )
27
+ RailsPGExtras.connection.execute("CREATE EXTENSION IF NOT EXISTS pg_stat_statements;")
28
+ RailsPGExtras.connection.execute("CREATE EXTENSION IF NOT EXISTS pg_buffercache;")
29
+ RailsPGExtras.connection.execute("CREATE EXTENSION IF NOT EXISTS sslinfo;")
27
30
  end
28
31
 
29
32
  config.after :suite do
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: 3.0.6
4
+ version: 3.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - pawurb
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-28 00:00:00.000000000 Z
11
+ date: 2021-12-21 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: 3.0.6
19
+ version: 3.2.4
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: 3.0.6
26
+ version: 3.2.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activerecord
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -85,7 +85,11 @@ files:
85
85
  - lib/rails-pg-extras.rb
86
86
  - lib/rails-pg-extras/diagnose_data.rb
87
87
  - lib/rails-pg-extras/diagnose_print.rb
88
+ - lib/rails-pg-extras/index_info.rb
89
+ - lib/rails-pg-extras/index_info_print.rb
88
90
  - lib/rails-pg-extras/railtie.rb
91
+ - lib/rails-pg-extras/table_info.rb
92
+ - lib/rails-pg-extras/table_info_print.rb
89
93
  - lib/rails-pg-extras/tasks/all.rake
90
94
  - lib/rails-pg-extras/version.rb
91
95
  - rails-pg-extras-diagnose.png
@@ -112,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
116
  - !ruby/object:Gem::Version
113
117
  version: '0'
114
118
  requirements: []
115
- rubygems_version: 3.1.6
119
+ rubygems_version: 3.0.3
116
120
  signing_key:
117
121
  specification_version: 4
118
122
  summary: Rails PostgreSQL performance database insights