Class: Prometheus::Client::MmapedValue
- Inherits:
-
Object
- Object
- Prometheus::Client::MmapedValue
- Defined in:
- lib/prometheus/client/mmaped_value.rb
Overview
A float protected by a mutex backed by a per-process mmaped file.
Constant Summary collapse
- VALUE_LOCK =
Mutex.new
- @@files =
{}
- @@pid =
-1
Class Method Summary collapse
- .multiprocess ⇒ Object
- .pid_changed? ⇒ Boolean
- .reinitialize_on_pid_change ⇒ Object
- .reset_and_reinitialize ⇒ Object
- .reset_on_pid_change ⇒ Object
Instance Method Summary collapse
- #decrement(amount = 1) ⇒ Object
- #get ⇒ Object
- #increment(amount = 1) ⇒ Object
-
#initialize(type, metric_name, name, labels, multiprocess_mode = '') ⇒ MmapedValue
constructor
A new instance of MmapedValue.
- #pid_changed? ⇒ Boolean
- #set(value) ⇒ Object
-
#unsafe_reinitialize_file(check_pid = true) ⇒ Object
method needs to be run in VALUE_LOCK mutex.
Constructor Details
#initialize(type, metric_name, name, labels, multiprocess_mode = '') ⇒ MmapedValue
Returns a new instance of MmapedValue.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/prometheus/client/mmaped_value.rb', line 14 def initialize(type, metric_name, name, labels, multiprocess_mode = '') @file_prefix = type.to_s @metric_name = metric_name @name = name @labels = labels if type == :gauge @file_prefix += '_' + multiprocess_mode.to_s end @pid = -1 @mutex = Mutex.new initialize_file end |
Class Method Details
.multiprocess ⇒ Object
99 100 101 |
# File 'lib/prometheus/client/mmaped_value.rb', line 99 def self.multiprocess true end |
.pid_changed? ⇒ Boolean
95 96 97 |
# File 'lib/prometheus/client/mmaped_value.rb', line 95 def self.pid_changed? @@pid != Process.pid end |
.reinitialize_on_pid_change ⇒ Object
87 88 89 90 91 92 93 |
# File 'lib/prometheus/client/mmaped_value.rb', line 87 def self.reinitialize_on_pid_change VALUE_LOCK.synchronize do reset_on_pid_change ObjectSpace.each_object(MmapedValue, &:unsafe_reinitialize_file) end end |
.reset_and_reinitialize ⇒ Object
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/prometheus/client/mmaped_value.rb', line 69 def self.reset_and_reinitialize VALUE_LOCK.synchronize do @@pid = Process.pid @@files = {} ObjectSpace.each_object(MmapedValue).each do |v| v.unsafe_reinitialize_file(false) end end end |
.reset_on_pid_change ⇒ Object
80 81 82 83 84 85 |
# File 'lib/prometheus/client/mmaped_value.rb', line 80 def self.reset_on_pid_change if pid_changed? @@pid = Process.pid @@files = {} end end |
Instance Method Details
#decrement(amount = 1) ⇒ Object
39 40 41 |
# File 'lib/prometheus/client/mmaped_value.rb', line 39 def decrement(amount = 1) increment(-amount) end |
#get ⇒ Object
53 54 55 56 57 58 |
# File 'lib/prometheus/client/mmaped_value.rb', line 53 def get @mutex.synchronize do initialize_file if pid_changed? return @value end end |
#increment(amount = 1) ⇒ Object
29 30 31 32 33 34 35 36 37 |
# File 'lib/prometheus/client/mmaped_value.rb', line 29 def increment(amount = 1) @mutex.synchronize do initialize_file if pid_changed? @value += amount write_value(@key, @value) @value end end |
#pid_changed? ⇒ Boolean
60 61 62 |
# File 'lib/prometheus/client/mmaped_value.rb', line 60 def pid_changed? @pid != Process.pid end |
#set(value) ⇒ Object
43 44 45 46 47 48 49 50 51 |
# File 'lib/prometheus/client/mmaped_value.rb', line 43 def set(value) @mutex.synchronize do initialize_file if pid_changed? @value = value write_value(@key, @value) @value end end |
#unsafe_reinitialize_file(check_pid = true) ⇒ Object
method needs to be run in VALUE_LOCK mutex
65 66 67 |
# File 'lib/prometheus/client/mmaped_value.rb', line 65 def unsafe_reinitialize_file(check_pid = true) unsafe_initialize_file if !check_pid || pid_changed? end |