@@ -47,7 +47,7 @@ def _get_token_name(auth: AuthenticatedToken | None) -> str | None:
47
47
raise AssertionError (f"unreachable: { auth } " )
48
48
49
49
50
- def _get_rate_limit_stats_dict (request : Request ) -> dict [str , str ]:
50
+ def _get_rate_limit_stats_dict (request : Request ) -> dict [str , str | int | None ]:
51
51
52
52
rate_limit_metadata : RateLimitMeta | None = getattr (request , "rate_limit_metadata" , None )
53
53
snuba_rate_limit_metadata : SnubaRateLimitMeta | None = getattr (
@@ -62,20 +62,20 @@ def _get_rate_limit_stats_dict(request: Request) -> dict[str, str]:
62
62
63
63
rate_limit_stats = {
64
64
"rate_limit_type" : rate_limit_type ,
65
- "concurrent_limit" : str ( getattr (rate_limit_metadata , "concurrent_limit" , None ) ),
66
- "concurrent_requests" : str ( getattr (rate_limit_metadata , "concurrent_requests" , None ) ),
67
- "reset_time" : str ( getattr (rate_limit_metadata , "reset_time" , None ) ),
68
- "group" : str ( getattr (rate_limit_metadata , "group" , None ) ),
69
- "limit" : str ( getattr (rate_limit_metadata , "limit" , None ) ),
70
- "remaining" : str ( getattr (rate_limit_metadata , "remaining" , None ) ),
65
+ "concurrent_limit" : getattr (rate_limit_metadata , "concurrent_limit" , None ),
66
+ "concurrent_requests" : getattr (rate_limit_metadata , "concurrent_requests" , None ),
67
+ "reset_time" : getattr (rate_limit_metadata , "reset_time" , None ),
68
+ "group" : getattr (rate_limit_metadata , "group" , None ),
69
+ "limit" : getattr (rate_limit_metadata , "limit" , None ),
70
+ "remaining" : getattr (rate_limit_metadata , "remaining" , None ),
71
71
# We prefix the snuba fields with snuba_ to avoid confusion with the standard rate limit metadata
72
- "snuba_policy" : str ( getattr (snuba_rate_limit_metadata , "policy" , None ) ),
73
- "snuba_quota_unit" : str ( getattr (snuba_rate_limit_metadata , "quota_unit" , None ) ),
74
- "snuba_quota_used" : str ( getattr (snuba_rate_limit_metadata , "quota_used" , None ) ),
75
- "snuba_rejection_threshold" : str (
76
- getattr ( snuba_rate_limit_metadata , "rejection_threshold" , None )
72
+ "snuba_policy" : getattr (snuba_rate_limit_metadata , "policy" , None ),
73
+ "snuba_quota_unit" : getattr (snuba_rate_limit_metadata , "quota_unit" , None ),
74
+ "snuba_quota_used" : getattr (snuba_rate_limit_metadata , "quota_used" , None ),
75
+ "snuba_rejection_threshold" : getattr (
76
+ snuba_rate_limit_metadata , "rejection_threshold" , None
77
77
),
78
- "snuba_storage_key" : str ( getattr (snuba_rate_limit_metadata , "storage_key" , None ) ),
78
+ "snuba_storage_key" : getattr (snuba_rate_limit_metadata , "storage_key" , None ),
79
79
}
80
80
81
81
return rate_limit_stats
@@ -94,7 +94,7 @@ def _create_api_access_log(
94
94
view = request .resolver_match ._func_path
95
95
96
96
request_auth = _get_request_auth (request )
97
- token_type = str ( _get_token_name (request_auth ) )
97
+ token_type = _get_token_name (request_auth )
98
98
if token_type == "system" :
99
99
# if its an internal request, no need to log
100
100
return
@@ -108,26 +108,30 @@ def _create_api_access_log(
108
108
entity_id = getattr (request_auth , "entity_id" , None )
109
109
status_code = getattr (response , "status_code" , 500 )
110
110
log_metrics = dict (
111
- method = str ( request .method ) ,
111
+ method = request .method ,
112
112
view = view ,
113
113
response = status_code ,
114
- user_id = str ( user_id ) ,
115
- is_app = str ( is_app ) ,
114
+ user_id = user_id ,
115
+ is_app = is_app ,
116
116
token_type = token_type ,
117
- is_frontend_request = str ( is_frontend_request (request ) ),
118
- organization_id = str ( org_id ) ,
119
- entity_id = str ( entity_id ) ,
120
- path = str ( request .path ) ,
121
- caller_ip = str ( request .META .get ("REMOTE_ADDR" ) ),
122
- user_agent = str ( request .META .get ("HTTP_USER_AGENT" ) ),
123
- rate_limited = str ( getattr (request , "will_be_rate_limited" , False ) ),
124
- rate_limit_category = str ( getattr (request , "rate_limit_category" , None ) ),
117
+ is_frontend_request = is_frontend_request (request ),
118
+ organization_id = org_id ,
119
+ entity_id = entity_id ,
120
+ path = request .path ,
121
+ caller_ip = request .META .get ("REMOTE_ADDR" ),
122
+ user_agent = request .META .get ("HTTP_USER_AGENT" ),
123
+ rate_limited = getattr (request , "will_be_rate_limited" , False ),
124
+ rate_limit_category = getattr (request , "rate_limit_category" , None ),
125
125
request_duration_seconds = access_log_metadata .get_request_duration (),
126
126
** _get_rate_limit_stats_dict (request ),
127
127
)
128
128
auth = get_authorization_header (request ).split ()
129
129
if len (auth ) == 2 :
130
130
log_metrics ["token_last_characters" ] = force_str (auth [1 ])[- 4 :]
131
+
132
+ # Filter out None values and convert remaining values to string
133
+ log_metrics = {k : str (v ) for k , v in log_metrics .items () if v is not None }
134
+
131
135
api_access_logger .info ("api.access" , extra = log_metrics )
132
136
metrics .incr ("middleware.access_log.created" )
133
137
0 commit comments