Class: QueryGuard::Explain::PlanSignals

Inherits:
Object
  • Object
show all
Defined in:
lib/query_guard/explain/plan_signals.rb

Overview

Actionable signals extracted from query plan

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(plan) ⇒ PlanSignals

Returns a new instance of PlanSignals.



191
192
193
194
195
# File 'lib/query_guard/explain/plan_signals.rb', line 191

def initialize(plan)
  @plan = plan
  @extracted_at = Time.now
  @signals = extract_signals
end

Instance Attribute Details

#extracted_at ⇒ Object (readonly)

Returns the value of attribute extracted_at.



189
190
191
# File 'lib/query_guard/explain/plan_signals.rb', line 189

def extracted_at
  @extracted_at
end

#plan ⇒ Object (readonly)

Returns the value of attribute plan.



189
190
191
# File 'lib/query_guard/explain/plan_signals.rb', line 189

def plan
  @plan
end

#signals ⇒ Object (readonly)

Returns the value of attribute signals.



189
190
191
# File 'lib/query_guard/explain/plan_signals.rb', line 189

def signals
  @signals
end

Instance Method Details

#critical_signals(severity = :high) ⇒ Array<Hash>

Get most critical signals

Parameters:

  • severity (Symbol) (defaults to: :high) —

    :high, :medium, :low

Returns:

  • (Array<Hash>)


216
217
218
# File 'lib/query_guard/explain/plan_signals.rb', line 216

def critical_signals(severity = :high)
  signals.select { |s| s[:severity] == severity }
end

#signals_of_type(type) ⇒ Array<Hash>

Find signals of specific type

Parameters:

  • type (String) —

    Signal type

Returns:

  • (Array<Hash>)


208
209
210
# File 'lib/query_guard/explain/plan_signals.rb', line 208

def signals_of_type(type)
  signals.select { |s| s[:type] == type }
end

#to_a ⇒ Array<Hash>

All extracted signals as array

Returns:

  • (Array<Hash>)


200
201
202
# File 'lib/query_guard/explain/plan_signals.rb', line 200

def to_a
  signals
end

#to_h ⇒ Hash

Convert to hash for serialization

Returns:

  • (Hash)


223
224
225
226
227
228
229
# File 'lib/query_guard/explain/plan_signals.rb', line 223

def to_h
  {
    plan: plan.to_h,
    signals: signals,
    extracted_at: extracted_at
  }
end