dt-extensions-sdk 1.7.1__tar.gz → 1.7.2__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 (89) hide show
  1. dt_extensions_sdk-1.7.2/.github/workflows/build-package.yml +40 -0
  2. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/.github/workflows/publish.yml +6 -34
  3. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/PKG-INFO +1 -1
  4. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/__about__.py +1 -1
  5. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/communication.py +1 -1
  6. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/extension.py +3 -3
  7. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/status.py +19 -15
  8. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/sdk/test_status.py +19 -18
  9. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/.github/workflows/gh-pages-docs.yml +0 -0
  10. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/.gitignore +0 -0
  11. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/LICENSE.txt +0 -0
  12. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/README.md +0 -0
  13. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/_static/dt-sdk-header.png +0 -0
  14. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/_static/dt-sdk-logo.png +0 -0
  15. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/_static/favicon.ico +0 -0
  16. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/_static/img/migrate-01-new-extension.png +0 -0
  17. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/_static/img/migrate-02-type.png +0 -0
  18. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/_static/img/migrate-03-import.png +0 -0
  19. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/_static/img/migrate-04-import-remote.png +0 -0
  20. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/_static/img/migrate-05-activation.png +0 -0
  21. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/_static/img/migrate-06-activation-config.png +0 -0
  22. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/api/events/event_severity.rst +0 -0
  23. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/api/events/event_type.rst +0 -0
  24. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/api/events/index.rst +0 -0
  25. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/api/extension.rst +0 -0
  26. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/api/metrics/index.rst +0 -0
  27. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/api/metrics/metric.rst +0 -0
  28. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/api/metrics/metric_type.rst +0 -0
  29. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/cli/assemble.rst +0 -0
  30. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/cli/build.rst +0 -0
  31. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/cli/create.rst +0 -0
  32. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/cli/gencerts.rst +0 -0
  33. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/cli/help.rst +0 -0
  34. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/cli/run.rst +0 -0
  35. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/cli/sign.rst +0 -0
  36. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/cli/upload.rst +0 -0
  37. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/cli/wheel.rst +0 -0
  38. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/conf.py +0 -0
  39. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/guides/building.rst +0 -0
  40. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/guides/extension_structure.rst +0 -0
  41. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/guides/installation.rst +0 -0
  42. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/guides/migration.rst +0 -0
  43. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/index.rst +0 -0
  44. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/docs/requirements.txt +0 -0
  45. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/__init__.py +0 -0
  46. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/__init__.py +0 -0
  47. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/create/__init__.py +0 -0
  48. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/create/create.py +0 -0
  49. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/create/extension_template/.gitignore.template +0 -0
  50. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/create/extension_template/README.md.template +0 -0
  51. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/create/extension_template/activation.json.template +0 -0
  52. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/create/extension_template/extension/activationSchema.json.template +0 -0
  53. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/create/extension_template/extension/extension.yaml.template +0 -0
  54. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/create/extension_template/extension_name/__init__.py.template +0 -0
  55. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/create/extension_template/extension_name/__main__.py.template +0 -0
  56. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/create/extension_template/ruff.toml.template +0 -0
  57. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/create/extension_template/secrets.json.template +0 -0
  58. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/create/extension_template/setup.py.template +0 -0
  59. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/main.py +0 -0
  60. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/cli/schema.py +0 -0
  61. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/__init__.py +0 -0
  62. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/activation.py +0 -0
  63. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/callback.py +0 -0
  64. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/event.py +0 -0
  65. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/helper.py +0 -0
  66. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/metric.py +0 -0
  67. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/runtime.py +0 -0
  68. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/snapshot.py +0 -0
  69. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/throttled_logger.py +0 -0
  70. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/vendor/__init__.py +0 -0
  71. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/vendor/mureq/LICENSE +0 -0
  72. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/vendor/mureq/__init__.py +0 -0
  73. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/dynatrace_extension/sdk/vendor/mureq/mureq.py +0 -0
  74. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/pyproject.toml +0 -0
  75. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/__init__.py +0 -0
  76. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/cli/__init__.py +0 -0
  77. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/cli/test_dt_sdk.py +0 -0
  78. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/cli/test_templates.py +0 -0
  79. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/cli/test_types.py +0 -0
  80. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/data/snapshot.json +0 -0
  81. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/sdk/__init__.py +0 -0
  82. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/sdk/test_activation.py +0 -0
  83. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/sdk/test_callback.py +0 -0
  84. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/sdk/test_communication.py +0 -0
  85. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/sdk/test_endpoints_sfm.py +0 -0
  86. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/sdk/test_extension.py +0 -0
  87. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/sdk/test_metric.py +0 -0
  88. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/sdk/test_runtime_properties.py +0 -0
  89. {dt_extensions_sdk-1.7.1 → dt_extensions_sdk-1.7.2}/tests/sdk/test_snapshot.py +0 -0
@@ -0,0 +1,40 @@
1
+ name: Build distribution 📦
2
+
3
+ on:
4
+ workflow_call:
5
+ workflow_dispatch:
6
+ pull_request:
7
+
8
+ jobs:
9
+ build-package:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+
14
+ - name: Set up Python
15
+ uses: actions/setup-python@v5
16
+ with:
17
+ python-version: "3.10"
18
+
19
+ - name: Install hatch
20
+ run: |
21
+ pip install hatch --user
22
+
23
+ - name: Run tests
24
+ run: |
25
+ python3 -m hatch run test
26
+
27
+ - name: Run linting
28
+ run: |
29
+ python3 -m hatch run lint:all
30
+
31
+ - name: Build a wheel and a source tarball
32
+ run: |
33
+ python3 -m hatch build
34
+
35
+ - name: Upload built distributions
36
+ uses: actions/upload-artifact@v4
37
+ with:
38
+ name: package
39
+ path: dist/*
40
+
@@ -2,49 +2,21 @@ name: Publish to PyPI
2
2
  on:
3
3
  workflow_dispatch:
4
4
 
5
- jobs:
6
- build-package:
7
- name: Build distribution 📦
5
+ jobs:
6
+ check-tag:
8
7
  runs-on: ubuntu-latest
9
-
10
8
  steps:
11
9
  - id: check_ref
12
10
  run: echo "::set-output name=match::$(echo '${{ github.ref }}' | grep -Pq '^refs/tags/v\d+\.\d+\.\d+$' && echo true || echo false)"
13
11
  shell: bash
14
-
15
12
  - name: Check if tag is valid
16
13
  if: steps.check_ref.outputs.match != 'true'
17
14
  run: exit 1
18
15
 
19
- - uses: actions/checkout@v4
20
-
21
- - name: Set up Python
22
- uses: actions/setup-python@v5
23
- with:
24
- python-version: "3.10"
25
-
26
- - name: Install hatch
27
- run: |
28
- pip install hatch --user
29
-
30
- - name: Run tests
31
- run: |
32
- python3 -m hatch run test
33
-
34
- - name: Run linting
35
- run: |
36
- python3 -m hatch run lint:all
37
-
38
- - name: Build a wheel and a source tarball
39
- run: |
40
- python3 -m hatch build
41
-
42
- - name: Store the distribution packages
43
- uses: actions/upload-artifact@v4
44
- with:
45
- name: package
46
- path: |
47
- dist/*
16
+ build-package:
17
+ needs:
18
+ - check-tag
19
+ uses: ./.github/workflows/build-package.yml
48
20
 
49
21
  github-release:
50
22
  name: Create GitHub release
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dt-extensions-sdk
3
- Version: 1.7.1
3
+ Version: 1.7.2
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
@@ -3,4 +3,4 @@
3
3
  # SPDX-License-Identifier: MIT
4
4
 
5
5
 
6
- __version__ = "1.7.1"
6
+ __version__ = "1.7.2"
@@ -343,7 +343,7 @@ class DebugClient(CommunicationClient):
343
343
  def get_feature_sets(self) -> dict[str, list[str]]:
344
344
  # This is only called from dt-sdk run, where PyYaml is installed because of dt-cli
345
345
  # Do NOT move this to the top of the file
346
- import yaml # type: ignore
346
+ import yaml # noqa: PLC0415
347
347
 
348
348
  # Grab the feature sets from the extension.yaml file
349
349
  extension_yaml = yaml.safe_load(self.extension_config)
@@ -184,7 +184,7 @@ class Extension:
184
184
 
185
185
  def __new__(cls, *args, **kwargs): # noqa: ARG004
186
186
  if Extension._instance is None:
187
- Extension._instance = super(__class__, cls).__new__(cls)
187
+ Extension._instance = super().__new__(cls)
188
188
  return Extension._instance
189
189
 
190
190
  def __init__(self, name: str = "") -> None:
@@ -412,7 +412,7 @@ class Extension:
412
412
  else:
413
413
  self._schedule_callback(callback)
414
414
 
415
- def query(self):
415
+ def query(self) -> Any:
416
416
  """Callback to be executed every minute by default.
417
417
 
418
418
  Optional method that can be implemented by subclasses.
@@ -683,7 +683,7 @@ class Extension:
683
683
  msg = f"Event type must be a DtEventType enum value, got: {value}"
684
684
  raise ValueError(msg)
685
685
  if key == "properties":
686
- for prop_key, prop_val in event[key].items():
686
+ for prop_key, prop_val in value.items():
687
687
  if not isinstance(prop_key, str) or not isinstance(prop_val, str):
688
688
  msg = f'invalid "properties" member: {prop_key}: {prop_val}, required: "str": str'
689
689
  raise ValueError(msg)
@@ -114,6 +114,9 @@ class EndpointStatus:
114
114
  def __eq__(self, other):
115
115
  return isinstance(other, EndpointStatus) and self.__dict__ == other.__dict__
116
116
 
117
+ def __hash__(self):
118
+ return hash(tuple(sorted(self.__dict__.items())))
119
+
117
120
 
118
121
  class EndpointStatuses:
119
122
  def __init__(self, total_endpoints_number=None) -> None:
@@ -227,33 +230,34 @@ class EndpointStatusesMap:
227
230
  with self._lock:
228
231
  # Summarize all statuses
229
232
  ok_count = 0
230
- nok_count = 0
231
- error_messages = []
232
- has_warning_status = False
233
+ warning_count = 0
234
+ error_count = 0
235
+ messages_to_report = []
233
236
 
234
237
  for ep_record in self._ep_records.values():
235
238
  ep_status = ep_record.ep_status
236
- if ep_status.status.is_warning():
237
- has_warning_status = True
238
239
 
239
- if ep_status.status.is_error():
240
- nok_count += 1
241
- error_messages.append(f"{ep_status.endpoint} - {ep_status.status.value} {ep_status.message}")
240
+ if ep_status.status.is_warning():
241
+ warning_count += 1
242
+ messages_to_report.append(f"{ep_status.endpoint} - {ep_status.status.value} {ep_status.message}")
243
+ elif ep_status.status.is_error():
244
+ error_count += 1
245
+ messages_to_report.append(f"{ep_status.endpoint} - {ep_status.status.value} {ep_status.message}")
242
246
  else:
243
247
  ok_count += 1
244
248
 
249
+ status_msg = f"Endpoints OK: {ok_count} WARNING: {warning_count} ERROR: {error_count}"
250
+
245
251
  # Early return if all OK
246
- if nok_count == 0:
247
- return Status(StatusValue.OK, f"Endpoints OK: {ok_count} NOK: 0")
252
+ if error_count == 0 and warning_count == 0:
253
+ return Status(StatusValue.OK, status_msg)
248
254
 
249
255
  # Build final status if some errors present
250
- common_msg = ", ".join(error_messages)
251
- all_endpoints_faulty = ok_count == 0
256
+ status_msg += f" Unhealthy endpoints: {', '.join(messages_to_report)}"
252
257
 
253
- if all_endpoints_faulty and not has_warning_status:
258
+ if ok_count == 0 and warning_count == 0:
254
259
  status_value = StatusValue.GENERIC_ERROR
255
260
  else:
256
261
  status_value = StatusValue.WARNING
257
262
 
258
- message = f"Endpoints OK: {ok_count} NOK: {nok_count} NOK_reported_errors: {common_msg}"
259
- return Status(status=status_value, message=message)
263
+ return Status(status=status_value, message=status_msg)
@@ -305,7 +305,7 @@ class TestStatus(unittest.TestCase):
305
305
 
306
306
  status = ext._build_current_status()
307
307
  self.assertEqual(status.status, StatusValue.OK)
308
- self.assertIn("OK: 3 NOK: 0", status.message)
308
+ self.assertIn("OK: 3 WARNING: 0 ERROR: 0", status.message)
309
309
 
310
310
  def test_endpoint_status_some_faulty_endpoints(self):
311
311
  ext = Extension()
@@ -334,8 +334,8 @@ class TestStatus(unittest.TestCase):
334
334
  status = ext._build_current_status()
335
335
  self.assertEqual(status.status, StatusValue.WARNING)
336
336
  self.assertIn(
337
- "OK: 1 NOK: 2 NOK_reported_errors: 4.5.6.7:80 - DEVICE_CONNECTION_ERROR "
338
- "Invalid authorization scheme 2, 6.7.8.9:80 - DEVICE_CONNECTION_ERROR Invalid authorization scheme 3",
337
+ "Endpoints OK: 1 WARNING: 0 ERROR: 2 Unhealthy endpoints: "
338
+ "4.5.6.7:80 - DEVICE_CONNECTION_ERROR Invalid authorization scheme 2, 6.7.8.9:80 - DEVICE_CONNECTION_ERROR Invalid authorization scheme 3",
339
339
  status.message,
340
340
  )
341
341
 
@@ -368,9 +368,8 @@ class TestStatus(unittest.TestCase):
368
368
  status = ext._build_current_status()
369
369
  self.assertEqual(status.status, StatusValue.GENERIC_ERROR)
370
370
  self.assertIn(
371
- "OK: 0 NOK: 3 NOK_reported_errors: 1.2.3.4:80 - AUTHENTICATION_ERROR "
372
- "Invalid authorization scheme 4, 4.5.6.7:80 - DEVICE_CONNECTION_ERROR "
373
- "Invalid authorization scheme 5, 6.7.8.9:80 - DEVICE_CONNECTION_ERROR Invalid authorization scheme 6",
371
+ "Endpoints OK: 0 WARNING: 0 ERROR: 3 Unhealthy endpoints: 1.2.3.4:80 - AUTHENTICATION_ERROR Invalid authorization scheme 4, "
372
+ "4.5.6.7:80 - DEVICE_CONNECTION_ERROR Invalid authorization scheme 5, 6.7.8.9:80 - DEVICE_CONNECTION_ERROR Invalid authorization scheme 6",
374
373
  status.message,
375
374
  )
376
375
 
@@ -391,7 +390,7 @@ class TestStatus(unittest.TestCase):
391
390
 
392
391
  status = ext._build_current_status()
393
392
  self.assertEqual(status.status, StatusValue.OK)
394
- self.assertNotIn("OK: 0 NOK: 0", status.message)
393
+ self.assertNotIn("Endpoints", status.message)
395
394
 
396
395
  def test_endpoint_status_single_warning(self):
397
396
  ext = Extension()
@@ -414,7 +413,8 @@ class TestStatus(unittest.TestCase):
414
413
  status = ext._build_current_status()
415
414
  self.assertEqual(status.status, StatusValue.WARNING)
416
415
  self.assertIn(
417
- "OK: 0 NOK: 1 NOK_reported_errors: 1.2.3.4:80 - WARNING Invalid authorization scheme A", status.message
416
+ "Endpoints OK: 0 WARNING: 1 ERROR: 0 Unhealthy endpoints: 1.2.3.4:80 - WARNING Invalid authorization scheme A",
417
+ status.message,
418
418
  )
419
419
 
420
420
  def test_endpoint_status_single_error(self):
@@ -438,7 +438,7 @@ class TestStatus(unittest.TestCase):
438
438
  status = ext._build_current_status()
439
439
  self.assertEqual(status.status, StatusValue.GENERIC_ERROR)
440
440
  self.assertIn(
441
- "OK: 0 NOK: 1 NOK_reported_errors: 1.2.3.4:80 - AUTHENTICATION_ERROR Invalid authorization scheme",
441
+ "OK: 0 WARNING: 0 ERROR: 1 Unhealthy endpoints: 1.2.3.4:80 - AUTHENTICATION_ERROR Invalid authorization scheme",
442
442
  status.message,
443
443
  )
444
444
 
@@ -467,7 +467,7 @@ class TestStatus(unittest.TestCase):
467
467
 
468
468
  status = ext._build_current_status()
469
469
  self.assertEqual(status.status, StatusValue.OK)
470
- self.assertIn("OK: 3 NOK: 0", status.message)
470
+ self.assertIn("OK: 3 WARNING: 0 ERROR: 0", status.message)
471
471
 
472
472
  def test_endpoint_merge_error(self):
473
473
  def callback_ep_status_1():
@@ -494,7 +494,7 @@ class TestStatus(unittest.TestCase):
494
494
  status = ext._build_current_status()
495
495
  self.assertEqual(status.status, StatusValue.GENERIC_ERROR)
496
496
  self.assertIn(
497
- "OK: 0 NOK: 2 NOK_reported_errors: EP_HINT_1 - AUTHENTICATION_ERROR EP1 MSG, EP_HINT_2 - INVALID_CONFIG_ERROR EP2 MSG",
497
+ "OK: 0 WARNING: 0 ERROR: 2 Unhealthy endpoints: EP_HINT_1 - AUTHENTICATION_ERROR EP1 MSG, EP_HINT_2 - INVALID_CONFIG_ERROR EP2 MSG",
498
498
  status.message,
499
499
  )
500
500
 
@@ -522,7 +522,7 @@ class TestStatus(unittest.TestCase):
522
522
 
523
523
  status = ext._build_current_status()
524
524
  self.assertEqual(status.status, StatusValue.WARNING)
525
- self.assertIn("OK: 1 NOK: 1 NOK_reported_errors: EP_HINT_2 - WARNING EP2 MSG", status.message)
525
+ self.assertIn("OK: 1 WARNING: 1 ERROR: 0 Unhealthy endpoints: EP_HINT_2 - WARNING EP2 MSG", status.message)
526
526
 
527
527
  def test_overall_status_error(self):
528
528
  def callback_ep_status():
@@ -554,7 +554,7 @@ class TestStatus(unittest.TestCase):
554
554
  status = ext._build_current_status()
555
555
  self.assertEqual(status.status, StatusValue.GENERIC_ERROR)
556
556
  self.assertIn(
557
- "Endpoints OK: 0 NOK: 1 NOK_reported_errors: EP_HINT - UNKNOWN_ERROR EP MSG"
557
+ "Endpoints OK: 0 WARNING: 0 ERROR: 1 Unhealthy endpoints: EP_HINT - UNKNOWN_ERROR EP MSG"
558
558
  "\ncallback_multistatus: GENERIC_ERROR - MULTI MSG\ncallback_status: EEC_CONNECTION_ERROR - STATUS MSG",
559
559
  status.message,
560
560
  )
@@ -588,7 +588,7 @@ class TestStatus(unittest.TestCase):
588
588
 
589
589
  status = ext._build_current_status()
590
590
  self.assertEqual(status.status, StatusValue.OK)
591
- self.assertIn("Endpoints OK: 1 NOK: 0\ncallback_status: OK - STATUS MSG", status.message)
591
+ self.assertIn("Endpoints OK: 1 WARNING: 0 ERROR: 0\ncallback_status: OK - STATUS MSG", status.message)
592
592
 
593
593
  def test_overall_status_warning_1(self):
594
594
  def callback_ep_status():
@@ -620,7 +620,7 @@ class TestStatus(unittest.TestCase):
620
620
  status = ext._build_current_status()
621
621
  self.assertEqual(status.status, StatusValue.WARNING)
622
622
  self.assertIn(
623
- "Endpoints OK: 0 NOK: 1 NOK_reported_errors: EP_HINT - WARNING EP MSG\ncallback_multistatus: OK - MULTI MSG",
623
+ "Endpoints OK: 0 WARNING: 1 ERROR: 0 Unhealthy endpoints: EP_HINT - WARNING EP MSG\ncallback_multistatus: OK - MULTI MSG",
624
624
  status.message,
625
625
  )
626
626
 
@@ -654,8 +654,9 @@ class TestStatus(unittest.TestCase):
654
654
  status = ext._build_current_status()
655
655
  self.assertEqual(status.status, StatusValue.WARNING)
656
656
  self.assertIn(
657
- "Endpoints OK: 0 NOK: 1 NOK_reported_errors: EP_HINT - INVALID_CONFIG_ERROR "
658
- "\ncallback_multistatus: GENERIC_ERROR - \ncallback_status: WARNING - ",
657
+ "Endpoints OK: 0 WARNING: 0 ERROR: 1 Unhealthy endpoints: EP_HINT - INVALID_CONFIG_ERROR "
658
+ "\ncallback_multistatus: GENERIC_ERROR - "
659
+ "\ncallback_status: WARNING - ",
659
660
  status.message,
660
661
  )
661
662
 
@@ -711,7 +712,7 @@ class TestStatus(unittest.TestCase):
711
712
  self.assertEqual(status.status, StatusValue.GENERIC_ERROR)
712
713
  self.assertIn(
713
714
  (
714
- "Endpoints OK: 0 NOK: 2 NOK_reported_errors: "
715
+ "Endpoints OK: 0 WARNING: 0 ERROR: 2 Unhealthy endpoints: "
715
716
  "skipped_callback - GENERIC_ERROR skipped_callback_msg, regular_callback - UNKNOWN_ERROR regular_callback_msg"
716
717
  ),
717
718
  status.message,