8484from oneagent ._impl .six .moves import range #pylint:disable=import-error
8585from oneagent .version import __version__
8686
87- from .common import SDKError , SDKInitializationError , ErrorCode , _ONESDK_INIT_FLAG_FORKABLE
87+ from .common import (
88+ SDKError , SDKInitializationError , ErrorCode ,
89+ _ONESDK_INIT_FLAG_FORKABLE , _add_enum_helpers )
8890from ._impl .native import nativeagent
8991from ._impl .native .nativeagent import try_get_sdk
9092from ._impl .native .sdknulliface import SDKNullInterface
9193from ._impl .native .sdkdllinfo import WIN32
9294
95+ if hasattr (sys , 'implementation' ):
96+ def _get_py_edition ():
97+ return sys .implementation .name # pylint:disable=no-member
98+ else :
99+ import platform
100+
101+ def _get_py_edition ():
102+ return platform .python_implementation ()
103+
93104logger = logging .getLogger ('py_sdk' )
94105logger .setLevel (logging .CRITICAL + 1 ) # Disabled by default
95106
107+ _PROCESS_TECH_PYTHON = 28
108+ _PROCESS_TECH_ONEAGENT_SDK = 118
109+
110+ def _get_py_version ():
111+ return '.' .join (map (str , sys .version_info [:3 ])) + (
112+ '' if sys .version_info .releaselevel == "final"
113+ else sys .version_info .releaselevel + str (sys .version_info .serial ))
114+
115+ @_add_enum_helpers
96116class InitResult (namedtuple ('InitResult' , 'status error' )):
97117 __slots__ = ()
98118
@@ -104,6 +124,10 @@ class InitResult(namedtuple('InitResult', 'status error')):
104124
105125 __nonzero__ = __bool__ = lambda self : self .status >= 0
106126
127+ def __repr__ (self ):
128+ return "InitResult(status={}, error={!r})" .format (
129+ self ._value_name (self .status ), self .error ) #pylint:disable=no-member
130+
107131
108132_sdk_ref_lk = Lock ()
109133_sdk_ref_count = 0
@@ -186,8 +210,9 @@ def initialize(sdkopts=(), sdklibname=None, forkable=False):
186210 * :meth:`oneagent.sdk.SDK.agent_version_string` works as expected.
187211 * :meth:`oneagent.sdk.SDK.agent_state` will return
188212 :data:`oneagent.common.AgentState.TEMPORARILY_INACTIVE` - but see the note below.
189- * :meth:`oneagent.sdk.SDK.set_diagnostic_callback` works as expected, the callback will be
190- carried over to forked child processes.
213+ * :meth:`oneagent.sdk.SDK.set_diagnostic_callback` and
214+ :meth:`oneagent.sdk.SDK.set_verbose_callback` work as expected,
215+ the callback will be carried over to forked child processes.
191216 * It is recommended you call :func:`shutdown` when the original process will not fork any more
192217 children that want to use the SDK.
193218
@@ -248,8 +273,8 @@ def _try_init_noref(sdkopts=(), sdklibname=None, forkable=False):
248273
249274 try :
250275 logger .info (
251- 'Initializing SDK with options=%s, libname=%s.' ,
252- sdkopts , sdklibname )
276+ 'Initializing SDK on Python=%s with options=%s, libname=%s.' ,
277+ ( sys . version or '?' ). replace ( ' \n ' , ' ' ). replace ( ' \r ' , '' ), sdkopts , sdklibname )
253278 sdk = nativeagent .initialize (sdklibname )
254279
255280 have_warning = False
@@ -270,7 +295,11 @@ def _try_init_noref(sdkopts=(), sdklibname=None, forkable=False):
270295
271296 nativeagent .checkresult (sdk , sdk .initialize (flags ), 'onesdk_initialize_2' )
272297 _should_shutdown = True
273- logger .debug ("initialize successful" )
298+ logger .debug ('initialize successful, adding tech types...' )
299+ sdk .ex_agent_add_process_technology (_PROCESS_TECH_ONEAGENT_SDK , 'Python' , __version__ )
300+ sdk .ex_agent_add_process_technology (
301+ _PROCESS_TECH_PYTHON , _get_py_edition (), _get_py_version ())
302+ logger .debug ('tech type reporting complete' )
274303 return InitResult (
275304 (InitResult .STATUS_INITIALIZED_WITH_WARNING if have_warning else
276305 InitResult .STATUS_INITIALIZED ),
@@ -280,7 +309,7 @@ def _try_init_noref(sdkopts=(), sdklibname=None, forkable=False):
280309 #pylint:disable=no-member
281310 if isinstance (e , SDKError ) and e .code == ErrorCode .AGENT_NOT_ACTIVE :
282311 #pylint:enable=no-member
283- logger .debug (" initialized, but agent not active" )
312+ logger .debug (' initialized, but agent not active' )
284313 return InitResult (InitResult .STATUS_INITIALIZED_WITH_WARNING , e )
285314 logger .exception ('Failed initializing agent.' )
286315 sdk = nativeagent .try_get_sdk ()
0 commit comments