Class: SolidObserver::CableMetricBuffer::MetricStore

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

Constant Summary collapse

COUNTERS =
%i[
  broadcasts_count
  transmissions_count
  confirmations_count
  rejections_count
  perform_actions_count
  errors_count
].freeze

Instance Method Summary collapse

Constructor Details

#initializeMetricStore

Returns a new instance of MetricStore.



126
127
128
129
130
# File 'lib/solid_observer/cable_metric_buffer.rb', line 126

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

Instance Method Details

#add(metric_data) ⇒ Object



132
133
134
# File 'lib/solid_observer/cable_metric_buffer.rb', line 132

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

#clearObject



148
149
150
# File 'lib/solid_observer/cable_metric_buffer.rb', line 148

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

#drainObject



136
137
138
139
140
141
142
# File 'lib/solid_observer/cable_metric_buffer.rb', line 136

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

#metricsObject



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

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



175
176
177
178
179
180
# File 'lib/solid_observer/cable_metric_buffer.rb', line 175

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



165
166
167
168
169
170
171
172
173
# File 'lib/solid_observer/cable_metric_buffer.rb', line 165

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



144
145
146
# File 'lib/solid_observer/cable_metric_buffer.rb', line 144

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

#sizeObject



152
153
154
# File 'lib/solid_observer/cable_metric_buffer.rb', line 152

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