mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-12-27 02:04:33 +08:00
65 lines
1.9 KiB
Ruby
65 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
|