Skip to content

Commit

Permalink
Experiment with making the logger write on a time rounded to the inte…
Browse files Browse the repository at this point in the history
…rval
  • Loading branch information
eric committed Mar 23, 2012
1 parent 502d9e5 commit c8d354a
Showing 1 changed file with 27 additions and 11 deletions.
38 changes: 27 additions & 11 deletions lib/metriks/reporter/logger.rb
Expand Up @@ -7,22 +7,20 @@ def initialize(options = {})
@log_level = options[:log_level] || ::Logger::INFO
@prefix = options[:prefix] || 'metriks:'

@registry = options[:registry] || Metriks::Registry.default
@interval = options[:interval] || 60
@on_error = options[:on_error] || proc { |ex| }
@registry = options[:registry] || Metriks::Registry.default
@time_tracker = TimeTracker.new(options[:interval] || 60)
@on_error = options[:on_error] || proc { |ex| }
end

def start
@thread ||= Thread.new do
loop do
sleep @interval

Thread.new do
begin
write
rescue Exception => ex
@on_error[ex] rescue nil
end
@time_tracker.sleep

begin
write
rescue Exception => ex
@on_error[ex] rescue nil
end
end
end
Expand Down Expand Up @@ -114,5 +112,23 @@ def format_message(args)
end
end.join(' ')
end

class TimeTracker
def initialize(interval)
@interval = interval
@next_time = Time.now.to_f
end

def sleep
sleep_time = next_time - Time.now.to_f
Kernel.sleep(sleep_time)
end

def next_time
now = Time.now.to_f
@next_time = now if @next_time <= now
@next_time += @interval - (@next_time % @interval)
end
end
end
end

0 comments on commit c8d354a

Please sign in to comment.