speed up stats parsing

This commit is contained in:
Kyle Drake 2021-01-12 23:04:00 -06:00
parent c1705f0c52
commit 4115ebffa7

View file

@ -92,27 +92,25 @@ class Stat < Sequel::Model
logfile.close logfile.close
DB[:stats].lock('EXCLUSIVE') do
DB.transaction do
site_logs.each do |log_time, usernames| site_logs.each do |log_time, usernames|
Site.select(:id, :username).where(username: usernames.keys).all.each do |site| Site.select(:id, :username).where(username: usernames.keys).all.each do |site|
site_logs[log_time][site.username][:id] = site.id usernames[site.username][:id] = site.id
end end
usernames.each do |username, site_log| usernames.each do |username, site_log|
DB.transaction do next unless site_log[:id]
DB['update sites set hits=hits+?, views=views+? where username=?',
site_log[:hits],
site_log[:views],
username
].first
opts = {site_id: site_log[:id], created_at: log_time.to_date.to_s} opts = {site_id: site_log[:id], created_at: log_time.to_date.to_s}
stat = nil
DB[:stats].lock('EXCLUSIVE') {
stat = Stat.select(:id).where(opts).first stat = Stat.select(:id).where(opts).first
stat = Stat.create opts if stat.nil? stat = Stat.create opts if stat.nil?
}
DB['update sites set hits=hits+?, views=views+? where id=?',
site_log[:hits],
site_log[:views],
site_log[:id]
].first
DB[ DB[
'update stats set hits=hits+?, views=views+?, bandwidth=bandwidth+? where id=?', 'update stats set hits=hits+?, views=views+?, bandwidth=bandwidth+? where id=?',
@ -124,17 +122,16 @@ class Stat < Sequel::Model
end end
end end
end end
end
FileUtils.rm log_path FileUtils.rm log_path
end end
DB[:daily_site_stats].lock('EXCLUSIVE') do
DB.transaction do
total_site_stats.each do |time, stats| total_site_stats.each do |time, stats|
opts = {created_at: time.to_date.to_s} opts = {created_at: time.to_date.to_s}
DB[:stats].lock('EXCLUSIVE') {
stat = DailySiteStat.select(:id).where(opts).first stat = DailySiteStat.select(:id).where(opts).first
stat = DailySiteStat.create opts if stat.nil? stat = DailySiteStat.create opts if stat.nil?
}
DB[ DB[
'update daily_site_stats set hits=hits+?, views=views+?, bandwidth=bandwidth+? where created_at=?', 'update daily_site_stats set hits=hits+?, views=views+?, bandwidth=bandwidth+? where created_at=?',
@ -144,7 +141,8 @@ class Stat < Sequel::Model
time.to_date time.to_date
].first ].first
end end
end
end
end end
end end
end end