Class: SqlSafetyNet::QueryAnalysis

Inherits:
Object
  • Object
show all
Defined in:
lib/sql_safety_net/query_analysis.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeQueryAnalysis

Returns a new instance of QueryAnalysis.



25
26
27
28
29
30
# File 'lib/sql_safety_net/query_analysis.rb', line 25

def initialize
  @queries = []
  @elapsed_time = 0.0
  @rows = 0
  @result_size = 0
end

Instance Attribute Details

#elapsed_timeObject (readonly)

Returns the value of attribute elapsed_time.



3
4
5
# File 'lib/sql_safety_net/query_analysis.rb', line 3

def elapsed_time
  @elapsed_time
end

#queriesObject (readonly)

Returns the value of attribute queries.



3
4
5
# File 'lib/sql_safety_net/query_analysis.rb', line 3

def queries
  @queries
end

#result_sizeObject (readonly)

Returns the value of attribute result_size.



3
4
5
# File 'lib/sql_safety_net/query_analysis.rb', line 3

def result_size
  @result_size
end

#rowsObject (readonly)

Returns the value of attribute rows.



3
4
5
# File 'lib/sql_safety_net/query_analysis.rb', line 3

def rows
  @rows
end

Class Method Details

.captureObject

Capture queries in a block for analysis. Within the block the current method can be called to the the current analysis object.



13
14
15
16
17
18
19
20
21
22
# File 'lib/sql_safety_net/query_analysis.rb', line 13

def capture
  save_val = Thread.current[:sql_safety_net_request_queries]
  begin
    queries = new
    Thread.current[:sql_safety_net_request_queries] = queries
    yield queries
  ensure
    Thread.current[:sql_safety_net_request_queries] = save_val
  end
end

.currentObject

Get the current analysis object in scope.



7
8
9
# File 'lib/sql_safety_net/query_analysis.rb', line 7

def current
  Thread.current[:sql_safety_net_request_queries]
end

Instance Method Details

#<<(query_info) ⇒ Object

Add a QueryInfo object to the analysis.



33
34
35
36
37
38
# File 'lib/sql_safety_net/query_analysis.rb', line 33

def <<(query_info)
  @queries << query_info
  @elapsed_time += query_info.elapsed_time
  @rows += query_info.rows
  @result_size += query_info.result_size
end

#alerted_queriesObject



44
45
46
# File 'lib/sql_safety_net/query_analysis.rb', line 44

def alerted_queries
  queries.select{|query| query.alerts?}.size
end

#alerts?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/sql_safety_net/query_analysis.rb', line 48

def alerts?
  queries.any?{|query| query.alerts?}
end

#flagged?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/sql_safety_net/query_analysis.rb', line 68

def flagged?
  alerts? || too_many_rows? || too_many_queries? || results_too_big? || too_much_time?
end

#results_too_big?Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/sql_safety_net/query_analysis.rb', line 60

def results_too_big?
  result_size > SqlSafetyNet.config.result_size_limit
end

#too_many_queries?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/sql_safety_net/query_analysis.rb', line 56

def too_many_queries?
  total_queries > SqlSafetyNet.config.query_limit
end

#too_many_rows?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/sql_safety_net/query_analysis.rb', line 52

def too_many_rows?
  rows > SqlSafetyNet.config.returned_rows_limit
end

#too_much_time?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/sql_safety_net/query_analysis.rb', line 64

def too_much_time?
  elapsed_time > SqlSafetyNet.config.elapsed_time_limit
end

#total_queriesObject



40
41
42
# File 'lib/sql_safety_net/query_analysis.rb', line 40

def total_queries
  queries.size
end