Class: TCellAgent::QueueWithTimeout
- Inherits:
-
Object
- Object
- TCellAgent::QueueWithTimeout
- Defined in:
- lib/tcell_agent/utils/queue_with_timeout.rb
Instance Method Summary collapse
- #<<(x) ⇒ Object
- #add_response_time(route_id, response_time) ⇒ Object
- #get_response_time_table ⇒ Object
-
#initialize ⇒ QueueWithTimeout
constructor
A new instance of QueueWithTimeout.
- #length ⇒ Object
- #pop(non_block = false) ⇒ Object
- #pop_with_timeout(timeout = nil) ⇒ Object
- #reset_response_time_table ⇒ Object
Constructor Details
#initialize ⇒ QueueWithTimeout
91 92 93 94 95 96 |
# File 'lib/tcell_agent/utils/queue_with_timeout.rb', line 91 def initialize @mutex = Mutex.new @queue = [] @response_time_table = {} @recieved = ConditionVariable.new end |
Instance Method Details
#<<(x) ⇒ Object
98 99 100 101 102 103 |
# File 'lib/tcell_agent/utils/queue_with_timeout.rb', line 98 def <<(x) @mutex.synchronize do @queue << x @recieved.signal end end |
#add_response_time(route_id, response_time) ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/tcell_agent/utils/queue_with_timeout.rb', line 105 def add_response_time(route_id, response_time) @mutex.synchronize do if (route_id == nil || route_id == "") route_id = "?" end @response_time_table[route_id] = @response_time_table.fetch(route_id,{}) @response_time_table[route_id]["c"] = @response_time_table[route_id].fetch("c",0) + 1 @response_time_table[route_id]["mx"] = [@response_time_table[route_id].fetch("mx",0), response_time].max @response_time_table[route_id]["mn"] = [@response_time_table[route_id].fetch("mn",response_time), response_time].min @response_time_table[route_id]["t"] = ((@response_time_table[route_id].fetch("t",0)*(@response_time_table[route_id]["c"]-1)) + response_time) / @response_time_table[route_id]["c"] end end |
#get_response_time_table ⇒ Object
122 123 124 |
# File 'lib/tcell_agent/utils/queue_with_timeout.rb', line 122 def get_response_time_table return @response_time_table end |
#length ⇒ Object
118 119 120 |
# File 'lib/tcell_agent/utils/queue_with_timeout.rb', line 118 def length return @queue.length end |
#pop(non_block = false) ⇒ Object
132 133 134 |
# File 'lib/tcell_agent/utils/queue_with_timeout.rb', line 132 def pop(non_block = false) pop_with_timeout(non_block ? 0 : nil) end |
#pop_with_timeout(timeout = nil) ⇒ Object
136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/tcell_agent/utils/queue_with_timeout.rb', line 136 def pop_with_timeout(timeout = nil) @mutex.synchronize do if @queue.empty? @recieved.wait(@mutex, timeout) if timeout != 0 #if we're still empty after the timeout, raise exception return nil if @queue.empty? #raise ThreadError, "queue empty" if @queue.empty? end @queue.shift end end |
#reset_response_time_table ⇒ Object
126 127 128 129 130 |
# File 'lib/tcell_agent/utils/queue_with_timeout.rb', line 126 def reset_response_time_table @mutex.synchronize do @response_time_table = {} end end |