1616from typing import Dict , Any , List
1717from ..models .settings .settings_model import SettingsModel
1818from ..models .user .context_model import ContextModel
19- from ..models .user .context_model import ContextModel
2019from ..services .hooks_manager import HooksManager
21- from ..packages .logger .core .log_manager import LogManager
2220from ..enums .api_enum import ApiEnum
2321from ..enums .campaign_type_enum import CampaignTypeEnum
2422from ..utils .log_message_util import debug_messages , info_messages , error_messages
4038from ..services .storage_service import StorageService
4139from ..decorators .storage_decorator import StorageDecorator
4240from ..utils .campaign_util import get_variation_from_campaign_key
41+ from ..enums .debug_category_enum import DebugCategoryEnum
42+ from ..packages .logger .enums .log_level_enum import LogLevelEnum
43+ from ..constants .Constants import Constants
44+ from ..utils .debugger_service_util import send_debug_event_to_vwo
4345
4446
4547class GetFlagApi :
@@ -74,6 +76,13 @@ def get(
7476 "api" : ApiEnum .GET_FLAG .value ,
7577 }
7678
79+ debug_event_props = {
80+ "an" : ApiEnum .GET_FLAG .value ,
81+ "fk" : feature_key ,
82+ "uuid" : context .get_vwo_uuid (),
83+ "sId" : context .get_vwo_session_id (),
84+ }
85+
7786 storage_service = StorageService ()
7887 stored_data = StorageDecorator ().get_feature_from_storage (
7988 feature_key , context , storage_service
@@ -128,11 +137,7 @@ def get(
128137 self ._passed_rules_information .update (feature_info )
129138
130139 if feature is None :
131- LogManager .get_instance ().error (
132- error_messages .get ("FEATURE_NOT_FOUND" ).format (
133- featureKey = feature_key ,
134- )
135- )
140+ LogManager .get_instance ().error_log ("FEATURE_NOT_FOUND" , data = {"featureKey" : feature_key }, debug_data = debug_event_props )
136141 self ._get_flag_response .set_is_enabled (False )
137142 return self ._get_flag_response
138143
@@ -194,6 +199,7 @@ def get(
194199 rollout_rules_to_evaluate [0 ].get_id (),
195200 variation .get_id (),
196201 context ,
202+ feature_key ,
197203 )
198204
199205 if not roll_out_rules :
@@ -262,6 +268,7 @@ def get(
262268 experiment_rules_to_evaluate [0 ].get_id (),
263269 variation .get_id (),
264270 context ,
271+ feature_key ,
265272 )
266273
267274 if self ._get_flag_response .is_enabled ():
@@ -277,6 +284,16 @@ def get(
277284 hook_manager .set (decision )
278285 hook_manager .execute (hook_manager .get ())
279286
287+ # send debug event, if debugger is enabled
288+ if feature .get_is_debugger_enabled ():
289+ debug_event_props ["cg" ] = DebugCategoryEnum .DECISION .value
290+ debug_event_props ["lt" ] = LogLevelEnum .INFO .value
291+ debug_event_props ["msg_t" ] = Constants .FLAG_DECISION_GIVEN
292+
293+ # update debug event props with decision keys
294+ self .update_debug_event_props_with_message (debug_event_props , decision )
295+ send_debug_event_to_vwo (debug_event_props );
296+
280297 if (
281298 feature .get_impact_campaign ()
282299 and feature .get_impact_campaign ().get_campaign_id ()
@@ -300,6 +317,7 @@ def get(
300317 2 if self ._get_flag_response .is_enabled () else 1
301318 ), # 2 is for Variation (flag enabled), 1 is for Control (flag disabled)
302319 context ,
320+ feature_key ,
303321 )
304322
305323 return self ._get_flag_response
@@ -327,3 +345,40 @@ def _update_integrations_decision_object(
327345 }
328346 )
329347 decision .update (self ._passed_rules_information )
348+
349+ def update_debug_event_props_with_message (
350+ self ,
351+ debug_event_props : Dict [str , Any ],
352+ decision : Dict [str , Any ],
353+ ) -> None :
354+ """
355+ Updates the debug event props with the decision keys.
356+
357+ :param debug_event_props: The debug event props to update.
358+ :param decision: The decision object to extract the keys from.
359+ """
360+ feature_key = decision .get ("featureKey" ) or ""
361+ message = f"Flag decision given for feature:{ feature_key } ."
362+
363+ rollout_key = decision .get ("rolloutKey" )
364+ rollout_variation_id = decision .get ("rolloutVariationId" )
365+ if rollout_key and rollout_variation_id :
366+ prefix = f"{ feature_key } _"
367+ rollout_suffix = (
368+ rollout_key [len (prefix ):]
369+ if isinstance (rollout_key , str ) and isinstance (feature_key , str ) and rollout_key .startswith (prefix )
370+ else rollout_key
371+ )
372+ message += f" Got rollout:{ rollout_suffix } with variation:{ rollout_variation_id } "
373+
374+ experiment_key = decision .get ("experimentKey" )
375+ experiment_variation_id = decision .get ("experimentVariationId" )
376+ if experiment_key and experiment_variation_id :
377+ prefix = f"{ feature_key } _"
378+ experiment_suffix = (
379+ experiment_key [len (prefix ):]
380+ if isinstance (experiment_key , str ) and isinstance (feature_key , str ) and experiment_key .startswith (prefix )
381+ else experiment_key
382+ )
383+ message += f" and experiment:{ experiment_suffix } with variation:{ experiment_variation_id } "
384+ debug_event_props ["msg" ] = message
0 commit comments