From 39a43f438b7804b33b5dfec67e7bb28a685787b6 Mon Sep 17 00:00:00 2001 From: Tamir David Date: Wed, 21 Aug 2024 13:58:18 +0300 Subject: [PATCH] Move opamp to different repo (#1455) Co-authored-by: Tamir David --- .gitignore | 1 + agents/python/README.md | 23 ++ agents/python/configurator/__init__.py | 101 +----- agents/python/configurator/lib_handling.py | 34 -- agents/python/configurator/version.py | 2 - agents/python/opamp/__init__.py | 0 agents/python/opamp/anyvalue_pb2.py | 33 -- agents/python/opamp/health_status.py | 8 - agents/python/opamp/http_client.py | 265 --------------- agents/python/opamp/opamp_pb2.py | 129 -------- agents/python/opamp/utils.py | 24 -- agents/python/requirements.txt | 354 --------------------- agents/python/setup.py | 65 +--- odiglet/Dockerfile | 6 +- 14 files changed, 45 insertions(+), 1000 deletions(-) delete mode 100644 agents/python/configurator/lib_handling.py delete mode 100644 agents/python/configurator/version.py delete mode 100644 agents/python/opamp/__init__.py delete mode 100644 agents/python/opamp/anyvalue_pb2.py delete mode 100644 agents/python/opamp/health_status.py delete mode 100644 agents/python/opamp/http_client.py delete mode 100644 agents/python/opamp/opamp_pb2.py delete mode 100644 agents/python/opamp/utils.py delete mode 100644 agents/python/requirements.txt diff --git a/.gitignore b/.gitignore index 9f48db9cf..c12b445e0 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ node_modules .DS_Store go.work.sum cli/odigos +.venv \ No newline at end of file diff --git a/agents/python/README.md b/agents/python/README.md index eece13153..59bf0823f 100644 --- a/agents/python/README.md +++ b/agents/python/README.md @@ -3,3 +3,26 @@ Odigos distribution of OpenTelemetry for Python This package is used in the odigos project to provide auto OpenTelemetry instrumentation for applications written in Python. + + +## Local development of `odigos-opentelemetry-python` +1. Navigate to the Project Directory: +Open a new terminal and move to the directory containing odigos-opentelemetry-python: +```sh +cd +``` +2. Start the Local PyPI Server: +Build and run a local PyPI server with the following command: +```sh +docker build -t local-pypi-server -f debug.Dockerfile . && docker run --rm --name pypi-server -p 8080:8080 local-pypi-server +``` +- Note: You need to run the Docker build command each time you make changes to odigos-opentelemetry-python. + +3. Update the Development Configuration: +In the `odigos/agents/python/setup.py` file, uncomment the DEV index-url to point to the local PyPI server. + +4. Deploy the Odiglet: +Finally, deploy the Odiglet by running: +```sh +make deploy-odiglet +``` \ No newline at end of file diff --git a/agents/python/configurator/__init__.py b/agents/python/configurator/__init__.py index 538cde5b5..30d9e83b1 100644 --- a/agents/python/configurator/__init__.py +++ b/agents/python/configurator/__init__.py @@ -1,14 +1,5 @@ -import threading -import atexit -import sys -import os import opentelemetry.sdk._configuration as sdk_config - -from opentelemetry.sdk.resources import Resource -from opentelemetry.sdk.resources import ProcessResourceDetector, OTELResourceDetector -from .lib_handling import reorder_python_path, reload_distro_modules -from .version import VERSION -from opamp.http_client import OpAMPHTTPClient +from initializer.components import initialize_components MINIMUM_PYTHON_SUPPORTED_VERSION = (3, 8) @@ -16,87 +7,9 @@ class OdigosPythonConfigurator(sdk_config._BaseConfigurator): def _configure(self, **kwargs): - _initialize_components() - - -def _initialize_components(): - resource_attributes_event = threading.Event() - client = None - - try: - - client = start_opamp_client(resource_attributes_event) - resource_attributes_event.wait(timeout=30) # Wait for the resource attributes to be received for 30 seconds - - received_value = client.resource_attributes - - if received_value: - trace_exporters, metric_exporters, log_exporters = sdk_config._import_exporters( - sdk_config._get_exporter_names("traces"), - sdk_config._get_exporter_names("metrics"), - sdk_config._get_exporter_names("logs"), - ) - - auto_resource = { - "telemetry.distro.name": "odigos", - "telemetry.distro.version": VERSION, - } - - auto_resource.update(received_value) - - resource = Resource.create(auto_resource) \ - .merge(OTELResourceDetector().detect()) \ - .merge(ProcessResourceDetector().detect()) - - initialize_traces_if_enabled(trace_exporters, resource) - initialize_metrics_if_enabled(metric_exporters, resource) - initialize_logging_if_enabled(log_exporters, resource) - - # Reorder the python sys.path to ensure that the user application's dependencies take precedence over the agent's dependencies. - # This is necessary because the user application's dependencies may be incompatible with those used by the agent. - reorder_python_path() - # Reload distro modules to ensure the new path is used. - reload_distro_modules() - - except Exception as e: - if client is not None: - client.shutdown(custom_failure_message=str(e)) - - -def initialize_traces_if_enabled(trace_exporters, resource): - traces_enabled = os.getenv(sdk_config.OTEL_TRACES_EXPORTER, "none").strip().lower() - if traces_enabled != "none": - id_generator_name = sdk_config._get_id_generator() - id_generator = sdk_config._import_id_generator(id_generator_name) - sdk_config._init_tracing(exporters=trace_exporters, id_generator=id_generator, resource=resource) - -def initialize_metrics_if_enabled(metric_exporters, resource): - metrics_enabled = os.getenv(sdk_config.OTEL_METRICS_EXPORTER, "none").strip().lower() - if metrics_enabled != "none": - sdk_config._init_metrics(metric_exporters, resource) - -def initialize_logging_if_enabled(log_exporters, resource): - logging_enabled = os.getenv(sdk_config.OTEL_LOGS_EXPORTER, "none").strip().lower() - if logging_enabled != "none": - sdk_config._init_logging(log_exporters, resource) - - -def start_opamp_client(event): - condition = threading.Condition(threading.Lock()) - client = OpAMPHTTPClient(event, condition) - - python_version_supported = is_supported_python_version() - - client.start(python_version_supported) - - def shutdown(): - client.shutdown() - - # Ensure that the shutdown function is called on program exit - atexit.register(shutdown) - - return client - - -def is_supported_python_version(): - return sys.version_info >= MINIMUM_PYTHON_SUPPORTED_VERSION \ No newline at end of file + trace_exporters, metric_exporters, log_exporters = sdk_config._import_exporters( + sdk_config._get_exporter_names("traces"), + sdk_config._get_exporter_names("metrics"), + sdk_config._get_exporter_names("logs"), + ) + initialize_components(trace_exporters, metric_exporters, log_exporters) \ No newline at end of file diff --git a/agents/python/configurator/lib_handling.py b/agents/python/configurator/lib_handling.py deleted file mode 100644 index 68f95cb50..000000000 --- a/agents/python/configurator/lib_handling.py +++ /dev/null @@ -1,34 +0,0 @@ -import sys - -def reorder_python_path(): - paths_to_move = [path for path in sys.path if path.startswith('/var/odigos/python')] - - for path in paths_to_move: - sys.path.remove(path) - sys.path.append(path) - - -def reload_distro_modules() -> None: - # Delete distro modules and their sub-modules, as they have been imported before the path was reordered. - # The distro modules will be re-imported from the new path. - needed_module_prefixes = [ - 'google.protobuf', - 'requests', - 'charset_normalizer', - 'certifi', - 'asgiref' - 'idna', - 'deprecated', - 'importlib_metadata', - 'packaging', - 'psutil', - 'zipp', - 'urllib3', - 'uuid_extensions.uuid7', - 'typing_extensions', - ] - - for module in list(sys.modules): - # Check if the module starts with any of the needed prefixes - if any(module.startswith(prefix) for prefix in needed_module_prefixes): - del sys.modules[module] diff --git a/agents/python/configurator/version.py b/agents/python/configurator/version.py deleted file mode 100644 index 39d733097..000000000 --- a/agents/python/configurator/version.py +++ /dev/null @@ -1,2 +0,0 @@ -# the content of the file is replaced with the real version in the odiglet DOCKERFILE -VERSION = "development" \ No newline at end of file diff --git a/agents/python/opamp/__init__.py b/agents/python/opamp/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/agents/python/opamp/anyvalue_pb2.py b/agents/python/opamp/anyvalue_pb2.py deleted file mode 100644 index 5ec977e28..000000000 --- a/agents/python/opamp/anyvalue_pb2.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: anyvalue.proto -# Protobuf Python Version: 4.25.0 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0e\x61nyvalue.proto\x12\x0bopamp.proto\"\xbc\x02\n\x08\x41nyValue\x12#\n\x0cstring_value\x18\x01 \x01(\tH\x00R\x0bstringValue\x12\x1f\n\nbool_value\x18\x02 \x01(\x08H\x00R\tboolValue\x12\x1d\n\tint_value\x18\x03 \x01(\x03H\x00R\x08intValue\x12#\n\x0c\x64ouble_value\x18\x04 \x01(\x01H\x00R\x0b\x64oubleValue\x12:\n\x0b\x61rray_value\x18\x05 \x01(\x0b\x32\x17.opamp.proto.ArrayValueH\x00R\narrayValue\x12>\n\x0ckvlist_value\x18\x06 \x01(\x0b\x32\x19.opamp.proto.KeyValueListH\x00R\x0bkvlistValue\x12!\n\x0b\x62ytes_value\x18\x07 \x01(\x0cH\x00R\nbytesValueB\x07\n\x05value\";\n\nArrayValue\x12-\n\x06values\x18\x01 \x03(\x0b\x32\x15.opamp.proto.AnyValueR\x06values\"=\n\x0cKeyValueList\x12-\n\x06values\x18\x01 \x03(\x0b\x32\x15.opamp.proto.KeyValueR\x06values\"I\n\x08KeyValue\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x15.opamp.proto.AnyValueR\x05valueB\xa0\x01\n\x0f\x63om.opamp.protoB\rAnyvalueProtoP\x01Z1github.com/odigos-io/odigos/opampserver/protobufs\xa2\x02\x03OPX\xaa\x02\x0bOpamp.Proto\xca\x02\x0bOpamp\\Proto\xe2\x02\x17Opamp\\Proto\\GPBMetadata\xea\x02\x0cOpamp::Protob\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'anyvalue_pb2', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\017com.opamp.protoB\rAnyvalueProtoP\001Z1github.com/odigos-io/odigos/opampserver/protobufs\242\002\003OPX\252\002\013Opamp.Proto\312\002\013Opamp\\Proto\342\002\027Opamp\\Proto\\GPBMetadata\352\002\014Opamp::Proto' - _globals['_ANYVALUE']._serialized_start=32 - _globals['_ANYVALUE']._serialized_end=348 - _globals['_ARRAYVALUE']._serialized_start=350 - _globals['_ARRAYVALUE']._serialized_end=409 - _globals['_KEYVALUELIST']._serialized_start=411 - _globals['_KEYVALUELIST']._serialized_end=472 - _globals['_KEYVALUE']._serialized_start=474 - _globals['_KEYVALUE']._serialized_end=547 -# @@protoc_insertion_point(module_scope) diff --git a/agents/python/opamp/health_status.py b/agents/python/opamp/health_status.py deleted file mode 100644 index 0d6f4d0ca..000000000 --- a/agents/python/opamp/health_status.py +++ /dev/null @@ -1,8 +0,0 @@ -from enum import Enum - -class AgentHealthStatus(str, Enum): - HEALTHY = "Healthy" - STARTING = "Starting" - UNSUPPORTED_RUNTIME_VERSION = "UnsupportedRuntimeVersion" - TERMINATED = "ProcessTerminated" - AGENT_FAILURE = "AgentFailure" \ No newline at end of file diff --git a/agents/python/opamp/http_client.py b/agents/python/opamp/http_client.py deleted file mode 100644 index 0ff1ee4b9..000000000 --- a/agents/python/opamp/http_client.py +++ /dev/null @@ -1,265 +0,0 @@ -import os -import sys -import time -import threading -import requests -import logging - -from uuid_extensions import uuid7 -from opentelemetry.semconv.resource import ResourceAttributes -from opentelemetry.context import ( - _SUPPRESS_HTTP_INSTRUMENTATION_KEY, - attach, - detach, - set_value, -) - -from opamp import opamp_pb2, anyvalue_pb2, utils -from opamp.health_status import AgentHealthStatus - -# Setup the logger -opamp_logger = logging.getLogger(__name__) -opamp_logger.setLevel(logging.DEBUG) -opamp_logger.disabled = True # Comment this line to enable the logger - - -class OpAMPHTTPClient: - def __init__(self, event, condition: threading.Condition): - self.server_host = os.getenv('ODIGOS_OPAMP_SERVER_HOST') - self.instrumentation_device_id = os.getenv('ODIGOS_INSTRUMENTATION_DEVICE_ID') - self.server_url = f"http://{self.server_host}/v1/opamp" - self.resource_attributes = {} - self.running = True - self.condition = condition - self.event = event - self.next_sequence_num = 0 - self.instance_uid = uuid7().__str__() - self.remote_config_status = None - - - def start(self, python_version_supported: bool = None): - if not python_version_supported: - - python_version = f'{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}' - error_message = f"Opentelemetry SDK require Python in version 3.8 or higher [{python_version} is not supported]" - - opamp_logger.warning(f"{error_message}, sending disconnect message to OpAMP server...") - self.send_unsupported_version_disconnect_message(error_message=error_message) - self.event.set() - return - - self.client_thread = threading.Thread(target=self.run, name="OpAMPClientThread", daemon=True) - self.client_thread.start() - - def run(self): - try: - if not self.mandatory_env_vars_set(): - self.event.set() - return - - self.send_first_message_with_retry() - self.event.set() - - self.worker() - - except Exception as e: - opamp_logger.error(f"Error running OpAMP client: {e}") - failure_message = self.get_agent_failure_disconnect_message(error_message=str(e)) - self.send_agent_to_server_message(failure_message) - - # Exiting the opamp thread and set the event to notify the main thread - self.event.set() - sys.exit() - - def get_agent_failure_disconnect_message(self, error_message: str) -> None: - agent_failure_message = opamp_pb2.AgentToServer() - - agent_disconnect = self.get_agent_disconnect() - agent_failure_message.agent_disconnect.CopyFrom(agent_disconnect) - - agent_health = self.get_agent_health(component_health=False, last_error=error_message, status=AgentHealthStatus.AGENT_FAILURE.value) - agent_failure_message.health.CopyFrom(agent_health) - - return agent_failure_message - - def send_unsupported_version_disconnect_message(self, error_message: str) -> None: - first_disconnect_message = opamp_pb2.AgentToServer() - - agent_description = self.get_agent_description() - - first_disconnect_message.agent_description.CopyFrom(agent_description) - - agent_disconnect = self.get_agent_disconnect() - first_disconnect_message.agent_disconnect.CopyFrom(agent_disconnect) - - agent_health = self.get_agent_health(component_health=False, last_error=error_message, status=AgentHealthStatus.UNSUPPORTED_RUNTIME_VERSION.value) - first_disconnect_message.health.CopyFrom(agent_health) - - self.send_agent_to_server_message(first_disconnect_message) - - def send_first_message_with_retry(self) -> None: - max_retries = 5 - delay = 2 - for attempt in range(1, max_retries + 1): - try: - # Send first message to OpAMP server, Health is false as the component is not initialized - agent_health = self.get_agent_health(component_health=False, last_error="Python OpenTelemetry agent is starting", status=AgentHealthStatus.STARTING.value) - agent_description = self.get_agent_description() - first_message_server_to_agent = self.send_agent_to_server_message(opamp_pb2.AgentToServer(agent_description=agent_description, health=agent_health)) - - self.update_remote_config_status(first_message_server_to_agent) - self.resource_attributes = utils.parse_first_message_to_resource_attributes(first_message_server_to_agent, opamp_logger) - - # Send healthy message to OpAMP server - opamp_logger.info("Reporting healthy to OpAMP server...") - agent_health = self.get_agent_health(component_health=True, status=AgentHealthStatus.HEALTHY.value) - self.send_agent_to_server_message(opamp_pb2.AgentToServer(health=agent_health)) - - break - except Exception as e: - opamp_logger.error(f"Error sending full state to OpAMP server: {e}") - - if attempt < max_retries: - time.sleep(delay) - - def worker(self): - while self.running: - with self.condition: - try: - server_to_agent = self.send_heartbeat() - if self.update_remote_config_status(server_to_agent): - opamp_logger.info("Remote config updated, applying changes...") - # TODO: implement changes based on the remote config - - if server_to_agent.flags & opamp_pb2.ServerToAgentFlags_ReportFullState: - opamp_logger.info("Received request to report full state") - - agent_description = self.get_agent_description() - agent_health = self.get_agent_health(component_health=True, status=AgentHealthStatus.HEALTHY.value) - agent_to_server = opamp_pb2.AgentToServer(agent_description=agent_description, health=agent_health) - - server_to_agent = self.send_agent_to_server_message(agent_to_server) - - self.update_remote_config_status(server_to_agent) - - except requests.RequestException as e: - opamp_logger.error(f"Error fetching data: {e}") - self.condition.wait(30) - - def send_heartbeat(self) -> opamp_pb2.ServerToAgent: - opamp_logger.debug("Sending heartbeat to OpAMP server...") - try: - agent_to_server = opamp_pb2.AgentToServer(remote_config_status=self.remote_config_status) - return self.send_agent_to_server_message(agent_to_server) - except requests.RequestException as e: - opamp_logger.error(f"Error sending heartbeat to OpAMP server: {e}") - - def get_agent_description(self) -> opamp_pb2.AgentDescription: - identifying_attributes = [ - anyvalue_pb2.KeyValue( - key=ResourceAttributes.SERVICE_INSTANCE_ID, - value=anyvalue_pb2.AnyValue(string_value=self.instance_uid) - ), - anyvalue_pb2.KeyValue( - key=ResourceAttributes.PROCESS_PID, - value=anyvalue_pb2.AnyValue(int_value=os.getpid()) - ), - anyvalue_pb2.KeyValue( - key=ResourceAttributes.TELEMETRY_SDK_LANGUAGE, - value=anyvalue_pb2.AnyValue(string_value="python") - ) - ] - - return opamp_pb2.AgentDescription( - identifying_attributes=identifying_attributes, - non_identifying_attributes=[] - ) - - def get_agent_disconnect(self) -> opamp_pb2.AgentDisconnect: - return opamp_pb2.AgentDisconnect() - - def get_agent_health(self, component_health: bool = None, last_error : str = None, status: str = None) -> opamp_pb2.ComponentHealth: - health = opamp_pb2.ComponentHealth( - ) - if component_health is not None: - health.healthy = component_health - if last_error is not None: - health.last_error = last_error - if status is not None: - health.status = status - - return health - - - def send_agent_to_server_message(self, message: opamp_pb2.AgentToServer) -> opamp_pb2.ServerToAgent: - - message.instance_uid = self.instance_uid.encode('utf-8') - message.sequence_num = self.next_sequence_num - if self.remote_config_status: - message.remote_config_status.CopyFrom(self.remote_config_status) - - self.next_sequence_num += 1 - message_bytes = message.SerializeToString() - - headers = { - "Content-Type": "application/x-protobuf", - "X-Odigos-DeviceId": self.instrumentation_device_id - } - - try: - agent_message = attach(set_value(_SUPPRESS_HTTP_INSTRUMENTATION_KEY, True)) - response = requests.post(self.server_url, data=message_bytes, headers=headers, timeout=5) - response.raise_for_status() - except requests.Timeout: - opamp_logger.error("Timeout sending message to OpAMP server") - return opamp_pb2.ServerToAgent() - except requests.ConnectionError as e: - opamp_logger.error(f"Error sending message to OpAMP server: {e}") - return opamp_pb2.ServerToAgent() - finally: - detach(agent_message) - - server_to_agent = opamp_pb2.ServerToAgent() - try: - server_to_agent.ParseFromString(response.content) - except NotImplementedError as e: - opamp_logger.error(f"Error parsing response from OpAMP server: {e}") - return opamp_pb2.ServerToAgent() - return server_to_agent - - def mandatory_env_vars_set(self): - mandatory_env_vars = { - "ODIGOS_OPAMP_SERVER_HOST": self.server_host, - "ODIGOS_INSTRUMENTATION_DEVICE_ID": self.instrumentation_device_id - } - - for env_var, value in mandatory_env_vars.items(): - if not value: - opamp_logger.error(f"{env_var} environment variable not set") - return False - - return True - - def shutdown(self, custom_failure_message: str = None): - self.running = False - opamp_logger.info("Sending agent disconnect message to OpAMP server...") - if custom_failure_message: - disconnect_message = self.get_agent_failure_disconnect_message(error_message=custom_failure_message) - else: - agent_health = self.get_agent_health(component_health=False, last_error="Python runtime is exiting", status=AgentHealthStatus.TERMINATED.value) - disconnect_message = opamp_pb2.AgentToServer(agent_disconnect=opamp_pb2.AgentDisconnect(), health=agent_health) - - with self.condition: - self.condition.notify_all() - self.client_thread.join() - - self.send_agent_to_server_message(disconnect_message) - - def update_remote_config_status(self, server_to_agent: opamp_pb2.ServerToAgent) -> bool: - if server_to_agent.HasField("remote_config"): - remote_config_hash = server_to_agent.remote_config.config_hash - remote_config_status = opamp_pb2.RemoteConfigStatus(last_remote_config_hash=remote_config_hash) - self.remote_config_status = remote_config_status - return True - - return False \ No newline at end of file diff --git a/agents/python/opamp/opamp_pb2.py b/agents/python/opamp/opamp_pb2.py deleted file mode 100644 index ee6552756..000000000 --- a/agents/python/opamp/opamp_pb2.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: opamp.proto -# Protobuf Python Version: 4.25.0 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - -from opamp import anyvalue_pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0bopamp.proto\x12\x0bopamp.proto\x1a\x0e\x61nyvalue.proto\"\xbc\x06\n\rAgentToServer\x12!\n\x0cinstance_uid\x18\x01 \x01(\x0cR\x0binstanceUid\x12!\n\x0csequence_num\x18\x02 \x01(\x04R\x0bsequenceNum\x12J\n\x11\x61gent_description\x18\x03 \x01(\x0b\x32\x1d.opamp.proto.AgentDescriptionR\x10\x61gentDescription\x12\"\n\x0c\x63\x61pabilities\x18\x04 \x01(\x04R\x0c\x63\x61pabilities\x12\x34\n\x06health\x18\x05 \x01(\x0b\x32\x1c.opamp.proto.ComponentHealthR\x06health\x12G\n\x10\x65\x66\x66\x65\x63tive_config\x18\x06 \x01(\x0b\x32\x1c.opamp.proto.EffectiveConfigR\x0f\x65\x66\x66\x65\x63tiveConfig\x12Q\n\x14remote_config_status\x18\x07 \x01(\x0b\x32\x1f.opamp.proto.RemoteConfigStatusR\x12remoteConfigStatus\x12G\n\x10package_statuses\x18\x08 \x01(\x0b\x32\x1c.opamp.proto.PackageStatusesR\x0fpackageStatuses\x12G\n\x10\x61gent_disconnect\x18\t \x01(\x0b\x32\x1c.opamp.proto.AgentDisconnectR\x0f\x61gentDisconnect\x12\x14\n\x05\x66lags\x18\n \x01(\x04R\x05\x66lags\x12\x66\n\x1b\x63onnection_settings_request\x18\x0b \x01(\x0b\x32&.opamp.proto.ConnectionSettingsRequestR\x19\x63onnectionSettingsRequest\x12P\n\x13\x63ustom_capabilities\x18\x0c \x01(\x0b\x32\x1f.opamp.proto.CustomCapabilitiesR\x12\x63ustomCapabilities\x12\x41\n\x0e\x63ustom_message\x18\r \x01(\x0b\x32\x1a.opamp.proto.CustomMessageR\rcustomMessage\"\x11\n\x0f\x41gentDisconnect\"^\n\x19\x43onnectionSettingsRequest\x12\x41\n\x05opamp\x18\x01 \x01(\x0b\x32+.opamp.proto.OpAMPConnectionSettingsRequestR\x05opamp\"r\n\x1eOpAMPConnectionSettingsRequest\x12P\n\x13\x63\x65rtificate_request\x18\x01 \x01(\x0b\x32\x1f.opamp.proto.CertificateRequestR\x12\x63\x65rtificateRequest\"&\n\x12\x43\x65rtificateRequest\x12\x10\n\x03\x63sr\x18\x01 \x01(\x0cR\x03\x63sr\"\xc8\x05\n\rServerToAgent\x12!\n\x0cinstance_uid\x18\x01 \x01(\x0cR\x0binstanceUid\x12G\n\x0e\x65rror_response\x18\x02 \x01(\x0b\x32 .opamp.proto.ServerErrorResponseR\rerrorResponse\x12\x43\n\rremote_config\x18\x03 \x01(\x0b\x32\x1e.opamp.proto.AgentRemoteConfigR\x0cremoteConfig\x12V\n\x13\x63onnection_settings\x18\x04 \x01(\x0b\x32%.opamp.proto.ConnectionSettingsOffersR\x12\x63onnectionSettings\x12M\n\x12packages_available\x18\x05 \x01(\x0b\x32\x1e.opamp.proto.PackagesAvailableR\x11packagesAvailable\x12\x14\n\x05\x66lags\x18\x06 \x01(\x04R\x05\x66lags\x12\"\n\x0c\x63\x61pabilities\x18\x07 \x01(\x04R\x0c\x63\x61pabilities\x12S\n\x14\x61gent_identification\x18\x08 \x01(\x0b\x32 .opamp.proto.AgentIdentificationR\x13\x61gentIdentification\x12;\n\x07\x63ommand\x18\t \x01(\x0b\x32!.opamp.proto.ServerToAgentCommandR\x07\x63ommand\x12P\n\x13\x63ustom_capabilities\x18\n \x01(\x0b\x32\x1f.opamp.proto.CustomCapabilitiesR\x12\x63ustomCapabilities\x12\x41\n\x0e\x63ustom_message\x18\x0b \x01(\x0b\x32\x1a.opamp.proto.CustomMessageR\rcustomMessage\"\xbb\x01\n\x17OpAMPConnectionSettings\x12\x31\n\x14\x64\x65stination_endpoint\x18\x01 \x01(\tR\x13\x64\x65stinationEndpoint\x12.\n\x07headers\x18\x02 \x01(\x0b\x32\x14.opamp.proto.HeadersR\x07headers\x12=\n\x0b\x63\x65rtificate\x18\x03 \x01(\x0b\x32\x1b.opamp.proto.TLSCertificateR\x0b\x63\x65rtificate\"\xbf\x01\n\x1bTelemetryConnectionSettings\x12\x31\n\x14\x64\x65stination_endpoint\x18\x01 \x01(\tR\x13\x64\x65stinationEndpoint\x12.\n\x07headers\x18\x02 \x01(\x0b\x32\x14.opamp.proto.HeadersR\x07headers\x12=\n\x0b\x63\x65rtificate\x18\x03 \x01(\x0b\x32\x1b.opamp.proto.TLSCertificateR\x0b\x63\x65rtificate\"\xdd\x02\n\x17OtherConnectionSettings\x12\x31\n\x14\x64\x65stination_endpoint\x18\x01 \x01(\tR\x13\x64\x65stinationEndpoint\x12.\n\x07headers\x18\x02 \x01(\x0b\x32\x14.opamp.proto.HeadersR\x07headers\x12=\n\x0b\x63\x65rtificate\x18\x03 \x01(\x0b\x32\x1b.opamp.proto.TLSCertificateR\x0b\x63\x65rtificate\x12^\n\x0eother_settings\x18\x04 \x03(\x0b\x32\x37.opamp.proto.OtherConnectionSettings.OtherSettingsEntryR\rotherSettings\x1a@\n\x12OtherSettingsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"8\n\x07Headers\x12-\n\x07headers\x18\x01 \x03(\x0b\x32\x13.opamp.proto.HeaderR\x07headers\"0\n\x06Header\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"t\n\x0eTLSCertificate\x12\x1d\n\npublic_key\x18\x01 \x01(\x0cR\tpublicKey\x12\x1f\n\x0bprivate_key\x18\x02 \x01(\x0cR\nprivateKey\x12\"\n\rca_public_key\x18\x03 \x01(\x0cR\x0b\x63\x61PublicKey\"\x98\x04\n\x18\x43onnectionSettingsOffers\x12\x12\n\x04hash\x18\x01 \x01(\x0cR\x04hash\x12:\n\x05opamp\x18\x02 \x01(\x0b\x32$.opamp.proto.OpAMPConnectionSettingsR\x05opamp\x12I\n\x0bown_metrics\x18\x03 \x01(\x0b\x32(.opamp.proto.TelemetryConnectionSettingsR\nownMetrics\x12G\n\nown_traces\x18\x04 \x01(\x0b\x32(.opamp.proto.TelemetryConnectionSettingsR\townTraces\x12\x43\n\x08own_logs\x18\x05 \x01(\x0b\x32(.opamp.proto.TelemetryConnectionSettingsR\x07ownLogs\x12h\n\x11other_connections\x18\x06 \x03(\x0b\x32;.opamp.proto.ConnectionSettingsOffers.OtherConnectionsEntryR\x10otherConnections\x1ai\n\x15OtherConnectionsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12:\n\x05value\x18\x02 \x01(\x0b\x32$.opamp.proto.OtherConnectionSettingsR\x05value:\x02\x38\x01\"\xe5\x01\n\x11PackagesAvailable\x12H\n\x08packages\x18\x01 \x03(\x0b\x32,.opamp.proto.PackagesAvailable.PackagesEntryR\x08packages\x12*\n\x11\x61ll_packages_hash\x18\x02 \x01(\x0cR\x0f\x61llPackagesHash\x1aZ\n\rPackagesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x33\n\x05value\x18\x02 \x01(\x0b\x32\x1d.opamp.proto.PackageAvailableR\x05value:\x02\x38\x01\"\xa1\x01\n\x10PackageAvailable\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x18.opamp.proto.PackageTypeR\x04type\x12\x18\n\x07version\x18\x02 \x01(\tR\x07version\x12\x31\n\x04\x66ile\x18\x03 \x01(\x0b\x32\x1d.opamp.proto.DownloadableFileR\x04\x66ile\x12\x12\n\x04hash\x18\x04 \x01(\x0cR\x04hash\"v\n\x10\x44ownloadableFile\x12!\n\x0c\x64ownload_url\x18\x01 \x01(\tR\x0b\x64ownloadUrl\x12!\n\x0c\x63ontent_hash\x18\x02 \x01(\x0cR\x0b\x63ontentHash\x12\x1c\n\tsignature\x18\x03 \x01(\x0cR\tsignature\"\xb8\x01\n\x13ServerErrorResponse\x12\x38\n\x04type\x18\x01 \x01(\x0e\x32$.opamp.proto.ServerErrorResponseTypeR\x04type\x12#\n\rerror_message\x18\x02 \x01(\tR\x0c\x65rrorMessage\x12\x37\n\nretry_info\x18\x03 \x01(\x0b\x32\x16.opamp.proto.RetryInfoH\x00R\tretryInfoB\t\n\x07\x44\x65tails\"C\n\tRetryInfo\x12\x36\n\x17retry_after_nanoseconds\x18\x01 \x01(\x04R\x15retryAfterNanoseconds\"D\n\x14ServerToAgentCommand\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x18.opamp.proto.CommandTypeR\x04type\"\xb5\x01\n\x10\x41gentDescription\x12L\n\x16identifying_attributes\x18\x01 \x03(\x0b\x32\x15.opamp.proto.KeyValueR\x15identifyingAttributes\x12S\n\x1anon_identifying_attributes\x18\x02 \x03(\x0b\x32\x15.opamp.proto.KeyValueR\x18nonIdentifyingAttributes\"\x93\x03\n\x0f\x43omponentHealth\x12\x18\n\x07healthy\x18\x01 \x01(\x08R\x07healthy\x12/\n\x14start_time_unix_nano\x18\x02 \x01(\x06R\x11startTimeUnixNano\x12\x1d\n\nlast_error\x18\x03 \x01(\tR\tlastError\x12\x16\n\x06status\x18\x04 \x01(\tR\x06status\x12\x31\n\x15status_time_unix_nano\x18\x05 \x01(\x06R\x12statusTimeUnixNano\x12\x66\n\x14\x63omponent_health_map\x18\x06 \x03(\x0b\x32\x34.opamp.proto.ComponentHealth.ComponentHealthMapEntryR\x12\x63omponentHealthMap\x1a\x63\n\x17\x43omponentHealthMapEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32\x1c.opamp.proto.ComponentHealthR\x05value:\x02\x38\x01\"M\n\x0f\x45\x66\x66\x65\x63tiveConfig\x12:\n\nconfig_map\x18\x01 \x01(\x0b\x32\x1b.opamp.proto.AgentConfigMapR\tconfigMap\"\xab\x01\n\x12RemoteConfigStatus\x12\x35\n\x17last_remote_config_hash\x18\x01 \x01(\x0cR\x14lastRemoteConfigHash\x12\x39\n\x06status\x18\x02 \x01(\x0e\x32!.opamp.proto.RemoteConfigStatusesR\x06status\x12#\n\rerror_message\x18\x03 \x01(\tR\x0c\x65rrorMessage\"\xa1\x02\n\x0fPackageStatuses\x12\x46\n\x08packages\x18\x01 \x03(\x0b\x32*.opamp.proto.PackageStatuses.PackagesEntryR\x08packages\x12H\n!server_provided_all_packages_hash\x18\x02 \x01(\x0cR\x1dserverProvidedAllPackagesHash\x12#\n\rerror_message\x18\x03 \x01(\tR\x0c\x65rrorMessage\x1aW\n\rPackagesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x30\n\x05value\x18\x02 \x01(\x0b\x32\x1a.opamp.proto.PackageStatusR\x05value:\x02\x38\x01\"\xb8\x02\n\rPackageStatus\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12*\n\x11\x61gent_has_version\x18\x02 \x01(\tR\x0f\x61gentHasVersion\x12$\n\x0e\x61gent_has_hash\x18\x03 \x01(\x0cR\x0c\x61gentHasHash\x12\x34\n\x16server_offered_version\x18\x04 \x01(\tR\x14serverOfferedVersion\x12.\n\x13server_offered_hash\x18\x05 \x01(\x0cR\x11serverOfferedHash\x12\x36\n\x06status\x18\x06 \x01(\x0e\x32\x1e.opamp.proto.PackageStatusEnumR\x06status\x12#\n\rerror_message\x18\x07 \x01(\tR\x0c\x65rrorMessage\"?\n\x13\x41gentIdentification\x12(\n\x10new_instance_uid\x18\x01 \x01(\x0cR\x0enewInstanceUid\"i\n\x11\x41gentRemoteConfig\x12\x33\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x1b.opamp.proto.AgentConfigMapR\x06\x63onfig\x12\x1f\n\x0b\x63onfig_hash\x18\x02 \x01(\x0cR\nconfigHash\"\xb7\x01\n\x0e\x41gentConfigMap\x12I\n\nconfig_map\x18\x01 \x03(\x0b\x32*.opamp.proto.AgentConfigMap.ConfigMapEntryR\tconfigMap\x1aZ\n\x0e\x43onfigMapEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x32\n\x05value\x18\x02 \x01(\x0b\x32\x1c.opamp.proto.AgentConfigFileR\x05value:\x02\x38\x01\"H\n\x0f\x41gentConfigFile\x12\x12\n\x04\x62ody\x18\x01 \x01(\x0cR\x04\x62ody\x12!\n\x0c\x63ontent_type\x18\x02 \x01(\tR\x0b\x63ontentType\"8\n\x12\x43ustomCapabilities\x12\"\n\x0c\x63\x61pabilities\x18\x01 \x03(\tR\x0c\x63\x61pabilities\"W\n\rCustomMessage\x12\x1e\n\ncapability\x18\x01 \x01(\tR\ncapability\x12\x12\n\x04type\x18\x02 \x01(\tR\x04type\x12\x12\n\x04\x64\x61ta\x18\x03 \x01(\x0cR\x04\x64\x61ta*c\n\x12\x41gentToServerFlags\x12\"\n\x1e\x41gentToServerFlags_Unspecified\x10\x00\x12)\n%AgentToServerFlags_RequestInstanceUid\x10\x01*`\n\x12ServerToAgentFlags\x12\"\n\x1eServerToAgentFlags_Unspecified\x10\x00\x12&\n\"ServerToAgentFlags_ReportFullState\x10\x01*\xf7\x02\n\x12ServerCapabilities\x12\"\n\x1eServerCapabilities_Unspecified\x10\x00\x12$\n ServerCapabilities_AcceptsStatus\x10\x01\x12)\n%ServerCapabilities_OffersRemoteConfig\x10\x02\x12-\n)ServerCapabilities_AcceptsEffectiveConfig\x10\x04\x12%\n!ServerCapabilities_OffersPackages\x10\x08\x12,\n(ServerCapabilities_AcceptsPackagesStatus\x10\x10\x12/\n+ServerCapabilities_OffersConnectionSettings\x10 \x12\x37\n3ServerCapabilities_AcceptsConnectionSettingsRequest\x10@*>\n\x0bPackageType\x12\x18\n\x14PackageType_TopLevel\x10\x00\x12\x15\n\x11PackageType_Addon\x10\x01*\x8f\x01\n\x17ServerErrorResponseType\x12#\n\x1fServerErrorResponseType_Unknown\x10\x00\x12&\n\"ServerErrorResponseType_BadRequest\x10\x01\x12\'\n#ServerErrorResponseType_Unavailable\x10\x02*&\n\x0b\x43ommandType\x12\x17\n\x13\x43ommandType_Restart\x10\x00*\xef\x04\n\x11\x41gentCapabilities\x12!\n\x1d\x41gentCapabilities_Unspecified\x10\x00\x12#\n\x1f\x41gentCapabilities_ReportsStatus\x10\x01\x12)\n%AgentCapabilities_AcceptsRemoteConfig\x10\x02\x12,\n(AgentCapabilities_ReportsEffectiveConfig\x10\x04\x12%\n!AgentCapabilities_AcceptsPackages\x10\x08\x12,\n(AgentCapabilities_ReportsPackageStatuses\x10\x10\x12&\n\"AgentCapabilities_ReportsOwnTraces\x10 \x12\'\n#AgentCapabilities_ReportsOwnMetrics\x10@\x12%\n AgentCapabilities_ReportsOwnLogs\x10\x80\x01\x12\x35\n0AgentCapabilities_AcceptsOpAMPConnectionSettings\x10\x80\x02\x12\x35\n0AgentCapabilities_AcceptsOtherConnectionSettings\x10\x80\x04\x12,\n\'AgentCapabilities_AcceptsRestartCommand\x10\x80\x08\x12$\n\x1f\x41gentCapabilities_ReportsHealth\x10\x80\x10\x12*\n%AgentCapabilities_ReportsRemoteConfig\x10\x80 *\x9c\x01\n\x14RemoteConfigStatuses\x12\x1e\n\x1aRemoteConfigStatuses_UNSET\x10\x00\x12 \n\x1cRemoteConfigStatuses_APPLIED\x10\x01\x12!\n\x1dRemoteConfigStatuses_APPLYING\x10\x02\x12\x1f\n\x1bRemoteConfigStatuses_FAILED\x10\x03*\xa1\x01\n\x11PackageStatusEnum\x12\x1f\n\x1bPackageStatusEnum_Installed\x10\x00\x12$\n PackageStatusEnum_InstallPending\x10\x01\x12 \n\x1cPackageStatusEnum_Installing\x10\x02\x12#\n\x1fPackageStatusEnum_InstallFailed\x10\x03\x42\x9d\x01\n\x0f\x63om.opamp.protoB\nOpampProtoP\x01Z1github.com/odigos-io/odigos/opampserver/protobufs\xa2\x02\x03OPX\xaa\x02\x0bOpamp.Proto\xca\x02\x0bOpamp\\Proto\xe2\x02\x17Opamp\\Proto\\GPBMetadata\xea\x02\x0cOpamp::Protob\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'opamp_pb2', _globals) -if _descriptor._USE_C_DESCRIPTORS == False: - _globals['DESCRIPTOR']._options = None - _globals['DESCRIPTOR']._serialized_options = b'\n\017com.opamp.protoB\nOpampProtoP\001Z1github.com/odigos-io/odigos/opampserver/protobufs\242\002\003OPX\252\002\013Opamp.Proto\312\002\013Opamp\\Proto\342\002\027Opamp\\Proto\\GPBMetadata\352\002\014Opamp::Proto' - _globals['_OTHERCONNECTIONSETTINGS_OTHERSETTINGSENTRY']._options = None - _globals['_OTHERCONNECTIONSETTINGS_OTHERSETTINGSENTRY']._serialized_options = b'8\001' - _globals['_CONNECTIONSETTINGSOFFERS_OTHERCONNECTIONSENTRY']._options = None - _globals['_CONNECTIONSETTINGSOFFERS_OTHERCONNECTIONSENTRY']._serialized_options = b'8\001' - _globals['_PACKAGESAVAILABLE_PACKAGESENTRY']._options = None - _globals['_PACKAGESAVAILABLE_PACKAGESENTRY']._serialized_options = b'8\001' - _globals['_COMPONENTHEALTH_COMPONENTHEALTHMAPENTRY']._options = None - _globals['_COMPONENTHEALTH_COMPONENTHEALTHMAPENTRY']._serialized_options = b'8\001' - _globals['_PACKAGESTATUSES_PACKAGESENTRY']._options = None - _globals['_PACKAGESTATUSES_PACKAGESENTRY']._serialized_options = b'8\001' - _globals['_AGENTCONFIGMAP_CONFIGMAPENTRY']._options = None - _globals['_AGENTCONFIGMAP_CONFIGMAPENTRY']._serialized_options = b'8\001' - _globals['_AGENTTOSERVERFLAGS']._serialized_start=6233 - _globals['_AGENTTOSERVERFLAGS']._serialized_end=6332 - _globals['_SERVERTOAGENTFLAGS']._serialized_start=6334 - _globals['_SERVERTOAGENTFLAGS']._serialized_end=6430 - _globals['_SERVERCAPABILITIES']._serialized_start=6433 - _globals['_SERVERCAPABILITIES']._serialized_end=6808 - _globals['_PACKAGETYPE']._serialized_start=6810 - _globals['_PACKAGETYPE']._serialized_end=6872 - _globals['_SERVERERRORRESPONSETYPE']._serialized_start=6875 - _globals['_SERVERERRORRESPONSETYPE']._serialized_end=7018 - _globals['_COMMANDTYPE']._serialized_start=7020 - _globals['_COMMANDTYPE']._serialized_end=7058 - _globals['_AGENTCAPABILITIES']._serialized_start=7061 - _globals['_AGENTCAPABILITIES']._serialized_end=7684 - _globals['_REMOTECONFIGSTATUSES']._serialized_start=7687 - _globals['_REMOTECONFIGSTATUSES']._serialized_end=7843 - _globals['_PACKAGESTATUSENUM']._serialized_start=7846 - _globals['_PACKAGESTATUSENUM']._serialized_end=8007 - _globals['_AGENTTOSERVER']._serialized_start=45 - _globals['_AGENTTOSERVER']._serialized_end=873 - _globals['_AGENTDISCONNECT']._serialized_start=875 - _globals['_AGENTDISCONNECT']._serialized_end=892 - _globals['_CONNECTIONSETTINGSREQUEST']._serialized_start=894 - _globals['_CONNECTIONSETTINGSREQUEST']._serialized_end=988 - _globals['_OPAMPCONNECTIONSETTINGSREQUEST']._serialized_start=990 - _globals['_OPAMPCONNECTIONSETTINGSREQUEST']._serialized_end=1104 - _globals['_CERTIFICATEREQUEST']._serialized_start=1106 - _globals['_CERTIFICATEREQUEST']._serialized_end=1144 - _globals['_SERVERTOAGENT']._serialized_start=1147 - _globals['_SERVERTOAGENT']._serialized_end=1859 - _globals['_OPAMPCONNECTIONSETTINGS']._serialized_start=1862 - _globals['_OPAMPCONNECTIONSETTINGS']._serialized_end=2049 - _globals['_TELEMETRYCONNECTIONSETTINGS']._serialized_start=2052 - _globals['_TELEMETRYCONNECTIONSETTINGS']._serialized_end=2243 - _globals['_OTHERCONNECTIONSETTINGS']._serialized_start=2246 - _globals['_OTHERCONNECTIONSETTINGS']._serialized_end=2595 - _globals['_OTHERCONNECTIONSETTINGS_OTHERSETTINGSENTRY']._serialized_start=2531 - _globals['_OTHERCONNECTIONSETTINGS_OTHERSETTINGSENTRY']._serialized_end=2595 - _globals['_HEADERS']._serialized_start=2597 - _globals['_HEADERS']._serialized_end=2653 - _globals['_HEADER']._serialized_start=2655 - _globals['_HEADER']._serialized_end=2703 - _globals['_TLSCERTIFICATE']._serialized_start=2705 - _globals['_TLSCERTIFICATE']._serialized_end=2821 - _globals['_CONNECTIONSETTINGSOFFERS']._serialized_start=2824 - _globals['_CONNECTIONSETTINGSOFFERS']._serialized_end=3360 - _globals['_CONNECTIONSETTINGSOFFERS_OTHERCONNECTIONSENTRY']._serialized_start=3255 - _globals['_CONNECTIONSETTINGSOFFERS_OTHERCONNECTIONSENTRY']._serialized_end=3360 - _globals['_PACKAGESAVAILABLE']._serialized_start=3363 - _globals['_PACKAGESAVAILABLE']._serialized_end=3592 - _globals['_PACKAGESAVAILABLE_PACKAGESENTRY']._serialized_start=3502 - _globals['_PACKAGESAVAILABLE_PACKAGESENTRY']._serialized_end=3592 - _globals['_PACKAGEAVAILABLE']._serialized_start=3595 - _globals['_PACKAGEAVAILABLE']._serialized_end=3756 - _globals['_DOWNLOADABLEFILE']._serialized_start=3758 - _globals['_DOWNLOADABLEFILE']._serialized_end=3876 - _globals['_SERVERERRORRESPONSE']._serialized_start=3879 - _globals['_SERVERERRORRESPONSE']._serialized_end=4063 - _globals['_RETRYINFO']._serialized_start=4065 - _globals['_RETRYINFO']._serialized_end=4132 - _globals['_SERVERTOAGENTCOMMAND']._serialized_start=4134 - _globals['_SERVERTOAGENTCOMMAND']._serialized_end=4202 - _globals['_AGENTDESCRIPTION']._serialized_start=4205 - _globals['_AGENTDESCRIPTION']._serialized_end=4386 - _globals['_COMPONENTHEALTH']._serialized_start=4389 - _globals['_COMPONENTHEALTH']._serialized_end=4792 - _globals['_COMPONENTHEALTH_COMPONENTHEALTHMAPENTRY']._serialized_start=4693 - _globals['_COMPONENTHEALTH_COMPONENTHEALTHMAPENTRY']._serialized_end=4792 - _globals['_EFFECTIVECONFIG']._serialized_start=4794 - _globals['_EFFECTIVECONFIG']._serialized_end=4871 - _globals['_REMOTECONFIGSTATUS']._serialized_start=4874 - _globals['_REMOTECONFIGSTATUS']._serialized_end=5045 - _globals['_PACKAGESTATUSES']._serialized_start=5048 - _globals['_PACKAGESTATUSES']._serialized_end=5337 - _globals['_PACKAGESTATUSES_PACKAGESENTRY']._serialized_start=5250 - _globals['_PACKAGESTATUSES_PACKAGESENTRY']._serialized_end=5337 - _globals['_PACKAGESTATUS']._serialized_start=5340 - _globals['_PACKAGESTATUS']._serialized_end=5652 - _globals['_AGENTIDENTIFICATION']._serialized_start=5654 - _globals['_AGENTIDENTIFICATION']._serialized_end=5717 - _globals['_AGENTREMOTECONFIG']._serialized_start=5719 - _globals['_AGENTREMOTECONFIG']._serialized_end=5824 - _globals['_AGENTCONFIGMAP']._serialized_start=5827 - _globals['_AGENTCONFIGMAP']._serialized_end=6010 - _globals['_AGENTCONFIGMAP_CONFIGMAPENTRY']._serialized_start=5920 - _globals['_AGENTCONFIGMAP_CONFIGMAPENTRY']._serialized_end=6010 - _globals['_AGENTCONFIGFILE']._serialized_start=6012 - _globals['_AGENTCONFIGFILE']._serialized_end=6084 - _globals['_CUSTOMCAPABILITIES']._serialized_start=6086 - _globals['_CUSTOMCAPABILITIES']._serialized_end=6142 - _globals['_CUSTOMMESSAGE']._serialized_start=6144 - _globals['_CUSTOMMESSAGE']._serialized_end=6231 -# @@protoc_insertion_point(module_scope) diff --git a/agents/python/opamp/utils.py b/agents/python/opamp/utils.py deleted file mode 100644 index 01d4a54ee..000000000 --- a/agents/python/opamp/utils.py +++ /dev/null @@ -1,24 +0,0 @@ -import json -import logging -from opamp import opamp_pb2 - -def parse_first_message_to_resource_attributes(first_message_server_to_agent: opamp_pb2.ServerToAgent, logger: logging.Logger) -> dict: - config_map = first_message_server_to_agent.remote_config.config.config_map - - if "SDK" not in config_map: - logger.error("SDK not found in config map, returning empty resource attributes") - return {} - - try: - sdk_config = json.loads(config_map["SDK"].body) - except json.JSONDecodeError as e: - logger.error(f"Error decoding SDK config: {e}") - return {} - - remote_resource_attributes = sdk_config.get('remoteResourceAttributes', []) - - if not remote_resource_attributes: - logger.error('missing "remoteResourceAttributes" section in OpAMP server remote config on first server to agent message') - return {} - - return {item['key']: item['value'] for item in remote_resource_attributes} \ No newline at end of file diff --git a/agents/python/requirements.txt b/agents/python/requirements.txt deleted file mode 100644 index 5a3e015f7..000000000 --- a/agents/python/requirements.txt +++ /dev/null @@ -1,354 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: -# -# pip-compile setup.py -# -asgiref==3.8.1 - # via - # opentelemetry-instrumentation-asgi - # opentelemetry-test-utils -certifi==2023.5.7 - # via requests -charset-normalizer==3.2.0 - # via requests -deprecated==1.2.14 - # via - # opentelemetry-api - # opentelemetry-exporter-otlp-proto-http -googleapis-common-protos==1.63.2 - # via opentelemetry-exporter-otlp-proto-http -idna==3.4 - # via requests -importlib-metadata==7.0.0 - # via - # opentelemetry-api - # opentelemetry-instrumentation-flask -opentelemetry-api==1.24.0 - # via - # opentelemetry-distro - # opentelemetry-exporter-otlp-proto-http - # opentelemetry-instrumentation - # opentelemetry-instrumentation-aio-pika - # opentelemetry-instrumentation-aiohttp-client - # opentelemetry-instrumentation-aiopg - # opentelemetry-instrumentation-asgi - # opentelemetry-instrumentation-asyncio - # opentelemetry-instrumentation-asyncpg - # opentelemetry-instrumentation-boto - # opentelemetry-instrumentation-boto3sqs - # opentelemetry-instrumentation-botocore - # opentelemetry-instrumentation-cassandra - # opentelemetry-instrumentation-celery - # opentelemetry-instrumentation-confluent-kafka - # opentelemetry-instrumentation-dbapi - # opentelemetry-instrumentation-django - # opentelemetry-instrumentation-elasticsearch - # opentelemetry-instrumentation-falcon - # opentelemetry-instrumentation-fastapi - # opentelemetry-instrumentation-flask - # opentelemetry-instrumentation-grpc - # opentelemetry-instrumentation-httpx - # opentelemetry-instrumentation-jinja2 - # opentelemetry-instrumentation-kafka-python - # opentelemetry-instrumentation-logging - # opentelemetry-instrumentation-mysql - # opentelemetry-instrumentation-mysqlclient - # opentelemetry-instrumentation-pika - # opentelemetry-instrumentation-psycopg - # opentelemetry-instrumentation-psycopg2 - # opentelemetry-instrumentation-pymemcache - # opentelemetry-instrumentation-pymongo - # opentelemetry-instrumentation-pymysql - # opentelemetry-instrumentation-pyramid - # opentelemetry-instrumentation-redis - # opentelemetry-instrumentation-remoulade - # opentelemetry-instrumentation-requests - # opentelemetry-instrumentation-sklearn - # opentelemetry-instrumentation-sqlalchemy - # opentelemetry-instrumentation-sqlite3 - # opentelemetry-instrumentation-starlette - # opentelemetry-instrumentation-system-metrics - # opentelemetry-instrumentation-tornado - # opentelemetry-instrumentation-tortoiseorm - # opentelemetry-instrumentation-urllib - # opentelemetry-instrumentation-urllib3 - # opentelemetry-instrumentation-wsgi - # opentelemetry-propagator-aws-xray - # opentelemetry-sdk - # opentelemetry-test-utils -opentelemetry-distro==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-exporter-otlp-proto-common==1.24.0 - # via opentelemetry-exporter-otlp-proto-http -opentelemetry-exporter-otlp-proto-http==1.24.0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation==0.45b0 - # via - # odigos-python-configurator (setup.py) - # opentelemetry-distro - # opentelemetry-instrumentation-aio-pika - # opentelemetry-instrumentation-aiohttp-client - # opentelemetry-instrumentation-aiopg - # opentelemetry-instrumentation-asgi - # opentelemetry-instrumentation-asyncio - # opentelemetry-instrumentation-asyncpg - # opentelemetry-instrumentation-boto - # opentelemetry-instrumentation-boto3sqs - # opentelemetry-instrumentation-botocore - # opentelemetry-instrumentation-cassandra - # opentelemetry-instrumentation-celery - # opentelemetry-instrumentation-confluent-kafka - # opentelemetry-instrumentation-dbapi - # opentelemetry-instrumentation-django - # opentelemetry-instrumentation-elasticsearch - # opentelemetry-instrumentation-falcon - # opentelemetry-instrumentation-fastapi - # opentelemetry-instrumentation-flask - # opentelemetry-instrumentation-grpc - # opentelemetry-instrumentation-httpx - # opentelemetry-instrumentation-jinja2 - # opentelemetry-instrumentation-kafka-python - # opentelemetry-instrumentation-logging - # opentelemetry-instrumentation-mysql - # opentelemetry-instrumentation-mysqlclient - # opentelemetry-instrumentation-pika - # opentelemetry-instrumentation-psycopg - # opentelemetry-instrumentation-psycopg2 - # opentelemetry-instrumentation-pymemcache - # opentelemetry-instrumentation-pymongo - # opentelemetry-instrumentation-pymysql - # opentelemetry-instrumentation-pyramid - # opentelemetry-instrumentation-redis - # opentelemetry-instrumentation-remoulade - # opentelemetry-instrumentation-requests - # opentelemetry-instrumentation-sklearn - # opentelemetry-instrumentation-sqlalchemy - # opentelemetry-instrumentation-sqlite3 - # opentelemetry-instrumentation-starlette - # opentelemetry-instrumentation-system-metrics - # opentelemetry-instrumentation-tornado - # opentelemetry-instrumentation-tortoiseorm - # opentelemetry-instrumentation-urllib - # opentelemetry-instrumentation-urllib3 - # opentelemetry-instrumentation-wsgi -opentelemetry-instrumentation-aio-pika==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-aiohttp-client==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-aiopg==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-asgi==0.45b0 - # via - # odigos-python-configurator (setup.py) - # opentelemetry-instrumentation-fastapi - # opentelemetry-instrumentation-starlette -opentelemetry-instrumentation-asyncio==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-asyncpg==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-boto==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-boto3sqs==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-botocore==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-cassandra==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-celery==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-confluent-kafka==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-dbapi==0.45b0 - # via - # odigos-python-configurator (setup.py) - # opentelemetry-instrumentation-aiopg - # opentelemetry-instrumentation-mysql - # opentelemetry-instrumentation-mysqlclient - # opentelemetry-instrumentation-psycopg - # opentelemetry-instrumentation-psycopg2 - # opentelemetry-instrumentation-pymysql - # opentelemetry-instrumentation-sqlite3 -opentelemetry-instrumentation-django==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-elasticsearch==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-falcon==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-fastapi==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-flask==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-grpc==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-httpx==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-jinja2==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-kafka-python==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-logging==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-mysql==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-mysqlclient==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-pika==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-psycopg==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-psycopg2==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-pymemcache==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-pymongo==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-pymysql==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-pyramid==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-redis==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-remoulade==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-requests==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-sklearn==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-sqlalchemy==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-sqlite3==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-starlette==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-system-metrics==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-tornado==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-tortoiseorm==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-urllib==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-urllib3==0.45b0 - # via odigos-python-configurator (setup.py) -opentelemetry-instrumentation-wsgi==0.45b0 - # via - # odigos-python-configurator (setup.py) - # opentelemetry-instrumentation-django - # opentelemetry-instrumentation-falcon - # opentelemetry-instrumentation-flask - # opentelemetry-instrumentation-pyramid -opentelemetry-propagator-aws-xray==1.0.1 - # via opentelemetry-instrumentation-botocore -opentelemetry-proto==1.24.0 - # via - # opentelemetry-exporter-otlp-proto-common - # opentelemetry-exporter-otlp-proto-http -opentelemetry-sdk==1.24.0 - # via - # opentelemetry-distro - # opentelemetry-exporter-otlp-proto-http - # opentelemetry-instrumentation-grpc - # opentelemetry-instrumentation-system-metrics - # opentelemetry-test-utils -opentelemetry-semantic-conventions==0.45b0 - # via - # opentelemetry-instrumentation-aiohttp-client - # opentelemetry-instrumentation-asgi - # opentelemetry-instrumentation-asyncio - # opentelemetry-instrumentation-asyncpg - # opentelemetry-instrumentation-boto - # opentelemetry-instrumentation-boto3sqs - # opentelemetry-instrumentation-botocore - # opentelemetry-instrumentation-cassandra - # opentelemetry-instrumentation-celery - # opentelemetry-instrumentation-dbapi - # opentelemetry-instrumentation-django - # opentelemetry-instrumentation-elasticsearch - # opentelemetry-instrumentation-falcon - # opentelemetry-instrumentation-fastapi - # opentelemetry-instrumentation-flask - # opentelemetry-instrumentation-grpc - # opentelemetry-instrumentation-httpx - # opentelemetry-instrumentation-kafka-python - # opentelemetry-instrumentation-pymemcache - # opentelemetry-instrumentation-pymongo - # opentelemetry-instrumentation-pyramid - # opentelemetry-instrumentation-redis - # opentelemetry-instrumentation-remoulade - # opentelemetry-instrumentation-requests - # opentelemetry-instrumentation-sqlalchemy - # opentelemetry-instrumentation-starlette - # opentelemetry-instrumentation-tornado - # opentelemetry-instrumentation-tortoiseorm - # opentelemetry-instrumentation-urllib - # opentelemetry-instrumentation-urllib3 - # opentelemetry-instrumentation-wsgi - # opentelemetry-sdk -opentelemetry-test-utils==0.45b0 - # via opentelemetry-instrumentation-asyncio -opentelemetry-util-http==0.45b0 - # via - # opentelemetry-instrumentation-aiohttp-client - # opentelemetry-instrumentation-asgi - # opentelemetry-instrumentation-django - # opentelemetry-instrumentation-falcon - # opentelemetry-instrumentation-fastapi - # opentelemetry-instrumentation-flask - # opentelemetry-instrumentation-httpx - # opentelemetry-instrumentation-pyramid - # opentelemetry-instrumentation-requests - # opentelemetry-instrumentation-starlette - # opentelemetry-instrumentation-tornado - # opentelemetry-instrumentation-urllib - # opentelemetry-instrumentation-urllib3 - # opentelemetry-instrumentation-wsgi -packaging==24.1 - # via - # opentelemetry-instrumentation-falcon - # opentelemetry-instrumentation-flask - # opentelemetry-instrumentation-pika - # opentelemetry-instrumentation-sqlalchemy -protobuf==4.23.4 - # via - # googleapis-common-protos - # odigos-python-configurator (setup.py) - # opentelemetry-proto -psutil==5.9.8 - # via opentelemetry-instrumentation-system-metrics -requests==2.31.0 - # via - # odigos-python-configurator (setup.py) - # opentelemetry-exporter-otlp-proto-http -typing-extensions==4.7.1 - # via opentelemetry-sdk -urllib3==2.0.3 - # via requests -uuid7==0.1.0 - # via odigos-python-configurator (setup.py) -wrapt==1.16.0 - # via - # deprecated - # opentelemetry-instrumentation - # opentelemetry-instrumentation-aio-pika - # opentelemetry-instrumentation-aiohttp-client - # opentelemetry-instrumentation-aiopg - # opentelemetry-instrumentation-asyncio - # opentelemetry-instrumentation-boto3sqs - # opentelemetry-instrumentation-cassandra - # opentelemetry-instrumentation-confluent-kafka - # opentelemetry-instrumentation-dbapi - # opentelemetry-instrumentation-elasticsearch - # opentelemetry-instrumentation-grpc - # opentelemetry-instrumentation-jinja2 - # opentelemetry-instrumentation-pika - # opentelemetry-instrumentation-pymemcache - # opentelemetry-instrumentation-pyramid - # opentelemetry-instrumentation-redis - # opentelemetry-instrumentation-sqlalchemy - # opentelemetry-instrumentation-urllib3 -zipp==3.19.2 - # via importlib-metadata - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/agents/python/setup.py b/agents/python/setup.py index 1420d62ae..d11618359 100644 --- a/agents/python/setup.py +++ b/agents/python/setup.py @@ -1,65 +1,22 @@ from setuptools import setup, find_packages +index_url = None + +# DEV - Local Uncomment to develop locally \/ +# index_url = 'http://host.docker.internal:8080/packages/odigos_opentelemetry_python-0.1.1-py3-none-any.whl' + +install_requires = [ + f"odigos-opentelemetry-python @ {index_url}" if index_url else "odigos-opentelemetry-python" +] + setup( name="odigos-python-configurator", version="0.1.0", description="Odigos Configurator for Python OpenTelemetry Auto-Instrumentation", author="Tamir David", author_email="tamir@odigos.io", - packages=find_packages(include=["configurator", "configurator.*", "opamp", "opamp.*"]), - install_requires=[ - "requests~=2.7", - 'protobuf>=3.19, <5.0', - "uuid7 == 0.1.0", - 'opentelemetry-distro==0.45b0', - 'opentelemetry-exporter-otlp-proto-http==1.24.0', - 'opentelemetry-instrumentation==0.45b0', - 'opentelemetry-instrumentation-aio-pika==0.45b0', - 'opentelemetry-instrumentation-aiohttp-client==0.45b0', - 'opentelemetry-instrumentation-aiopg==0.45b0', - 'opentelemetry-instrumentation-asgi==0.45b0', - 'opentelemetry-instrumentation-asyncio==0.45b0', - 'opentelemetry-instrumentation-asyncpg==0.45b0', - 'opentelemetry-instrumentation-boto==0.45b0', - 'opentelemetry-instrumentation-boto3sqs==0.45b0', - 'opentelemetry-instrumentation-botocore==0.45b0', - 'opentelemetry-instrumentation-cassandra==0.45b0', - 'opentelemetry-instrumentation-celery==0.45b0', - 'opentelemetry-instrumentation-confluent-kafka==0.45b0', - 'opentelemetry-instrumentation-dbapi==0.45b0', - 'opentelemetry-instrumentation-django==0.45b0', - 'opentelemetry-instrumentation-elasticsearch==0.45b0', - 'opentelemetry-instrumentation-falcon==0.45b0', - 'opentelemetry-instrumentation-fastapi==0.45b0', - 'opentelemetry-instrumentation-flask==0.45b0', - 'opentelemetry-instrumentation-grpc==0.45b0', - 'opentelemetry-instrumentation-httpx==0.45b0', - 'opentelemetry-instrumentation-jinja2==0.45b0', - 'opentelemetry-instrumentation-kafka-python==0.45b0', - 'opentelemetry-instrumentation-logging==0.45b0', - 'opentelemetry-instrumentation-mysql==0.45b0', - 'opentelemetry-instrumentation-mysqlclient==0.45b0', - 'opentelemetry-instrumentation-pika==0.45b0', - 'opentelemetry-instrumentation-psycopg==0.45b0', - 'opentelemetry-instrumentation-psycopg2==0.45b0', - 'opentelemetry-instrumentation-pymemcache==0.45b0', - 'opentelemetry-instrumentation-pymongo==0.45b0', - 'opentelemetry-instrumentation-pymysql==0.45b0', - 'opentelemetry-instrumentation-pyramid==0.45b0', - 'opentelemetry-instrumentation-redis==0.45b0', - 'opentelemetry-instrumentation-remoulade==0.45b0', - 'opentelemetry-instrumentation-requests==0.45b0', - 'opentelemetry-instrumentation-sklearn==0.45b0', - 'opentelemetry-instrumentation-sqlalchemy==0.45b0', - 'opentelemetry-instrumentation-sqlite3==0.45b0', - 'opentelemetry-instrumentation-starlette==0.45b0', - 'opentelemetry-instrumentation-system-metrics==0.45b0', - 'opentelemetry-instrumentation-tornado==0.45b0', - 'opentelemetry-instrumentation-tortoiseorm==0.45b0', - 'opentelemetry-instrumentation-urllib==0.45b0', - 'opentelemetry-instrumentation-urllib3==0.45b0', - 'opentelemetry-instrumentation-wsgi==0.45b0', - ], + packages=find_packages(include=["configurator", "configurator.*"]), + install_requires=install_requires, python_requires=">=3.8", entry_points={ 'opentelemetry_configurator': [ diff --git a/odiglet/Dockerfile b/odiglet/Dockerfile index b6f24f23f..eb5152c8f 100644 --- a/odiglet/Dockerfile +++ b/odiglet/Dockerfile @@ -4,9 +4,9 @@ FROM python:3.11 AS python-builder ARG ODIGOS_VERSION WORKDIR /python-instrumentation -COPY ../agents/python ./agents/python -RUN echo "VERSION = \"$ODIGOS_VERSION\";" > ./agents/python/configurator/version.py -RUN mkdir workspace && pip install ./agents/python/ --target workspace +COPY ../agents/python ./agents/configurator +RUN pip install ./agents/configurator/ --target workspace +RUN echo "VERSION = \"$ODIGOS_VERSION\";" > /python-instrumentation/workspace/initializer/version.py ######### Node.js Native Community Agent ######### #