pg_reports 0.3.1 → 0.5.0
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/CHANGELOG.md +140 -0
- data/README.md +129 -4
- data/app/controllers/pg_reports/dashboard_controller.rb +246 -28
- data/app/views/layouts/pg_reports/application.html.erb +283 -1
- data/app/views/pg_reports/dashboard/_show_modals.html.erb +8 -1
- data/app/views/pg_reports/dashboard/_show_scripts.html.erb +240 -41
- data/app/views/pg_reports/dashboard/_show_styles.html.erb +495 -1
- data/app/views/pg_reports/dashboard/index.html.erb +419 -0
- data/app/views/pg_reports/dashboard/show.html.erb +89 -47
- data/config/locales/en.yml +58 -0
- data/config/locales/ru.yml +58 -0
- data/config/locales/uk.yml +13 -0
- data/config/routes.rb +8 -0
- data/lib/pg_reports/configuration.rb +13 -0
- data/lib/pg_reports/dashboard/reports_registry.rb +38 -1
- data/lib/pg_reports/definitions/connections/active_connections.yml +23 -0
- data/lib/pg_reports/definitions/connections/blocking_queries.yml +20 -0
- data/lib/pg_reports/definitions/connections/connection_churn.yml +49 -0
- data/lib/pg_reports/definitions/connections/connection_stats.yml +18 -0
- data/lib/pg_reports/definitions/connections/idle_connections.yml +21 -0
- data/lib/pg_reports/definitions/connections/locks.yml +22 -0
- data/lib/pg_reports/definitions/connections/long_running_queries.yml +43 -0
- data/lib/pg_reports/definitions/connections/pool_saturation.yml +42 -0
- data/lib/pg_reports/definitions/connections/pool_usage.yml +43 -0
- data/lib/pg_reports/definitions/connections/pool_wait_times.yml +44 -0
- data/lib/pg_reports/definitions/indexes/bloated_indexes.yml +43 -0
- data/lib/pg_reports/definitions/indexes/duplicate_indexes.yml +19 -0
- data/lib/pg_reports/definitions/indexes/index_sizes.yml +29 -0
- data/lib/pg_reports/definitions/indexes/index_usage.yml +27 -0
- data/lib/pg_reports/definitions/indexes/invalid_indexes.yml +19 -0
- data/lib/pg_reports/definitions/indexes/missing_indexes.yml +27 -0
- data/lib/pg_reports/definitions/indexes/unused_indexes.yml +41 -0
- data/lib/pg_reports/definitions/queries/all_queries.yml +35 -0
- data/lib/pg_reports/definitions/queries/expensive_queries.yml +43 -0
- data/lib/pg_reports/definitions/queries/heavy_queries.yml +49 -0
- data/lib/pg_reports/definitions/queries/low_cache_hit_queries.yml +47 -0
- data/lib/pg_reports/definitions/queries/missing_index_queries.yml +31 -0
- data/lib/pg_reports/definitions/queries/slow_queries.yml +48 -0
- data/lib/pg_reports/definitions/system/activity_overview.yml +17 -0
- data/lib/pg_reports/definitions/system/cache_stats.yml +18 -0
- data/lib/pg_reports/definitions/system/database_sizes.yml +18 -0
- data/lib/pg_reports/definitions/system/extensions.yml +19 -0
- data/lib/pg_reports/definitions/system/settings.yml +20 -0
- data/lib/pg_reports/definitions/tables/bloated_tables.yml +43 -0
- data/lib/pg_reports/definitions/tables/cache_hit_ratios.yml +26 -0
- data/lib/pg_reports/definitions/tables/recently_modified.yml +27 -0
- data/lib/pg_reports/definitions/tables/row_counts.yml +29 -0
- data/lib/pg_reports/definitions/tables/seq_scans.yml +31 -0
- data/lib/pg_reports/definitions/tables/table_sizes.yml +31 -0
- data/lib/pg_reports/definitions/tables/vacuum_needed.yml +39 -0
- data/lib/pg_reports/explain_analyzer.rb +338 -0
- data/lib/pg_reports/filter.rb +58 -0
- data/lib/pg_reports/module_generator.rb +44 -0
- data/lib/pg_reports/modules/connections.rb +8 -73
- data/lib/pg_reports/modules/indexes.rb +9 -94
- data/lib/pg_reports/modules/queries.rb +9 -100
- data/lib/pg_reports/modules/schema_analysis.rb +154 -0
- data/lib/pg_reports/modules/system.rb +26 -61
- data/lib/pg_reports/modules/tables.rb +9 -96
- data/lib/pg_reports/query_monitor.rb +280 -0
- data/lib/pg_reports/report_definition.rb +161 -0
- data/lib/pg_reports/report_loader.rb +38 -0
- data/lib/pg_reports/sql/connections/connection_churn.sql +37 -0
- data/lib/pg_reports/sql/connections/pool_saturation.sql +90 -0
- data/lib/pg_reports/sql/connections/pool_usage.sql +31 -0
- data/lib/pg_reports/sql/connections/pool_wait_times.sql +19 -0
- data/lib/pg_reports/sql/queries/all_queries.sql +17 -15
- data/lib/pg_reports/sql/queries/expensive_queries.sql +9 -4
- data/lib/pg_reports/sql/queries/heavy_queries.sql +14 -12
- data/lib/pg_reports/sql/queries/low_cache_hit_queries.sql +16 -14
- data/lib/pg_reports/sql/queries/missing_index_queries.sql +18 -16
- data/lib/pg_reports/sql/queries/slow_queries.sql +14 -12
- data/lib/pg_reports/sql/schema_analysis/unique_indexes.sql +35 -0
- data/lib/pg_reports/sql/system/databases_list.sql +8 -0
- data/lib/pg_reports/version.rb +1 -1
- data/lib/pg_reports.rb +26 -0
- metadata +93 -3
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
-- Requires pg_stat_statements extension
|
|
3
3
|
|
|
4
4
|
WITH total AS (
|
|
5
|
-
SELECT SUM(total_exec_time) AS total_time
|
|
6
|
-
FROM pg_stat_statements
|
|
7
|
-
|
|
5
|
+
SELECT SUM(s.total_exec_time) AS total_time
|
|
6
|
+
FROM pg_stat_statements s
|
|
7
|
+
JOIN pg_database d ON s.dbid = d.oid
|
|
8
|
+
WHERE s.calls > 0
|
|
9
|
+
AND d.datname = current_database()
|
|
8
10
|
)
|
|
9
11
|
SELECT
|
|
10
12
|
s.query,
|
|
@@ -13,10 +15,13 @@ SELECT
|
|
|
13
15
|
ROUND((s.total_exec_time * 100.0 / t.total_time)::numeric, 2) AS percent_of_total,
|
|
14
16
|
ROUND((s.mean_exec_time)::numeric, 2) AS mean_time_ms,
|
|
15
17
|
s.rows
|
|
16
|
-
FROM pg_stat_statements s
|
|
18
|
+
FROM pg_stat_statements s
|
|
19
|
+
JOIN pg_database d ON s.dbid = d.oid
|
|
20
|
+
CROSS JOIN total t
|
|
17
21
|
WHERE s.calls > 0
|
|
18
22
|
AND s.query NOT LIKE '%pg_stat_statements%'
|
|
19
23
|
AND s.query NOT LIKE 'COMMIT%'
|
|
20
24
|
AND s.query NOT LIKE 'BEGIN%'
|
|
25
|
+
AND d.datname = current_database()
|
|
21
26
|
ORDER BY s.total_exec_time DESC
|
|
22
27
|
LIMIT 100;
|
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
-- Requires pg_stat_statements extension
|
|
3
3
|
|
|
4
4
|
SELECT
|
|
5
|
-
query,
|
|
6
|
-
calls,
|
|
7
|
-
ROUND((total_exec_time)::numeric, 2) AS total_time_ms,
|
|
8
|
-
ROUND((mean_exec_time)::numeric, 2) AS mean_time_ms,
|
|
9
|
-
rows,
|
|
10
|
-
ROUND((shared_blks_hit * 100.0 / NULLIF(shared_blks_hit + shared_blks_read, 0))::numeric, 2) AS cache_hit_ratio
|
|
11
|
-
FROM pg_stat_statements
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
AND query NOT LIKE '
|
|
15
|
-
AND query NOT LIKE '
|
|
16
|
-
|
|
5
|
+
s.query,
|
|
6
|
+
s.calls,
|
|
7
|
+
ROUND((s.total_exec_time)::numeric, 2) AS total_time_ms,
|
|
8
|
+
ROUND((s.mean_exec_time)::numeric, 2) AS mean_time_ms,
|
|
9
|
+
s.rows,
|
|
10
|
+
ROUND((s.shared_blks_hit * 100.0 / NULLIF(s.shared_blks_hit + s.shared_blks_read, 0))::numeric, 2) AS cache_hit_ratio
|
|
11
|
+
FROM pg_stat_statements s
|
|
12
|
+
JOIN pg_database d ON s.dbid = d.oid
|
|
13
|
+
WHERE s.calls > 0
|
|
14
|
+
AND s.query NOT LIKE '%pg_stat_statements%'
|
|
15
|
+
AND s.query NOT LIKE 'COMMIT%'
|
|
16
|
+
AND s.query NOT LIKE 'BEGIN%'
|
|
17
|
+
AND d.datname = current_database()
|
|
18
|
+
ORDER BY s.calls DESC
|
|
17
19
|
LIMIT 100;
|
|
@@ -2,18 +2,20 @@
|
|
|
2
2
|
-- Requires pg_stat_statements extension
|
|
3
3
|
|
|
4
4
|
SELECT
|
|
5
|
-
query,
|
|
6
|
-
calls,
|
|
7
|
-
ROUND((shared_blks_hit * 100.0 / NULLIF(shared_blks_hit + shared_blks_read, 0))::numeric, 2) AS cache_hit_ratio,
|
|
8
|
-
shared_blks_hit,
|
|
9
|
-
shared_blks_read,
|
|
10
|
-
ROUND((total_exec_time)::numeric, 2) AS total_time_ms,
|
|
11
|
-
ROUND((mean_exec_time)::numeric, 2) AS mean_time_ms
|
|
12
|
-
FROM pg_stat_statements
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
AND
|
|
16
|
-
AND query NOT LIKE '
|
|
17
|
-
AND query NOT LIKE '
|
|
18
|
-
|
|
5
|
+
s.query,
|
|
6
|
+
s.calls,
|
|
7
|
+
ROUND((s.shared_blks_hit * 100.0 / NULLIF(s.shared_blks_hit + s.shared_blks_read, 0))::numeric, 2) AS cache_hit_ratio,
|
|
8
|
+
s.shared_blks_hit,
|
|
9
|
+
s.shared_blks_read,
|
|
10
|
+
ROUND((s.total_exec_time)::numeric, 2) AS total_time_ms,
|
|
11
|
+
ROUND((s.mean_exec_time)::numeric, 2) AS mean_time_ms
|
|
12
|
+
FROM pg_stat_statements s
|
|
13
|
+
JOIN pg_database d ON s.dbid = d.oid
|
|
14
|
+
WHERE s.calls > 10
|
|
15
|
+
AND (s.shared_blks_hit + s.shared_blks_read) > 0
|
|
16
|
+
AND s.query NOT LIKE '%pg_stat_statements%'
|
|
17
|
+
AND s.query NOT LIKE 'COMMIT%'
|
|
18
|
+
AND s.query NOT LIKE 'BEGIN%'
|
|
19
|
+
AND d.datname = current_database()
|
|
20
|
+
ORDER BY (s.shared_blks_hit * 1.0 / NULLIF(s.shared_blks_hit + s.shared_blks_read, 0)) ASC
|
|
19
21
|
LIMIT 100;
|
|
@@ -3,23 +3,25 @@
|
|
|
3
3
|
-- Requires pg_stat_statements extension
|
|
4
4
|
|
|
5
5
|
SELECT
|
|
6
|
-
query,
|
|
7
|
-
calls,
|
|
8
|
-
ROUND((total_exec_time)::numeric, 2) AS total_time_ms,
|
|
9
|
-
ROUND((mean_exec_time)::numeric, 2) AS mean_time_ms,
|
|
10
|
-
rows,
|
|
6
|
+
s.query,
|
|
7
|
+
s.calls,
|
|
8
|
+
ROUND((s.total_exec_time)::numeric, 2) AS total_time_ms,
|
|
9
|
+
ROUND((s.mean_exec_time)::numeric, 2) AS mean_time_ms,
|
|
10
|
+
s.rows,
|
|
11
11
|
-- Heuristic: high rows examined per call may indicate missing index
|
|
12
|
-
ROUND((rows / NULLIF(calls, 0))::numeric, 0) AS rows_per_call,
|
|
12
|
+
ROUND((s.rows / NULLIF(s.calls, 0))::numeric, 0) AS rows_per_call,
|
|
13
13
|
-- High read/hit ratio suggests disk access (possible seq scan)
|
|
14
|
-
ROUND((shared_blks_read * 100.0 / NULLIF(shared_blks_hit + shared_blks_read, 0))::numeric, 2) AS disk_read_ratio
|
|
15
|
-
FROM pg_stat_statements
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
AND
|
|
19
|
-
AND
|
|
20
|
-
AND query NOT LIKE '
|
|
21
|
-
AND query NOT LIKE '
|
|
14
|
+
ROUND((s.shared_blks_read * 100.0 / NULLIF(s.shared_blks_hit + s.shared_blks_read, 0))::numeric, 2) AS disk_read_ratio
|
|
15
|
+
FROM pg_stat_statements s
|
|
16
|
+
JOIN pg_database d ON s.dbid = d.oid
|
|
17
|
+
WHERE s.calls > 10
|
|
18
|
+
AND (s.rows / NULLIF(s.calls, 0)) > 100
|
|
19
|
+
AND s.mean_exec_time > 10
|
|
20
|
+
AND s.query NOT LIKE '%pg_stat_statements%'
|
|
21
|
+
AND s.query NOT LIKE 'COMMIT%'
|
|
22
|
+
AND s.query NOT LIKE 'BEGIN%'
|
|
22
23
|
-- Focus on SELECT statements
|
|
23
|
-
AND (query ILIKE 'SELECT%' OR query ILIKE '%WHERE%')
|
|
24
|
-
|
|
24
|
+
AND (s.query ILIKE 'SELECT%' OR s.query ILIKE '%WHERE%')
|
|
25
|
+
AND d.datname = current_database()
|
|
26
|
+
ORDER BY (s.rows / NULLIF(s.calls, 0)) * s.calls DESC
|
|
25
27
|
LIMIT 100;
|
|
@@ -2,16 +2,18 @@
|
|
|
2
2
|
-- Requires pg_stat_statements extension
|
|
3
3
|
|
|
4
4
|
SELECT
|
|
5
|
-
query,
|
|
6
|
-
calls,
|
|
7
|
-
ROUND((mean_exec_time)::numeric, 2) AS mean_time_ms,
|
|
8
|
-
ROUND((total_exec_time)::numeric, 2) AS total_time_ms,
|
|
9
|
-
ROUND((rows / NULLIF(calls, 0))::numeric, 2) AS rows_per_call,
|
|
10
|
-
ROUND((shared_blks_hit * 100.0 / NULLIF(shared_blks_hit + shared_blks_read, 0))::numeric, 2) AS cache_hit_ratio
|
|
11
|
-
FROM pg_stat_statements
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
AND query NOT LIKE '
|
|
15
|
-
AND query NOT LIKE '
|
|
16
|
-
|
|
5
|
+
s.query,
|
|
6
|
+
s.calls,
|
|
7
|
+
ROUND((s.mean_exec_time)::numeric, 2) AS mean_time_ms,
|
|
8
|
+
ROUND((s.total_exec_time)::numeric, 2) AS total_time_ms,
|
|
9
|
+
ROUND((s.rows / NULLIF(s.calls, 0))::numeric, 2) AS rows_per_call,
|
|
10
|
+
ROUND((s.shared_blks_hit * 100.0 / NULLIF(s.shared_blks_hit + s.shared_blks_read, 0))::numeric, 2) AS cache_hit_ratio
|
|
11
|
+
FROM pg_stat_statements s
|
|
12
|
+
JOIN pg_database d ON s.dbid = d.oid
|
|
13
|
+
WHERE s.calls > 0
|
|
14
|
+
AND s.query NOT LIKE '%pg_stat_statements%'
|
|
15
|
+
AND s.query NOT LIKE 'COMMIT%'
|
|
16
|
+
AND s.query NOT LIKE 'BEGIN%'
|
|
17
|
+
AND d.datname = current_database()
|
|
18
|
+
ORDER BY s.mean_exec_time DESC
|
|
17
19
|
LIMIT 100;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
-- Unique indexes: all unique indexes in the database
|
|
2
|
+
-- Used for validation consistency analysis
|
|
3
|
+
|
|
4
|
+
SELECT
|
|
5
|
+
n.nspname AS schema_name,
|
|
6
|
+
t.relname AS table_name,
|
|
7
|
+
i.relname AS index_name,
|
|
8
|
+
array_agg(a.attname ORDER BY array_position(ix.indkey, a.attnum)) AS column_names,
|
|
9
|
+
pg_get_indexdef(i.oid) AS index_definition,
|
|
10
|
+
CASE
|
|
11
|
+
WHEN ix.indisprimary THEN 'primary_key'
|
|
12
|
+
WHEN ix.indisunique THEN 'unique'
|
|
13
|
+
ELSE 'regular'
|
|
14
|
+
END AS index_type
|
|
15
|
+
FROM
|
|
16
|
+
pg_index ix
|
|
17
|
+
JOIN pg_class i ON i.oid = ix.indexrelid
|
|
18
|
+
JOIN pg_class t ON t.oid = ix.indrelid
|
|
19
|
+
JOIN pg_namespace n ON n.oid = t.relnamespace
|
|
20
|
+
JOIN pg_attribute a ON a.attrelid = t.oid AND a.attnum = ANY(ix.indkey)
|
|
21
|
+
WHERE
|
|
22
|
+
n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
|
|
23
|
+
AND (ix.indisunique = true OR ix.indisprimary = true)
|
|
24
|
+
AND t.relkind = 'r'
|
|
25
|
+
GROUP BY
|
|
26
|
+
n.nspname,
|
|
27
|
+
t.relname,
|
|
28
|
+
i.relname,
|
|
29
|
+
i.oid,
|
|
30
|
+
ix.indisprimary,
|
|
31
|
+
ix.indisunique
|
|
32
|
+
ORDER BY
|
|
33
|
+
n.nspname,
|
|
34
|
+
t.relname,
|
|
35
|
+
i.relname;
|
data/lib/pg_reports/version.rb
CHANGED
data/lib/pg_reports.rb
CHANGED
|
@@ -12,6 +12,14 @@ require_relative "pg_reports/executor"
|
|
|
12
12
|
require_relative "pg_reports/report"
|
|
13
13
|
require_relative "pg_reports/telegram_sender"
|
|
14
14
|
require_relative "pg_reports/annotation_parser"
|
|
15
|
+
require_relative "pg_reports/explain_analyzer"
|
|
16
|
+
require_relative "pg_reports/query_monitor"
|
|
17
|
+
|
|
18
|
+
# YAML-based report system
|
|
19
|
+
require_relative "pg_reports/filter"
|
|
20
|
+
require_relative "pg_reports/report_definition"
|
|
21
|
+
require_relative "pg_reports/report_loader"
|
|
22
|
+
require_relative "pg_reports/module_generator"
|
|
15
23
|
|
|
16
24
|
# Modules
|
|
17
25
|
require_relative "pg_reports/modules/queries"
|
|
@@ -19,6 +27,7 @@ require_relative "pg_reports/modules/indexes"
|
|
|
19
27
|
require_relative "pg_reports/modules/tables"
|
|
20
28
|
require_relative "pg_reports/modules/connections"
|
|
21
29
|
require_relative "pg_reports/modules/system"
|
|
30
|
+
require_relative "pg_reports/modules/schema_analysis"
|
|
22
31
|
|
|
23
32
|
# Dashboard
|
|
24
33
|
require_relative "pg_reports/dashboard/reports_registry"
|
|
@@ -56,6 +65,10 @@ module PgReports
|
|
|
56
65
|
:enable_pg_stat_statements!,
|
|
57
66
|
to: Modules::System
|
|
58
67
|
|
|
68
|
+
# Schema analysis methods
|
|
69
|
+
delegate :missing_validations,
|
|
70
|
+
to: Modules::SchemaAnalysis
|
|
71
|
+
|
|
59
72
|
# Generate a comprehensive database health report
|
|
60
73
|
# @return [Report] Combined health report
|
|
61
74
|
def health_report
|
|
@@ -110,5 +123,18 @@ module PgReports
|
|
|
110
123
|
def system
|
|
111
124
|
Modules::System
|
|
112
125
|
end
|
|
126
|
+
|
|
127
|
+
def schema_analysis
|
|
128
|
+
Modules::SchemaAnalysis
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
# Reload YAML report definitions and regenerate module methods
|
|
132
|
+
def reload_definitions!
|
|
133
|
+
ReportLoader.reload!
|
|
134
|
+
ModuleGenerator.generate!
|
|
135
|
+
end
|
|
113
136
|
end
|
|
114
137
|
end
|
|
138
|
+
|
|
139
|
+
# Generate YAML-based methods on load
|
|
140
|
+
PgReports::ModuleGenerator.generate!
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pg_reports
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Eldar Avatov
|
|
@@ -10,7 +10,49 @@ cert_chain: []
|
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
|
-
name:
|
|
13
|
+
name: activesupport
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '5.0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '5.0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: activerecord
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '5.0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '5.0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: actionpack
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '5.0'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '5.0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: railties
|
|
14
56
|
requirement: !ruby/object:Gem::Requirement
|
|
15
57
|
requirements:
|
|
16
58
|
- - ">="
|
|
@@ -121,21 +163,67 @@ files:
|
|
|
121
163
|
- lib/pg_reports/annotation_parser.rb
|
|
122
164
|
- lib/pg_reports/configuration.rb
|
|
123
165
|
- lib/pg_reports/dashboard/reports_registry.rb
|
|
166
|
+
- lib/pg_reports/definitions/connections/active_connections.yml
|
|
167
|
+
- lib/pg_reports/definitions/connections/blocking_queries.yml
|
|
168
|
+
- lib/pg_reports/definitions/connections/connection_churn.yml
|
|
169
|
+
- lib/pg_reports/definitions/connections/connection_stats.yml
|
|
170
|
+
- lib/pg_reports/definitions/connections/idle_connections.yml
|
|
171
|
+
- lib/pg_reports/definitions/connections/locks.yml
|
|
172
|
+
- lib/pg_reports/definitions/connections/long_running_queries.yml
|
|
173
|
+
- lib/pg_reports/definitions/connections/pool_saturation.yml
|
|
174
|
+
- lib/pg_reports/definitions/connections/pool_usage.yml
|
|
175
|
+
- lib/pg_reports/definitions/connections/pool_wait_times.yml
|
|
176
|
+
- lib/pg_reports/definitions/indexes/bloated_indexes.yml
|
|
177
|
+
- lib/pg_reports/definitions/indexes/duplicate_indexes.yml
|
|
178
|
+
- lib/pg_reports/definitions/indexes/index_sizes.yml
|
|
179
|
+
- lib/pg_reports/definitions/indexes/index_usage.yml
|
|
180
|
+
- lib/pg_reports/definitions/indexes/invalid_indexes.yml
|
|
181
|
+
- lib/pg_reports/definitions/indexes/missing_indexes.yml
|
|
182
|
+
- lib/pg_reports/definitions/indexes/unused_indexes.yml
|
|
183
|
+
- lib/pg_reports/definitions/queries/all_queries.yml
|
|
184
|
+
- lib/pg_reports/definitions/queries/expensive_queries.yml
|
|
185
|
+
- lib/pg_reports/definitions/queries/heavy_queries.yml
|
|
186
|
+
- lib/pg_reports/definitions/queries/low_cache_hit_queries.yml
|
|
187
|
+
- lib/pg_reports/definitions/queries/missing_index_queries.yml
|
|
188
|
+
- lib/pg_reports/definitions/queries/slow_queries.yml
|
|
189
|
+
- lib/pg_reports/definitions/system/activity_overview.yml
|
|
190
|
+
- lib/pg_reports/definitions/system/cache_stats.yml
|
|
191
|
+
- lib/pg_reports/definitions/system/database_sizes.yml
|
|
192
|
+
- lib/pg_reports/definitions/system/extensions.yml
|
|
193
|
+
- lib/pg_reports/definitions/system/settings.yml
|
|
194
|
+
- lib/pg_reports/definitions/tables/bloated_tables.yml
|
|
195
|
+
- lib/pg_reports/definitions/tables/cache_hit_ratios.yml
|
|
196
|
+
- lib/pg_reports/definitions/tables/recently_modified.yml
|
|
197
|
+
- lib/pg_reports/definitions/tables/row_counts.yml
|
|
198
|
+
- lib/pg_reports/definitions/tables/seq_scans.yml
|
|
199
|
+
- lib/pg_reports/definitions/tables/table_sizes.yml
|
|
200
|
+
- lib/pg_reports/definitions/tables/vacuum_needed.yml
|
|
124
201
|
- lib/pg_reports/engine.rb
|
|
125
202
|
- lib/pg_reports/error.rb
|
|
126
203
|
- lib/pg_reports/executor.rb
|
|
204
|
+
- lib/pg_reports/explain_analyzer.rb
|
|
205
|
+
- lib/pg_reports/filter.rb
|
|
206
|
+
- lib/pg_reports/module_generator.rb
|
|
127
207
|
- lib/pg_reports/modules/connections.rb
|
|
128
208
|
- lib/pg_reports/modules/indexes.rb
|
|
129
209
|
- lib/pg_reports/modules/queries.rb
|
|
210
|
+
- lib/pg_reports/modules/schema_analysis.rb
|
|
130
211
|
- lib/pg_reports/modules/system.rb
|
|
131
212
|
- lib/pg_reports/modules/tables.rb
|
|
213
|
+
- lib/pg_reports/query_monitor.rb
|
|
132
214
|
- lib/pg_reports/report.rb
|
|
215
|
+
- lib/pg_reports/report_definition.rb
|
|
216
|
+
- lib/pg_reports/report_loader.rb
|
|
133
217
|
- lib/pg_reports/sql/connections/active_connections.sql
|
|
134
218
|
- lib/pg_reports/sql/connections/blocking_queries.sql
|
|
219
|
+
- lib/pg_reports/sql/connections/connection_churn.sql
|
|
135
220
|
- lib/pg_reports/sql/connections/connection_stats.sql
|
|
136
221
|
- lib/pg_reports/sql/connections/idle_connections.sql
|
|
137
222
|
- lib/pg_reports/sql/connections/locks.sql
|
|
138
223
|
- lib/pg_reports/sql/connections/long_running_queries.sql
|
|
224
|
+
- lib/pg_reports/sql/connections/pool_saturation.sql
|
|
225
|
+
- lib/pg_reports/sql/connections/pool_usage.sql
|
|
226
|
+
- lib/pg_reports/sql/connections/pool_wait_times.sql
|
|
139
227
|
- lib/pg_reports/sql/indexes/bloated_indexes.sql
|
|
140
228
|
- lib/pg_reports/sql/indexes/duplicate_indexes.sql
|
|
141
229
|
- lib/pg_reports/sql/indexes/index_sizes.sql
|
|
@@ -149,9 +237,11 @@ files:
|
|
|
149
237
|
- lib/pg_reports/sql/queries/low_cache_hit_queries.sql
|
|
150
238
|
- lib/pg_reports/sql/queries/missing_index_queries.sql
|
|
151
239
|
- lib/pg_reports/sql/queries/slow_queries.sql
|
|
240
|
+
- lib/pg_reports/sql/schema_analysis/unique_indexes.sql
|
|
152
241
|
- lib/pg_reports/sql/system/activity_overview.sql
|
|
153
242
|
- lib/pg_reports/sql/system/cache_stats.sql
|
|
154
243
|
- lib/pg_reports/sql/system/database_sizes.sql
|
|
244
|
+
- lib/pg_reports/sql/system/databases_list.sql
|
|
155
245
|
- lib/pg_reports/sql/system/extensions.sql
|
|
156
246
|
- lib/pg_reports/sql/system/live_metrics.sql
|
|
157
247
|
- lib/pg_reports/sql/system/settings.sql
|
|
@@ -186,7 +276,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
186
276
|
- !ruby/object:Gem::Version
|
|
187
277
|
version: '0'
|
|
188
278
|
requirements: []
|
|
189
|
-
rubygems_version:
|
|
279
|
+
rubygems_version: 3.7.1
|
|
190
280
|
specification_version: 4
|
|
191
281
|
summary: PostgreSQL analysis and reporting tool with Telegram integration
|
|
192
282
|
test_files: []
|