Class: CloseYourIt::Performance::RequestProfile
- Inherits:
-
Object
- Object
- CloseYourIt::Performance::RequestProfile
- Defined in:
- lib/closeyourit/performance/request_profile.rb
Overview
Accumulatore per-richiesta (vive nello Scope, resettato a fine richiesta). Conta le query, le raggruppa per [fingerprint SQL offuscato, call-site] (il pattern prosopite per l'N+1) e tiene le chiamate HTTP esterne. Puro stato in memoria: il verdetto lo calcola Performance::Rollup.
Constant Summary collapse
- MAX_GROUPS =
Guard di memoria: cap ai gruppi/chiamate distinti tracciati (il conteggio totale resta esatto).
1000- MAX_EXTERNAL =
500
Instance Attribute Summary collapse
-
#external_calls ⇒ Object
readonly
Returns the value of attribute external_calls.
-
#query_count ⇒ Object
readonly
Returns the value of attribute query_count.
-
#query_groups ⇒ Object
readonly
Returns the value of attribute query_groups.
-
#total_query_time_ms ⇒ Object
readonly
Returns the value of attribute total_query_time_ms.
Instance Method Summary collapse
- #add_external(host:, path:, duration_ms:) ⇒ Object
-
#add_query(fingerprint:, source:, duration_ms:, cached: false) ⇒ Object
Una query non di sistema.
- #empty? ⇒ Boolean
-
#initialize ⇒ RequestProfile
constructor
A new instance of RequestProfile.
Constructor Details
#initialize ⇒ RequestProfile
Returns a new instance of RequestProfile.
15 16 17 18 19 20 |
# File 'lib/closeyourit/performance/request_profile.rb', line 15 def initialize @query_count = 0 @total_query_time_ms = 0.0 @query_groups = {} @external_calls = [] end |
Instance Attribute Details
#external_calls ⇒ Object (readonly)
Returns the value of attribute external_calls.
13 14 15 |
# File 'lib/closeyourit/performance/request_profile.rb', line 13 def external_calls @external_calls end |
#query_count ⇒ Object (readonly)
Returns the value of attribute query_count.
13 14 15 |
# File 'lib/closeyourit/performance/request_profile.rb', line 13 def query_count @query_count end |
#query_groups ⇒ Object (readonly)
Returns the value of attribute query_groups.
13 14 15 |
# File 'lib/closeyourit/performance/request_profile.rb', line 13 def query_groups @query_groups end |
#total_query_time_ms ⇒ Object (readonly)
Returns the value of attribute total_query_time_ms.
13 14 15 |
# File 'lib/closeyourit/performance/request_profile.rb', line 13 def total_query_time_ms @total_query_time_ms end |
Instance Method Details
#add_external(host:, path:, duration_ms:) ⇒ Object
40 41 42 43 44 |
# File 'lib/closeyourit/performance/request_profile.rb', line 40 def add_external(host:, path:, duration_ms:) return if @external_calls.size >= MAX_EXTERNAL @external_calls << { host: host, path: path, duration_ms: duration_ms.to_f } end |
#add_query(fingerprint:, source:, duration_ms:, cached: false) ⇒ Object
Una query non di sistema. Le query da cache non sono round-trip DB → non contano per l'N+1.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/closeyourit/performance/request_profile.rb', line 23 def add_query(fingerprint:, source:, duration_ms:, cached: false) return if cached ms = duration_ms.to_f @query_count += 1 @total_query_time_ms += ms key = "#{fingerprint}\n#{source}" group = @query_groups[key] if group group[:count] += 1 group[:duration_ms] += ms elsif @query_groups.size < MAX_GROUPS @query_groups[key] = { count: 1, duration_ms: ms, sql: fingerprint, source: source } end end |
#empty? ⇒ Boolean
46 47 48 |
# File 'lib/closeyourit/performance/request_profile.rb', line 46 def empty? @query_count.zero? && @external_calls.empty? end |