insightconnect-plugin-runtime 6.3.7__tar.gz → 6.3.9__tar.gz

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.
Files changed (92) hide show
  1. {insightconnect_plugin_runtime-6.3.7/insightconnect_plugin_runtime.egg-info → insightconnect_plugin_runtime-6.3.9}/PKG-INFO +11 -9
  2. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/README.md +5 -3
  3. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/exceptions.py +6 -14
  4. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/plugin.py +21 -3
  5. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/telemetry.py +12 -6
  6. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9/insightconnect_plugin_runtime.egg-info}/PKG-INFO +11 -9
  7. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime.egg-info/requires.txt +5 -5
  8. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/setup.py +6 -6
  9. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_metrics.py +2 -2
  10. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/MANIFEST.in +0 -0
  11. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect-plugin-swagger.json +0 -0
  12. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/__init__.py +0 -0
  13. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/action.py +0 -0
  14. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/api/__init__.py +0 -0
  15. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/api/endpoints.py +0 -0
  16. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/api/schemas.py +0 -0
  17. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/cli.py +0 -0
  18. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/clients/__init__.py +0 -0
  19. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/clients/aws_client.py +0 -0
  20. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/clients/oauth.py +0 -0
  21. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/connection.py +0 -0
  22. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/data/input_message_schema.json +0 -0
  23. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/data/output_message_schema.json +0 -0
  24. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/dispatcher.py +0 -0
  25. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/helper.py +0 -0
  26. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/metrics.py +0 -0
  27. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/schema.py +0 -0
  28. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/server.py +0 -0
  29. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/step.py +0 -0
  30. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/task.py +0 -0
  31. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/trigger.py +0 -0
  32. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/util.py +0 -0
  33. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime/variables.py +0 -0
  34. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime.egg-info/SOURCES.txt +0 -0
  35. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime.egg-info/dependency_links.txt +0 -0
  36. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/insightconnect_plugin_runtime.egg-info/top_level.txt +0 -0
  37. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/setup.cfg +0 -0
  38. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/__init__.py +0 -0
  39. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/__init__.py +0 -0
  40. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/__init__.py +0 -0
  41. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/__init__.py +0 -0
  42. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/__init__.py +0 -0
  43. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/__init__.py +0 -0
  44. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/hello/__init__.py +0 -0
  45. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/hello/action.py +0 -0
  46. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/hello/schema.py +0 -0
  47. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/return_bad_json/__init__.py +0 -0
  48. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/return_bad_json/action.py +0 -0
  49. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/return_bad_json/schema.py +0 -0
  50. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/throw_exception/__init__.py +0 -0
  51. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/throw_exception/action.py +0 -0
  52. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/throw_exception/schema.py +0 -0
  53. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/connection/__init__.py +0 -0
  54. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/connection/connection.py +0 -0
  55. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/connection/schema.py +0 -0
  56. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/tasks/__init__.py +0 -0
  57. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/tasks/monitor_events/__init__.py +0 -0
  58. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/tasks/monitor_events/schema.py +0 -0
  59. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/tasks/monitor_events/task.py +0 -0
  60. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/__init__.py +0 -0
  61. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/hello_trigger/__init__.py +0 -0
  62. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/hello_trigger/schema.py +0 -0
  63. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/hello_trigger/trigger.py +0 -0
  64. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/return_bad_json_trigger/__init__.py +0 -0
  65. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/return_bad_json_trigger/schema.py +0 -0
  66. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/return_bad_json_trigger/trigger.py +0 -0
  67. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/throw_exception_trigger/__init__.py +0 -0
  68. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/throw_exception_trigger/schema.py +0 -0
  69. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/throw_exception_trigger/trigger.py +0 -0
  70. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/komand_hello_world/util/__init__.py +0 -0
  71. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/hello_world/setup.py +0 -0
  72. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/tests/__init__.py +0 -0
  73. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/tests/conftest.py +0 -0
  74. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/tests/test_cli.py +0 -0
  75. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/tests/test_hello_world.py +0 -0
  76. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/plugin/hello_world/tests/test_server.py +0 -0
  77. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/__init__.py +0 -0
  78. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_action.py +0 -0
  79. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_api.py +0 -0
  80. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_aws_action.py +0 -0
  81. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_custom_encoder.py +0 -0
  82. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_endpoints.py +0 -0
  83. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_exceptions.py +0 -0
  84. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_helpers.py +0 -0
  85. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_oauth.py +0 -0
  86. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_plugin.py +0 -0
  87. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_schema.py +0 -0
  88. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_server_cloud_plugins.py +0 -0
  89. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_server_spec.py +0 -0
  90. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_trigger.py +0 -0
  91. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/test_variables.py +0 -0
  92. {insightconnect_plugin_runtime-6.3.7 → insightconnect_plugin_runtime-6.3.9}/tests/unit/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: insightconnect-plugin-runtime
3
- Version: 6.3.7
3
+ Version: 6.3.9
4
4
  Summary: InsightConnect Plugin Runtime
5
5
  Home-page: https://github.com/rapid7/komand-plugin-sdk-python
6
6
  Author: Rapid7 Integrations Alliance
@@ -15,7 +15,7 @@ Description-Content-Type: text/markdown
15
15
  Requires-Dist: requests==2.32.4
16
16
  Requires-Dist: python_jsonschema_objects==0.5.2
17
17
  Requires-Dist: jsonschema==4.22.0
18
- Requires-Dist: certifi==2025.4.26
18
+ Requires-Dist: certifi==2025.8.3
19
19
  Requires-Dist: Flask==3.1.1
20
20
  Requires-Dist: gunicorn==23.0.0
21
21
  Requires-Dist: greenlet==3.2.3
@@ -28,10 +28,10 @@ Requires-Dist: structlog==25.4.0
28
28
  Requires-Dist: python-json-logger==2.0.7
29
29
  Requires-Dist: Jinja2==3.1.6
30
30
  Requires-Dist: python-dateutil==2.9.0.post0
31
- Requires-Dist: opentelemetry-sdk==1.34.0
32
- Requires-Dist: opentelemetry-instrumentation-flask==0.55b0
33
- Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.34.0
34
- Requires-Dist: opentelemetry-instrumentation-requests==0.55b0
31
+ Requires-Dist: opentelemetry-sdk==1.36.0
32
+ Requires-Dist: opentelemetry-instrumentation-flask==0.57b0
33
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.36.0
34
+ Requires-Dist: opentelemetry-instrumentation-requests==0.57b0
35
35
  Requires-Dist: urllib3==2.5.0
36
36
  Dynamic: author
37
37
  Dynamic: author-email
@@ -63,10 +63,10 @@ to get started.
63
63
 
64
64
  ## Development of the InsightConnect Plugin Runtime
65
65
 
66
- The Python Runtime codebase is built to support Python 3.11.11 as of version 6.2.3. The following dependencies will need
66
+ The Python Runtime codebase is built to support Python 3.11.13 as of version 6.2.3. The following dependencies will need
67
67
  to be installed when developing or testing the Plugin Runtime:
68
68
 
69
- - Python 3.11.11
69
+ - Python 3.11.13
70
70
  - Docker
71
71
  - make
72
72
  - tox
@@ -199,7 +199,7 @@ Running a specific test file:
199
199
 
200
200
  | | Plugin | Slim Plugin |
201
201
  |:------------------|:-------:|:-----------:|
202
- | Python Version | 3.11.11 | 3.11.11 |
202
+ | Python Version | 3.11.13 | 3.11.13 |
203
203
  | OS | Alpine | Bullseye |
204
204
  | Package installer | apk | apt |
205
205
  | Shell | /bin/sh | /bin/bash |
@@ -226,6 +226,8 @@ contributed. Black is installed as a test dependency and the hook can be initial
226
226
  after cloning this repository.
227
227
 
228
228
  ## Changelog
229
+ * 6.3.9 - Fixed `monitor_task_delay` decorator handling of millisecond epoch timestamps | Allow `test_task` connection method to accept task name parameter | Updated base images to Python 3.11.13
230
+ * 6.3.8 - Update exception string representation methods to remove newline characters
229
231
  * 6.3.7 - Addressed vulnerability in 'urllib3' (removed from `requirements.txt` as it's a dependency of `botocore`)
230
232
  * 6.3.6 - Added required dependency to plugin runtime
231
233
  * 6.3.5 - Added `monitor_task_delay` decorator to detect processing delays
@@ -19,10 +19,10 @@ to get started.
19
19
 
20
20
  ## Development of the InsightConnect Plugin Runtime
21
21
 
22
- The Python Runtime codebase is built to support Python 3.11.11 as of version 6.2.3. The following dependencies will need
22
+ The Python Runtime codebase is built to support Python 3.11.13 as of version 6.2.3. The following dependencies will need
23
23
  to be installed when developing or testing the Plugin Runtime:
24
24
 
25
- - Python 3.11.11
25
+ - Python 3.11.13
26
26
  - Docker
27
27
  - make
28
28
  - tox
@@ -155,7 +155,7 @@ Running a specific test file:
155
155
 
156
156
  | | Plugin | Slim Plugin |
157
157
  |:------------------|:-------:|:-----------:|
158
- | Python Version | 3.11.11 | 3.11.11 |
158
+ | Python Version | 3.11.13 | 3.11.13 |
159
159
  | OS | Alpine | Bullseye |
160
160
  | Package installer | apk | apt |
161
161
  | Shell | /bin/sh | /bin/bash |
@@ -182,6 +182,8 @@ contributed. Black is installed as a test dependency and the hook can be initial
182
182
  after cloning this repository.
183
183
 
184
184
  ## Changelog
185
+ * 6.3.9 - Fixed `monitor_task_delay` decorator handling of millisecond epoch timestamps | Allow `test_task` connection method to accept task name parameter | Updated base images to Python 3.11.13
186
+ * 6.3.8 - Update exception string representation methods to remove newline characters
185
187
  * 6.3.7 - Addressed vulnerability in 'urllib3' (removed from `requirements.txt` as it's a dependency of `botocore`)
186
188
  * 6.3.6 - Added required dependency to plugin runtime
187
189
  * 6.3.5 - Added `monitor_task_delay` decorator to detect processing delays
@@ -187,26 +187,18 @@ class ConnectionTestException(Exception):
187
187
  self.data = str(data) if data else ""
188
188
 
189
189
  def __str__(self):
190
+ str_rep = f"Connection test failed! {self.cause} {self.assistance}"
190
191
  if self.data:
191
- return "Connection test failed!\n\n{cause} {assistance} Response was: {data}".format(
192
- cause=self.cause, assistance=self.assistance, data=self.data
193
- )
194
- else:
195
- return "Connection test failed!\n\n{cause} {assistance}".format(
196
- cause=self.cause, assistance=self.assistance
197
- )
192
+ str_rep += f" Response was: {self.data}"
193
+ return str_rep
198
194
 
199
195
 
200
196
  class PluginException(ConnectionTestException):
201
197
  def __str__(self):
198
+ str_repr = f"An error occurred during plugin execution! {self.cause} {self.assistance}"
202
199
  if self.data:
203
- return "An error occurred during plugin execution!\n\n{cause} {assistance} Response was: {data}".format(
204
- cause=self.cause, assistance=self.assistance, data=self.data
205
- )
206
- else:
207
- return "An error occurred during plugin execution!\n\n{cause} {assistance}".format(
208
- cause=self.cause, assistance=self.assistance
209
- )
200
+ str_repr += f" Response was {self.data}"
201
+ return str_repr
210
202
 
211
203
 
212
204
  class APIException(PluginException):
@@ -564,8 +564,17 @@ class Plugin(object):
564
564
  # connection.test is called, as there is no message returned along side it,
565
565
  # and the code above then sees this and reads the "message" from the io buffer as normal
566
566
  if hasattr(connection, "test_task") and connection_test_type == "test_task":
567
+ # Get the test_task function from the connection
567
568
  func = connection.test_task
568
- output, log = func()
569
+
570
+ # Inspect the function to see if it requires args
571
+ arguments = inspect.signature(func).parameters
572
+
573
+ # If the function has parameters, we pass the task name
574
+ if len(arguments) > 0 and "task" in message_body:
575
+ output, log = func(message_body["task"])
576
+ else:
577
+ output, log = func()
569
578
  return output, log
570
579
  elif hasattr(connection, "test"):
571
580
  func = connection.test
@@ -650,8 +659,17 @@ class Plugin(object):
650
659
  # Check if connection test func available. If so - use it (preferred). Else fallback to action/trigger test
651
660
  if hasattr(step.connection, "test"):
652
661
  if hasattr(step.connection, "test_task") and connection_test_type == "test_task":
653
- func = step.connection.test_task
654
- output, log = func()
662
+ # Get the test_task function from the connection
663
+ func = connection.test_task
664
+
665
+ # Inspect the function to see if it requires args
666
+ arguments = inspect.signature(func).parameters
667
+
668
+ # If the function has parameters, we pass the task name
669
+ if len(arguments) > 0 and "task" in message_body:
670
+ output, log = func(message_body["task"])
671
+ else:
672
+ output, log = func()
655
673
  return output, log
656
674
  else:
657
675
  func = step.connection.test
@@ -154,10 +154,16 @@ def monitor_task_delay(
154
154
 
155
155
  # Parse and normalize the state time value
156
156
  try:
157
- # First, try to parse the epoch timestamp
158
- normalized_state_time = datetime.fromtimestamp(
159
- float(current_state_time)
160
- )
157
+ # First, try to parse the epoch timestamp in seconds
158
+ try:
159
+ normalized_state_time = datetime.fromtimestamp(
160
+ float(current_state_time)
161
+ )
162
+ except ValueError:
163
+ # If it fails, assume it's in milliseconds and convert accordingly
164
+ normalized_state_time = datetime.fromtimestamp(
165
+ float(current_state_time) / 1000.0
166
+ )
161
167
  except (ValueError, TypeError):
162
168
  # If parsing fails, parse as a string
163
169
  normalized_state_time = parse(str(current_state_time))
@@ -181,8 +187,8 @@ def monitor_task_delay(
181
187
  )
182
188
  break
183
189
  except Exception as error:
184
- self.logger.info(
185
- f"An error occurred while checking task delay. Error: {error}"
190
+ self.logger.error(
191
+ f"An exception occurred while checking task delay. The exception was: {error}"
186
192
  )
187
193
 
188
194
  # Return task output
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: insightconnect-plugin-runtime
3
- Version: 6.3.7
3
+ Version: 6.3.9
4
4
  Summary: InsightConnect Plugin Runtime
5
5
  Home-page: https://github.com/rapid7/komand-plugin-sdk-python
6
6
  Author: Rapid7 Integrations Alliance
@@ -15,7 +15,7 @@ Description-Content-Type: text/markdown
15
15
  Requires-Dist: requests==2.32.4
16
16
  Requires-Dist: python_jsonschema_objects==0.5.2
17
17
  Requires-Dist: jsonschema==4.22.0
18
- Requires-Dist: certifi==2025.4.26
18
+ Requires-Dist: certifi==2025.8.3
19
19
  Requires-Dist: Flask==3.1.1
20
20
  Requires-Dist: gunicorn==23.0.0
21
21
  Requires-Dist: greenlet==3.2.3
@@ -28,10 +28,10 @@ Requires-Dist: structlog==25.4.0
28
28
  Requires-Dist: python-json-logger==2.0.7
29
29
  Requires-Dist: Jinja2==3.1.6
30
30
  Requires-Dist: python-dateutil==2.9.0.post0
31
- Requires-Dist: opentelemetry-sdk==1.34.0
32
- Requires-Dist: opentelemetry-instrumentation-flask==0.55b0
33
- Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.34.0
34
- Requires-Dist: opentelemetry-instrumentation-requests==0.55b0
31
+ Requires-Dist: opentelemetry-sdk==1.36.0
32
+ Requires-Dist: opentelemetry-instrumentation-flask==0.57b0
33
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.36.0
34
+ Requires-Dist: opentelemetry-instrumentation-requests==0.57b0
35
35
  Requires-Dist: urllib3==2.5.0
36
36
  Dynamic: author
37
37
  Dynamic: author-email
@@ -63,10 +63,10 @@ to get started.
63
63
 
64
64
  ## Development of the InsightConnect Plugin Runtime
65
65
 
66
- The Python Runtime codebase is built to support Python 3.11.11 as of version 6.2.3. The following dependencies will need
66
+ The Python Runtime codebase is built to support Python 3.11.13 as of version 6.2.3. The following dependencies will need
67
67
  to be installed when developing or testing the Plugin Runtime:
68
68
 
69
- - Python 3.11.11
69
+ - Python 3.11.13
70
70
  - Docker
71
71
  - make
72
72
  - tox
@@ -199,7 +199,7 @@ Running a specific test file:
199
199
 
200
200
  | | Plugin | Slim Plugin |
201
201
  |:------------------|:-------:|:-----------:|
202
- | Python Version | 3.11.11 | 3.11.11 |
202
+ | Python Version | 3.11.13 | 3.11.13 |
203
203
  | OS | Alpine | Bullseye |
204
204
  | Package installer | apk | apt |
205
205
  | Shell | /bin/sh | /bin/bash |
@@ -226,6 +226,8 @@ contributed. Black is installed as a test dependency and the hook can be initial
226
226
  after cloning this repository.
227
227
 
228
228
  ## Changelog
229
+ * 6.3.9 - Fixed `monitor_task_delay` decorator handling of millisecond epoch timestamps | Allow `test_task` connection method to accept task name parameter | Updated base images to Python 3.11.13
230
+ * 6.3.8 - Update exception string representation methods to remove newline characters
229
231
  * 6.3.7 - Addressed vulnerability in 'urllib3' (removed from `requirements.txt` as it's a dependency of `botocore`)
230
232
  * 6.3.6 - Added required dependency to plugin runtime
231
233
  * 6.3.5 - Added `monitor_task_delay` decorator to detect processing delays
@@ -1,7 +1,7 @@
1
1
  requests==2.32.4
2
2
  python_jsonschema_objects==0.5.2
3
3
  jsonschema==4.22.0
4
- certifi==2025.4.26
4
+ certifi==2025.8.3
5
5
  Flask==3.1.1
6
6
  gunicorn==23.0.0
7
7
  greenlet==3.2.3
@@ -14,8 +14,8 @@ structlog==25.4.0
14
14
  python-json-logger==2.0.7
15
15
  Jinja2==3.1.6
16
16
  python-dateutil==2.9.0.post0
17
- opentelemetry-sdk==1.34.0
18
- opentelemetry-instrumentation-flask==0.55b0
19
- opentelemetry-exporter-otlp-proto-http==1.34.0
20
- opentelemetry-instrumentation-requests==0.55b0
17
+ opentelemetry-sdk==1.36.0
18
+ opentelemetry-instrumentation-flask==0.57b0
19
+ opentelemetry-exporter-otlp-proto-http==1.36.0
20
+ opentelemetry-instrumentation-requests==0.57b0
21
21
  urllib3==2.5.0
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
5
5
 
6
6
  setup(
7
7
  name="insightconnect-plugin-runtime",
8
- version="6.3.7",
8
+ version="6.3.9",
9
9
  description="InsightConnect Plugin Runtime",
10
10
  long_description=long_description,
11
11
  long_description_content_type="text/markdown",
@@ -17,7 +17,7 @@ setup(
17
17
  "requests==2.32.4",
18
18
  "python_jsonschema_objects==0.5.2",
19
19
  "jsonschema==4.22.0",
20
- "certifi==2025.4.26",
20
+ "certifi==2025.8.3",
21
21
  "Flask==3.1.1",
22
22
  "gunicorn==23.0.0",
23
23
  "greenlet==3.2.3",
@@ -30,10 +30,10 @@ setup(
30
30
  "python-json-logger==2.0.7",
31
31
  "Jinja2==3.1.6",
32
32
  "python-dateutil==2.9.0.post0",
33
- "opentelemetry-sdk==1.34.0",
34
- "opentelemetry-instrumentation-flask==0.55b0",
35
- "opentelemetry-exporter-otlp-proto-http==1.34.0",
36
- "opentelemetry-instrumentation-requests==0.55b0",
33
+ "opentelemetry-sdk==1.36.0",
34
+ "opentelemetry-instrumentation-flask==0.57b0",
35
+ "opentelemetry-exporter-otlp-proto-http==1.36.0",
36
+ "opentelemetry-instrumentation-requests==0.57b0",
37
37
  "urllib3==2.5.0"
38
38
  ],
39
39
  tests_require=[
@@ -22,7 +22,7 @@ class BuildErrorBlobTest(unittest.TestCase):
22
22
  expected = {
23
23
  "cause": "not_found",
24
24
  "known": True,
25
- "message": "An error occurred during plugin execution!\n\nInvalid or unreachable endpoint "
25
+ "message": "An error occurred during plugin execution! Invalid or unreachable endpoint "
26
26
  "provided. Verify the URLs or endpoints in your configuration are correct.",
27
27
  }
28
28
 
@@ -237,7 +237,7 @@ class BuildTest(unittest.TestCase):
237
237
  "error": {
238
238
  "cause": "not_found",
239
239
  "known": True,
240
- "message": "An error occurred during plugin execution!\n\nInvalid or "
240
+ "message": "An error occurred during plugin execution! Invalid or "
241
241
  "unreachable endpoint provided. Verify the URLs or endpoints in your configuration are correct.",
242
242
  },
243
243
  "inputs": ["type"],