class Tyme::Last
Public Class Methods
new( last_output = nil )
click to toggle source
# File lib/tyme/last.rb, line 6 def initialize( last_output = nil ) if last_output @stdin = nil @stdout = last_output @stderr = nil else @stdin, @stdout, @stderr = Open3.popen3('last --time-format iso -R | grep tty') end end
Public Instance Methods
process()
click to toggle source
# File lib/tyme/last.rb, line 16 def process lines = @stdout.readlines return nil if lines.empty? data = lines.select { |line| not line.include? 'gone' }.map { |line| parse_line(line) } consolidate(data) end
Private Instance Methods
consolidate( data )
click to toggle source
# File lib/tyme/last.rb, line 24 def consolidate( data ) ret={} data.each do |elt| user = elt[:user] date = elt[:date] ret[user] ||= {} ret[user][date] ||= 0 ret[user][date] += elt[:duration] end ret end
parse_line( line )
click to toggle source
# File lib/tyme/last.rb, line 36 def parse_line( line ) values = line.scan( /(\S+)\s+tty\d+\s+(\S+)\s+-?\s+\S+\s+\((\d\+)?(\d+):(\d+)\)/ )[0] date = DateTime.parse( values[1] ).strftime('%F') duration = values[3].to_i*60 + values[4].to_i # case where duration is more than one day duration += values[2].to_i*1440 if values[2] { user: values[0].to_sym, date: date.to_sym, duration: duration } end