diff --git a/src/backend/backend_ga4.py b/src/backend/backend_ga4.py index 65eff7f..eb6c49a 100644 --- a/src/backend/backend_ga4.py +++ b/src/backend/backend_ga4.py @@ -56,6 +56,7 @@ def __init__(self, tid: str = None, app_name: str = None, app_version: str = Non self.default_message_attrs = { 'app_name': self.app_name, 'app_version': self.app_version, + 'os': system(), } self.stats = {} diff --git a/src/main.py b/src/main.py index 445a33f..25372b1 100644 --- a/src/main.py +++ b/src/main.py @@ -55,10 +55,10 @@ def __init__(self, app_name: str = None, app_version: str = None, tid: str = Non 'application name, version and TID.') return - self.init(app_name, app_version, tid, backend, enable_opt_in_dialog, disable_in_ci) + self.init(app_name, app_version, tid, backend, enable_opt_in_dialog, disable_in_ci, True) 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, increment_stats=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: @@ -78,7 +78,7 @@ def init(self, app_name: str = None, app_version: str = None, tid: str = None, self.backend.generate_new_cid_file() if self.consent: - data = self.get_stats() + data = self.get_stats(increment_stats) if data is not None and isinstance(data, dict): self.backend.set_stats(data) @@ -291,7 +291,7 @@ def send_opt_in_event(self, new_state: OptInStatus, prev_state: OptInStatus = Op label = "{{prev_state:{}, new_state: {}}}".format(prev_state.value, new_state.value) self.send_event("opt_in", new_state.value, label, force_send=force_send) - def get_stats(self): + def get_stats(self, update_usage_num: bool): stats = StatsProcessor() file_exists, data = stats.get_stats() if not file_exists: @@ -301,12 +301,26 @@ def get_stats(self): return None if "usage_count" in data: usage_count = data["usage_count"] - if usage_count < sys.maxsize: + if usage_count is None or not isinstance(usage_count, int) or usage_count <= 0: + log.warning("Invalid usage count.") + return data + if usage_count < sys.maxsize and update_usage_num: usage_count += 1 else: usage_count = 1 data["usage_count"] = usage_count stats.update_stats(data) + if usage_count == 1: + data["usage_group"] = "first_usage" + elif usage_count <= 100: + data["usage_group"] = "1-100_usages" + elif usage_count <= 1000: + data["usage_group"] = "101-1000_usages" + elif usage_count <= 5000: + data["usage_group"] = "1001-5000_usages" + else: + data["usage_group"] = "5000+_usages" + return data @staticmethod diff --git a/src/main_test.py b/src/main_test.py index 9622095..e3d50a9 100644 --- a/src/main_test.py +++ b/src/main_test.py @@ -4,6 +4,7 @@ import os import unittest import uuid +from platform import system from tempfile import TemporaryDirectory from unittest.mock import MagicMock, call, patch @@ -73,8 +74,10 @@ def make_message(self, client_id, app_name, app_version, category, action, label 'session_id': session_id, 'app_name': app_name, 'app_version': app_version, + 'os': system(), + 'docker': 'False', 'usage_count': 1, - 'docker': 'False'} + 'usage_group': 'first_usage'} } ]}