Class: SqlGenius::QueriesController
Instance Method Summary
collapse
#capability?, #path_for, #render_partial
Methods included from AiFeatures
#anomaly_detection, #connection_advisor, #describe_query, #index_advisor, #index_planner, #innodb_health, #migration_risk, #optimize, #pattern_grouper, #rewrite_query, #root_cause, #schema_review, #suggest, #variable_review, #workload_digest
#duplicate_indexes, #query_stats, #server_overview, #table_sizes, #unused_indexes
#execute, #explain
Instance Method Details
#columns ⇒ Object
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'app/controllers/sql_genius/queries_controller.rb', line 24
def columns
result = SqlGenius::Core::Analysis::Columns.new(
rails_connection,
blocked_tables: sql_genius_config.blocked_tables,
masked_column_patterns: sql_genius_config.masked_column_patterns,
default_columns: sql_genius_config.default_columns,
).call(table: params[:table])
case result.status
when :ok then render(json: result.columns)
when :blocked then render(json: { error: result.error_message }, status: :forbidden)
when :not_found then render(json: { error: result.error_message }, status: :not_found)
end
end
|
#index ⇒ Object
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# File 'app/controllers/sql_genius/queries_controller.rb', line 10
def index
@featured_tables = if sql_genius_config.featured_tables.any?
sql_genius_config.featured_tables.sort
else
queryable_tables.sort
end
@all_tables = queryable_tables.sort
@ai_enabled = sql_genius_config.ai_enabled?
@framework_version_major = Rails::VERSION::MAJOR
@framework_version_minor = Rails::VERSION::MINOR
@identifier_quote_char = identifier_quote_char
render("sql_genius/queries/dashboard")
end
|
#query_detail ⇒ Object
39
40
41
42
|
# File 'app/controllers/sql_genius/queries_controller.rb', line 39
def query_detail
@digest = params[:digest].to_s
render("sql_genius/queries/query_detail")
end
|
#query_history ⇒ Object
44
45
46
47
48
49
50
51
52
53
54
|
# File 'app/controllers/sql_genius/queries_controller.rb', line 44
def query_history
digest = params[:digest].to_s
query_history_service = SqlGenius::Core::Analysis::QueryHistory.new(rails_connection)
current_query = query_history_service.call(digest)
history = fetch_query_history_series(digest, query_history_service)
render(json: { query: current_query, history: history })
rescue StandardError => e
render(json: { error: e.message }, status: :unprocessable_entity)
end
|
#slow_queries ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'app/controllers/sql_genius/queries_controller.rb', line 56
def slow_queries
unless sql_genius_config.redis_url.present?
return render(json: [], status: :ok)
end
require "redis"
redis = Redis.new(url: sql_genius_config.redis_url)
key = SlowQueryMonitor.redis_key
raw = redis.lrange(key, 0, 199)
queries = raw.map do |entry|
JSON.parse(entry)
rescue JSON::ParserError
nil
end.compact
render(json: queries)
rescue StandardError => e
render(json: { error: "Slow query error: #{e.message}" }, status: :unprocessable_entity)
end
|