84
84
from oneagent ._impl .six .moves import range #pylint:disable=import-error
85
85
from oneagent .version import __version__
86
86
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 )
88
90
from ._impl .native import nativeagent
89
91
from ._impl .native .nativeagent import try_get_sdk
90
92
from ._impl .native .sdknulliface import SDKNullInterface
91
93
from ._impl .native .sdkdllinfo import WIN32
92
94
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
+
93
104
logger = logging .getLogger ('py_sdk' )
94
105
logger .setLevel (logging .CRITICAL + 1 ) # Disabled by default
95
106
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
96
116
class InitResult (namedtuple ('InitResult' , 'status error' )):
97
117
__slots__ = ()
98
118
@@ -104,6 +124,10 @@ class InitResult(namedtuple('InitResult', 'status error')):
104
124
105
125
__nonzero__ = __bool__ = lambda self : self .status >= 0
106
126
127
+ def __repr__ (self ):
128
+ return "InitResult(status={}, error={!r})" .format (
129
+ self ._value_name (self .status ), self .error ) #pylint:disable=no-member
130
+
107
131
108
132
_sdk_ref_lk = Lock ()
109
133
_sdk_ref_count = 0
@@ -186,8 +210,9 @@ def initialize(sdkopts=(), sdklibname=None, forkable=False):
186
210
* :meth:`oneagent.sdk.SDK.agent_version_string` works as expected.
187
211
* :meth:`oneagent.sdk.SDK.agent_state` will return
188
212
: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.
191
216
* It is recommended you call :func:`shutdown` when the original process will not fork any more
192
217
children that want to use the SDK.
193
218
@@ -248,8 +273,8 @@ def _try_init_noref(sdkopts=(), sdklibname=None, forkable=False):
248
273
249
274
try :
250
275
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 )
253
278
sdk = nativeagent .initialize (sdklibname )
254
279
255
280
have_warning = False
@@ -270,7 +295,11 @@ def _try_init_noref(sdkopts=(), sdklibname=None, forkable=False):
270
295
271
296
nativeagent .checkresult (sdk , sdk .initialize (flags ), 'onesdk_initialize_2' )
272
297
_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' )
274
303
return InitResult (
275
304
(InitResult .STATUS_INITIALIZED_WITH_WARNING if have_warning else
276
305
InitResult .STATUS_INITIALIZED ),
@@ -280,7 +309,7 @@ def _try_init_noref(sdkopts=(), sdklibname=None, forkable=False):
280
309
#pylint:disable=no-member
281
310
if isinstance (e , SDKError ) and e .code == ErrorCode .AGENT_NOT_ACTIVE :
282
311
#pylint:enable=no-member
283
- logger .debug (" initialized, but agent not active" )
312
+ logger .debug (' initialized, but agent not active' )
284
313
return InitResult (InitResult .STATUS_INITIALIZED_WITH_WARNING , e )
285
314
logger .exception ('Failed initializing agent.' )
286
315
sdk = nativeagent .try_get_sdk ()
0 commit comments