feat(telemetry): allow users to send session recording (#22170)
This commit is contained in:
parent
e4a6016f83
commit
a9d7b99429
4 changed files with 32 additions and 4 deletions
|
|
@ -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()",
|
||||
},
|
||||
],
|
||||
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue