Skip to content

Commit 8caac3e

Browse files
mohitsharma468rohitesh-wingify
authored andcommitted
fix: send init details in usageStats event
1 parent 44a5b2f commit 8caac3e

6 files changed

Lines changed: 57 additions & 27 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
9+
## [1.65.0] - 2026-09-10
10+
11+
## Added
12+
13+
- Enhanced `vwo_sdkUsageStats` event payload with `settingsFetchTime`, `sdkInitTime`, and `initConfig` (the SDK initialization options) for better observability into SDK initialization.
14+
815
## [1.62.0] - 2026-08-17
916

1017
### Added

‎setup.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ def run(self):
143143

144144
setup(
145145
name=_brand["name"],
146-
version="1.62.0",
146+
version="1.65.0",
147147
description=_brand["description"],
148148
long_description=long_description,
149149
long_description_content_type="text/markdown",

‎wingify/constants/Constants.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class Constants:
1717
# TODO: read from setup.py
1818
sdk_meta = {
1919
"name": "vwo-fme-python-sdk",
20-
"version": "1.62.0",
20+
"version": "1.65.0",
2121
}
2222

2323
SDK_VERSION = sdk_meta["version"]

‎wingify/utils/event_util.py‎

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,23 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
from typing import Optional
15+
from typing import Any, Dict, Optional
1616
from .network_util import get_events_base_properties, get_sdk_init_event_payload, get_sdk_usage_stats_event_payload, send_event
1717
from ..enums.event_enum import EventEnum
1818
from ..wingify_client import WingifyClient as VWOClient
1919
from ..packages.logger.core.log_manager import LogManager
2020
from ..enums.api_enum import ApiEnum
2121

22-
def send_sdk_init_event(settings_fetch_time: Optional[int] = None, sdk_init_time: Optional[int] = None) -> None:
22+
def send_sdk_init_event() -> None:
2323
"""
2424
Sends an init called event to VWO.
2525
This event is triggered when the init function is called.
26-
27-
:param settings_fetch_time: Time taken to fetch settings in milliseconds
28-
:param sdk_init_time: Time taken to initialize the SDK in milliseconds
2926
"""
3027
# Create the query parameters
3128
properties = get_events_base_properties(EventEnum.SDK_INIT_EVENT.value)
3229

3330
# Create the payload with required fields
34-
payload = get_sdk_init_event_payload(EventEnum.SDK_INIT_EVENT.value, settings_fetch_time, sdk_init_time)
31+
payload = get_sdk_init_event_payload(EventEnum.SDK_INIT_EVENT.value)
3532

3633
# Send the constructed payload via POST request
3734
try:
@@ -49,18 +46,32 @@ def send_sdk_init_event(settings_fetch_time: Optional[int] = None, sdk_init_time
4946
pass
5047

5148

52-
def send_sdk_usage_stats_event(usage_stats_account_id: int) -> None:
49+
def send_sdk_usage_stats_event(
50+
usage_stats_account_id: int,
51+
settings_fetch_time: Optional[int] = None,
52+
sdk_init_time: Optional[int] = None,
53+
init_config: Optional[Dict[str, Any]] = None,
54+
) -> None:
5355
"""
5456
Sends a usage stats event to VWO.
5557
This event is triggered when the SDK is initialized.
5658
5759
:param usage_stats_account_id: Account ID for usage stats event
60+
:param settings_fetch_time: Time taken to fetch settings in milliseconds
61+
:param sdk_init_time: Time taken to initialize the SDK in milliseconds
62+
:param init_config: SDK initialization options
5863
"""
5964
# Create the query parameters
6065
properties = get_events_base_properties(EventEnum.USAGE_STATS.value, "", "", True, usage_stats_account_id)
6166

6267
# Create the payload with required fields
63-
payload = get_sdk_usage_stats_event_payload(EventEnum.USAGE_STATS.value, usage_stats_account_id)
68+
payload = get_sdk_usage_stats_event_payload(
69+
EventEnum.USAGE_STATS.value,
70+
usage_stats_account_id,
71+
settings_fetch_time,
72+
sdk_init_time,
73+
init_config,
74+
)
6475

6576
vwo_instance = VWOClient.get_instance()
6677

‎wingify/utils/network_util.py‎

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,10 @@ def get_events_base_properties(
104104
"sv": Constants.SDK_VERSION
105105
}
106106

107-
if not is_usage_stats_event:
108-
# set env key for standard sdk events
109-
properties["env"] = sdk_key
110-
else:
111-
# set account id for internal usage stats event
107+
properties["env"] = sdk_key
108+
if is_usage_stats_event:
112109
properties["a"] = str(usage_stats_account_id)
110+
113111
return properties
114112

115113

@@ -510,18 +508,12 @@ def get_messaging_event_payload(
510508
return properties
511509

512510

513-
def get_sdk_init_event_payload(
514-
event_name: str,
515-
settings_fetch_time: Optional[int] = None,
516-
sdk_init_time: Optional[int] = None,
517-
) -> Dict[str, Any]:
511+
def get_sdk_init_event_payload(event_name: str) -> Dict[str, Any]:
518512
"""
519513
Constructs the payload for sdk init called event.
520514
521515
Args:
522516
event_name: The name of the event.
523-
settings_fetch_time: Time taken to fetch settings in milliseconds.
524-
sdk_init_time: Time taken to initialize the SDK in milliseconds.
525517
526518
Returns:
527519
The constructed payload with required fields.
@@ -539,23 +531,28 @@ def get_sdk_init_event_payload(
539531

540532
data = {
541533
"isSDKInitialized": True,
542-
"settingsFetchTime": settings_fetch_time,
543-
"sdkInitTime": sdk_init_time,
544534
}
545535
properties["d"]["event"]["props"]["data"] = data
546536

547537
return properties
548538

549539

550540
def get_sdk_usage_stats_event_payload(
551-
event_name: str, usage_stats_account_id: int
541+
event_name: str,
542+
usage_stats_account_id: int,
543+
settings_fetch_time: Optional[int] = None,
544+
sdk_init_time: Optional[int] = None,
545+
init_config: Optional[Dict[str, Any]] = None,
552546
) -> Dict[str, Any]:
553547
"""
554548
Constructs the payload for sdk usage stats event.
555549
556550
Args:
557551
event_name: The name of the event.
558552
usage_stats_account_id: Account ID for usage stats event.
553+
settings_fetch_time: Time taken to fetch settings in milliseconds.
554+
sdk_init_time: Time taken to initialize the SDK in milliseconds.
555+
init_config: SDK initialization options.
559556
560557
Returns:
561558
The constructed payload with required fields.
@@ -571,6 +568,15 @@ def get_sdk_usage_stats_event_payload(
571568
properties["d"]["event"]["props"]["product"] = Constants.PRODUCT_NAME
572569
properties["d"]["event"]["props"]["vwoMeta"] = UsageStatsUtil().get_usage_stats()
573570

571+
data = {
572+
"settingsFetchTime": settings_fetch_time,
573+
"sdkInitTime": sdk_init_time,
574+
"initConfig": json.loads(
575+
json.dumps(init_config or {}, default=lambda o: type(o).__name__)
576+
),
577+
}
578+
properties["d"]["event"]["props"]["data"] = data
579+
574580
return properties
575581

576582

‎wingify/wingify.py‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def init(options: Dict[str, Any]) -> Optional["WingifyClient"]:
110110
was_initialized = sdk_meta_info.get("wasInitializedEarlier", False)
111111

112112
if instance.is_settings_valid_on_init and not was_initialized:
113-
send_sdk_init_event(instance.settings_fetch_time, sdk_init_time)
113+
send_sdk_init_event()
114114

115115
usage_stats_account_id = None
116116
if getattr(instance, '_settings', None) is not None:
@@ -119,7 +119,13 @@ def init(options: Dict[str, Any]) -> Optional["WingifyClient"]:
119119
if usage_stats_account_id:
120120
sampling_service = InternalEventsSamplingService()
121121
if sampling_service.should_send_usage_stats_event(instance._settings):
122-
send_sdk_usage_stats_event(usage_stats_account_id)
122+
settings_fetch_time = instance.settings_fetch_time
123+
send_sdk_usage_stats_event(
124+
usage_stats_account_id,
125+
settings_fetch_time,
126+
sdk_init_time,
127+
options,
128+
)
123129

124130
return instance
125131
except Exception as e:

0 commit comments

Comments
 (0)