odigos-opentelemetry-python 1.0.84__tar.gz → 1.0.86__tar.gz
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.
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/PKG-INFO +1 -1
- odigos_opentelemetry_python-1.0.86/initializer/version.py +1 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/odigos_opentelemetry_python.egg-info/PKG-INFO +1 -1
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/odigos_opentelemetry_python.egg-info/SOURCES.txt +1 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/opamp/http_client.py +11 -19
- odigos_opentelemetry_python-1.0.86/opamp/transport.py +64 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/pyproject.toml +1 -1
- odigos_opentelemetry_python-1.0.84/initializer/version.py +0 -1
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/LICENSE +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/README.md +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/__init__.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/components.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/distro/__init__.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/distro/distro.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/distro/instrumentation_registry.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/envs.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/exit_hook.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/lib_handling.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/odigos_sampler.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/odigos_sampler_helpers.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/post_instrument.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/process_resource.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/schemas/__init__.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/schemas/sampling.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/odigos_opentelemetry_python.egg-info/dependency_links.txt +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/odigos_opentelemetry_python.egg-info/entry_points.txt +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/odigos_opentelemetry_python.egg-info/requires.txt +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/odigos_opentelemetry_python.egg-info/top_level.txt +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/opamp/__init__.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/opamp/anyvalue_pb2.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/opamp/config.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/opamp/health_status.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/opamp/opamp_pb2.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/opamp/opamp_registry.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/opamp/utils.py +0 -0
- {odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/setup.cfg +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
VERSION = "1.0.86"
|
{odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/opamp/http_client.py
RENAMED
|
@@ -6,6 +6,7 @@ import base64
|
|
|
6
6
|
import threading
|
|
7
7
|
import requests_odigos
|
|
8
8
|
import logging
|
|
9
|
+
from typing import Optional
|
|
9
10
|
|
|
10
11
|
from uuid_extensions import uuid7
|
|
11
12
|
from opentelemetry.semconv.resource import ResourceAttributes
|
|
@@ -16,7 +17,7 @@ from opentelemetry.context import (
|
|
|
16
17
|
set_value,
|
|
17
18
|
)
|
|
18
19
|
|
|
19
|
-
from opamp import opamp_pb2, anyvalue_pb2, utils
|
|
20
|
+
from opamp import opamp_pb2, anyvalue_pb2, transport, utils
|
|
20
21
|
from opamp.health_status import AgentHealthStatus
|
|
21
22
|
from initializer.process_resource import PROCESS_VPID
|
|
22
23
|
|
|
@@ -39,8 +40,7 @@ env_var_mappings = {
|
|
|
39
40
|
|
|
40
41
|
class OpAMPHTTPClient:
|
|
41
42
|
def __init__(self, opamp_connection_event, condition: threading.Condition):
|
|
42
|
-
self.
|
|
43
|
-
self.server_url = f"http://{self.server_host}/v1/opamp"
|
|
43
|
+
self._transport = transport.from_env()
|
|
44
44
|
self.container_config = {}
|
|
45
45
|
self.running = True
|
|
46
46
|
self.condition = condition
|
|
@@ -57,7 +57,7 @@ class OpAMPHTTPClient:
|
|
|
57
57
|
def __repr__(self):
|
|
58
58
|
return f"<OpAMPHTTPClient instance_uid={self.instance_uid} pid={self.pid}>"
|
|
59
59
|
|
|
60
|
-
def start(self, python_version_supported: bool =
|
|
60
|
+
def start(self, python_version_supported: bool = False):
|
|
61
61
|
if not python_version_supported:
|
|
62
62
|
python_version = f'{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}'
|
|
63
63
|
error_message = f"Opentelemetry SDK require Python in version 3.8 or higher [{python_version} is not supported]"
|
|
@@ -263,7 +263,7 @@ class OpAMPHTTPClient:
|
|
|
263
263
|
|
|
264
264
|
self.send_agent_to_server_message(opamp_pb2.AgentToServer(health=health_msg))
|
|
265
265
|
|
|
266
|
-
def get_remote_config(self, message) ->
|
|
266
|
+
def get_remote_config(self, message) -> Config:
|
|
267
267
|
"""
|
|
268
268
|
Given a Protobuf message with a 'remote_config' field,
|
|
269
269
|
decode all bytes and base64-encoded subfields into a clean Python dict.
|
|
@@ -392,8 +392,7 @@ class OpAMPHTTPClient:
|
|
|
392
392
|
|
|
393
393
|
try:
|
|
394
394
|
agent_message = attach(set_value(_SUPPRESS_HTTP_INSTRUMENTATION_KEY, True))
|
|
395
|
-
|
|
396
|
-
response.raise_for_status()
|
|
395
|
+
response_bytes = self._transport.post(message_bytes, headers, timeout=5)
|
|
397
396
|
except Exception:
|
|
398
397
|
return opamp_pb2.ServerToAgent()
|
|
399
398
|
finally:
|
|
@@ -401,24 +400,17 @@ class OpAMPHTTPClient:
|
|
|
401
400
|
|
|
402
401
|
server_to_agent = opamp_pb2.ServerToAgent()
|
|
403
402
|
try:
|
|
404
|
-
server_to_agent.ParseFromString(
|
|
403
|
+
server_to_agent.ParseFromString(response_bytes)
|
|
405
404
|
except (DecodeError, NotImplementedError):
|
|
406
405
|
return opamp_pb2.ServerToAgent()
|
|
407
406
|
return server_to_agent
|
|
408
407
|
|
|
409
408
|
def mandatory_env_vars_set(self):
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
for env_var, value in mandatory_env_vars.items():
|
|
415
|
-
if not value:
|
|
416
|
-
# opamp_logger.error(f"{env_var} environment variable not set")
|
|
417
|
-
return False
|
|
418
|
-
|
|
419
|
-
return True
|
|
409
|
+
# Either ODIGOS_OPAMP_UNIX_SOCKET or ODIGOS_OPAMP_SERVER_HOST must be set;
|
|
410
|
+
# transport.from_env() returns None when neither is configured.
|
|
411
|
+
return self._transport is not None
|
|
420
412
|
|
|
421
|
-
def shutdown(self, custom_failure_message: str = None, component_health: bool = False):
|
|
413
|
+
def shutdown(self, custom_failure_message: Optional[str] = None, component_health: bool = False):
|
|
422
414
|
self.running = False
|
|
423
415
|
# opamp_logger.info("Sending agent disconnect message to OpAMP server...")
|
|
424
416
|
if custom_failure_message:
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import socket
|
|
3
|
+
import http.client
|
|
4
|
+
|
|
5
|
+
import requests_odigos
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class TCPTransport:
|
|
9
|
+
"""HTTP/1.1 over TCP. Talks to ODIGOS_OPAMP_SERVER_HOST."""
|
|
10
|
+
|
|
11
|
+
def __init__(self, host: str):
|
|
12
|
+
self._url = f"http://{host}/v1/opamp"
|
|
13
|
+
|
|
14
|
+
def post(self, body: bytes, headers: dict, timeout: float) -> bytes:
|
|
15
|
+
response = requests_odigos.post(self._url, data=body, headers=headers, timeout=timeout)
|
|
16
|
+
response.raise_for_status()
|
|
17
|
+
return response.content
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class UnixTransport:
|
|
21
|
+
"""HTTP/1.1 over an AF_UNIX stream socket. Talks to ODIGOS_OPAMP_UNIX_SOCKET."""
|
|
22
|
+
|
|
23
|
+
def __init__(self, socket_path: str):
|
|
24
|
+
self._socket_path = socket_path
|
|
25
|
+
|
|
26
|
+
def post(self, body: bytes, headers: dict, timeout: float) -> bytes:
|
|
27
|
+
conn = _UnixHTTPConnection(self._socket_path, timeout=timeout)
|
|
28
|
+
try:
|
|
29
|
+
conn.request("POST", "/v1/opamp", body=body, headers=headers)
|
|
30
|
+
response = conn.getresponse()
|
|
31
|
+
if response.status >= 400:
|
|
32
|
+
raise RuntimeError(f"opamp unix POST returned status {response.status}")
|
|
33
|
+
return response.read()
|
|
34
|
+
finally:
|
|
35
|
+
conn.close()
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class _UnixHTTPConnection(http.client.HTTPConnection):
|
|
39
|
+
"""http.client.HTTPConnection that talks over a unix domain socket."""
|
|
40
|
+
|
|
41
|
+
def __init__(self, socket_path: str, timeout: float):
|
|
42
|
+
super().__init__("localhost", timeout=timeout)
|
|
43
|
+
self._socket_path = socket_path
|
|
44
|
+
|
|
45
|
+
def connect(self):
|
|
46
|
+
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
|
47
|
+
sock.settimeout(self.timeout)
|
|
48
|
+
sock.connect(self._socket_path)
|
|
49
|
+
self.sock = sock
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def from_env():
|
|
53
|
+
"""Pick an OpAMP transport from env vars. ODIGOS_OPAMP_UNIX_SOCKET wins if both are set.
|
|
54
|
+
Returns None if neither is set so the client can fail fast on missing config.
|
|
55
|
+
"""
|
|
56
|
+
socket_path = os.getenv("ODIGOS_OPAMP_UNIX_SOCKET")
|
|
57
|
+
if socket_path:
|
|
58
|
+
return UnixTransport(socket_path)
|
|
59
|
+
|
|
60
|
+
host = os.getenv("ODIGOS_OPAMP_SERVER_HOST")
|
|
61
|
+
if host:
|
|
62
|
+
return TCPTransport(host)
|
|
63
|
+
|
|
64
|
+
return None
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
VERSION = "1.0.84"
|
|
File without changes
|
|
File without changes
|
{odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/__init__.py
RENAMED
|
File without changes
|
{odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/components.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/envs.py
RENAMED
|
File without changes
|
{odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/initializer/exit_hook.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/opamp/anyvalue_pb2.py
RENAMED
|
File without changes
|
|
File without changes
|
{odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/opamp/health_status.py
RENAMED
|
File without changes
|
{odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/opamp/opamp_pb2.py
RENAMED
|
File without changes
|
{odigos_opentelemetry_python-1.0.84 → odigos_opentelemetry_python-1.0.86}/opamp/opamp_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|