mirror of
https://github.com/discourse/discourse.git
synced 2026-08-06 03:25:17 +08:00
Previously, crawler detection relied only on server-side heuristics (request velocity, ASN, referrer ratios) with no signal of genuine human interaction within a browser session. This change gathers per-session interaction counts (mouse, keyboard, touch, scroll, back/forward) plus engaged duration client-side and upserts them into a new `browser_pageview_session_engagements` table via a lightweight `/srv/se` beacon, giving `CrawlerScorer` a human-activity signal to weigh against its bot heuristics.
21 lines
887 B
Ruby
Vendored
21 lines
887 B
Ruby
Vendored
# frozen_string_literal: true
|
|
|
|
class CreateBrowserPageviewSessionEngagements < ActiveRecord::Migration[8.0]
|
|
def change
|
|
create_table :browser_pageview_session_engagements do |t|
|
|
t.string :session_id, null: false, limit: 32
|
|
t.integer :mouse_move_events, null: false, default: 0
|
|
t.integer :click_events, null: false, default: 0
|
|
t.integer :key_events, null: false, default: 0
|
|
t.integer :scroll_events, null: false, default: 0
|
|
t.integer :touch_events, null: false, default: 0
|
|
t.integer :back_forward_events, null: false, default: 0
|
|
t.integer :engaged_seconds, null: false, default: 0
|
|
t.integer :time_to_first_interaction_ms, null: true
|
|
t.timestamps
|
|
end
|
|
|
|
add_index :browser_pageview_session_engagements, :session_id, unique: true
|
|
add_index :browser_pageview_session_engagements, :created_at, using: :brin
|
|
end
|
|
end
|