Class: RailsPulse::QueryAnalysisService

Inherits:
Object
  • Object
show all
Defined in:
app/services/rails_pulse/query_analysis_service.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query) ⇒ QueryAnalysisService

Returns a new instance of QueryAnalysisService.



10
11
12
13
# File 'app/services/rails_pulse/query_analysis_service.rb', line 10

def initialize(query)
  @query = query
  @operations = fetch_recent_operations
end

Class Method Details

.analyze_query(query_id) ⇒ Object



5
6
7
8
# File 'app/services/rails_pulse/query_analysis_service.rb', line 5

def self.analyze_query(query_id)
  query = RailsPulse::Query.find(query_id)
  new(query).analyze
end

Instance Method Details

#analyzeObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/services/rails_pulse/query_analysis_service.rb', line 15

def analyze
  # Run all analyzers
  results = {
    analyzed_at: Time.current,
    query_characteristics: analyze_query_characteristics,
    index_recommendations: analyze_index_recommendations,
    n_plus_one_analysis: analyze_n_plus_one,
    explain_plan: analyze_explain_plan,
    backtrace_analysis: analyze_backtraces
  }

  # Generate consolidated suggestions
  results[:suggestions] = generate_suggestions(results)

  # Build compatible format for query model
  compatible_results = build_compatible_results(results)

  # Save results to query
  save_results_to_query(compatible_results)

  results
end