onboarding events

This commit is contained in:
Nordup 2025-08-15 23:42:56 +07:00
parent 6b383dad34
commit 42a170687d
8 changed files with 67 additions and 23 deletions

View file

@ -12,7 +12,7 @@ config_version=5
config/name="TheGates"
config/description="Building new Internet"
config/version="0.16.0"
config/version="0.16.1"
config/tags=PackedStringArray("thegates")
run/main_scene="res://scenes/app.tscn"
run/enable_alt_space_menu=true

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=18 format=3 uid="uid://ct8gsph3wnepl"]
[gd_scene load_steps=20 format=3 uid="uid://ct8gsph3wnepl"]
[ext_resource type="Script" path="res://scripts/app.gd" id="1_skc7d"]
[ext_resource type="Resource" uid="uid://b1xvdym0qh6td" path="res://resources/gate_events.res" id="2_cdryv"]
@ -16,7 +16,9 @@
[ext_resource type="Script" path="res://scripts/api/discover_gate.gd" id="13_3xhql"]
[ext_resource type="Script" path="res://scripts/api/analytics/analytics_sender_bookmark.gd" id="13_74yg1"]
[ext_resource type="Script" path="res://scripts/api/analytics/analytics_sender_gate.gd" id="13_jout6"]
[ext_resource type="Script" path="res://scripts/api/analytics/analytics_sender_onboarding.gd" id="15_a11br"]
[ext_resource type="Script" path="res://scripts/api/featured_gates.gd" id="15_c1fxl"]
[ext_resource type="Resource" uid="uid://crjhix0osmtnf" path="res://resources/ui_events.res" id="16_6u24i"]
[node name="App" type="Node" node_paths=PackedStringArray("scenes_root")]
script = ExtResource("1_skc7d")
@ -57,6 +59,10 @@ gate_events = ExtResource("2_cdryv")
script = ExtResource("13_74yg1")
bookmarks = ExtResource("6_rupvx")
[node name="SenderOnboarding" type="Node" parent="Api/Analytics"]
script = ExtResource("15_a11br")
ui_events = ExtResource("16_6u24i")
[node name="DiscoverGate" type="Node" parent="Api"]
script = ExtResource("13_3xhql")
api = ExtResource("10_04o5h")

View file

@ -1,5 +1,5 @@
extends Node
class_name Analitycs
class_name Analytics
signal analytics_ready
@ -12,6 +12,15 @@ func _ready() -> void:
analytics_ready.emit()
func send_event(body: Dictionary = {}) -> void:
var url = api.analytics_event
var callback = func(_result, code, _headers, _body):
if code != 200: Debug.logclr("Request send_event failed. Code " + str(code), Color.RED)
var err = await Backend.request(url, callback, body, HTTPClient.METHOD_POST)
if err != HTTPRequest.RESULT_SUCCESS: Debug.logclr("Cannot send request send_event", Color.RED)
func get_app_version() -> void:
AnalyticsEvents.app_version = ProjectSettings.get_setting("application/config/version")
@ -32,10 +41,5 @@ func get_user_id() -> void:
if err != HTTPRequest.RESULT_SUCCESS: Debug.logclr("Cannot send request create_user_id", Color.RED)
func send_event(body: Dictionary = {}) -> void:
var url = api.analytics_event
var callback = func(_result, code, _headers, _body):
if code != 200: Debug.logclr("Request send_event failed. Code " + str(code), Color.RED)
var err = await Backend.request(url, callback, body, HTTPClient.METHOD_POST)
if err != HTTPRequest.RESULT_SUCCESS: Debug.logclr("Cannot send request send_event", Color.RED)
static func get_delta_sec_from_tick(from_tick: int) -> float:
return float(Time.get_ticks_msec() - from_tick) / 1000

View file

@ -1,15 +1,15 @@
extends Node
#class_name AnalyticsEvents
var user_id := "none"
var app_version := "none"
var user_id := "none"
func base(event_name: String) -> Dictionary:
var event = {}
event.event_name = event_name
event.user_id = user_id
event.app_version = app_version
event.user_id = user_id
return event
@ -86,3 +86,15 @@ func error(msg: String) -> Dictionary:
var event = base("error")
event.msg = msg
return event
# ONBOARDING
func onboarding_started() -> Dictionary:
return base("onboarding_started")
func onboarding_finished(time_spend: float) -> Dictionary:
var event = base("onboarding_finished")
event.time_spend = time_spend
return event

View file

@ -1,7 +1,7 @@
extends Node
class_name AnalyticsSender
var analytics: Analitycs
var analytics: Analytics
func _enter_tree() -> void:

View file

@ -26,12 +26,12 @@ func start_heartbeat() -> void:
func send_hearbeat() -> void:
var time_spend = float(Time.get_ticks_msec()) / 1000
var time_spend = Analytics.get_delta_sec_from_tick(0)
analytics.send_event(AnalyticsEvents.heartbeat(time_spend))
func _exit_tree() -> void:
# Save to send on open
var time_spend = float(Time.get_ticks_msec()) / 1000
var time_spend = Analytics.get_delta_sec_from_tick(0)
var event = AnalyticsEvents.app_exit(time_spend)
DataSaver.set_value("analytics", "app_exit", JSON.stringify(event))

View file

@ -39,14 +39,14 @@ func send_gate_open(url: String) -> void:
func send_gate_load() -> void:
var download_time = get_delta_sec(gate_open_tick)
var download_time = Analytics.get_delta_sec_from_tick(gate_open_tick)
gate_load_tick = Time.get_ticks_msec()
analytics.send_event(AnalyticsEvents.gate_load(gate_url, download_time))
Debug.logclr("Download time: %.3f" % [download_time], Color.AQUAMARINE)
func send_gate_start() -> void:
var bootup_time = get_delta_sec(gate_load_tick)
var bootup_time = Analytics.get_delta_sec_from_tick(gate_load_tick)
analytics.send_event(AnalyticsEvents.gate_start(gate_url, bootup_time))
Debug.logclr("Bootup time: %.3f" % [bootup_time], Color.AQUAMARINE)
@ -54,7 +54,7 @@ func send_gate_start() -> void:
func send_gate_exit() -> void:
if gate_url.is_empty(): return
var time_spend = get_delta_sec(gate_open_tick)
var time_spend = Analytics.get_delta_sec_from_tick(gate_open_tick)
analytics.send_event(AnalyticsEvents.gate_exit(gate_url, time_spend))
gate_url = ""
@ -63,10 +63,6 @@ func _exit_tree() -> void:
if gate_url.is_empty(): return
# Save to send on open
var time_spend = get_delta_sec(gate_open_tick)
var time_spend = Analytics.get_delta_sec_from_tick(gate_open_tick)
var event = AnalyticsEvents.gate_exit(gate_url, time_spend)
DataSaver.set_value("analytics", "send_gate_exit", JSON.stringify(event))
func get_delta_sec(from_msec: int) -> float:
return float(Time.get_ticks_msec() - from_msec) / 1000

View file

@ -0,0 +1,26 @@
extends AnalyticsSender
class_name AnalyticsSenderOnboarding
@export var ui_events: UiEvents
var onboarding_started_tick: int
func start() -> void:
super.start()
ui_events.onboarding_started.connect(send_onboarding_started)
ui_events.onboarding_finished.connect(send_onboarding_finished)
if ui_events.is_onboarding_started:
send_onboarding_started()
func send_onboarding_started() -> void:
onboarding_started_tick = Time.get_ticks_msec()
analytics.send_event(AnalyticsEvents.onboarding_started())
func send_onboarding_finished() -> void:
var time_spend = Analytics.get_delta_sec_from_tick(onboarding_started_tick)
analytics.send_event(AnalyticsEvents.onboarding_finished(time_spend))