Class: SolidObserver::ChartBuffer

Inherits:
Object
  • Object
show all
Defined in:
lib/solid_observer/chart_buffer.rb

Defined Under Namespace

Classes: SampleWindow

Constant Summary collapse

CACHE_KEY =
"solid_observer/chart_buffer/ready_samples"
INSTANCE_MUTEX =
Mutex.new
SAMPLE_CAP =
720
STORAGE_MUTEX =
Mutex.new

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.append(value, at: Time.now) ⇒ Object



41
42
43
# File 'lib/solid_observer/chart_buffer.rb', line 41

def append(value, at: Time.now)
  instance.append(value, at: at)
end

.clearObject



49
50
51
# File 'lib/solid_observer/chart_buffer.rb', line 49

def clear
  instance.clear
end

.recent(window_seconds) ⇒ Object



45
46
47
# File 'lib/solid_observer/chart_buffer.rb', line 45

def recent(window_seconds)
  instance.recent(window_seconds)
end

Instance Method Details

#append(value, at: Time.now) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/solid_observer/chart_buffer.rb', line 62

def append(value, at: Time.now)
  sample = {t: at.to_i, v: value.to_i}

  STORAGE_MUTEX.synchronize { persist_sample(sample) }

  sample
end

#clearObject



78
79
80
81
82
83
84
85
86
# File 'lib/solid_observer/chart_buffer.rb', line 78

def clear
  STORAGE_MUTEX.synchronize do
    empty_samples = []
    replace_fallback_samples(empty_samples)
    cache_store&.delete(CACHE_KEY)
  rescue
    nil
  end
end

#recent(window_seconds) ⇒ Object



70
71
72
73
74
75
76
# File 'lib/solid_observer/chart_buffer.rb', line 70

def recent(window_seconds)
  cutoff = Time.now.to_i - window_seconds.to_i

  STORAGE_MUTEX.synchronize do
    load_samples.select { |sample| sample[:t] >= cutoff }.map(&:dup)
  end
end