Module: SqlGenius::DatabaseAnalysis

Extended by:
ActiveSupport::Concern
Included in:
QueriesController
Defined in:
app/controllers/concerns/sql_genius/database_analysis.rb

Instance Method Summary collapse

Instance Method Details

#duplicate_indexesObject



7
8
9
10
11
12
# File 'app/controllers/concerns/sql_genius/database_analysis.rb', line 7

def duplicate_indexes
  duplicates = SqlGenius::Core::Analysis::DuplicateIndexes
    .new(rails_connection, blocked_tables: sql_genius_config.blocked_tables)
    .call
  render(json: duplicates)
end

#query_statsObject



19
20
21
22
23
24
25
26
# File 'app/controllers/concerns/sql_genius/database_analysis.rb', line 19

def query_stats
  sort = params[:sort].to_s
  limit = params.fetch(:limit, SqlGenius::Core::Analysis::QueryStats::MAX_LIMIT).to_i
  queries = SqlGenius::Core::Analysis::QueryStats.new(rails_connection).call(sort: sort, limit: limit)
  render(json: queries)
rescue ActiveRecord::StatementInvalid => e
  render(json: { error: "#{query_stats_source_name} #{e.message.split(":").last.strip}" }, status: :unprocessable_entity)
end

#server_overviewObject



42
43
44
45
46
47
# File 'app/controllers/concerns/sql_genius/database_analysis.rb', line 42

def server_overview
  overview = SqlGenius::Core::Analysis::ServerOverview.new(rails_connection).call
  render(json: overview)
rescue => e
  render(json: { error: "Failed to load server overview: #{e.message}" }, status: :unprocessable_entity)
end

#table_sizesObject



14
15
16
17
# File 'app/controllers/concerns/sql_genius/database_analysis.rb', line 14

def table_sizes
  tables = SqlGenius::Core::Analysis::TableSizes.new(rails_connection).call
  render(json: tables)
end

#unused_indexesObject



28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/controllers/concerns/sql_genius/database_analysis.rb', line 28

def unused_indexes
  result = SqlGenius::Core::Analysis::UnusedIndexes.new(
    rails_connection,
    min_scans: sql_genius_config.min_unused_index_scans,
  ).call
  render(json: {
    indexes: result.indexes,
    stats_reset_at: result.stats_reset_at,
    min_scans: result.min_scans,
  })
rescue ActiveRecord::StatementInvalid => e
  render(json: { error: "#{unused_indexes_source_name} #{e.message.split(":").last.strip}" }, status: :unprocessable_entity)
end