strongdm 11.15.0__zip → 11.16.0__zip

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 (145) hide show
  1. {strongdm-11.15.0 → strongdm-11.16.0}/PKG-INFO +2 -2
  2. {strongdm-11.15.0 → strongdm-11.16.0}/setup.py +2 -2
  3. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/client.py +8 -1
  4. strongdm-11.16.0/strongdm/health_checks_pb2.py +107 -0
  5. strongdm-11.16.0/strongdm/health_checks_pb2_grpc.py +87 -0
  6. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/models.py +130 -0
  7. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/plumbing.py +76 -0
  8. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/svc.py +51 -0
  9. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm.egg-info/PKG-INFO +2 -2
  10. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm.egg-info/SOURCES.txt +2 -0
  11. {strongdm-11.15.0 → strongdm-11.16.0}/LICENSE +0 -0
  12. {strongdm-11.15.0 → strongdm-11.16.0}/README.md +0 -0
  13. {strongdm-11.15.0 → strongdm-11.16.0}/setup.cfg +0 -0
  14. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/__init__.py +0 -0
  15. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/access_request_events_history_pb2.py +0 -0
  16. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/access_request_events_history_pb2_grpc.py +0 -0
  17. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/access_requests_history_pb2.py +0 -0
  18. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/access_requests_history_pb2_grpc.py +0 -0
  19. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/access_requests_pb2.py +0 -0
  20. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/access_requests_pb2_grpc.py +0 -0
  21. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_attachments_history_pb2.py +0 -0
  22. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_attachments_history_pb2_grpc.py +0 -0
  23. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_attachments_pb2.py +0 -0
  24. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_attachments_pb2_grpc.py +0 -0
  25. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_grants_history_pb2.py +0 -0
  26. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_grants_history_pb2_grpc.py +0 -0
  27. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_grants_pb2.py +0 -0
  28. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_grants_pb2_grpc.py +0 -0
  29. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_permissions_pb2.py +0 -0
  30. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_permissions_pb2_grpc.py +0 -0
  31. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_resources_history_pb2.py +0 -0
  32. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_resources_history_pb2_grpc.py +0 -0
  33. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_resources_pb2.py +0 -0
  34. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/account_resources_pb2_grpc.py +0 -0
  35. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/accounts_history_pb2.py +0 -0
  36. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/accounts_history_pb2_grpc.py +0 -0
  37. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/accounts_pb2.py +0 -0
  38. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/accounts_pb2_grpc.py +0 -0
  39. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/activities_pb2.py +0 -0
  40. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/activities_pb2_grpc.py +0 -0
  41. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/approval_workflow_approvers_history_pb2.py +0 -0
  42. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/approval_workflow_approvers_history_pb2_grpc.py +0 -0
  43. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/approval_workflow_approvers_pb2.py +0 -0
  44. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/approval_workflow_approvers_pb2_grpc.py +0 -0
  45. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/approval_workflow_steps_history_pb2.py +0 -0
  46. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/approval_workflow_steps_history_pb2_grpc.py +0 -0
  47. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/approval_workflow_steps_pb2.py +0 -0
  48. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/approval_workflow_steps_pb2_grpc.py +0 -0
  49. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/approval_workflows_history_pb2.py +0 -0
  50. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/approval_workflows_history_pb2_grpc.py +0 -0
  51. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/approval_workflows_pb2.py +0 -0
  52. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/approval_workflows_pb2_grpc.py +0 -0
  53. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/constants.py +0 -0
  54. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/control_panel_pb2.py +0 -0
  55. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/control_panel_pb2_grpc.py +0 -0
  56. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/drivers_pb2.py +0 -0
  57. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/drivers_pb2_grpc.py +0 -0
  58. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/errors.py +0 -0
  59. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/identity_aliases_history_pb2.py +0 -0
  60. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/identity_aliases_history_pb2_grpc.py +0 -0
  61. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/identity_aliases_pb2.py +0 -0
  62. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/identity_aliases_pb2_grpc.py +0 -0
  63. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/identity_sets_history_pb2.py +0 -0
  64. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/identity_sets_history_pb2_grpc.py +0 -0
  65. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/identity_sets_pb2.py +0 -0
  66. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/identity_sets_pb2_grpc.py +0 -0
  67. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/nodes_history_pb2.py +0 -0
  68. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/nodes_history_pb2_grpc.py +0 -0
  69. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/nodes_pb2.py +0 -0
  70. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/nodes_pb2_grpc.py +0 -0
  71. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/options_pb2.py +0 -0
  72. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/options_pb2_grpc.py +0 -0
  73. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/organization_history_pb2.py +0 -0
  74. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/organization_history_pb2_grpc.py +0 -0
  75. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/peering_group_nodes_pb2.py +0 -0
  76. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/peering_group_nodes_pb2_grpc.py +0 -0
  77. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/peering_group_peers_pb2.py +0 -0
  78. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/peering_group_peers_pb2_grpc.py +0 -0
  79. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/peering_group_resources_pb2.py +0 -0
  80. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/peering_group_resources_pb2_grpc.py +0 -0
  81. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/peering_groups_pb2.py +0 -0
  82. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/peering_groups_pb2_grpc.py +0 -0
  83. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/policies_history_pb2.py +0 -0
  84. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/policies_history_pb2_grpc.py +0 -0
  85. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/policies_pb2.py +0 -0
  86. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/policies_pb2_grpc.py +0 -0
  87. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/proxy_cluster_keys_pb2.py +0 -0
  88. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/proxy_cluster_keys_pb2_grpc.py +0 -0
  89. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/queries_pb2.py +0 -0
  90. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/queries_pb2_grpc.py +0 -0
  91. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/remote_identities_history_pb2.py +0 -0
  92. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/remote_identities_history_pb2_grpc.py +0 -0
  93. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/remote_identities_pb2.py +0 -0
  94. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/remote_identities_pb2_grpc.py +0 -0
  95. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/remote_identity_groups_history_pb2.py +0 -0
  96. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/remote_identity_groups_history_pb2_grpc.py +0 -0
  97. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/remote_identity_groups_pb2.py +0 -0
  98. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/remote_identity_groups_pb2_grpc.py +0 -0
  99. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/replays_pb2.py +0 -0
  100. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/replays_pb2_grpc.py +0 -0
  101. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/resources_history_pb2.py +0 -0
  102. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/resources_history_pb2_grpc.py +0 -0
  103. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/resources_pb2.py +0 -0
  104. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/resources_pb2_grpc.py +0 -0
  105. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/role_resources_history_pb2.py +0 -0
  106. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/role_resources_history_pb2_grpc.py +0 -0
  107. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/role_resources_pb2.py +0 -0
  108. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/role_resources_pb2_grpc.py +0 -0
  109. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/roles_history_pb2.py +0 -0
  110. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/roles_history_pb2_grpc.py +0 -0
  111. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/roles_pb2.py +0 -0
  112. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/roles_pb2_grpc.py +0 -0
  113. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/secret_engine_policy_pb2_grpc.py +0 -0
  114. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/secret_engine_types_pb2_grpc.py +0 -0
  115. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/secret_store_healths_pb2.py +0 -0
  116. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/secret_store_healths_pb2_grpc.py +0 -0
  117. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/secret_store_types_pb2.py +0 -0
  118. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/secret_store_types_pb2_grpc.py +0 -0
  119. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/secret_stores_history_pb2.py +0 -0
  120. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/secret_stores_history_pb2_grpc.py +0 -0
  121. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/secret_stores_pb2.py +0 -0
  122. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/secret_stores_pb2_grpc.py +0 -0
  123. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/spec_pb2.py +0 -0
  124. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/spec_pb2_grpc.py +0 -0
  125. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/tags_pb2.py +0 -0
  126. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/tags_pb2_grpc.py +0 -0
  127. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflow_approvers_history_pb2.py +0 -0
  128. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflow_approvers_history_pb2_grpc.py +0 -0
  129. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflow_approvers_pb2.py +0 -0
  130. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflow_approvers_pb2_grpc.py +0 -0
  131. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflow_assignments_history_pb2.py +0 -0
  132. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflow_assignments_history_pb2_grpc.py +0 -0
  133. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflow_assignments_pb2.py +0 -0
  134. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflow_assignments_pb2_grpc.py +0 -0
  135. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflow_roles_history_pb2.py +0 -0
  136. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflow_roles_history_pb2_grpc.py +0 -0
  137. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflow_roles_pb2.py +0 -0
  138. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflow_roles_pb2_grpc.py +0 -0
  139. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflows_history_pb2.py +0 -0
  140. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflows_history_pb2_grpc.py +0 -0
  141. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflows_pb2.py +0 -0
  142. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm/workflows_pb2_grpc.py +0 -0
  143. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm.egg-info/dependency_links.txt +0 -0
  144. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm.egg-info/requires.txt +0 -0
  145. {strongdm-11.15.0 → strongdm-11.16.0}/strongdm.egg-info/top_level.txt +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strongdm
3
- Version: 11.15.0
3
+ Version: 11.16.0
4
4
  Summary: strongDM SDK for the Python programming language.
5
5
  Home-page: https://github.com/strongdm/strongdm-sdk-python
6
6
  Author: strongDM Team
7
7
  Author-email: sdk-feedback@strongdm.com
8
8
  License: apache-2.0
9
- Download-URL: https://github.com/strongdm/strongdm-sdk-python/archive/v11.15.0.tar.gz
9
+ Download-URL: https://github.com/strongdm/strongdm-sdk-python/archive/v11.16.0.tar.gz
10
10
  Keywords: strongDM,sdm,api,automation,security,audit,database,server,ssh,rdp
11
11
  Platform: UNKNOWN
12
12
  Classifier: Development Status :: 4 - Beta
@@ -23,7 +23,7 @@ from setuptools import setup
23
23
  setup(
24
24
  name='strongdm',
25
25
  packages=['strongdm'],
26
- version='11.15.0',
26
+ version='11.16.0',
27
27
  license='apache-2.0',
28
28
  description='strongDM SDK for the Python programming language.',
29
29
  long_description=long_description,
@@ -32,7 +32,7 @@ setup(
32
32
  author_email='sdk-feedback@strongdm.com',
33
33
  url='https://github.com/strongdm/strongdm-sdk-python',
34
34
  download_url=
35
- 'https://github.com/strongdm/strongdm-sdk-python/archive/v11.15.0.tar.gz',
35
+ 'https://github.com/strongdm/strongdm-sdk-python/archive/v11.16.0.tar.gz',
36
36
  keywords=[
37
37
  'strongDM', 'sdm', 'api', 'automation', 'security', 'audit',
38
38
  'database', 'server', 'ssh', 'rdp'
@@ -33,7 +33,7 @@ DEFAULT_MAX_RETRIES = 3
33
33
  DEFAULT_BASE_RETRY_DELAY = 0.0030 # 30 ms
34
34
  DEFAULT_MAX_RETRY_DELAY = 300 # 300 seconds
35
35
  API_VERSION = '2024-03-28'
36
- USER_AGENT = 'strongdm-sdk-python/11.15.0'
36
+ USER_AGENT = 'strongdm-sdk-python/11.16.0'
37
37
 
38
38
 
39
39
  class Client:
@@ -204,6 +204,13 @@ class Client:
204
204
 
205
205
  See `strongdm.svc.ControlPanel`.
206
206
  '''
207
+ self.health_checks = svc.HealthChecks(channel, self)
208
+ '''
209
+ HealthChecks lists the last healthcheck between each node and resource.
210
+ Note the unconventional capitalization here is to prevent having a collision with GRPC
211
+
212
+ See `strongdm.svc.HealthChecks`.
213
+ '''
207
214
  self.identity_aliases = svc.IdentityAliases(channel, self)
208
215
  '''
209
216
  IdentityAliases assign an alias to an account within an IdentitySet.
@@ -0,0 +1,107 @@
1
+ # Copyright 2020 StrongDM Inc
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ # -*- coding: utf-8 -*-
16
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
17
+ # source: health_checks.proto
18
+ """Generated protocol buffer code."""
19
+ from google.protobuf import descriptor as _descriptor
20
+ from google.protobuf import descriptor_pool as _descriptor_pool
21
+ from google.protobuf import message as _message
22
+ from google.protobuf import reflection as _reflection
23
+ from google.protobuf import symbol_database as _symbol_database
24
+ # @@protoc_insertion_point(imports)
25
+
26
+ _sym_db = _symbol_database.Default()
27
+
28
+
29
+ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
30
+ from . import options_pb2 as options__pb2
31
+ from . import spec_pb2 as spec__pb2
32
+
33
+
34
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13health_checks.proto\x12\x02v1\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\roptions.proto\x1a\nspec.proto\"\x85\x01\n\x16HealthcheckListRequest\x12%\n\x04meta\x18\x01 \x01(\x0b\x32\x17.v1.ListRequestMetadata\x12\x1a\n\x06\x66ilter\x18\x02 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01:(\xfa\xf8\xb3\x07\x06\xd2\xf3\xb3\x07\x01*\xfa\xf8\xb3\x07\x18\xd2\xf3\xb3\x07\x13!terraform-provider\"\x81\x02\n\x17HealthcheckListResponse\x12&\n\x04meta\x18\x01 \x01(\x0b\x32\x18.v1.ListResponseMetadata\x12\x31\n\x0chealthchecks\x18\x02 \x03(\x0b\x32\x0f.v1.HealthcheckB\n\xf2\xf8\xb3\x07\x05\xb8\xf3\xb3\x07\x01\x12W\n\nrate_limit\x18\x03 \x01(\x0b\x32\x15.v1.RateLimitMetadataB,\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\xf2\xf8\xb3\x07\x06\xb2\xf4\xb3\x07\x01*\xf2\xf8\xb3\x07\x12\xb2\xf4\xb3\x07\r!json_gateway:2\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\xfa\xf8\xb3\x07\x06\xd2\xf3\xb3\x07\x01*\xfa\xf8\xb3\x07\x18\xd2\xf3\xb3\x07\x13!terraform-provider\"\xf3\x02\n\x0bHealthcheck\x12\x1b\n\x02id\x18\x01 \x01(\tB\x0f\xf2\xf8\xb3\x07\n\xb0\xf3\xb3\x07\x01\xc0\xf3\xb3\x07\x01\x12$\n\x0bresource_id\x18\x02 \x01(\tB\x0f\xf2\xf8\xb3\x07\n\xb0\xf3\xb3\x07\x01\xc0\xf3\xb3\x07\x01\x12&\n\rresource_name\x18\x03 \x01(\tB\x0f\xf2\xf8\xb3\x07\n\xb0\xf3\xb3\x07\x01\xc0\xf3\xb3\x07\x01\x12 \n\x07node_id\x18\x04 \x01(\tB\x0f\xf2\xf8\xb3\x07\n\xb0\xf3\xb3\x07\x01\xc0\xf3\xb3\x07\x01\x12\"\n\tnode_name\x18\x05 \x01(\tB\x0f\xf2\xf8\xb3\x07\n\xb0\xf3\xb3\x07\x01\xc0\xf3\xb3\x07\x01\x12 \n\x07healthy\x18\x06 \x01(\x08\x42\x0f\xf2\xf8\xb3\x07\n\xb0\xf3\xb3\x07\x01\xc0\xf3\xb3\x07\x01\x12\x1d\n\terror_msg\x18\x07 \x01(\tB\n\xf2\xf8\xb3\x07\x05\xb0\xf3\xb3\x07\x01\x12>\n\ttimestamp\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x0f\xf2\xf8\xb3\x07\n\xb0\xf3\xb3\x07\x01\xc0\xf3\xb3\x07\x01:2\xfa\xf8\xb3\x07\x05\xa8\xf3\xb3\x07\x01\xfa\xf8\xb3\x07\x06\xd2\xf3\xb3\x07\x01*\xfa\xf8\xb3\x07\x18\xd2\xf3\xb3\x07\x13!terraform-provider2\xc1\x01\n\x0cHealthChecks\x12h\n\x04List\x12\x1a.v1.HealthcheckListRequest\x1a\x1b.v1.HealthcheckListResponse\"\'\x82\xf9\xb3\x07\x08\xa2\xf3\xb3\x07\x03get\x82\xf9\xb3\x07\x15\xaa\xf3\xb3\x07\x10/v1/healthchecks\x1aG\xca\xf9\xb3\x07\x10\xc2\xf9\xb3\x07\x0bHealthcheck\xca\xf9\xb3\x07\x05\xd8\xf9\xb3\x07\x01\xca\xf9\xb3\x07\x06\xca\xf9\xb3\x07\x01*\xca\xf9\xb3\x07\x18\xca\xf9\xb3\x07\x13!terraform-providerB\x90\x01\n\x19\x63om.strongdm.api.plumbingB\x14HealthChecksPlumbingZ5github.com/strongdm/strongdm-sdk-go/v3/internal/v1;v1\xc2\x92\xb4\x07\x06\xa2\x8c\xb4\x07\x01*\xc2\x92\xb4\x07\x18\xa2\x8c\xb4\x07\x13!terraform-providerb\x06proto3')
35
+
36
+
37
+
38
+ _HEALTHCHECKLISTREQUEST = DESCRIPTOR.message_types_by_name['HealthcheckListRequest']
39
+ _HEALTHCHECKLISTRESPONSE = DESCRIPTOR.message_types_by_name['HealthcheckListResponse']
40
+ _HEALTHCHECK = DESCRIPTOR.message_types_by_name['Healthcheck']
41
+ HealthcheckListRequest = _reflection.GeneratedProtocolMessageType('HealthcheckListRequest', (_message.Message,), {
42
+ 'DESCRIPTOR' : _HEALTHCHECKLISTREQUEST,
43
+ '__module__' : 'health_checks_pb2'
44
+ # @@protoc_insertion_point(class_scope:v1.HealthcheckListRequest)
45
+ })
46
+ _sym_db.RegisterMessage(HealthcheckListRequest)
47
+
48
+ HealthcheckListResponse = _reflection.GeneratedProtocolMessageType('HealthcheckListResponse', (_message.Message,), {
49
+ 'DESCRIPTOR' : _HEALTHCHECKLISTRESPONSE,
50
+ '__module__' : 'health_checks_pb2'
51
+ # @@protoc_insertion_point(class_scope:v1.HealthcheckListResponse)
52
+ })
53
+ _sym_db.RegisterMessage(HealthcheckListResponse)
54
+
55
+ Healthcheck = _reflection.GeneratedProtocolMessageType('Healthcheck', (_message.Message,), {
56
+ 'DESCRIPTOR' : _HEALTHCHECK,
57
+ '__module__' : 'health_checks_pb2'
58
+ # @@protoc_insertion_point(class_scope:v1.Healthcheck)
59
+ })
60
+ _sym_db.RegisterMessage(Healthcheck)
61
+
62
+ _HEALTHCHECKS = DESCRIPTOR.services_by_name['HealthChecks']
63
+ if _descriptor._USE_C_DESCRIPTORS == False:
64
+
65
+ DESCRIPTOR._options = None
66
+ DESCRIPTOR._serialized_options = b'\n\031com.strongdm.api.plumbingB\024HealthChecksPlumbingZ5github.com/strongdm/strongdm-sdk-go/v3/internal/v1;v1\302\222\264\007\006\242\214\264\007\001*\302\222\264\007\030\242\214\264\007\023!terraform-provider'
67
+ _HEALTHCHECKLISTREQUEST.fields_by_name['filter']._options = None
68
+ _HEALTHCHECKLISTREQUEST.fields_by_name['filter']._serialized_options = b'\362\370\263\007\005\260\363\263\007\001'
69
+ _HEALTHCHECKLISTREQUEST._options = None
70
+ _HEALTHCHECKLISTREQUEST._serialized_options = b'\372\370\263\007\006\322\363\263\007\001*\372\370\263\007\030\322\363\263\007\023!terraform-provider'
71
+ _HEALTHCHECKLISTRESPONSE.fields_by_name['healthchecks']._options = None
72
+ _HEALTHCHECKLISTRESPONSE.fields_by_name['healthchecks']._serialized_options = b'\362\370\263\007\005\270\363\263\007\001'
73
+ _HEALTHCHECKLISTRESPONSE.fields_by_name['rate_limit']._options = None
74
+ _HEALTHCHECKLISTRESPONSE.fields_by_name['rate_limit']._serialized_options = b'\362\370\263\007\005\260\363\263\007\001\362\370\263\007\006\262\364\263\007\001*\362\370\263\007\022\262\364\263\007\r!json_gateway'
75
+ _HEALTHCHECKLISTRESPONSE._options = None
76
+ _HEALTHCHECKLISTRESPONSE._serialized_options = b'\372\370\263\007\005\250\363\263\007\001\372\370\263\007\006\322\363\263\007\001*\372\370\263\007\030\322\363\263\007\023!terraform-provider'
77
+ _HEALTHCHECK.fields_by_name['id']._options = None
78
+ _HEALTHCHECK.fields_by_name['id']._serialized_options = b'\362\370\263\007\n\260\363\263\007\001\300\363\263\007\001'
79
+ _HEALTHCHECK.fields_by_name['resource_id']._options = None
80
+ _HEALTHCHECK.fields_by_name['resource_id']._serialized_options = b'\362\370\263\007\n\260\363\263\007\001\300\363\263\007\001'
81
+ _HEALTHCHECK.fields_by_name['resource_name']._options = None
82
+ _HEALTHCHECK.fields_by_name['resource_name']._serialized_options = b'\362\370\263\007\n\260\363\263\007\001\300\363\263\007\001'
83
+ _HEALTHCHECK.fields_by_name['node_id']._options = None
84
+ _HEALTHCHECK.fields_by_name['node_id']._serialized_options = b'\362\370\263\007\n\260\363\263\007\001\300\363\263\007\001'
85
+ _HEALTHCHECK.fields_by_name['node_name']._options = None
86
+ _HEALTHCHECK.fields_by_name['node_name']._serialized_options = b'\362\370\263\007\n\260\363\263\007\001\300\363\263\007\001'
87
+ _HEALTHCHECK.fields_by_name['healthy']._options = None
88
+ _HEALTHCHECK.fields_by_name['healthy']._serialized_options = b'\362\370\263\007\n\260\363\263\007\001\300\363\263\007\001'
89
+ _HEALTHCHECK.fields_by_name['error_msg']._options = None
90
+ _HEALTHCHECK.fields_by_name['error_msg']._serialized_options = b'\362\370\263\007\005\260\363\263\007\001'
91
+ _HEALTHCHECK.fields_by_name['timestamp']._options = None
92
+ _HEALTHCHECK.fields_by_name['timestamp']._serialized_options = b'\362\370\263\007\n\260\363\263\007\001\300\363\263\007\001'
93
+ _HEALTHCHECK._options = None
94
+ _HEALTHCHECK._serialized_options = b'\372\370\263\007\005\250\363\263\007\001\372\370\263\007\006\322\363\263\007\001*\372\370\263\007\030\322\363\263\007\023!terraform-provider'
95
+ _HEALTHCHECKS._options = None
96
+ _HEALTHCHECKS._serialized_options = b'\312\371\263\007\020\302\371\263\007\013Healthcheck\312\371\263\007\005\330\371\263\007\001\312\371\263\007\006\312\371\263\007\001*\312\371\263\007\030\312\371\263\007\023!terraform-provider'
97
+ _HEALTHCHECKS.methods_by_name['List']._options = None
98
+ _HEALTHCHECKS.methods_by_name['List']._serialized_options = b'\202\371\263\007\010\242\363\263\007\003get\202\371\263\007\025\252\363\263\007\020/v1/healthchecks'
99
+ _HEALTHCHECKLISTREQUEST._serialized_start=88
100
+ _HEALTHCHECKLISTREQUEST._serialized_end=221
101
+ _HEALTHCHECKLISTRESPONSE._serialized_start=224
102
+ _HEALTHCHECKLISTRESPONSE._serialized_end=481
103
+ _HEALTHCHECK._serialized_start=484
104
+ _HEALTHCHECK._serialized_end=855
105
+ _HEALTHCHECKS._serialized_start=858
106
+ _HEALTHCHECKS._serialized_end=1051
107
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,87 @@
1
+ # Copyright 2020 StrongDM Inc
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ #
15
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
16
+ """Client and server classes corresponding to protobuf-defined services."""
17
+ import grpc
18
+
19
+ from . import health_checks_pb2 as health__checks__pb2
20
+
21
+
22
+ class HealthChecksStub(object):
23
+ """HealthChecks lists the last healthcheck between each node and resource.
24
+ Note the unconventional capitalization here is to prevent having a collision with GRPC
25
+ """
26
+
27
+ def __init__(self, channel):
28
+ """Constructor.
29
+
30
+ Args:
31
+ channel: A grpc.Channel.
32
+ """
33
+ self.List = channel.unary_unary(
34
+ '/v1.HealthChecks/List',
35
+ request_serializer=health__checks__pb2.HealthcheckListRequest.SerializeToString,
36
+ response_deserializer=health__checks__pb2.HealthcheckListResponse.FromString,
37
+ )
38
+
39
+
40
+ class HealthChecksServicer(object):
41
+ """HealthChecks lists the last healthcheck between each node and resource.
42
+ Note the unconventional capitalization here is to prevent having a collision with GRPC
43
+ """
44
+
45
+ def List(self, request, context):
46
+ """List gets a list of Healthchecks matching a given set of criteria.
47
+ """
48
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
49
+ context.set_details('Method not implemented!')
50
+ raise NotImplementedError('Method not implemented!')
51
+
52
+
53
+ def add_HealthChecksServicer_to_server(servicer, server):
54
+ rpc_method_handlers = {
55
+ 'List': grpc.unary_unary_rpc_method_handler(
56
+ servicer.List,
57
+ request_deserializer=health__checks__pb2.HealthcheckListRequest.FromString,
58
+ response_serializer=health__checks__pb2.HealthcheckListResponse.SerializeToString,
59
+ ),
60
+ }
61
+ generic_handler = grpc.method_handlers_generic_handler(
62
+ 'v1.HealthChecks', rpc_method_handlers)
63
+ server.add_generic_rpc_handlers((generic_handler,))
64
+
65
+
66
+ # This class is part of an EXPERIMENTAL API.
67
+ class HealthChecks(object):
68
+ """HealthChecks lists the last healthcheck between each node and resource.
69
+ Note the unconventional capitalization here is to prevent having a collision with GRPC
70
+ """
71
+
72
+ @staticmethod
73
+ def List(request,
74
+ target,
75
+ options=(),
76
+ channel_credentials=None,
77
+ call_credentials=None,
78
+ insecure=False,
79
+ compression=None,
80
+ wait_for_ready=None,
81
+ timeout=None,
82
+ metadata=None):
83
+ return grpc.experimental.unary_unary(request, target, '/v1.HealthChecks/List',
84
+ health__checks__pb2.HealthcheckListRequest.SerializeToString,
85
+ health__checks__pb2.HealthcheckListResponse.FromString,
86
+ options, channel_credentials,
87
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -11344,6 +11344,136 @@ class HTTPNoAuth:
11344
11344
  )
11345
11345
 
11346
11346
 
11347
+ class Healthcheck:
11348
+ '''
11349
+ Healthcheck defines the status of the link between a node and a resource
11350
+ '''
11351
+ __slots__ = [
11352
+ 'error_msg',
11353
+ 'healthy',
11354
+ 'id',
11355
+ 'node_id',
11356
+ 'node_name',
11357
+ 'resource_id',
11358
+ 'resource_name',
11359
+ 'timestamp',
11360
+ ]
11361
+
11362
+ def __init__(
11363
+ self,
11364
+ error_msg=None,
11365
+ healthy=None,
11366
+ id=None,
11367
+ node_id=None,
11368
+ node_name=None,
11369
+ resource_id=None,
11370
+ resource_name=None,
11371
+ timestamp=None,
11372
+ ):
11373
+ self.error_msg = error_msg if error_msg is not None else ''
11374
+ '''
11375
+ The error if unhealthy
11376
+ '''
11377
+ self.healthy = healthy if healthy is not None else False
11378
+ '''
11379
+ Whether the healthcheck succeeded.
11380
+ '''
11381
+ self.id = id if id is not None else ''
11382
+ '''
11383
+ Unique identifier of the healthcheck.
11384
+ '''
11385
+ self.node_id = node_id if node_id is not None else ''
11386
+ '''
11387
+ Unique identifier of the healthcheck node.
11388
+ '''
11389
+ self.node_name = node_name if node_name is not None else ''
11390
+ '''
11391
+ The name of the node.
11392
+ '''
11393
+ self.resource_id = resource_id if resource_id is not None else ''
11394
+ '''
11395
+ Unique identifier of the healthcheck resource.
11396
+ '''
11397
+ self.resource_name = resource_name if resource_name is not None else ''
11398
+ '''
11399
+ The name of the resource.
11400
+ '''
11401
+ self.timestamp = timestamp if timestamp is not None else None
11402
+ '''
11403
+ The time at which the healthcheck state was recorded.
11404
+ '''
11405
+
11406
+ def __repr__(self):
11407
+ return '<sdm.Healthcheck ' + \
11408
+ 'error_msg: ' + repr(self.error_msg) + ' ' +\
11409
+ 'healthy: ' + repr(self.healthy) + ' ' +\
11410
+ 'id: ' + repr(self.id) + ' ' +\
11411
+ 'node_id: ' + repr(self.node_id) + ' ' +\
11412
+ 'node_name: ' + repr(self.node_name) + ' ' +\
11413
+ 'resource_id: ' + repr(self.resource_id) + ' ' +\
11414
+ 'resource_name: ' + repr(self.resource_name) + ' ' +\
11415
+ 'timestamp: ' + repr(self.timestamp) + ' ' +\
11416
+ '>'
11417
+
11418
+ def to_dict(self):
11419
+ return {
11420
+ 'error_msg': self.error_msg,
11421
+ 'healthy': self.healthy,
11422
+ 'id': self.id,
11423
+ 'node_id': self.node_id,
11424
+ 'node_name': self.node_name,
11425
+ 'resource_id': self.resource_id,
11426
+ 'resource_name': self.resource_name,
11427
+ 'timestamp': self.timestamp,
11428
+ }
11429
+
11430
+ @classmethod
11431
+ def from_dict(cls, d):
11432
+ return cls(
11433
+ error_msg=d.get('error_msg'),
11434
+ healthy=d.get('healthy'),
11435
+ id=d.get('id'),
11436
+ node_id=d.get('node_id'),
11437
+ node_name=d.get('node_name'),
11438
+ resource_id=d.get('resource_id'),
11439
+ resource_name=d.get('resource_name'),
11440
+ timestamp=d.get('timestamp'),
11441
+ )
11442
+
11443
+
11444
+ class HealthcheckListResponse:
11445
+ '''
11446
+ HealthcheckListResponse returns a list of Healthchecks that meet the criteria of a
11447
+ HealthcheckListRequest.
11448
+ '''
11449
+ __slots__ = [
11450
+ 'rate_limit',
11451
+ ]
11452
+
11453
+ def __init__(
11454
+ self,
11455
+ rate_limit=None,
11456
+ ):
11457
+ self.rate_limit = rate_limit if rate_limit is not None else None
11458
+ '''
11459
+ Rate limit information.
11460
+ '''
11461
+
11462
+ def __repr__(self):
11463
+ return '<sdm.HealthcheckListResponse ' + \
11464
+ 'rate_limit: ' + repr(self.rate_limit) + ' ' +\
11465
+ '>'
11466
+
11467
+ def to_dict(self):
11468
+ return {
11469
+ 'rate_limit': self.rate_limit,
11470
+ }
11471
+
11472
+ @classmethod
11473
+ def from_dict(cls, d):
11474
+ return cls(rate_limit=d.get('rate_limit'), )
11475
+
11476
+
11347
11477
  class IdentityAlias:
11348
11478
  '''
11349
11479
  IdentityAliases define the username to be used for a specific account
@@ -48,6 +48,7 @@ from .approval_workflows_pb2 import *
48
48
  from .approval_workflows_history_pb2 import *
49
49
  from .control_panel_pb2 import *
50
50
  from .drivers_pb2 import *
51
+ from .health_checks_pb2 import *
51
52
  from .identity_aliases_pb2 import *
52
53
  from .identity_aliases_history_pb2 import *
53
54
  from .identity_sets_pb2 import *
@@ -5321,6 +5322,81 @@ def convert_repeated_http_no_auth_to_porcelain(plumbings):
5321
5322
  ]
5322
5323
 
5323
5324
 
5325
+ def convert_healthcheck_to_porcelain(plumbing):
5326
+ if plumbing is None:
5327
+ return None
5328
+ porcelain = models.Healthcheck()
5329
+ porcelain.error_msg = (plumbing.error_msg)
5330
+ porcelain.healthy = (plumbing.healthy)
5331
+ porcelain.id = (plumbing.id)
5332
+ porcelain.node_id = (plumbing.node_id)
5333
+ porcelain.node_name = (plumbing.node_name)
5334
+ porcelain.resource_id = (plumbing.resource_id)
5335
+ porcelain.resource_name = (plumbing.resource_name)
5336
+ porcelain.timestamp = convert_timestamp_to_porcelain(plumbing.timestamp)
5337
+ return porcelain
5338
+
5339
+
5340
+ def convert_healthcheck_to_plumbing(porcelain):
5341
+ plumbing = Healthcheck()
5342
+ if porcelain is None:
5343
+ return plumbing
5344
+ plumbing.error_msg = (porcelain.error_msg)
5345
+ plumbing.healthy = (porcelain.healthy)
5346
+ plumbing.id = (porcelain.id)
5347
+ plumbing.node_id = (porcelain.node_id)
5348
+ plumbing.node_name = (porcelain.node_name)
5349
+ plumbing.resource_id = (porcelain.resource_id)
5350
+ plumbing.resource_name = (porcelain.resource_name)
5351
+ plumbing.timestamp.CopyFrom(
5352
+ convert_timestamp_to_plumbing(porcelain.timestamp))
5353
+ return plumbing
5354
+
5355
+
5356
+ def convert_repeated_healthcheck_to_plumbing(porcelains):
5357
+ return [
5358
+ convert_healthcheck_to_plumbing(porcelain) for porcelain in porcelains
5359
+ ]
5360
+
5361
+
5362
+ def convert_repeated_healthcheck_to_porcelain(plumbings):
5363
+ return [
5364
+ convert_healthcheck_to_porcelain(plumbing) for plumbing in plumbings
5365
+ ]
5366
+
5367
+
5368
+ def convert_healthcheck_list_response_to_porcelain(plumbing):
5369
+ if plumbing is None:
5370
+ return None
5371
+ porcelain = models.HealthcheckListResponse()
5372
+ porcelain.rate_limit = convert_rate_limit_metadata_to_porcelain(
5373
+ plumbing.rate_limit)
5374
+ return porcelain
5375
+
5376
+
5377
+ def convert_healthcheck_list_response_to_plumbing(porcelain):
5378
+ plumbing = HealthcheckListResponse()
5379
+ if porcelain is None:
5380
+ return plumbing
5381
+ plumbing.rate_limit.CopyFrom(
5382
+ convert_rate_limit_metadata_to_plumbing(porcelain.rate_limit))
5383
+ return plumbing
5384
+
5385
+
5386
+ def convert_repeated_healthcheck_list_response_to_plumbing(porcelains):
5387
+ return [
5388
+ convert_healthcheck_list_response_to_plumbing(porcelain)
5389
+ for porcelain in porcelains
5390
+ ]
5391
+
5392
+
5393
+ def convert_repeated_healthcheck_list_response_to_porcelain(plumbings):
5394
+ return [
5395
+ convert_healthcheck_list_response_to_porcelain(plumbing)
5396
+ for plumbing in plumbings
5397
+ ]
5398
+
5399
+
5324
5400
  def convert_identity_alias_to_porcelain(plumbing):
5325
5401
  if plumbing is None:
5326
5402
  return None
@@ -66,6 +66,8 @@ from .control_panel_pb2 import *
66
66
  from .control_panel_pb2_grpc import *
67
67
  from .drivers_pb2 import *
68
68
  from .drivers_pb2_grpc import *
69
+ from .health_checks_pb2 import *
70
+ from .health_checks_pb2_grpc import *
69
71
  from .identity_aliases_pb2 import *
70
72
  from .identity_aliases_pb2_grpc import *
71
73
  from .identity_aliases_history_pb2 import *
@@ -2069,6 +2071,55 @@ class ControlPanel:
2069
2071
  return resp
2070
2072
 
2071
2073
 
2074
+ class HealthChecks:
2075
+ '''
2076
+ HealthChecks lists the last healthcheck between each node and resource.
2077
+ Note the unconventional capitalization here is to prevent having a collision with GRPC
2078
+ See `strongdm.models.Healthcheck`.
2079
+ '''
2080
+ def __init__(self, channel, client):
2081
+ self.parent = client
2082
+ self.stub = HealthChecksStub(channel)
2083
+
2084
+ def list(self, filter, *args, timeout=None):
2085
+ '''
2086
+ List gets a list of Healthchecks matching a given set of criteria.
2087
+ '''
2088
+ req = HealthcheckListRequest()
2089
+ req.meta.CopyFrom(ListRequestMetadata())
2090
+ if self.parent.page_limit > 0:
2091
+ req.meta.limit = self.parent.page_limit
2092
+ if self.parent.snapshot_datetime is not None:
2093
+ req.meta.snapshot_at.FromDatetime(self.parent.snapshot_datetime)
2094
+
2095
+ req.filter = plumbing.quote_filter_args(filter, *args)
2096
+
2097
+ def generator(svc, req):
2098
+ tries = 0
2099
+ while True:
2100
+ try:
2101
+ plumbing_response = svc.stub.List(
2102
+ req,
2103
+ metadata=svc.parent.get_metadata(
2104
+ 'HealthChecks.List', req),
2105
+ timeout=timeout)
2106
+ except Exception as e:
2107
+ if self.parent.shouldRetry(tries, e):
2108
+ tries += 1
2109
+ self.parent.jitterSleep(tries)
2110
+ continue
2111
+ raise plumbing.convert_error_to_porcelain(e) from e
2112
+ tries = 0
2113
+ for plumbing_item in plumbing_response.healthchecks:
2114
+ yield plumbing.convert_healthcheck_to_porcelain(
2115
+ plumbing_item)
2116
+ if plumbing_response.meta.next_cursor == '':
2117
+ break
2118
+ req.meta.cursor = plumbing_response.meta.next_cursor
2119
+
2120
+ return generator(self, req)
2121
+
2122
+
2072
2123
  class IdentityAliases:
2073
2124
  '''
2074
2125
  IdentityAliases assign an alias to an account within an IdentitySet.
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: strongdm
3
- Version: 11.15.0
3
+ Version: 11.16.0
4
4
  Summary: strongDM SDK for the Python programming language.
5
5
  Home-page: https://github.com/strongdm/strongdm-sdk-python
6
6
  Author: strongDM Team
7
7
  Author-email: sdk-feedback@strongdm.com
8
8
  License: apache-2.0
9
- Download-URL: https://github.com/strongdm/strongdm-sdk-python/archive/v11.15.0.tar.gz
9
+ Download-URL: https://github.com/strongdm/strongdm-sdk-python/archive/v11.16.0.tar.gz
10
10
  Keywords: strongDM,sdm,api,automation,security,audit,database,server,ssh,rdp
11
11
  Platform: UNKNOWN
12
12
  Classifier: Development Status :: 4 - Beta
@@ -47,6 +47,8 @@ strongdm/control_panel_pb2_grpc.py
47
47
  strongdm/drivers_pb2.py
48
48
  strongdm/drivers_pb2_grpc.py
49
49
  strongdm/errors.py
50
+ strongdm/health_checks_pb2.py
51
+ strongdm/health_checks_pb2_grpc.py
50
52
  strongdm/identity_aliases_history_pb2.py
51
53
  strongdm/identity_aliases_history_pb2_grpc.py
52
54
  strongdm/identity_aliases_pb2.py
File without changes
File without changes
File without changes