beamlit 0.0.34rc54__py3-none-any.whl → 0.0.34rc56__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,12 @@
|
|
1
|
+
import logging
|
1
2
|
from typing import Any
|
2
3
|
|
3
4
|
from fastapi import FastAPI
|
4
|
-
from opentelemetry import metrics, trace
|
5
|
+
from opentelemetry import _logs, metrics, trace
|
6
|
+
from opentelemetry._logs import set_logger_provider
|
7
|
+
from opentelemetry.exporter.otlp.proto.grpc._log_exporter import (
|
8
|
+
OTLPLogExporter,
|
9
|
+
)
|
5
10
|
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import (
|
6
11
|
OTLPMetricExporter,
|
7
12
|
)
|
@@ -10,7 +15,12 @@ from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (
|
|
10
15
|
)
|
11
16
|
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
|
12
17
|
from opentelemetry.instrumentation.httpx import HTTPXClientInstrumentor
|
18
|
+
from opentelemetry.instrumentation.system_metrics import (
|
19
|
+
SystemMetricsInstrumentor,
|
20
|
+
)
|
13
21
|
from opentelemetry.metrics import NoOpMeterProvider
|
22
|
+
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
|
23
|
+
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
|
14
24
|
from opentelemetry.sdk.metrics import MeterProvider
|
15
25
|
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
|
16
26
|
from opentelemetry.sdk.resources import Resource
|
@@ -19,22 +29,28 @@ from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
19
29
|
from opentelemetry.trace import NoOpTracerProvider
|
20
30
|
from typing_extensions import Dict
|
21
31
|
|
32
|
+
from beamlit.authentication import get_authentication_headers
|
33
|
+
|
22
34
|
from .settings import get_settings
|
23
35
|
|
24
36
|
tracer: trace.Tracer | None = None
|
25
37
|
meter: metrics.Meter | None = None
|
38
|
+
logger: LoggerProvider | None = None
|
26
39
|
|
27
40
|
|
28
|
-
def
|
29
|
-
|
30
|
-
|
31
|
-
return
|
41
|
+
def auth_headers() -> Dict[str, str]:
|
42
|
+
settings = get_settings()
|
43
|
+
headers = get_authentication_headers(settings)
|
44
|
+
return {
|
45
|
+
"x-beamlit-authorization": headers.get("X-Beamlit-Authorization", ""),
|
46
|
+
"x-beamlit-workspace": headers.get("X-Beamlit-Workspace", ""),
|
47
|
+
}
|
32
48
|
|
33
49
|
|
34
|
-
def
|
35
|
-
if
|
36
|
-
raise Exception("
|
37
|
-
return
|
50
|
+
def get_logger() -> LoggerProvider:
|
51
|
+
if logger is None:
|
52
|
+
raise Exception("Logger is not initialized")
|
53
|
+
return logger
|
38
54
|
|
39
55
|
|
40
56
|
def get_resource_attributes() -> Dict[str, Any]:
|
@@ -43,8 +59,6 @@ def get_resource_attributes() -> Dict[str, Any]:
|
|
43
59
|
for key in resources.attributes:
|
44
60
|
resources_dict[key] = resources.attributes[key]
|
45
61
|
settings = get_settings()
|
46
|
-
if settings is None:
|
47
|
-
raise Exception("Settings are not initialized")
|
48
62
|
resources_dict["workspace"] = settings.workspace
|
49
63
|
resources_dict["service.name"] = settings.name
|
50
64
|
return resources_dict
|
@@ -52,28 +66,29 @@ def get_resource_attributes() -> Dict[str, Any]:
|
|
52
66
|
|
53
67
|
def get_metrics_exporter() -> OTLPMetricExporter | None:
|
54
68
|
settings = get_settings()
|
55
|
-
if settings is None:
|
56
|
-
raise Exception("Settings are not initialized")
|
57
69
|
if not settings.enable_opentelemetry:
|
58
|
-
# Return None or a NoOpExporter equivalent
|
59
70
|
return None
|
60
|
-
return OTLPMetricExporter()
|
71
|
+
return OTLPMetricExporter(headers=auth_headers())
|
61
72
|
|
62
73
|
|
63
74
|
def get_span_exporter() -> OTLPSpanExporter | None:
|
64
75
|
settings = get_settings()
|
65
76
|
if not settings.enable_opentelemetry:
|
66
77
|
return None
|
67
|
-
return OTLPSpanExporter()
|
78
|
+
return OTLPSpanExporter(headers=auth_headers())
|
79
|
+
|
80
|
+
|
81
|
+
def get_log_exporter() -> OTLPLogExporter | None:
|
82
|
+
settings = get_settings()
|
83
|
+
if not settings.enable_opentelemetry:
|
84
|
+
return None
|
85
|
+
return OTLPLogExporter(headers=auth_headers())
|
68
86
|
|
69
87
|
|
70
88
|
def instrument_app(app: FastAPI):
|
71
89
|
global tracer
|
72
90
|
global meter
|
73
91
|
settings = get_settings()
|
74
|
-
if settings is None:
|
75
|
-
raise Exception("Settings are not initialized")
|
76
|
-
|
77
92
|
if not settings.enable_opentelemetry:
|
78
93
|
# Use NoOp implementations to stub tracing and metrics
|
79
94
|
trace.set_tracer_provider(NoOpTracerProvider())
|
@@ -111,9 +126,24 @@ def instrument_app(app: FastAPI):
|
|
111
126
|
meter = meter_provider.get_meter(__name__)
|
112
127
|
else:
|
113
128
|
meter = metrics.get_meter(__name__)
|
129
|
+
|
130
|
+
if not isinstance(_logs.get_logger_provider(), LoggerProvider):
|
131
|
+
logger_provider = LoggerProvider()
|
132
|
+
set_logger_provider(logger_provider)
|
133
|
+
logger_provider.add_log_record_processor(
|
134
|
+
BatchLogRecordProcessor(get_log_exporter())
|
135
|
+
)
|
136
|
+
handler = LoggingHandler(
|
137
|
+
level=logging.NOTSET, logger_provider=logger_provider
|
138
|
+
)
|
139
|
+
logging.getLogger().addHandler(handler)
|
140
|
+
else:
|
141
|
+
logger_provider = _logs.get_logger_provider()
|
142
|
+
|
114
143
|
# Only instrument the app when OpenTelemetry is enabled
|
115
144
|
FastAPIInstrumentor.instrument_app(app)
|
116
145
|
HTTPXClientInstrumentor().instrument()
|
146
|
+
SystemMetricsInstrumentor().instrument()
|
117
147
|
|
118
148
|
|
119
149
|
def shutdown_instrumentation():
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: beamlit
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.34rc56
|
4
4
|
Summary: Add your description here
|
5
5
|
Author-email: cploujoux <ch.ploujoux@gmail.com>
|
6
6
|
Requires-Python: >=3.12
|
@@ -17,6 +17,7 @@ Requires-Dist: opentelemetry-api>=1.28.2
|
|
17
17
|
Requires-Dist: opentelemetry-exporter-otlp>=1.28.2
|
18
18
|
Requires-Dist: opentelemetry-instrumentation-fastapi>=0.49b2
|
19
19
|
Requires-Dist: opentelemetry-instrumentation-httpx>=0.49b2
|
20
|
+
Requires-Dist: opentelemetry-instrumentation-system-metrics>=0.50b0
|
20
21
|
Requires-Dist: opentelemetry-sdk>=1.28.2
|
21
22
|
Requires-Dist: pydantic-settings<2.7.0,>=2.6.1
|
22
23
|
Requires-Dist: pydantic<2.11.0,>=2.10.3
|
@@ -130,7 +130,7 @@ beamlit/authentication/credentials.py,sha256=p_1xenabCbQuRz7BiFk7oTK4uCxAt_zoyku
|
|
130
130
|
beamlit/authentication/device_mode.py,sha256=tmr22gllKOZwBRub_QjF5pYa425x-nE8tQNpZ_EGR6g,3644
|
131
131
|
beamlit/common/__init__.py,sha256=saX5X3hRCJ9erSlXuSkZ2VGgquvpgdcofAU_9sM4bCE,354
|
132
132
|
beamlit/common/error.py,sha256=f9oJDFxhoHK-vpjxBgEp0NwWIk0N_THPemUI7uQxVzU,270
|
133
|
-
beamlit/common/instrumentation.py,sha256=
|
133
|
+
beamlit/common/instrumentation.py,sha256=8aR5XLLq22_vScJlDqQVxvqFG-0K4ymqJ98DUp7Lb74,5471
|
134
134
|
beamlit/common/logger.py,sha256=nN_dSOl4bs13QU3Rod-w3e3jYOnlSrHx3_bs-ACY6Aw,1115
|
135
135
|
beamlit/common/secrets.py,sha256=sid81bOe3LflkMKDHwBsBs9nIju8bp5-v9qU9gkyNMc,212
|
136
136
|
beamlit/common/settings.py,sha256=b2rvby-ufG3M0AB1ReoWFM-1EzF1LaE-gbokO9HvQDI,3810
|
@@ -256,6 +256,6 @@ beamlit/serve/app.py,sha256=gYQvUK_S7g0Em-idND8HrVDqgg5LlIemheSGlX2Jj8U,3638
|
|
256
256
|
beamlit/serve/middlewares/__init__.py,sha256=1dVmnOmhAQWvWktqHkKSIX-YoF6fmMU8xkUQuhg_rJU,148
|
257
257
|
beamlit/serve/middlewares/accesslog.py,sha256=Mu4T4_9OvHybjA0ApzZFpgi2C8f3X1NbUk-76v634XM,631
|
258
258
|
beamlit/serve/middlewares/processtime.py,sha256=lDAaIasZ4bwvN-HKHvZpaD9r-yrkVNZYx4abvbjbrCg,411
|
259
|
-
beamlit-0.0.
|
260
|
-
beamlit-0.0.
|
261
|
-
beamlit-0.0.
|
259
|
+
beamlit-0.0.34rc56.dist-info/METADATA,sha256=b7oOq6dqYesq2q5ivAj5ckFcfIZ_KLdOW_HUokE0Lpc,2412
|
260
|
+
beamlit-0.0.34rc56.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
261
|
+
beamlit-0.0.34rc56.dist-info/RECORD,,
|
File without changes
|