Class: TCellAgent::QueueWithTimeout

Inherits:
Object
  • Object
show all
Defined in:
lib/tcell_agent/utils/queue_with_timeout.rb

Instance Method Summary collapse

Constructor Details

#initializeQueueWithTimeout



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_tableObject



122
123
124
# File 'lib/tcell_agent/utils/queue_with_timeout.rb', line 122

def get_response_time_table
  return @response_time_table
end

#lengthObject



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_tableObject



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