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