1111
1212class TelemetryAttribute (NamedTuple ):
1313 name : str
14+ format : str = None
1415
1516
1617class TelemetryAttributes :
1718 fga_client_request_client_id : TelemetryAttribute = TelemetryAttribute (
1819 name = "fga-client.request.client_id" ,
20+ format = "string" ,
1921 )
2022 fga_client_request_method : TelemetryAttribute = TelemetryAttribute (
2123 name = "fga-client.request.method" ,
24+ format = "string" ,
2225 )
2326 fga_client_request_model_id : TelemetryAttribute = TelemetryAttribute (
2427 name = "fga-client.request.model_id" ,
28+ format = "string" ,
2529 )
2630 fga_client_request_store_id : TelemetryAttribute = TelemetryAttribute (
2731 name = "fga-client.request.store_id" ,
32+ format = "string" ,
2833 )
2934 fga_client_response_model_id : TelemetryAttribute = TelemetryAttribute (
3035 name = "fga-client.response.model_id" ,
36+ format = "string" ,
3137 )
3238 fga_client_user : TelemetryAttribute = TelemetryAttribute (
3339 name = "fga-client.user" ,
40+ format = "string" ,
3441 )
3542 http_client_request_duration : TelemetryAttribute = TelemetryAttribute (
3643 name = "http.client.request.duration" ,
44+ format = "int" ,
3745 )
3846 http_host : TelemetryAttribute = TelemetryAttribute (
3947 name = "http.host" ,
48+ format = "string" ,
4049 )
4150 http_request_method : TelemetryAttribute = TelemetryAttribute (
4251 name = "http.request.method" ,
52+ format = "string" ,
4353 )
4454 http_request_resend_count : TelemetryAttribute = TelemetryAttribute (
4555 name = "http.request.resend_count" ,
56+ format = "int" ,
4657 )
4758 http_response_status_code : TelemetryAttribute = TelemetryAttribute (
4859 name = "http.response.status_code" ,
60+ format = "int" ,
4961 )
5062 http_server_request_duration : TelemetryAttribute = TelemetryAttribute (
5163 name = "http.server.request.duration" ,
64+ format = "int" ,
5265 )
5366 url_scheme : TelemetryAttribute = TelemetryAttribute (
5467 name = "url.scheme" ,
68+ format = "string" ,
5569 )
5670 url_full : TelemetryAttribute = TelemetryAttribute (
5771 name = "url.full" ,
72+ format = "string" ,
5873 )
5974 user_agent_original : TelemetryAttribute = TelemetryAttribute (
6075 name = "user_agent.original" ,
76+ format = "string" ,
6177 )
6278
6379 def prepare (
@@ -67,23 +83,58 @@ def prepare(
6783 ) -> dict [str , str | int ]:
6884 response = {}
6985
86+ if filter is None or filter == []:
87+ return response
88+
7089 if attributes is not None :
7190 for attribute , value in attributes .items ():
72- if isinstance (attribute , TelemetryAttribute ):
73- if filter is not None and attribute not in filter :
74- continue
91+ if value is None :
92+ continue
93+
94+ if isinstance (attribute , str ):
95+ attributeTranslated = (
96+ attribute .lower ().replace ("-" , "_" ).replace ("." , "_" )
97+ )
98+ attributeInstance = getattr (self , attributeTranslated , None )
99+
100+ if attributeInstance is None :
101+ raise ValueError ("Invalid attribute specified: %s" % attribute )
75102
76- response [attribute .name ] = value
103+ attribute = attributeInstance
104+
105+ if not isinstance (attribute , TelemetryAttribute ):
106+ raise ValueError (
107+ "Invalid attribute specified: %s" % type (attribute )
108+ )
109+
110+ if (
111+ filter is not None
112+ and attribute .name not in filter
113+ and attribute not in filter
114+ ):
77115 continue
78116
79- if attribute in self .__dict__ :
80- if filter is not None and self .__dict__ [attribute ] not in filter :
117+ if attribute .format == "string" :
118+ if not isinstance (value , str ):
119+ try :
120+ value = str (value )
121+ except ValueError :
122+ continue
123+
124+ if value == "" :
81125 continue
82126
83- response [self .__dict__ [attribute ].name ] = value
84- continue
127+ if attribute .format == "int" :
128+ if not isinstance (value , int ):
129+ try :
130+ value = int (value )
131+ except ValueError :
132+ continue
133+
134+ response [attribute .name ] = value
135+ continue
85136
86- return dict ( sorted ( response . items ()))
137+ return response
87138
88139 def fromRequest (
89140 self ,
@@ -114,8 +165,8 @@ def fromRequest(
114165 attributes [self .url_full .name ] = url
115166
116167 if start is not None and start > 0 :
117- attributes [self .http_client_request_duration .name ] = float (
118- time .time () - start
168+ attributes [self .http_client_request_duration .name ] = int (
169+ ( time .time () - start ) * 1000
119170 )
120171
121172 if resend_count is not None :
0 commit comments