dt-extensions-sdk 1.3.0__py3-none-any.whl → 1.3.1__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.
- {dt_extensions_sdk-1.3.0.dist-info → dt_extensions_sdk-1.3.1.dist-info}/METADATA +4 -3
- {dt_extensions_sdk-1.3.0.dist-info → dt_extensions_sdk-1.3.1.dist-info}/RECORD +9 -9
- {dt_extensions_sdk-1.3.0.dist-info → dt_extensions_sdk-1.3.1.dist-info}/WHEEL +1 -1
- dynatrace_extension/__about__.py +1 -1
- dynatrace_extension/sdk/callback.py +8 -3
- dynatrace_extension/sdk/communication.py +23 -0
- dynatrace_extension/sdk/extension.py +6 -2
- {dt_extensions_sdk-1.3.0.dist-info → dt_extensions_sdk-1.3.1.dist-info}/entry_points.txt +0 -0
- {dt_extensions_sdk-1.3.0.dist-info → dt_extensions_sdk-1.3.1.dist-info}/licenses/LICENSE.txt +0 -0
@@ -1,11 +1,12 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: dt-extensions-sdk
|
3
|
-
Version: 1.3.
|
3
|
+
Version: 1.3.1
|
4
4
|
Project-URL: Documentation, https://github.com/dynatrace-extensions/dt-extensions-python-sdk#readme
|
5
5
|
Project-URL: Issues, https://github.com/dynatrace-extensions/dt-extensions-python-sdk/issues
|
6
6
|
Project-URL: Source, https://github.com/dynatrace-extensions/dt-extensions-python-sdk
|
7
7
|
Author-email: dlopes7 <davidribeirolopes@gmail.com>
|
8
|
-
License: MIT
|
8
|
+
License-Expression: MIT
|
9
|
+
License-File: LICENSE.txt
|
9
10
|
Classifier: Development Status :: 4 - Beta
|
10
11
|
Classifier: Programming Language :: Python
|
11
12
|
Classifier: Programming Language :: Python :: 3.10
|
@@ -1,4 +1,4 @@
|
|
1
|
-
dynatrace_extension/__about__.py,sha256
|
1
|
+
dynatrace_extension/__about__.py,sha256=-jEpNU1eRpe8GBW_KoSO-6Flc820P-KhyssXl0K9kO4,110
|
2
2
|
dynatrace_extension/__init__.py,sha256=BvQuknmA7ti3WJi3zEXZfY7aAxJrie37VNitWICsUvI,752
|
3
3
|
dynatrace_extension/cli/__init__.py,sha256=HCboY_eJPoqjFmoPDsBL8Jk6aNvank8K7JpkVrgwzUM,123
|
4
4
|
dynatrace_extension/cli/main.py,sha256=Z8gFcp0vIMBkzV6jUd5mwvP1U0JcLqAHoMLJw_6puz4,18260
|
@@ -16,10 +16,10 @@ dynatrace_extension/cli/create/extension_template/extension_name/__init__.py.tem
|
|
16
16
|
dynatrace_extension/cli/create/extension_template/extension_name/__main__.py.template,sha256=NYuZ6BWZ6HOs4TCuboh6S0nuYp3F8MXW2lmjSpdREEA,1205
|
17
17
|
dynatrace_extension/sdk/__init__.py,sha256=RsqQ1heGyCmSK3fhuEKAcxQIRCg4gEK0-eSkIehL5Nc,86
|
18
18
|
dynatrace_extension/sdk/activation.py,sha256=goTbT1tD2kn8xfyXFdTy_cTZNcFPJpgbvQM8HOzKECA,1480
|
19
|
-
dynatrace_extension/sdk/callback.py,sha256=
|
20
|
-
dynatrace_extension/sdk/communication.py,sha256=
|
19
|
+
dynatrace_extension/sdk/callback.py,sha256=eMpC0F3fCI82mWHIFgmy9QmKl7Kq_9dSaanHdV6o7hA,6511
|
20
|
+
dynatrace_extension/sdk/communication.py,sha256=QkJgEBblOen-jmvsb3ZfYZYglYUc7jHbkEgPtRj9l6w,19123
|
21
21
|
dynatrace_extension/sdk/event.py,sha256=J261imbFKpxfuAQ6Nfu3RRcsIQKKivy6fme1nww2g-8,388
|
22
|
-
dynatrace_extension/sdk/extension.py,sha256=
|
22
|
+
dynatrace_extension/sdk/extension.py,sha256=RnF7Czlmg6QrQLLlP90dM0tAIxdX3LrqaUi8M1p1Guo,43251
|
23
23
|
dynatrace_extension/sdk/helper.py,sha256=ZNrO9ao2hE3KQ934vAYD74k0fCr6QTG-_bAvbk9-hi8,6562
|
24
24
|
dynatrace_extension/sdk/metric.py,sha256=7VClzJCFJNDCxA-d69uTu1pdPtDZBTwq7fbafs_L6nQ,3690
|
25
25
|
dynatrace_extension/sdk/runtime.py,sha256=jyYsM1x-gMnW68eWq8IoZZZBarHgIcr_nVeGDDgpRDk,2802
|
@@ -28,8 +28,8 @@ dynatrace_extension/sdk/vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
|
|
28
28
|
dynatrace_extension/sdk/vendor/mureq/LICENSE,sha256=8AVcgZgiT_mvK1fOofXtRRr2f1dRXS_K21NuxQgP4VM,671
|
29
29
|
dynatrace_extension/sdk/vendor/mureq/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
30
30
|
dynatrace_extension/sdk/vendor/mureq/mureq.py,sha256=znF4mvzk5L03CLNozRz8UpK-fMijmSkObDFwlbhwLUg,14656
|
31
|
-
dt_extensions_sdk-1.3.
|
32
|
-
dt_extensions_sdk-1.3.
|
33
|
-
dt_extensions_sdk-1.3.
|
34
|
-
dt_extensions_sdk-1.3.
|
35
|
-
dt_extensions_sdk-1.3.
|
31
|
+
dt_extensions_sdk-1.3.1.dist-info/METADATA,sha256=LwKOdwizaSteiT3s-yPkAXYRyqkiqQC11TaPXiGlJ-Q,2685
|
32
|
+
dt_extensions_sdk-1.3.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
33
|
+
dt_extensions_sdk-1.3.1.dist-info/entry_points.txt,sha256=pweyOCgENGHjOlT6_kXYaBPOrE3p18K0UettqnNlnoE,55
|
34
|
+
dt_extensions_sdk-1.3.1.dist-info/licenses/LICENSE.txt,sha256=3Zihv0lOVYHNfDkJC-tUAU6euP9r2NexsDW4w-zqgVk,1078
|
35
|
+
dt_extensions_sdk-1.3.1.dist-info/RECORD,,
|
dynatrace_extension/__about__.py
CHANGED
@@ -9,7 +9,7 @@ from timeit import default_timer as timer
|
|
9
9
|
from typing import Callable, Dict, Optional, Tuple
|
10
10
|
|
11
11
|
from .activation import ActivationType
|
12
|
-
from .communication import Status, StatusValue
|
12
|
+
from .communication import MultiStatus, Status, StatusValue
|
13
13
|
|
14
14
|
|
15
15
|
class WrappedCallback:
|
@@ -60,8 +60,13 @@ class WrappedCallback:
|
|
60
60
|
start_time = timer()
|
61
61
|
failed = False
|
62
62
|
try:
|
63
|
-
self.callback(*self.callback_args, **self.callback_kwargs)
|
64
|
-
|
63
|
+
ret = self.callback(*self.callback_args, **self.callback_kwargs)
|
64
|
+
if isinstance(ret, Status):
|
65
|
+
self.status = ret
|
66
|
+
elif isinstance(ret, MultiStatus):
|
67
|
+
self.status = ret.build()
|
68
|
+
else:
|
69
|
+
self.status = Status(StatusValue.OK)
|
65
70
|
except Exception as e:
|
66
71
|
failed = True
|
67
72
|
self.logger.exception(f"Error running callback {self}: {e!r}")
|
@@ -59,6 +59,29 @@ class Status:
|
|
59
59
|
return self.status not in (StatusValue.OK, StatusValue.EMPTY)
|
60
60
|
|
61
61
|
|
62
|
+
class MultiStatus:
|
63
|
+
|
64
|
+
def __init__(self):
|
65
|
+
self.statuses = []
|
66
|
+
|
67
|
+
def add_status(self, status: StatusValue, message):
|
68
|
+
self.statuses.append(Status(status, message))
|
69
|
+
|
70
|
+
def build(self) -> Status:
|
71
|
+
ret = Status(StatusValue.OK)
|
72
|
+
if len(self.statuses) == 0:
|
73
|
+
return ret
|
74
|
+
|
75
|
+
messages = []
|
76
|
+
for stored_status in self.statuses:
|
77
|
+
print(stored_status) # noqa: T201
|
78
|
+
if stored_status.is_error():
|
79
|
+
ret.status = stored_status.status
|
80
|
+
messages.append(stored_status.message)
|
81
|
+
ret.message = "\n".join(messages)
|
82
|
+
return ret
|
83
|
+
|
84
|
+
|
62
85
|
class CommunicationClient(ABC):
|
63
86
|
"""
|
64
87
|
Abstract class for extension communication
|
@@ -32,6 +32,7 @@ TIME_DIFF_INTERVAL = timedelta(seconds=60)
|
|
32
32
|
|
33
33
|
CALLBACKS_THREAD_POOL_SIZE = 100
|
34
34
|
INTERNAL_THREAD_POOL_SIZE = 20
|
35
|
+
HEARTBEAT_THREAD_POOL_SIZE = 10
|
35
36
|
|
36
37
|
RFC_3339_FORMAT = "%Y-%m-%dT%H:%M:%SZ"
|
37
38
|
DATASOURCE_TYPE = "python"
|
@@ -220,6 +221,7 @@ class Extension:
|
|
220
221
|
# Executors for the callbacks and internal methods
|
221
222
|
self._callbacks_executor = ThreadPoolExecutor(max_workers=CALLBACKS_THREAD_POOL_SIZE)
|
222
223
|
self._internal_executor = ThreadPoolExecutor(max_workers=INTERNAL_THREAD_POOL_SIZE)
|
224
|
+
self._heartbeat_executor = ThreadPoolExecutor(max_workers=HEARTBEAT_THREAD_POOL_SIZE)
|
223
225
|
|
224
226
|
# Extension metrics
|
225
227
|
self._metrics_lock = RLock()
|
@@ -827,7 +829,7 @@ class Extension:
|
|
827
829
|
self._scheduler.enterabs(next_timestamp, 1, self._timediff_iteration)
|
828
830
|
|
829
831
|
def _heartbeat_iteration(self):
|
830
|
-
self.
|
832
|
+
self._heartbeat_executor.submit(self._heartbeat)
|
831
833
|
next_timestamp = self._get_and_set_next_internal_callback_timestamp("heartbeat", HEARTBEAT_INTERVAL)
|
832
834
|
self._scheduler.enterabs(next_timestamp, 2, self._heartbeat_iteration)
|
833
835
|
|
@@ -976,7 +978,9 @@ class Extension:
|
|
976
978
|
if callback.status.is_error():
|
977
979
|
overall_status.status = callback.status.status
|
978
980
|
messages.append(f"{callback}: {callback.status.message}")
|
979
|
-
|
981
|
+
continue
|
982
|
+
if callback.status.message is not None and callback.status.message != "":
|
983
|
+
messages.append(f"{callback}: {callback.status.message}")
|
980
984
|
overall_status.message = "\n".join(messages)
|
981
985
|
return overall_status
|
982
986
|
|
File without changes
|
{dt_extensions_sdk-1.3.0.dist-info → dt_extensions_sdk-1.3.1.dist-info}/licenses/LICENSE.txt
RENAMED
File without changes
|