Class: SqlGenius::Core::Analysis::StatsHistory

Inherits:
Object
  • Object
show all
Defined in:
lib/sql_genius/core/analysis/stats_history.rb

Overview

Thread-safe in-memory ring buffer that stores per-digest query stats snapshots. Each digest key maps to an array of snapshots capped at max_samples. Oldest entries are dropped when the cap is reached.

Constant Summary collapse

DEFAULT_MAX_SAMPLES =
1440

Instance Method Summary collapse

Constructor Details

#initialize(max_samples: DEFAULT_MAX_SAMPLES) ⇒ StatsHistory

Returns a new instance of StatsHistory.



12
13
14
15
16
# File 'lib/sql_genius/core/analysis/stats_history.rb', line 12

def initialize(max_samples: DEFAULT_MAX_SAMPLES)
  @max_samples = max_samples
  @mutex = Mutex.new
  @data = {}
end

Instance Method Details

#clearObject



36
37
38
# File 'lib/sql_genius/core/analysis/stats_history.rb', line 36

def clear
  @mutex.synchronize { @data.clear }
end

#digestsObject



32
33
34
# File 'lib/sql_genius/core/analysis/stats_history.rb', line 32

def digests
  @mutex.synchronize { @data.keys.dup }
end

#record(digest_text, snapshot) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/sql_genius/core/analysis/stats_history.rb', line 18

def record(digest_text, snapshot)
  @mutex.synchronize do
    buf = (@data[digest_text] ||= [])
    buf << snapshot
    buf.shift if buf.length > @max_samples
  end
end

#series_for(digest_text) ⇒ Object



26
27
28
29
30
# File 'lib/sql_genius/core/analysis/stats_history.rb', line 26

def series_for(digest_text)
  @mutex.synchronize do
    (@data[digest_text] || []).dup
  end
end