diff --git a/src/backend/backend_ga4.py b/src/backend/backend_ga4.py index cf8b89c..4f12ae5 100644 --- a/src/backend/backend_ga4.py +++ b/src/backend/backend_ga4.py @@ -2,8 +2,8 @@ # SPDX-License-Identifier: Apache-2.0 import json -import logging as log import uuid +from copy import copy from urllib import request from .backend import TelemetryBackend @@ -41,11 +41,12 @@ def send(self, message: dict): else: raise ValueError("Incorrect backend URL.") - request.urlopen(req) #nosec + request.urlopen(req) # nosec except Exception as err: pass # nosec def build_event_message(self, event_category: str, event_action: str, event_label: str, event_value: int = 1, + app_name=None, app_version=None, **kwargs): client_id = self.cid if client_id is None: @@ -53,6 +54,12 @@ def build_event_message(self, event_category: str, event_action: str, event_labe if self.session_id is None: self.generate_new_session_id() + default_args = copy(self.default_message_attrs) + if app_name is not None: + default_args['app_name'] = app_name + if app_version is not None: + default_args['app_version'] = app_version + payload = { "client_id": client_id, "non_personalized_ads": False, @@ -64,7 +71,7 @@ def build_event_message(self, event_category: str, event_action: str, event_labe "event_label": event_label, "event_count": event_value, "session_id": self.session_id, - **self.default_message_attrs, + **default_args, } } ] @@ -85,7 +92,8 @@ def build_stack_trace_message(self, category: str, error_msg: str, **kwargs): return self.build_event_message(category, "stack_trace", error_msg, 1) def generate_new_cid_file(self): - self.cid = get_or_generate_cid(self.cid_filename, lambda: str(uuid.uuid4()), is_valid_cid, self.old_cid_filename) + self.cid = get_or_generate_cid(self.cid_filename, lambda: str(uuid.uuid4()), is_valid_cid, + self.old_cid_filename) def cid_file_initialized(self): return self.cid is not None diff --git a/src/main.py b/src/main.py index 745d687..84b16c5 100644 --- a/src/main.py +++ b/src/main.py @@ -44,6 +44,7 @@ class Telemetry(metaclass=SingletonMetaClass): with opt_in_out script. :param disable_in_ci: Turn off telemetry for CI jobs. """ + def __init__(self, app_name: str = None, app_version: str = None, tid: str = None, backend: [str, None] = 'ga', enable_opt_in_dialog=True, disable_in_ci=False): # The case when instance is already configured @@ -56,7 +57,7 @@ def __init__(self, app_name: str = None, app_version: str = None, tid: str = Non self.init(app_name, app_version, tid, backend, enable_opt_in_dialog, disable_in_ci) def init(self, app_name: str = None, app_version: str = None, tid: str = None, - backend: [str, None] = 'ga', enable_opt_in_dialog=True, disable_in_ci=False): + backend: [str, None] = 'ga', enable_opt_in_dialog=True, disable_in_ci=False): opt_in_checker = OptInChecker() opt_in_check_result = opt_in_checker.check(enable_opt_in_dialog, disable_in_ci) if enable_opt_in_dialog: @@ -168,7 +169,7 @@ def force_shutdown(self, timeout: float = 1.0): self.sender.force_shutdown(timeout) def send_event(self, event_category: str, event_action: str, event_label: str, event_value: int = 1, - force_send=False, **kwargs): + app_name=None, app_version=None, force_send=False, **kwargs): """ Send single event. @@ -176,13 +177,16 @@ def send_event(self, event_category: str, event_action: str, event_label: str, e :param event_action: action of the event :param event_label: the label associated with the action :param event_value: the integer value corresponding to this label + :param app_name: application name + :param app_version: application version :param force_send: forces to send event ignoring the consent value :param kwargs: additional parameters :return: None """ if self.consent or force_send: self.sender.send(self.backend, self.backend.build_event_message(event_category, event_action, event_label, - event_value, **kwargs)) + event_value, app_name, app_version, + **kwargs)) def start_session(self, category: str, **kwargs): """