dt-extensions-sdk 1.2.6__py3-none-any.whl → 1.2.9__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dt-extensions-sdk
3
- Version: 1.2.6
3
+ Version: 1.2.9
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
@@ -40,7 +40,7 @@ The documentation can be found on [github pages](https://dynatrace-extensions.gi
40
40
 
41
41
  ### Requirements:
42
42
 
43
- * Python 3.10+
43
+ * Python 3.10
44
44
 
45
45
  ### Install the SDK
46
46
 
@@ -116,4 +116,4 @@ hatch run docs:build
116
116
  ## Publishing to PyPI
117
117
 
118
118
  It's automatically published to PyPi on each pushed tag, and uses [gh-action-pypi-publish](https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/)
119
- Version will be determined using __about__.py
119
+ Version will be determined using __about__.py
@@ -1,4 +1,4 @@
1
- dynatrace_extension/__about__.py,sha256=ZJlm4YkWp1VVzqB1nyyEqNzOsfmKJ3Kcg2kkO61-SMc,109
1
+ dynatrace_extension/__about__.py,sha256=cMazOtXSab_DsBj2r42iZHp_YVxg7YRhZ4W6OZ43Ruc,109
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=ZOqxZsaMJRZsqR3Og2a9h2PDlkyJE8tAny-p7Mb7dmA,17254
@@ -18,7 +18,7 @@ dynatrace_extension/sdk/activation.py,sha256=goTbT1tD2kn8xfyXFdTy_cTZNcFPJpgbvQM
18
18
  dynatrace_extension/sdk/callback.py,sha256=FJSkaBF895NZquUtpSj1I2vel2Rx-y-2da8mKX_pk4I,6307
19
19
  dynatrace_extension/sdk/communication.py,sha256=gD4GOHOzWdRL_KrUWtC2s8-Jp8Csn5gjZl4mHO5Lk_4,17739
20
20
  dynatrace_extension/sdk/event.py,sha256=J261imbFKpxfuAQ6Nfu3RRcsIQKKivy6fme1nww2g-8,388
21
- dynatrace_extension/sdk/extension.py,sha256=R7Vg0q68-uvXtkn2amuAHPUCXMKzfwNkeWm4LEgspIc,41652
21
+ dynatrace_extension/sdk/extension.py,sha256=WvPGKt7td8np65NHIEnJ53mylGff1lhQtJM8xvgWCXA,42758
22
22
  dynatrace_extension/sdk/helper.py,sha256=ZNrO9ao2hE3KQ934vAYD74k0fCr6QTG-_bAvbk9-hi8,6562
23
23
  dynatrace_extension/sdk/metric.py,sha256=7VClzJCFJNDCxA-d69uTu1pdPtDZBTwq7fbafs_L6nQ,3690
24
24
  dynatrace_extension/sdk/runtime.py,sha256=jyYsM1x-gMnW68eWq8IoZZZBarHgIcr_nVeGDDgpRDk,2802
@@ -27,8 +27,8 @@ dynatrace_extension/sdk/vendor/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
27
27
  dynatrace_extension/sdk/vendor/mureq/LICENSE,sha256=8AVcgZgiT_mvK1fOofXtRRr2f1dRXS_K21NuxQgP4VM,671
28
28
  dynatrace_extension/sdk/vendor/mureq/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
29
  dynatrace_extension/sdk/vendor/mureq/mureq.py,sha256=znF4mvzk5L03CLNozRz8UpK-fMijmSkObDFwlbhwLUg,14656
30
- dt_extensions_sdk-1.2.6.dist-info/METADATA,sha256=NQuax5dT25Cu8YSStQpFLAb4OlDO9DSZY0quy-m1wKc,2685
31
- dt_extensions_sdk-1.2.6.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
32
- dt_extensions_sdk-1.2.6.dist-info/entry_points.txt,sha256=pweyOCgENGHjOlT6_kXYaBPOrE3p18K0UettqnNlnoE,55
33
- dt_extensions_sdk-1.2.6.dist-info/licenses/LICENSE.txt,sha256=3Zihv0lOVYHNfDkJC-tUAU6euP9r2NexsDW4w-zqgVk,1078
34
- dt_extensions_sdk-1.2.6.dist-info/RECORD,,
30
+ dt_extensions_sdk-1.2.9.dist-info/METADATA,sha256=ZciL7FZ4sxdWUQ-uLhoeODZOxuRfv9zR8-2mXgJsZ-0,2685
31
+ dt_extensions_sdk-1.2.9.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
32
+ dt_extensions_sdk-1.2.9.dist-info/entry_points.txt,sha256=pweyOCgENGHjOlT6_kXYaBPOrE3p18K0UettqnNlnoE,55
33
+ dt_extensions_sdk-1.2.9.dist-info/licenses/LICENSE.txt,sha256=3Zihv0lOVYHNfDkJC-tUAU6euP9r2NexsDW4w-zqgVk,1078
34
+ dt_extensions_sdk-1.2.9.dist-info/RECORD,,
@@ -2,4 +2,4 @@
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
4
 
5
- __version__ = "1.2.6"
5
+ __version__ = "1.2.9"
@@ -151,7 +151,7 @@ class Extension:
151
151
  _instance: ClassVar = None
152
152
  schedule_decorators: ClassVar = []
153
153
 
154
- def __new__(cls):
154
+ def __new__(cls, *args, **kwargs): # noqa: ARG003
155
155
  if Extension._instance is None:
156
156
  Extension._instance = super(__class__, cls).__new__(cls)
157
157
  return Extension._instance
@@ -209,6 +209,14 @@ class Extension:
209
209
 
210
210
  self._scheduler = sched.scheduler(time.time, time.sleep)
211
211
 
212
+ # Timestamps for scheduling of internal callbacks
213
+ self._next_internal_callbacks_timestamps: Dict[str, datetime] = {
214
+ "timediff": datetime.now() + TIME_DIFF_INTERVAL,
215
+ "heartbeat": datetime.now() + HEARTBEAT_INTERVAL,
216
+ "metrics": datetime.now() + METRIC_SENDING_INTERVAL,
217
+ "sfm_metrics": datetime.now() + SFM_METRIC_SENDING_INTERVAL,
218
+ }
219
+
212
220
  # Executors for the callbacks and internal methods
213
221
  self._callbacks_executor = ThreadPoolExecutor(max_workers=CALLBACKS_THREAD_POOL_SIZE)
214
222
  self._internal_executor = ThreadPoolExecutor(max_workers=INTERNAL_THREAD_POOL_SIZE)
@@ -813,19 +821,23 @@ class Extension:
813
821
 
814
822
  def _timediff_iteration(self):
815
823
  self._internal_executor.submit(self._update_cluster_time_diff)
816
- self._scheduler.enter(TIME_DIFF_INTERVAL.total_seconds(), 1, self._timediff_iteration)
824
+ next_timestamp = self._get_and_set_next_internal_callback_timestamp("timediff", TIME_DIFF_INTERVAL)
825
+ self._scheduler.enterabs(next_timestamp, 1, self._timediff_iteration)
817
826
 
818
827
  def _heartbeat_iteration(self):
819
828
  self._internal_executor.submit(self._heartbeat)
820
- self._scheduler.enter(HEARTBEAT_INTERVAL.total_seconds(), 1, self._heartbeat_iteration)
829
+ next_timestamp = self._get_and_set_next_internal_callback_timestamp("heartbeat", HEARTBEAT_INTERVAL)
830
+ self._scheduler.enterabs(next_timestamp, 2, self._heartbeat_iteration)
821
831
 
822
832
  def _metrics_iteration(self):
823
833
  self._internal_executor.submit(self._send_metrics)
824
- self._scheduler.enter(METRIC_SENDING_INTERVAL.total_seconds(), 1, self._metrics_iteration)
834
+ next_timestamp = self._get_and_set_next_internal_callback_timestamp("metrics", METRIC_SENDING_INTERVAL)
835
+ self._scheduler.enterabs(next_timestamp, 1, self._metrics_iteration)
825
836
 
826
837
  def _sfm_metrics_iteration(self):
827
838
  self._internal_executor.submit(self._send_sfm_metrics)
828
- self._scheduler.enter(SFM_METRIC_SENDING_INTERVAL.total_seconds(), 1, self._sfm_metrics_iteration)
839
+ next_timestamp = self._get_and_set_next_internal_callback_timestamp("sfm_metrics", SFM_METRIC_SENDING_INTERVAL)
840
+ self._scheduler.enterabs(next_timestamp, 1, self._sfm_metrics_iteration)
829
841
 
830
842
  def _send_metrics(self):
831
843
  with self._metrics_lock:
@@ -1030,6 +1042,11 @@ class Extension:
1030
1042
  def _send_dt_event(self, event: dict[str, str | int | dict[str, str]]):
1031
1043
  self._client.send_dt_event(event)
1032
1044
 
1045
+ def _get_and_set_next_internal_callback_timestamp(self, callback_name: str, interval: timedelta):
1046
+ next_timestamp = self._next_internal_callbacks_timestamps[callback_name]
1047
+ self._next_internal_callbacks_timestamps[callback_name] += interval
1048
+ return next_timestamp.timestamp()
1049
+
1033
1050
  def get_version(self) -> str:
1034
1051
  """Return the extension version."""
1035
1052
  return self.activation_config.version