Skip to content

Commit 8aec7cc

Browse files
committed
feat: enhancements to OpenTelemetry support
1 parent ced2963 commit 8aec7cc

18 files changed

+1119
-338
lines changed

openfga_sdk/api/open_fga_api.py

+176-144
Large diffs are not rendered by default.

openfga_sdk/api_client.py

+28-9
Original file line numberDiff line numberDiff line change
@@ -175,10 +175,16 @@ async def __call_api(
175175
benchmark: dict[str, float] = {"start": float(time.time())}
176176
_telemetry_attributes = _telemetry_attributes or {}
177177

178+
_telemetry_attributes[TelemetryAttributes().user_agent_original] = (
179+
self.user_agent
180+
)
178181
_telemetry_attributes[TelemetryAttributes().http_host] = urllib.parse.urlparse(
179182
config.api_url
180183
).hostname
181-
_telemetry_attributes[TelemetryAttributes().http_method] = method
184+
_telemetry_attributes[TelemetryAttributes().http_request_method] = method
185+
_telemetry_attributes[TelemetryAttributes().url_scheme] = urllib.parse.urlparse(
186+
config.api_url
187+
).scheme
182188

183189
# header parameters
184190
header_params = header_params or {}
@@ -241,6 +247,8 @@ async def __call_api(
241247
# use server/host defined in path or operation instead
242248
url = self.configuration.api_scheme + "://" + _host + resource_path
243249

250+
_telemetry_attributes[TelemetryAttributes().url_full] = url
251+
244252
max_retry = (
245253
self.configuration.retry_params.max_retry
246254
if (
@@ -304,28 +312,39 @@ async def __call_api(
304312

305313
benchmark["end"] = float(time.time())
306314

307-
_telemetry_attributes[TelemetryAttributes().request_retries] = retry
315+
if retry > 0:
316+
_telemetry_attributes[
317+
TelemetryAttributes().http_request_resend_count
318+
] = retry
308319

309320
_telemetry_attributes.update(
310321
TelemetryAttributes().fromResponse(response_data)
311322
)
312323

313324
try:
314325
if self.configuration.credentials.configuration.client_id is not None:
315-
_telemetry_attributes[TelemetryAttributes().request_client_id] = (
316-
self.configuration.credentials.configuration.client_id
317-
)
326+
_telemetry_attributes[
327+
TelemetryAttributes().fga_client_request_client_id
328+
] = self.configuration.credentials.configuration.client_id
318329
except AttributeError:
319330
pass
320331

321-
duration = response_data.getheader("fga-query-duration-ms")
332+
queryDuration = response_data.getheader("fga-query-duration-ms")
333+
requestDuration = float(benchmark["end"] - benchmark["start"])
334+
335+
_telemetry_attributes[
336+
TelemetryAttributes().http_server_request_duration
337+
] = requestDuration
338+
322339
attributes = TelemetryAttributes().prepare(_telemetry_attributes)
323340

324-
if duration is not None:
325-
self._telemetry.metrics().queryDuration(int(duration, 10), attributes)
341+
if queryDuration is not None:
342+
self._telemetry.metrics().queryDuration(
343+
int(queryDuration, 10), attributes
344+
)
326345

327346
self._telemetry.metrics().requestDuration().record(
328-
float(benchmark["end"] - benchmark["start"]), attributes
347+
requestDuration, attributes
329348
)
330349

331350
if not _preload_content:

openfga_sdk/oauth2.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ async def _obtain_token(self, client):
129129
self._telemetry.metrics().credentialsRequest(
130130
1,
131131
{
132-
TelemetryAttributes.request_client_id: configuration.client_id
132+
TelemetryAttributes.fga_client_request_client_id: configuration.client_id
133133
},
134134
)
135135
break

openfga_sdk/sync/api_client.py

+28-9
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,16 @@ def __call_api(
173173
benchmark: dict[str, float] = {"start": float(time.time())}
174174
_telemetry_attributes = _telemetry_attributes or {}
175175

176+
_telemetry_attributes[TelemetryAttributes().user_agent_original] = (
177+
self.user_agent
178+
)
176179
_telemetry_attributes[TelemetryAttributes().http_host] = urllib.parse.urlparse(
177180
config.api_url
178181
).hostname
179-
_telemetry_attributes[TelemetryAttributes().http_method] = method
182+
_telemetry_attributes[TelemetryAttributes().http_request_method] = method
183+
_telemetry_attributes[TelemetryAttributes().url_scheme] = urllib.parse.urlparse(
184+
config.api_url
185+
).scheme
180186

181187
# header parameters
182188
header_params = header_params or {}
@@ -239,6 +245,8 @@ def __call_api(
239245
# use server/host defined in path or operation instead
240246
url = self.configuration.api_scheme + "://" + _host + resource_path
241247

248+
_telemetry_attributes[TelemetryAttributes().url_full] = url
249+
242250
max_retry = (
243251
self.configuration.retry_params.max_retry
244252
if (
@@ -301,28 +309,39 @@ def __call_api(
301309

302310
benchmark["end"] = float(time.time())
303311

304-
_telemetry_attributes[TelemetryAttributes().request_retries] = retry
312+
if retry > 0:
313+
_telemetry_attributes[
314+
TelemetryAttributes().http_request_resend_count
315+
] = retry
305316

306317
_telemetry_attributes.update(
307318
TelemetryAttributes().fromResponse(response_data)
308319
)
309320

310321
try:
311322
if self.configuration.credentials.configuration.client_id is not None:
312-
_telemetry_attributes[TelemetryAttributes().request_client_id] = (
313-
self.configuration.credentials.configuration.client_id
314-
)
323+
_telemetry_attributes[
324+
TelemetryAttributes().fga_client_request_client_id
325+
] = self.configuration.credentials.configuration.client_id
315326
except AttributeError:
316327
pass
317328

318-
duration = response_data.getheader("fga-query-duration-ms")
329+
queryDuration = response_data.getheader("fga-query-duration-ms")
330+
requestDuration = float(benchmark["end"] - benchmark["start"])
331+
332+
_telemetry_attributes[
333+
TelemetryAttributes().http_server_request_duration
334+
] = requestDuration
335+
319336
attributes = TelemetryAttributes().prepare(_telemetry_attributes)
320337

321-
if duration is not None:
322-
self._telemetry.metrics().queryDuration(int(duration, 10), attributes)
338+
if queryDuration is not None:
339+
self._telemetry.metrics().queryDuration(
340+
int(queryDuration, 10), attributes
341+
)
323342

324343
self._telemetry.metrics().requestDuration().record(
325-
float(benchmark["end"] - benchmark["start"]), attributes
344+
requestDuration, attributes
326345
)
327346

328347
if not _preload_content:

openfga_sdk/sync/oauth2.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ def _obtain_token(self, client):
129129
self._telemetry.metrics().credentialsRequest(
130130
1,
131131
{
132-
TelemetryAttributes.request_client_id: configuration.client_id
132+
TelemetryAttributes.fga_client_request_client_id: configuration.client_id
133133
},
134134
)
135135
break

0 commit comments

Comments
 (0)