Class: Dbviewer::HomeController

Inherits:
ApplicationController show all
Defined in:
app/controllers/dbviewer/home_controller.rb

Instance Method Summary collapse

Methods included from ErrorHandling

#handle_database_error, #log_error

Methods included from DatabaseOperations

#calculate_schema_size, #current_table?, #database_manager, #execute_query, #export_table_to_csv, #fetch_database_analytics, #fetch_filtered_record_count, #fetch_mini_erd_for_table, #fetch_table_columns, #fetch_table_metadata, #fetch_table_record_count, #fetch_table_records, #fetch_table_relationships, #fetch_tables_with_stats, #get_database_name, #prepare_query, #safe_quote_table_name, #table_query_operations

Instance Method Details

#analyticsObject



8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'app/controllers/dbviewer/home_controller.rb', line 8

def analytics
  # This method is deprecated but kept for backward compatibility
  analytics_data = fetch_database_analytics
  # Remove record data which will be served by the records endpoint
  analytics_data.delete(:total_records)
  analytics_data.delete(:largest_tables)
  analytics_data.delete(:empty_tables)
  analytics_data.delete(:avg_records_per_table)

  respond_to do |format|
    format.json { render json: analytics_data }
  end
end

#database_sizeObject



51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'app/controllers/dbviewer/home_controller.rb', line 51

def database_size
  begin
    size = calculate_schema_size

    respond_to do |format|
      format.json { render json: { schema_size: size } }
    end
  rescue => e
    Rails.logger.error("Error calculating schema size: #{e.message}")
    respond_to do |format|
      format.json { render json: { schema_size: nil, error: e.message }, status: :internal_server_error }
    end
  end
end

#indexObject



3
4
5
6
# File 'app/controllers/dbviewer/home_controller.rb', line 3

def index
  # Load page immediately without heavy data
  # Data will be loaded asynchronously via AJAX
end

#recent_queriesObject



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'app/controllers/dbviewer/home_controller.rb', line 81

def recent_queries
  @recent_queries = if Dbviewer.configuration.enable_query_logging
    Dbviewer::Logger.instance.recent_queries(limit: 10)
  else
    []
  end

  respond_to do |format|
    format.json do
      render json: {
        enabled: Dbviewer.configuration.enable_query_logging,
        queries: @recent_queries
      }
    end
  end
end

#recordsObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'app/controllers/dbviewer/home_controller.rb', line 66

def records
  tables = fetch_tables_with_stats(include_record_counts: true)

  records_data = {
    total_records: tables.sum { |t| t[:record_count] },
    largest_tables: tables.sort_by { |t| -t[:record_count] }.first(10),
    empty_tables: tables.select { |t| t[:record_count] == 0 },
    avg_records_per_table: tables.any? ? (tables.sum { |t| t[:record_count] }.to_f / tables.size).round(1) : 0
  }

  respond_to do |format|
    format.json { render json: records_data }
  end
end

#relationships_countObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/controllers/dbviewer/home_controller.rb', line 30

def relationships_count
  begin
    tables = fetch_tables_with_stats(include_record_counts: false)
    total_relationships = 0

    tables.each do |table|
       = (table[:name])
      total_relationships += [:foreign_keys].size if  && [:foreign_keys]
    end

    respond_to do |format|
      format.json { render json: { total_relationships: total_relationships } }
    end
  rescue => e
    Rails.logger.error("Error calculating relationship count: #{e.message}")
    respond_to do |format|
      format.json { render json: { total_relationships: 0, error: e.message }, status: :internal_server_error }
    end
  end
end

#tables_countObject



22
23
24
25
26
27
28
# File 'app/controllers/dbviewer/home_controller.rb', line 22

def tables_count
  tables = fetch_tables_with_stats(include_record_counts: false)

  respond_to do |format|
    format.json { render json: { total_tables: tables.size } }
  end
end