@@ -1006,43 +1006,33 @@ def _minimal_decider(
10061006 )
10071007
10081008 def make_object_for_context (self , name : str , span : Span ) -> Decider :
1009- # initialize rust decider from watched manifest file
1010- rs_decider = None
1011- try :
1012- rs_decider = self ._filewatcher .get_data ()
1013- except WatchedFileNotAvailableError as exc :
1009+ def inc_failure_counter (failure_type : str ):
10141010 experiments_client_counter .labels (
10151011 operation = "make_object_for_context" ,
10161012 success = "false" ,
1017- error_type = "watched_file_not_available" ,
1013+ error_type = failure_type ,
10181014 pkg_version = _pkg_version ,
10191015 ).inc ()
10201016
1017+ # initialize rust decider from watched manifest file
1018+ rs_decider = None
1019+ try :
1020+ rs_decider = self ._filewatcher .get_data ()
1021+ except WatchedFileNotAvailableError as exc :
1022+ inc_failure_counter ("watched_file_not_available" )
10211023 logger .error (f"Experiment config file unavailable: { exc } " )
10221024
10231025 # check for `span`'s presence
10241026 if span is None :
1025- experiments_client_counter .labels (
1026- operation = "make_object_for_context" ,
1027- success = "false" ,
1028- error_type = "missing_span" ,
1029- pkg_version = _pkg_version ,
1030- ).inc ()
1031-
1027+ inc_failure_counter ("missing_span" )
10321028 logger .debug ("`span` is `None` in reddit_decider `make_object_for_context()`." )
10331029 return self ._minimal_decider (internal = rs_decider , name = name , span = span )
10341030
10351031 # check for `span.context`'s presence
10361032 request = getattr (span , "context" , None )
10371033
10381034 if request is None :
1039- experiments_client_counter .labels (
1040- operation = "make_object_for_context" ,
1041- success = "false" ,
1042- error_type = "missing_span_context" ,
1043- pkg_version = _pkg_version ,
1044- ).inc ()
1045-
1035+ inc_failure_counter ("missing_span_context" )
10461036 return self ._minimal_decider (
10471037 internal = rs_decider ,
10481038 name = name ,
@@ -1059,14 +1049,8 @@ def make_object_for_context(self, name: str, span: Span) -> Decider:
10591049 extracted_dict = extracted_fields
10601050 )
10611051 except Exception as exc :
1062- experiments_client_counter .labels (
1063- operation = "make_object_for_context" ,
1064- success = "false" ,
1065- error_type = "request_field_extractor" ,
1066- pkg_version = _pkg_version ,
1067- ).inc ()
1068-
1069- logger .info (
1052+ inc_failure_counter ("request_field_extractor" )
1053+ logger .error (
10701054 f"Unable to extract fields from `request_field_extractor()` in `make_object_for_context()`. details: { exc } "
10711055 )
10721056 # re-raise exception raised by `_request_field_extractor`
@@ -1174,13 +1158,7 @@ def make_object_for_context(self, name: str, span: Span) -> Decider:
11741158 extracted_fields = parsed_extracted_fields ,
11751159 )
11761160 except Exception as exc :
1177- experiments_client_counter .labels (
1178- operation = "make_object_for_context" ,
1179- success = "false" ,
1180- error_type = "DeciderContext_init_failed" ,
1181- pkg_version = _pkg_version ,
1182- ).inc ()
1183-
1161+ inc_failure_counter ("DeciderContext_init_failed" )
11841162 logger .warning (
11851163 f"Could not create full DeciderContext() (defaulting to empty DeciderContext()): { exc } "
11861164 )
0 commit comments