mirror of
https://github.com/thegatesbrowser/thegates.git
synced 2025-08-23 08:17:34 -04:00
AnalyticsEvents
This commit is contained in:
parent
b21d008ec1
commit
ed3747bcb5
7 changed files with 134 additions and 13 deletions
|
@ -26,6 +26,7 @@ DataSaver="*res://the_gates/scripts/data_saver.gd"
|
|||
FileDownloader="*res://the_gates/scripts/loading/file_downloader.gd"
|
||||
Debug="*res://the_gates/scripts/debug-log/debug.gd"
|
||||
Analytics="*res://the_gates/scripts/analytics/analytics.gd"
|
||||
AnalyticsEvents="*res://the_gates/scripts/analytics/analytics_events.gd"
|
||||
|
||||
[display]
|
||||
|
||||
|
|
|
@ -2,20 +2,26 @@ extends Node
|
|||
#class_name Analitycs
|
||||
|
||||
var backend := preload("res://the_gates/resources/backend.tres")
|
||||
var user_id := "none"
|
||||
var analytics_senders = [
|
||||
AnalyticsSenderGate.new(),
|
||||
AnalyticsSenderApp.new()
|
||||
]
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
await get_user_id()
|
||||
send_event({
|
||||
"event_name" : "application_enter",
|
||||
"user_id" : user_id
|
||||
})
|
||||
for sender in analytics_senders:
|
||||
add_child(sender)
|
||||
|
||||
|
||||
func send_event(body: Variant = []) -> void:
|
||||
func _exit_tree() -> void:
|
||||
for sender in analytics_senders:
|
||||
sender.exit()
|
||||
|
||||
|
||||
func send_event(body: Dictionary = {}) -> void:
|
||||
var url = backend.analytics_event
|
||||
var callback = func(result, code, headers, body):
|
||||
var callback = func(_result, code, _headers, _body):
|
||||
if code != 200: Debug.logerr("Request send_event failed. Code " + str(code))
|
||||
|
||||
var err = await request(url, callback, body, HTTPClient.METHOD_POST)
|
||||
|
@ -24,10 +30,10 @@ func send_event(body: Variant = []) -> void:
|
|||
|
||||
func get_user_id() -> void:
|
||||
var url = backend.get_user_id + OS.get_unique_id()
|
||||
var callback = func(result, code, headers, body):
|
||||
var callback = func(_result, code, _headers, body):
|
||||
if code == 200:
|
||||
user_id = body.get_string_from_utf8()
|
||||
Debug.logr("User id recieved: " + user_id)
|
||||
AnalyticsEvents.user_id = body.get_string_from_utf8()
|
||||
Debug.logr("User id recieved: " + AnalyticsEvents.user_id)
|
||||
else: Debug.logerr("Request get_user_id failed. Code " + str(code))
|
||||
|
||||
var err = await request(url, callback)
|
||||
|
@ -35,7 +41,7 @@ func get_user_id() -> void:
|
|||
|
||||
|
||||
func request(url: String, callback: Callable,
|
||||
body: Variant = [], method: int = HTTPClient.METHOD_GET) -> Error:
|
||||
body: Dictionary = {}, method: int = HTTPClient.METHOD_GET) -> Error:
|
||||
var data = JSON.stringify(body)
|
||||
var headers = []
|
||||
|
||||
|
|
51
project/the_gates/scripts/analytics/analytics_events.gd
Normal file
51
project/the_gates/scripts/analytics/analytics_events.gd
Normal file
|
@ -0,0 +1,51 @@
|
|||
extends Node
|
||||
#class_name AnalyticsEvents
|
||||
|
||||
var user_id := "none"
|
||||
|
||||
|
||||
func base(event_name: String) -> Dictionary:
|
||||
var event = {}
|
||||
event.event_name = event_name
|
||||
event.user_id = user_id
|
||||
return event
|
||||
|
||||
|
||||
# APP
|
||||
|
||||
func app_open() -> Dictionary:
|
||||
return base("application_open")
|
||||
|
||||
|
||||
func heartbeat(time_spend: int) -> Dictionary:
|
||||
var event = base("heartbeat")
|
||||
event.time_spend = time_spend
|
||||
return event
|
||||
|
||||
|
||||
func app_exit(time_spend: int) -> Dictionary:
|
||||
var event = base("application_exit")
|
||||
event.time_spend = time_spend
|
||||
return event
|
||||
|
||||
|
||||
# GATE
|
||||
|
||||
func gate_open(url: String) -> Dictionary:
|
||||
var event = base("gate_open")
|
||||
event.gate_url = url
|
||||
return event
|
||||
|
||||
|
||||
func gate_enter(url: String, download_time: int) -> Dictionary:
|
||||
var event = base("gate_enter")
|
||||
event.gate_url = url
|
||||
event.download_time = download_time
|
||||
return event
|
||||
|
||||
|
||||
func gate_exit(url: String, time_spend: int) -> Dictionary:
|
||||
var event = base("gate_exit")
|
||||
event.gate_url = url
|
||||
event.time_spend = time_spend
|
||||
return event
|
27
project/the_gates/scripts/analytics/analytics_sender_app.gd
Normal file
27
project/the_gates/scripts/analytics/analytics_sender_app.gd
Normal file
|
@ -0,0 +1,27 @@
|
|||
extends Node
|
||||
class_name AnalyticsSenderApp
|
||||
|
||||
const HEARTBEAT_DELAY = 60
|
||||
var heartbeat_timer: Timer
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
Analytics.send_event(AnalyticsEvents.app_open())
|
||||
start_heartbeat()
|
||||
|
||||
|
||||
func start_heartbeat() -> void:
|
||||
heartbeat_timer = Timer.new()
|
||||
add_child(heartbeat_timer)
|
||||
heartbeat_timer.timeout.connect(send_hearbeat)
|
||||
heartbeat_timer.start(HEARTBEAT_DELAY)
|
||||
|
||||
|
||||
func send_hearbeat() -> void:
|
||||
var time_spend = int(Time.get_ticks_msec() / 1000)
|
||||
Analytics.send_event(AnalyticsEvents.heartbeat(time_spend))
|
||||
|
||||
|
||||
func exit() -> void:
|
||||
var time_spend = int(Time.get_ticks_msec() / 1000)
|
||||
Analytics.send_event(AnalyticsEvents.app_exit(time_spend))
|
36
project/the_gates/scripts/analytics/analytics_sender_gate.gd
Normal file
36
project/the_gates/scripts/analytics/analytics_sender_gate.gd
Normal file
|
@ -0,0 +1,36 @@
|
|||
extends Node
|
||||
class_name AnalyticsSenderGate
|
||||
|
||||
var gate_events := preload("res://the_gates/resources/gate_events.res")
|
||||
|
||||
var gate_open_time: int
|
||||
var gate_url: String
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
gate_events.open_gate.connect(send_gate_open)
|
||||
gate_events.gate_entered.connect(send_gate_enter)
|
||||
gate_events.exit_gate.connect(send_gate_exit)
|
||||
|
||||
|
||||
func send_gate_open(url: String) -> void:
|
||||
gate_url = url
|
||||
gate_open_time = int(Time.get_ticks_msec() / 1000)
|
||||
Analytics.send_event(AnalyticsEvents.gate_open(url))
|
||||
|
||||
|
||||
func send_gate_enter() -> void:
|
||||
var download_time = int(Time.get_ticks_msec() / 1000) - gate_open_time
|
||||
gate_open_time = int(Time.get_ticks_msec() / 1000)
|
||||
Analytics.send_event(AnalyticsEvents.gate_enter(gate_url, download_time))
|
||||
|
||||
|
||||
func send_gate_exit() -> void:
|
||||
var time_spend = int(Time.get_ticks_msec() / 1000) - gate_open_time
|
||||
Analytics.send_event(AnalyticsEvents.gate_exit(gate_url, time_spend))
|
||||
gate_url = ""
|
||||
|
||||
|
||||
func exit() -> void:
|
||||
if gate_url.is_empty(): return
|
||||
send_gate_exit()
|
|
@ -6,7 +6,7 @@ extends Node
|
|||
|
||||
|
||||
func _ready() -> void:
|
||||
gate_events.open_gate.connect(switch_scene.bind(world_scene))
|
||||
gate_events.open_gate.connect(func(_url): switch_scene(world_scene))
|
||||
gate_events.exit_gate.connect(switch_scene.bind(menu_scene))
|
||||
|
||||
$Scenes.add_child(menu_scene.instantiate())
|
||||
|
|
|
@ -13,7 +13,7 @@ var current_gate: Gate
|
|||
|
||||
func open_gate_emit(url: String) -> void:
|
||||
current_gate_url = Url.fix_gate_url(url)
|
||||
open_gate.emit()
|
||||
open_gate.emit(url)
|
||||
|
||||
|
||||
func gate_info_loaded_emit(gate: Gate) -> void:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue