0
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-08-05 20:29:55 +08:00
discourse/db/migrate/20260623052745_create_browser_pageview_session_engagements.rb
Krzysztof Kotlarek d570c04302
DEV: Track browser session engagement for crawler detection (#41215)
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.
2026-07-01 09:17:48 +08:00

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