Files
redux-scraper/app/controllers/log_entries_controller.rb
2025-02-25 19:59:41 +00:00

83 lines
2.2 KiB
Ruby

# typed: false
class LogEntriesController < ApplicationController
def index
@uri_filter = Addressable::URI.parse(params[:filter]) if params[:filter]
if @uri_filter && @uri_filter.scheme.nil?
@uri_filter = Addressable::URI.parse("https://" + params[:filter])
end
if @uri_filter
query = HttpLogEntry.where("uri_host = ?", @uri_filter.host)
if @uri_filter.path.present?
if @uri_filter.query.present?
query =
query.where("uri_path = ?", @uri_filter.path).where(
"uri_query like ?",
@uri_filter.query + "%",
)
else
query = query.where("uri_path like ?", @uri_filter.path + "%")
end
end
else
query = HttpLogEntry
end
@log_entries =
query
.page(params[:page])
.per(50)
.joins(:response)
.includes(:response)
.order(id: :desc)
.without_count
formats.clear
formats << :html
render :index
end
def stats
@time_window = (params[:seconds] || 60).to_i.seconds
@last_window_count = 0
@last_window_bytes = 0
@last_window_bytes_stored = 0
@content_type_counts =
Hash.new do |hash, key|
hash[key] = { count: 0, bytes: 0, bytes_stored: 0 }
end
@by_domain_counts =
Hash.new do |hash, key|
hash[key] = { count: 0, bytes: 0, bytes_stored: 0 }
end
HttpLogEntry
.joins(:response)
.includes(:response)
.select("http_log_entries.*, blob_files.size_bytes")
.find_each(batch_size: 100, order: :desc) do |log_entry|
break if log_entry.created_at < @time_window.ago
@last_window_count += 1
@last_window_bytes += log_entry.response_size
content_type = log_entry.content_type.split(";").first
@content_type_counts[content_type][:count] += 1
@content_type_counts[content_type][:bytes] += log_entry.response_size
@by_domain_counts[log_entry.uri_host][:count] += 1
@by_domain_counts[log_entry.uri_host][:bytes] += log_entry.response_size
end
end
def show
@log_entry =
HttpLogEntry.includes(
:caused_by_entry,
:triggered_entries,
response: :base,
).find(params[:id])
end
end