26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'app/controllers/pg_hero/home_controller.rb', line 26
def index
@title = "Overview"
@extended = params[:extended]
if @replica
@replication_lag = @database.replication_lag
@good_replication_lag = @replication_lag ? @replication_lag < 5 : true
else
@inactive_replication_slots = @database.replication_slots.select { |r| !r[:active] }
end
@walsender_queries, long_running_queries = @database.long_running_queries.partition { |q| q[:backend_type] == "walsender" }
@autovacuum_queries, @long_running_queries = long_running_queries.partition { |q| q[:query].starts_with?("autovacuum:") }
connection_states = @database.connection_states
@total_connections = connection_states.values.sum
@idle_connections = connection_states["idle in transaction"].to_i
@good_total_connections = @total_connections < @database.total_connections_threshold
@good_idle_connections = @idle_connections < 100
@transaction_id_danger = @database.transaction_id_danger(threshold: 1500000000)
@readable_sequences, @unreadable_sequences = @database.sequences.partition { |s| s[:readable] }
@sequence_danger = @database.sequence_danger(threshold: (params[:sequence_threshold] || 0.9).to_f, sequences: @readable_sequences)
@indexes = @database.indexes
@invalid_indexes = @database.invalid_indexes(indexes: @indexes)
@invalid_constraints = @database.invalid_constraints
@duplicate_indexes = @database.duplicate_indexes(indexes: @indexes)
if @query_stats_enabled
@query_stats = @database.query_stats(historical: true, start_at: 3.hours.ago)
@slow_queries = @database.slow_queries(query_stats: @query_stats)
set_suggested_indexes((params[:min_average_time] || 20).to_f, (params[:min_calls] || 50).to_i)
else
@query_stats_available = @database.query_stats_available?
@query_stats_extension_enabled = @database.query_stats_extension_enabled? if @query_stats_available
@suggested_indexes = []
end
if @extended
@index_hit_rate = @database.index_hit_rate || 0
@table_hit_rate = @database.table_hit_rate || 0
@good_cache_rate = @table_hit_rate >= @database.cache_hit_rate_threshold / 100.0 && @index_hit_rate >= @database.cache_hit_rate_threshold / 100.0
@unused_indexes = @database.unused_indexes(max_scans: 0)
end
@show_migrations = PgHero.show_migrations
end
|