diff --git a/frappe/desk/page/setup_wizard/setup_wizard.js b/frappe/desk/page/setup_wizard/setup_wizard.js index 53e7752636..c237624fff 100644 --- a/frappe/desk/page/setup_wizard/setup_wizard.js +++ b/frappe/desk/page/setup_wizard/setup_wizard.js @@ -402,9 +402,17 @@ frappe.setup.slides_settings = [ }, { fieldname: "enable_telemetry", - label: __("Allow Sending Usage Data for Improving Applications"), + label: __("Allow sending usage data for improving applications"), fieldtype: "Check", default: 1, + depends_on: "eval:frappe.telemetry.can_enable()", + }, + { + fieldname: "allow_recording_first_session", + label: __("Allow recording my first session to improve user experience"), + fieldtype: "Check", + default: 0, + depends_on: "eval:frappe.telemetry.can_enable()", }, ], diff --git a/frappe/desk/page/setup_wizard/setup_wizard.py b/frappe/desk/page/setup_wizard/setup_wizard.py index fd769a45fd..c320e74edc 100755 --- a/frappe/desk/page/setup_wizard/setup_wizard.py +++ b/frappe/desk/page/setup_wizard/setup_wizard.py @@ -6,7 +6,7 @@ import json import frappe from frappe.geo.country_info import get_country_info from frappe.translate import get_messages_for_boot, send_translations, set_default_language -from frappe.utils import cint, strip +from frappe.utils import cint, now, strip from frappe.utils.password import update_password from . import install_fixtures @@ -184,6 +184,8 @@ def update_system_settings(args): } ) system_settings.save() + if args.get("allow_recording_first_session"): + frappe.db.set_default("session_recording_start", now()) def update_user_name(args): diff --git a/frappe/public/js/frappe/utils/datetime.js b/frappe/public/js/frappe/utils/datetime.js index 0746b794f0..309c68cdb7 100644 --- a/frappe/public/js/frappe/utils/datetime.js +++ b/frappe/public/js/frappe/utils/datetime.js @@ -82,6 +82,10 @@ $.extend(frappe.datetime, { return moment(d1).diff(d2, "hours"); }, + get_minute_diff: function (d1, d2) { + return moment(d1).diff(d2, "minutes"); + }, + get_day_diff: function (d1, d2) { return moment(d1).diff(d2, "days"); }, diff --git a/frappe/public/js/telemetry/index.js b/frappe/public/js/telemetry/index.js index 152bae6c48..751c13994e 100644 --- a/frappe/public/js/telemetry/index.js +++ b/frappe/public/js/telemetry/index.js @@ -7,7 +7,6 @@ class TelemetryManager { this.project_id = frappe.boot.posthog_project_id; this.telemetry_host = frappe.boot.posthog_host; this.site_age = frappe.boot.telemetry_site_age; - if (cint(frappe.boot.enable_telemetry) && this.project_id && this.telemetry_host) { this.enabled = true; } @@ -15,13 +14,14 @@ class TelemetryManager { initialize() { if (!this.enabled) return; + let disable_decide = !this.should_record_session(); try { posthog.init(this.project_id, { api_host: this.telemetry_host, autocapture: false, capture_pageview: false, capture_pageleave: false, - advanced_disable_decide: true, + advanced_disable_decide: disable_decide, }); posthog.identify(frappe.boot.sitename); this.send_heartbeat(); @@ -42,6 +42,10 @@ class TelemetryManager { posthog.opt_out_capturing(); } + can_enable() { + return Boolean(this.telemetry_host && this.project_id); + } + send_heartbeat() { const KEY = "ph_last_heartbeat"; const now = frappe.datetime.system_datetime(true); @@ -62,6 +66,16 @@ class TelemetryManager { posthog.capture("$pageview"); }); } + + should_record_session() { + let start = frappe.boot.sysdefaults.session_recording_start; + if (!start) return; + + let start_datetime = frappe.datetime.str_to_obj(start); + let now = frappe.datetime.now_datetime(); + // if user allowed recording only record for first 2 hours, never again. + return frappe.datetime.get_minute_diff(now, start_datetime) < 120; + } } frappe.telemetry = new TelemetryManager();