scinote-web/lib/tasks/web_stats.rake
2017-07-06 09:32:08 +02:00

66 lines
1.9 KiB
Ruby

namespace :web_stats do
desc "Report login statistics from the application"
task :login => :environment do
def print_splitter
puts "+--------------------------------------+-----------------+-----------------------+"
end
def print_header
print_splitter
puts "| Username | Times signed in | Last signed in on |"
print_splitter
end
def print_line(user)
last_signed_in = "never"
if user.last_sign_in_at.present?
last_signed_in = I18n.l(user.last_sign_in_at, format: :full)
end
puts "| #{user.email.ljust(36)} " \
"| #{user.sign_in_count.to_s.ljust(15)} " \
"| #{last_signed_in.ljust(21)} |"
end
# Actual task code
print_header
User.all.each{ |u| print_line(u) }
print_splitter
# Calculate total & avg
total = 0
User.all.each{ |u| total += u.sign_in_count }
avg = total.to_f / User.count.to_f
puts " Total times signed in: #{total} Avg. times signed in: #{avg.round(4)}"
puts ""
end
desc "Report information on last login"
task :last_login => :environment do
ll_user = User.where.not(current_sign_in_at: nil).order(current_sign_in_at: :desc).first
ll_user2 = User.where.not(last_sign_in_at: nil).order(last_sign_in_at: :desc).first
ll = ll_user.present? ? ll_user.current_sign_in_at : nil
ll2 = ll_user2.present? ? ll_user2.last_sign_in_at : nil
if ll.present? and ll2.present?
ll_real = ll > ll2 ? ll : ll2
elsif ll.present?
ll_real = ll
elsif ll2.present
ll_real = ll2
else
ll_real = nil
end
puts "Current time: #{Time.now.to_s}"
if ll_real.present?
diff = ((Time.now - ll_real) / 1.hour).round
puts "Last login at: #{ll_real.to_s}"
puts " (#{diff} hours ago)"
else
puts "Woops, seems nobody has logged in yet!"
end
end
end