Skip to content

Commit 5afb454

Browse files
committed
refactor: improve OpenTelemetry configuration
1 parent 4eb7bbe commit 5afb454

27 files changed

+2043
-1524
lines changed

docs/opentelemetry.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ If you configure the OpenTelemetry SDK, these metrics will be exported and sent
4242
| `http.request.method` | string | Yes | HTTP method for the request |
4343
| `http.request.resend_count` | int | Yes | Number of retries attempted, if any |
4444
| `http.response.status_code` | int | Yes | Status code of the response (e.g., `200` for success) |
45-
| `http.server.request.duration` | int | Yes | Time taken by the FGA server to process and evaluate the request, in milliseconds |
45+
| `http.server.request.duration` | int | No | Time taken by the FGA server to process and evaluate the request, in milliseconds |
4646
| `url.scheme` | string | Yes | HTTP scheme of the request (`http`/`https`) |
4747
| `url.full` | string | Yes | Full URL of the request |
4848
| `user_agent.original` | string | Yes | User Agent used in the query |
@@ -102,15 +102,15 @@ configuration = ClientConfiguration(
102102
store_id=os.getenv("FGA_STORE_ID"),
103103
authorization_model_id=os.getenv("FGA_AUTHORIZATION_MODEL_ID"),
104104

105-
# If you are comfortable with the default configuration outlined in the tables above, you can omit providing your own TelemetryConfiguration object.
106-
telemetry=TelemetryConfiguration(
107-
metrics=TelemetryMetricsConfiguration(
108-
histogram_request_duration=TelemetryMetricConfiguration(
109-
attr_fga_client_request_method=True,
110-
attr_http_response_status_code=True,
111-
),
112-
),
113-
),
105+
# If you are comfortable with the default configuration outlined in the tables above, you can omit providing your own TelemetryConfiguration object, as one will be created for you.
106+
telemetry={
107+
"metrics": {
108+
"fga-client.request.duration": {
109+
"fga-client.request.method": True,
110+
"http.response.status_code": True,
111+
},
112+
},
113+
},
114114
)
115115

116116
fga = OpenFgaClient(configuration)

example/opentelemetry/main.py

Lines changed: 57 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,6 @@
1515
)
1616
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
1717

18-
from openfga_sdk.telemetry.configuration import (
19-
TelemetryConfiguration,
20-
TelemetryMetricConfiguration,
21-
TelemetryMetricsConfiguration,
22-
)
23-
2418
# For usage convenience of this example, we will import the OpenFGA SDK from the parent directory.
2519
sdk_path = os.path.realpath(os.path.join(os.path.abspath(__file__), "..", "..", ".."))
2620
sys.path.insert(0, sdk_path)
@@ -36,6 +30,7 @@
3630
Credentials,
3731
)
3832
from openfga_sdk.exceptions import FgaValidationException
33+
from openfga_sdk.telemetry.configuration import TelemetryConfiguration
3934

4035

4136
class app:
@@ -88,62 +83,62 @@ async def fga_client(self, env: dict[str, str] = {}) -> OpenFgaClient:
8883

8984
if not self._telemetry:
9085
# Configure the telemetry metrics to be collected.
91-
# Note: the following represents the default configuration values, so unless you want to change them, you can omit this step.
92-
self._telemetry = TelemetryConfiguration(
93-
metrics=TelemetryMetricsConfiguration(
94-
counter_credentials_request=TelemetryMetricConfiguration(
95-
attr_fga_client_request_client_id=True,
96-
attr_fga_client_request_method=True,
97-
attr_fga_client_request_model_id=True,
98-
attr_fga_client_request_store_id=True,
99-
attr_fga_client_response_model_id=True,
100-
attr_fga_client_user=False,
101-
attr_http_client_request_duration=False,
102-
attr_http_host=True,
103-
attr_http_request_method=True,
104-
attr_http_request_resend_count=True,
105-
attr_http_response_status_code=True,
106-
attr_http_server_request_duration=False,
107-
attr_http_url_scheme=True,
108-
attr_http_url_full=True,
109-
attr_user_agent_original=True,
110-
),
111-
histogram_request_duration=TelemetryMetricConfiguration(
112-
attr_fga_client_request_client_id=True,
113-
attr_fga_client_request_method=True,
114-
attr_fga_client_request_model_id=True,
115-
attr_fga_client_request_store_id=True,
116-
attr_fga_client_response_model_id=True,
117-
attr_fga_client_user=False,
118-
attr_http_client_request_duration=False,
119-
attr_http_host=True,
120-
attr_http_request_method=True,
121-
attr_http_request_resend_count=True,
122-
attr_http_response_status_code=True,
123-
attr_http_server_request_duration=False,
124-
attr_http_url_scheme=True,
125-
attr_http_url_full=True,
126-
attr_user_agent_original=True,
127-
),
128-
histogram_query_duration=TelemetryMetricConfiguration(
129-
attr_fga_client_request_client_id=True,
130-
attr_fga_client_request_method=True,
131-
attr_fga_client_request_model_id=True,
132-
attr_fga_client_request_store_id=True,
133-
attr_fga_client_response_model_id=True,
134-
attr_fga_client_user=False,
135-
attr_http_client_request_duration=False,
136-
attr_http_host=True,
137-
attr_http_request_method=True,
138-
attr_http_request_resend_count=True,
139-
attr_http_response_status_code=True,
140-
attr_http_server_request_duration=False,
141-
attr_http_url_scheme=True,
142-
attr_http_url_full=True,
143-
attr_user_agent_original=True,
144-
),
145-
),
146-
)
86+
# Note: the following represents the default configuration values, so unless you want to customize what's reported, you can omit this.
87+
self._telemetry = {
88+
"metrics": {
89+
"fga-client.credentials.request": {
90+
"fga-client.request.client_id": True,
91+
"fga-client.request.method": True,
92+
"fga-client.request.model_id": True,
93+
"fga-client.request.store_id": True,
94+
"fga-client.response.model_id": True,
95+
"fga-client.user": False,
96+
"http.client.request.duration": False,
97+
"http.host": True,
98+
"http.request.method": True,
99+
"http.request.resend_count": True,
100+
"http.response.status_code": True,
101+
"http.server.request.duration": False,
102+
"url.scheme": True,
103+
"url.full": True,
104+
"user_agent.original": True,
105+
},
106+
"fga-client.request.duration": {
107+
"fga-client.request.client_id": True,
108+
"fga-client.request.method": True,
109+
"fga-client.request.model_id": True,
110+
"fga-client.request.store_id": True,
111+
"fga-client.response.model_id": True,
112+
"fga-client.user": False,
113+
"http.client.request.duration": False,
114+
"http.host": True,
115+
"http.request.method": True,
116+
"http.request.resend_count": True,
117+
"http.response.status_code": True,
118+
"http.server.request.duration": False,
119+
"url.scheme": True,
120+
"url.full": True,
121+
"user_agent.original": True,
122+
},
123+
"fga-client.query.duration": {
124+
"fga-client.request.client_id": True,
125+
"fga-client.request.method": True,
126+
"fga-client.request.model_id": True,
127+
"fga-client.request.store_id": True,
128+
"fga-client.response.model_id": True,
129+
"fga-client.user": False,
130+
"http.client.request.duration": False,
131+
"http.host": True,
132+
"http.request.method": True,
133+
"http.request.resend_count": True,
134+
"http.response.status_code": True,
135+
"http.server.request.duration": False,
136+
"url.scheme": True,
137+
"url.full": True,
138+
"user_agent.original": True,
139+
},
140+
}
141+
}
147142

148143
self._configuration.telemetry = self._telemetry
149144

openfga_sdk/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@
124124
from openfga_sdk.models.write_request_writes import WriteRequestWrites
125125
from openfga_sdk.telemetry.configuration import (
126126
TelemetryConfiguration,
127+
TelemetryConfigurations,
128+
TelemetryConfigurationType,
127129
TelemetryMetricConfiguration,
128130
TelemetryMetricsConfiguration,
129131
)

0 commit comments

Comments
 (0)