Class: SqlSafetyNet::QueryAnalysis
- Inherits:
-
Object
- Object
- SqlSafetyNet::QueryAnalysis
- Defined in:
- lib/sql_safety_net/query_analysis.rb
Instance Attribute Summary collapse
-
#elapsed_time ⇒ Object
readonly
Returns the value of attribute elapsed_time.
-
#queries ⇒ Object
readonly
Returns the value of attribute queries.
-
#result_size ⇒ Object
readonly
Returns the value of attribute result_size.
-
#rows ⇒ Object
readonly
Returns the value of attribute rows.
Class Method Summary collapse
-
.capture ⇒ Object
Capture queries in a block for analysis.
-
.current ⇒ Object
Get the current analysis object in scope.
Instance Method Summary collapse
-
#<<(query_info) ⇒ Object
Add a QueryInfo object to the analysis.
- #alerted_queries ⇒ Object
- #alerts? ⇒ Boolean
- #flagged? ⇒ Boolean
-
#initialize ⇒ QueryAnalysis
constructor
A new instance of QueryAnalysis.
- #results_too_big? ⇒ Boolean
- #too_many_queries? ⇒ Boolean
- #too_many_rows? ⇒ Boolean
- #too_much_time? ⇒ Boolean
- #total_queries ⇒ Object
Constructor Details
#initialize ⇒ QueryAnalysis
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_time ⇒ Object (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 |
#queries ⇒ Object (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_size ⇒ Object (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 |
#rows ⇒ Object (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
.capture ⇒ Object
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 |
.current ⇒ Object
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_queries ⇒ Object
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
48 49 50 |
# File 'lib/sql_safety_net/query_analysis.rb', line 48 def alerts? queries.any?{|query| query.alerts?} end |
#flagged? ⇒ 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
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
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
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
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_queries ⇒ Object
40 41 42 |
# File 'lib/sql_safety_net/query_analysis.rb', line 40 def total_queries queries.size end |