Class: SolidObserver::CacheMetricBuffer::MetricStore

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

Instance Method Summary collapse

Constructor Details

#initializeMetricStore

Returns a new instance of MetricStore.



117
118
119
120
121
# File 'lib/solid_observer/cache_metric_buffer.rb', line 117

def initialize
  @mutex = Mutex.new
  @buffer = {}
  @metrics = INITIAL_METRICS.dup
end

Instance Method Details

#add(metric_data) ⇒ Object



123
124
125
# File 'lib/solid_observer/cache_metric_buffer.rb', line 123

def add(metric_data)
  @mutex.synchronize { add_metric(metric_data) }
end

#clearObject



139
140
141
# File 'lib/solid_observer/cache_metric_buffer.rb', line 139

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

#drainObject



127
128
129
130
131
132
133
# File 'lib/solid_observer/cache_metric_buffer.rb', line 127

def drain
  @mutex.synchronize do
    drained = @buffer.values.map(&:dup)
    @buffer.clear
    drained
  end
end

#metricsObject



147
148
149
150
151
152
153
154
# File 'lib/solid_observer/cache_metric_buffer.rb', line 147

def metrics
  @mutex.synchronize do
    {
      size: @buffer.size,
      max_buffer_size: SolidObserver.config.max_buffer_size
    }.merge(@metrics.dup)
  end
end

#record_flush_failure(error) ⇒ Object



166
167
168
169
170
171
# File 'lib/solid_observer/cache_metric_buffer.rb', line 166

def record_flush_failure(error)
  @mutex.synchronize do
    @metrics[:flush_failures_count] += 1
    @metrics[:last_flush_error] = error.message
  end
end

#record_flush_success(duration_ms) ⇒ Object



156
157
158
159
160
161
162
163
164
# File 'lib/solid_observer/cache_metric_buffer.rb', line 156

def record_flush_success(duration_ms)
  @mutex.synchronize do
    @metrics.merge!(
      last_flush_at: Time.current,
      last_flush_duration_ms: duration_ms,
      last_flush_error: nil
    )
  end
end

#requeue(metrics_to_flush) ⇒ Object



135
136
137
# File 'lib/solid_observer/cache_metric_buffer.rb', line 135

def requeue(metrics_to_flush)
  @mutex.synchronize { add_metrics_with_capacity(metrics_to_flush + @buffer.values) }
end

#sizeObject



143
144
145
# File 'lib/solid_observer/cache_metric_buffer.rb', line 143

def size
  @mutex.synchronize { @buffer.size }
end