Admin analytics: heatmap per device, anteprima staff e analisi costi.
Separa heatmap mobile/desktop, opt-out analytics per operatori, dashboard costi con KPI e trend mensili. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -2,7 +2,13 @@
|
||||
|
||||
module Analytics
|
||||
class EventsController < ActionController::API
|
||||
include ActionController::Cookies
|
||||
|
||||
def create
|
||||
if analytics_suppressed?
|
||||
return render json: { accepted: 0, rejected: 0, suppressed: true }, status: :accepted
|
||||
end
|
||||
|
||||
payload = parse_payload
|
||||
result = Analytics::Ingest.new(events: payload, remote_ip: request.remote_ip).call
|
||||
|
||||
@@ -15,6 +21,10 @@ module Analytics
|
||||
|
||||
private
|
||||
|
||||
def analytics_suppressed?
|
||||
Analytics::Suppress.active?(cookies[Analytics::Suppress::COOKIE_NAME])
|
||||
end
|
||||
|
||||
def parse_payload
|
||||
body = request.request_parameters
|
||||
return body["events"] if body.is_a?(Hash) && body["events"].is_a?(Array)
|
||||
|
||||
@@ -2,7 +2,13 @@
|
||||
|
||||
module Analytics
|
||||
class SnapshotsController < ActionController::API
|
||||
include ActionController::Cookies
|
||||
|
||||
def create
|
||||
if analytics_suppressed?
|
||||
return render json: { ok: true, skipped: true, suppressed: true }, status: :accepted
|
||||
end
|
||||
|
||||
result = Analytics::SnapshotIngest.new(
|
||||
path: params[:path] || params[:page_path],
|
||||
device: params[:device],
|
||||
@@ -17,5 +23,11 @@ module Analytics
|
||||
|
||||
render json: { ok: true, skipped: result.skipped }, status: :accepted
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def analytics_suppressed?
|
||||
Analytics::Suppress.active?(cookies[Analytics::Suppress::COOKIE_NAME])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user