dt-extensions-sdk 1.2.1__py3-none-any.whl → 1.2.3__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.1
3
+ Version: 1.2.3
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
@@ -1,4 +1,4 @@
1
- dynatrace_extension/__about__.py,sha256=gqt1Ofuerao0R0GWH5D9uKmEnGEPRonvK_bBjAJxpXA,109
1
+ dynatrace_extension/__about__.py,sha256=TLyHW1TFN8BFLjdtrH0-fQP5cpool1Nmic9L4C1gsy0,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
@@ -15,10 +15,10 @@ dynatrace_extension/cli/create/extension_template/extension_name/__init__.py.tem
15
15
  dynatrace_extension/cli/create/extension_template/extension_name/__main__.py.template,sha256=Mr7kfekNfEBUapJh_xbySZD8jPyYDspZx3KAfnhdCUk,1258
16
16
  dynatrace_extension/sdk/__init__.py,sha256=RsqQ1heGyCmSK3fhuEKAcxQIRCg4gEK0-eSkIehL5Nc,86
17
17
  dynatrace_extension/sdk/activation.py,sha256=goTbT1tD2kn8xfyXFdTy_cTZNcFPJpgbvQM8HOzKECA,1480
18
- dynatrace_extension/sdk/callback.py,sha256=1P9uQ388j6q6a-8VgmV5FxcOMH-Mr3zvWXk2ftVD8j4,5828
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=fe6JD7ksLmDF6NmWoo6ZG22r44-J-Ouz6U0c2KWhoCg,41369
21
+ dynatrace_extension/sdk/extension.py,sha256=48MK9E4JhAxTFOabWDJ58uZqSmGNwTC62vL1RP_q_gM,41623
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.1.dist-info/METADATA,sha256=-BewrBv21TdM9amg8705hgDl-MkebxhWqUR9Smps-sc,2793
31
- dt_extensions_sdk-1.2.1.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
32
- dt_extensions_sdk-1.2.1.dist-info/entry_points.txt,sha256=pweyOCgENGHjOlT6_kXYaBPOrE3p18K0UettqnNlnoE,55
33
- dt_extensions_sdk-1.2.1.dist-info/licenses/LICENSE.txt,sha256=3Zihv0lOVYHNfDkJC-tUAU6euP9r2NexsDW4w-zqgVk,1078
34
- dt_extensions_sdk-1.2.1.dist-info/RECORD,,
30
+ dt_extensions_sdk-1.2.3.dist-info/METADATA,sha256=Bb83R0u5D4P42VsTWCgkBw8NP1LXhVj0oCaQdQS_9RA,2793
31
+ dt_extensions_sdk-1.2.3.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
32
+ dt_extensions_sdk-1.2.3.dist-info/entry_points.txt,sha256=pweyOCgENGHjOlT6_kXYaBPOrE3p18K0UettqnNlnoE,55
33
+ dt_extensions_sdk-1.2.3.dist-info/licenses/LICENSE.txt,sha256=3Zihv0lOVYHNfDkJC-tUAU6euP9r2NexsDW4w-zqgVk,1078
34
+ dt_extensions_sdk-1.2.3.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.24.2
2
+ Generator: hatchling 1.25.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -2,4 +2,4 @@
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
4
 
5
- __version__ = "1.2.1"
5
+ __version__ = "1.2.3"
@@ -45,17 +45,18 @@ class WrappedCallback:
45
45
  self.ok_count = 0 # counter per interval = 1 min by default
46
46
  self.timeouts_count = 0 # counter per interval = 1 min by default
47
47
  self.exception_count = 0 # counter per interval = 1 min by default
48
+ self.iterations = 0 # how many times we ran the callback iterator for this callback
48
49
 
49
50
  def get_current_time_with_cluster_diff(self):
50
51
  return datetime.now() + timedelta(milliseconds=self.cluster_time_diff)
51
52
 
52
53
  def __call__(self):
53
54
  self.logger.debug(f"Running scheduled callback {self}")
54
- self.start_timestamp = self.get_current_time_with_cluster_diff()
55
+ if self.executions_total == 0:
56
+ self.start_timestamp = self.get_current_time_with_cluster_diff()
55
57
  self.running = True
56
58
  self.executions_total += 1
57
59
  self.executions_per_interval += 1
58
- self.next_run = datetime.now() + self.interval
59
60
  start_time = timer()
60
61
  failed = False
61
62
  try:
@@ -132,3 +133,13 @@ class WrappedCallback:
132
133
  self.duration_interval_total = 0
133
134
  self.exception_count = 0
134
135
  self.executions_per_interval = 0
136
+
137
+ def get_next_execution_timestamp(self) -> float:
138
+ """
139
+ Get the timestamp for the next execution of the callback
140
+ This is done using execution total, the interval and the start timestamp
141
+ :return: datetime
142
+ """
143
+ return (
144
+ self.start_timestamp + timedelta(seconds=self.interval.total_seconds() * (self.iterations or 1))
145
+ ).timestamp()
@@ -342,6 +342,10 @@ class Extension:
342
342
  if isinstance(interval, int):
343
343
  interval = timedelta(seconds=interval)
344
344
 
345
+ if interval.total_seconds() < 1:
346
+ msg = f"Interval must be at least 1 second, got {interval.total_seconds()} seconds"
347
+ raise ValueError(msg)
348
+
345
349
  callback = WrappedCallback(interval, callback, api_logger, args, activation_type=activation_type)
346
350
  if self._is_fastcheck:
347
351
  self._scheduled_callbacks_before_run.append(callback)
@@ -785,7 +789,9 @@ class Extension:
785
789
 
786
790
  def _callback_iteration(self, callback: WrappedCallback):
787
791
  self._callbacks_executor.submit(self._run_callback, callback)
788
- self._scheduler.enter(callback.interval.total_seconds(), 1, self._callback_iteration, (callback,))
792
+ callback.iterations += 1
793
+ next_timestamp = callback.get_next_execution_timestamp()
794
+ self._scheduler.enterabs(next_timestamp, 1, self._callback_iteration, (callback,))
789
795
 
790
796
  def _start_extension_loop(self):
791
797
  api_logger.debug(f"Starting main loop for monitoring configuration: '{self.monitoring_config_name}'")