Class: Philiprehberger::JobMeter::Collector

Inherits:
Object
  • Object
show all
Defined in:
lib/philiprehberger/job_meter/collector.rb

Instance Method Summary collapse

Constructor Details

#initializeCollector

Returns a new instance of Collector.



6
7
8
9
# File 'lib/philiprehberger/job_meter/collector.rb', line 6

def initialize
  @mutex = Mutex.new
  @data = {}
end

Instance Method Details

#all_job_classesObject



41
42
43
# File 'lib/philiprehberger/job_meter/collector.rb', line 41

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

#entries(job_class, tags: {}) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/philiprehberger/job_meter/collector.rb', line 20

def entries(job_class, tags: {})
  @mutex.synchronize do
    entry = @data[job_class]
    return nil unless entry

    if tags.empty?
      { durations: entry[:durations].dup, successes: entry[:successes].dup }
    else
      indices = entry[:tags].each_index.select do |i|
        tags.all? { |k, v| entry[:tags][i][k] == v }
      end
      return nil if indices.empty?

      {
        durations: indices.map { |i| entry[:durations][i] },
        successes: indices.map { |i| entry[:successes][i] }
      }
    end
  end
end

#record(job_class, duration:, success:, tags: {}) ⇒ Object



11
12
13
14
15
16
17
18
# File 'lib/philiprehberger/job_meter/collector.rb', line 11

def record(job_class, duration:, success:, tags: {})
  @mutex.synchronize do
    @data[job_class] ||= { durations: [], successes: [], tags: [] }
    @data[job_class][:durations] << duration
    @data[job_class][:successes] << success
    @data[job_class][:tags] << tags
  end
end

#reset!Object



45
46
47
# File 'lib/philiprehberger/job_meter/collector.rb', line 45

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