class RorVsWild::Queue

Constants

FLUSH_TRESHOLD
SLEEP_TIME

Attributes

client[R]
jobs[R]
mutex[R]
requests[R]
thread[R]

Public Class Methods

new(client) click to toggle source
# File lib/rorvswild/queue.rb, line 11
def initialize(client)
  @jobs = []
  @requests = []
  @client = client
  @mutex = Mutex.new
  @metrics = RorVsWild::Metrics.new if defined?(Metrics)
  @request_sampling_rate = client.config[:request_sampling_rate]
  @job_sampling_rate = client.config[:job_sampling_rate]
  Kernel.at_exit { flush }
end

Public Instance Methods

flush() click to toggle source
# File lib/rorvswild/queue.rb, line 74
def flush
  data = pull_jobs and client.post("/jobs", jobs: data)
  data = pull_requests and client.post("/requests", requests: data)
  data = pull_server_metrics and client.post("/metrics", metrics: data)
end
flush_indefinetely() click to toggle source
# File lib/rorvswild/queue.rb, line 66
def flush_indefinetely
  client.post("/deployments", deployment: Deployment.to_h)
  sleep(SLEEP_TIME) and flush while true
rescue Exception => ex
  RorVsWild.logger.error(ex)
  raise
end
pull_jobs() click to toggle source
# File lib/rorvswild/queue.rb, line 40
def pull_jobs
  result = nil
  mutex.synchronize do
    if jobs.size > 0
      result = jobs
      @jobs = []
    end
  end
  result
end
pull_requests() click to toggle source
# File lib/rorvswild/queue.rb, line 51
def pull_requests
  result = nil
  mutex.synchronize do
    if requests.size > 0
      result = requests
      @requests = []
    end
  end
  result
end
pull_server_metrics() click to toggle source
# File lib/rorvswild/queue.rb, line 62
def pull_server_metrics
  @metrics && @metrics.update_every_minute && @metrics.to_h
end
push_error(data) click to toggle source
# File lib/rorvswild/queue.rb, line 30
def push_error(data)
  client.post_async("/errors", error: data)
end
push_job(data) click to toggle source
# File lib/rorvswild/queue.rb, line 22
def push_job(data)
  push_to(jobs, data) if !@job_sampling_rate || rand <= @job_sampling_rate
end
push_request(data) click to toggle source
# File lib/rorvswild/queue.rb, line 26
def push_request(data)
  push_to(requests, data) if !@request_sampling_rate || rand <= @request_sampling_rate
end
push_to(array, data) click to toggle source
# File lib/rorvswild/queue.rb, line 34
def push_to(array, data)
  mutex.synchronize do
    wakeup_thread if array.push(data).size >= FLUSH_TRESHOLD || !thread
  end
end
start_thread() click to toggle source
# File lib/rorvswild/queue.rb, line 80
def start_thread
  RorVsWild.logger.debug("RorVsWild::Queue#start_thread".freeze)
  @thread = Thread.new { flush_indefinetely }
end
wakeup_thread() click to toggle source
# File lib/rorvswild/queue.rb, line 85
def wakeup_thread
  (thread && thread.alive?) ? thread.wakeup : start_thread
end