sensu-plugins-mongodb-mrtrotl 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (181) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1 -0
  3. data/LICENSE +22 -0
  4. data/README.md +27 -0
  5. data/bin/check-mongodb-metric.rb +144 -0
  6. data/bin/check-mongodb-query-count.rb +267 -0
  7. data/bin/check-mongodb.py +1644 -0
  8. data/bin/check-mongodb.rb +5 -0
  9. data/bin/metrics-mongodb-replication.rb +254 -0
  10. data/bin/metrics-mongodb.rb +133 -0
  11. data/lib/bson/__init__.py +1347 -0
  12. data/lib/bson/__pycache__/__init__.cpython-310.pyc +0 -0
  13. data/lib/bson/__pycache__/_helpers.cpython-310.pyc +0 -0
  14. data/lib/bson/__pycache__/binary.cpython-310.pyc +0 -0
  15. data/lib/bson/__pycache__/code.cpython-310.pyc +0 -0
  16. data/lib/bson/__pycache__/codec_options.cpython-310.pyc +0 -0
  17. data/lib/bson/__pycache__/dbref.cpython-310.pyc +0 -0
  18. data/lib/bson/__pycache__/decimal128.cpython-310.pyc +0 -0
  19. data/lib/bson/__pycache__/errors.cpython-310.pyc +0 -0
  20. data/lib/bson/__pycache__/int64.cpython-310.pyc +0 -0
  21. data/lib/bson/__pycache__/json_util.cpython-310.pyc +0 -0
  22. data/lib/bson/__pycache__/max_key.cpython-310.pyc +0 -0
  23. data/lib/bson/__pycache__/min_key.cpython-310.pyc +0 -0
  24. data/lib/bson/__pycache__/objectid.cpython-310.pyc +0 -0
  25. data/lib/bson/__pycache__/raw_bson.cpython-310.pyc +0 -0
  26. data/lib/bson/__pycache__/regex.cpython-310.pyc +0 -0
  27. data/lib/bson/__pycache__/son.cpython-310.pyc +0 -0
  28. data/lib/bson/__pycache__/timestamp.cpython-310.pyc +0 -0
  29. data/lib/bson/__pycache__/tz_util.cpython-310.pyc +0 -0
  30. data/lib/bson/_cbson.cpython-310-x86_64-linux-gnu.so +0 -0
  31. data/lib/bson/_helpers.py +41 -0
  32. data/lib/bson/binary.py +364 -0
  33. data/lib/bson/code.py +101 -0
  34. data/lib/bson/codec_options.py +414 -0
  35. data/lib/bson/codec_options.pyi +100 -0
  36. data/lib/bson/dbref.py +133 -0
  37. data/lib/bson/decimal128.py +314 -0
  38. data/lib/bson/errors.py +35 -0
  39. data/lib/bson/int64.py +39 -0
  40. data/lib/bson/json_util.py +874 -0
  41. data/lib/bson/max_key.py +55 -0
  42. data/lib/bson/min_key.py +55 -0
  43. data/lib/bson/objectid.py +286 -0
  44. data/lib/bson/py.typed +2 -0
  45. data/lib/bson/raw_bson.py +175 -0
  46. data/lib/bson/regex.py +135 -0
  47. data/lib/bson/son.py +208 -0
  48. data/lib/bson/timestamp.py +124 -0
  49. data/lib/bson/tz_util.py +52 -0
  50. data/lib/gridfs/__init__.py +1015 -0
  51. data/lib/gridfs/__pycache__/__init__.cpython-310.pyc +0 -0
  52. data/lib/gridfs/__pycache__/errors.cpython-310.pyc +0 -0
  53. data/lib/gridfs/__pycache__/grid_file.cpython-310.pyc +0 -0
  54. data/lib/gridfs/errors.py +33 -0
  55. data/lib/gridfs/grid_file.py +907 -0
  56. data/lib/gridfs/py.typed +2 -0
  57. data/lib/pymongo/__init__.py +185 -0
  58. data/lib/pymongo/__pycache__/__init__.cpython-310.pyc +0 -0
  59. data/lib/pymongo/__pycache__/_csot.cpython-310.pyc +0 -0
  60. data/lib/pymongo/__pycache__/aggregation.cpython-310.pyc +0 -0
  61. data/lib/pymongo/__pycache__/auth.cpython-310.pyc +0 -0
  62. data/lib/pymongo/__pycache__/auth_aws.cpython-310.pyc +0 -0
  63. data/lib/pymongo/__pycache__/bulk.cpython-310.pyc +0 -0
  64. data/lib/pymongo/__pycache__/change_stream.cpython-310.pyc +0 -0
  65. data/lib/pymongo/__pycache__/client_options.cpython-310.pyc +0 -0
  66. data/lib/pymongo/__pycache__/client_session.cpython-310.pyc +0 -0
  67. data/lib/pymongo/__pycache__/collation.cpython-310.pyc +0 -0
  68. data/lib/pymongo/__pycache__/collection.cpython-310.pyc +0 -0
  69. data/lib/pymongo/__pycache__/command_cursor.cpython-310.pyc +0 -0
  70. data/lib/pymongo/__pycache__/common.cpython-310.pyc +0 -0
  71. data/lib/pymongo/__pycache__/compression_support.cpython-310.pyc +0 -0
  72. data/lib/pymongo/__pycache__/cursor.cpython-310.pyc +0 -0
  73. data/lib/pymongo/__pycache__/daemon.cpython-310.pyc +0 -0
  74. data/lib/pymongo/__pycache__/database.cpython-310.pyc +0 -0
  75. data/lib/pymongo/__pycache__/driver_info.cpython-310.pyc +0 -0
  76. data/lib/pymongo/__pycache__/encryption.cpython-310.pyc +0 -0
  77. data/lib/pymongo/__pycache__/encryption_options.cpython-310.pyc +0 -0
  78. data/lib/pymongo/__pycache__/errors.cpython-310.pyc +0 -0
  79. data/lib/pymongo/__pycache__/event_loggers.cpython-310.pyc +0 -0
  80. data/lib/pymongo/__pycache__/hello.cpython-310.pyc +0 -0
  81. data/lib/pymongo/__pycache__/helpers.cpython-310.pyc +0 -0
  82. data/lib/pymongo/__pycache__/max_staleness_selectors.cpython-310.pyc +0 -0
  83. data/lib/pymongo/__pycache__/message.cpython-310.pyc +0 -0
  84. data/lib/pymongo/__pycache__/mongo_client.cpython-310.pyc +0 -0
  85. data/lib/pymongo/__pycache__/monitor.cpython-310.pyc +0 -0
  86. data/lib/pymongo/__pycache__/monitoring.cpython-310.pyc +0 -0
  87. data/lib/pymongo/__pycache__/network.cpython-310.pyc +0 -0
  88. data/lib/pymongo/__pycache__/ocsp_cache.cpython-310.pyc +0 -0
  89. data/lib/pymongo/__pycache__/ocsp_support.cpython-310.pyc +0 -0
  90. data/lib/pymongo/__pycache__/operations.cpython-310.pyc +0 -0
  91. data/lib/pymongo/__pycache__/periodic_executor.cpython-310.pyc +0 -0
  92. data/lib/pymongo/__pycache__/pool.cpython-310.pyc +0 -0
  93. data/lib/pymongo/__pycache__/pyopenssl_context.cpython-310.pyc +0 -0
  94. data/lib/pymongo/__pycache__/read_concern.cpython-310.pyc +0 -0
  95. data/lib/pymongo/__pycache__/read_preferences.cpython-310.pyc +0 -0
  96. data/lib/pymongo/__pycache__/response.cpython-310.pyc +0 -0
  97. data/lib/pymongo/__pycache__/results.cpython-310.pyc +0 -0
  98. data/lib/pymongo/__pycache__/saslprep.cpython-310.pyc +0 -0
  99. data/lib/pymongo/__pycache__/server.cpython-310.pyc +0 -0
  100. data/lib/pymongo/__pycache__/server_api.cpython-310.pyc +0 -0
  101. data/lib/pymongo/__pycache__/server_description.cpython-310.pyc +0 -0
  102. data/lib/pymongo/__pycache__/server_selectors.cpython-310.pyc +0 -0
  103. data/lib/pymongo/__pycache__/server_type.cpython-310.pyc +0 -0
  104. data/lib/pymongo/__pycache__/settings.cpython-310.pyc +0 -0
  105. data/lib/pymongo/__pycache__/socket_checker.cpython-310.pyc +0 -0
  106. data/lib/pymongo/__pycache__/srv_resolver.cpython-310.pyc +0 -0
  107. data/lib/pymongo/__pycache__/ssl_context.cpython-310.pyc +0 -0
  108. data/lib/pymongo/__pycache__/ssl_support.cpython-310.pyc +0 -0
  109. data/lib/pymongo/__pycache__/topology.cpython-310.pyc +0 -0
  110. data/lib/pymongo/__pycache__/topology_description.cpython-310.pyc +0 -0
  111. data/lib/pymongo/__pycache__/typings.cpython-310.pyc +0 -0
  112. data/lib/pymongo/__pycache__/uri_parser.cpython-310.pyc +0 -0
  113. data/lib/pymongo/__pycache__/write_concern.cpython-310.pyc +0 -0
  114. data/lib/pymongo/_cmessage.cpython-310-x86_64-linux-gnu.so +0 -0
  115. data/lib/pymongo/_csot.py +118 -0
  116. data/lib/pymongo/aggregation.py +229 -0
  117. data/lib/pymongo/auth.py +549 -0
  118. data/lib/pymongo/auth_aws.py +94 -0
  119. data/lib/pymongo/bulk.py +513 -0
  120. data/lib/pymongo/change_stream.py +457 -0
  121. data/lib/pymongo/client_options.py +302 -0
  122. data/lib/pymongo/client_session.py +1112 -0
  123. data/lib/pymongo/collation.py +224 -0
  124. data/lib/pymongo/collection.py +3204 -0
  125. data/lib/pymongo/command_cursor.py +353 -0
  126. data/lib/pymongo/common.py +984 -0
  127. data/lib/pymongo/compression_support.py +149 -0
  128. data/lib/pymongo/cursor.py +1345 -0
  129. data/lib/pymongo/daemon.py +141 -0
  130. data/lib/pymongo/database.py +1202 -0
  131. data/lib/pymongo/driver_info.py +42 -0
  132. data/lib/pymongo/encryption.py +884 -0
  133. data/lib/pymongo/encryption_options.py +221 -0
  134. data/lib/pymongo/errors.py +365 -0
  135. data/lib/pymongo/event_loggers.py +221 -0
  136. data/lib/pymongo/hello.py +219 -0
  137. data/lib/pymongo/helpers.py +259 -0
  138. data/lib/pymongo/max_staleness_selectors.py +114 -0
  139. data/lib/pymongo/message.py +1440 -0
  140. data/lib/pymongo/mongo_client.py +2144 -0
  141. data/lib/pymongo/monitor.py +440 -0
  142. data/lib/pymongo/monitoring.py +1801 -0
  143. data/lib/pymongo/network.py +311 -0
  144. data/lib/pymongo/ocsp_cache.py +87 -0
  145. data/lib/pymongo/ocsp_support.py +372 -0
  146. data/lib/pymongo/operations.py +507 -0
  147. data/lib/pymongo/periodic_executor.py +183 -0
  148. data/lib/pymongo/pool.py +1660 -0
  149. data/lib/pymongo/py.typed +2 -0
  150. data/lib/pymongo/pyopenssl_context.py +383 -0
  151. data/lib/pymongo/read_concern.py +75 -0
  152. data/lib/pymongo/read_preferences.py +609 -0
  153. data/lib/pymongo/response.py +109 -0
  154. data/lib/pymongo/results.py +217 -0
  155. data/lib/pymongo/saslprep.py +113 -0
  156. data/lib/pymongo/server.py +247 -0
  157. data/lib/pymongo/server_api.py +170 -0
  158. data/lib/pymongo/server_description.py +285 -0
  159. data/lib/pymongo/server_selectors.py +153 -0
  160. data/lib/pymongo/server_type.py +32 -0
  161. data/lib/pymongo/settings.py +159 -0
  162. data/lib/pymongo/socket_checker.py +104 -0
  163. data/lib/pymongo/srv_resolver.py +126 -0
  164. data/lib/pymongo/ssl_context.py +39 -0
  165. data/lib/pymongo/ssl_support.py +99 -0
  166. data/lib/pymongo/topology.py +890 -0
  167. data/lib/pymongo/topology_description.py +639 -0
  168. data/lib/pymongo/typings.py +39 -0
  169. data/lib/pymongo/uri_parser.py +624 -0
  170. data/lib/pymongo/write_concern.py +129 -0
  171. data/lib/pymongo-4.2.0.dist-info/INSTALLER +1 -0
  172. data/lib/pymongo-4.2.0.dist-info/LICENSE +201 -0
  173. data/lib/pymongo-4.2.0.dist-info/METADATA +250 -0
  174. data/lib/pymongo-4.2.0.dist-info/RECORD +167 -0
  175. data/lib/pymongo-4.2.0.dist-info/REQUESTED +0 -0
  176. data/lib/pymongo-4.2.0.dist-info/WHEEL +6 -0
  177. data/lib/pymongo-4.2.0.dist-info/top_level.txt +3 -0
  178. data/lib/sensu-plugins-mongodb/metrics.rb +391 -0
  179. data/lib/sensu-plugins-mongodb/version.rb +9 -0
  180. data/lib/sensu-plugins-mongodb.rb +1 -0
  181. metadata +407 -0
@@ -0,0 +1,302 @@
1
+ # Copyright 2014-present MongoDB, Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"); you
4
+ # may not use this file except in compliance with the License. You
5
+ # 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
12
+ # implied. See the License for the specific language governing
13
+ # permissions and limitations under the License.
14
+
15
+ """Tools to parse mongo client options."""
16
+
17
+ from typing import Optional
18
+
19
+ from bson.codec_options import _parse_codec_options
20
+ from pymongo import common
21
+ from pymongo.auth import _build_credentials_tuple
22
+ from pymongo.common import validate_boolean
23
+ from pymongo.compression_support import CompressionSettings
24
+ from pymongo.errors import ConfigurationError
25
+ from pymongo.monitoring import _EventListeners
26
+ from pymongo.pool import PoolOptions
27
+ from pymongo.read_concern import ReadConcern
28
+ from pymongo.read_preferences import make_read_preference, read_pref_mode_from_name
29
+ from pymongo.server_selectors import any_server_selector
30
+ from pymongo.ssl_support import get_ssl_context
31
+ from pymongo.write_concern import WriteConcern
32
+
33
+
34
+ def _parse_credentials(username, password, database, options):
35
+ """Parse authentication credentials."""
36
+ mechanism = options.get("authmechanism", "DEFAULT" if username else None)
37
+ source = options.get("authsource")
38
+ if username or mechanism:
39
+ return _build_credentials_tuple(mechanism, source, username, password, options, database)
40
+ return None
41
+
42
+
43
+ def _parse_read_preference(options):
44
+ """Parse read preference options."""
45
+ if "read_preference" in options:
46
+ return options["read_preference"]
47
+
48
+ name = options.get("readpreference", "primary")
49
+ mode = read_pref_mode_from_name(name)
50
+ tags = options.get("readpreferencetags")
51
+ max_staleness = options.get("maxstalenessseconds", -1)
52
+ return make_read_preference(mode, tags, max_staleness)
53
+
54
+
55
+ def _parse_write_concern(options):
56
+ """Parse write concern options."""
57
+ concern = options.get("w")
58
+ wtimeout = options.get("wtimeoutms")
59
+ j = options.get("journal")
60
+ fsync = options.get("fsync")
61
+ return WriteConcern(concern, wtimeout, j, fsync)
62
+
63
+
64
+ def _parse_read_concern(options):
65
+ """Parse read concern options."""
66
+ concern = options.get("readconcernlevel")
67
+ return ReadConcern(concern)
68
+
69
+
70
+ def _parse_ssl_options(options):
71
+ """Parse ssl options."""
72
+ use_tls = options.get("tls")
73
+ if use_tls is not None:
74
+ validate_boolean("tls", use_tls)
75
+
76
+ certfile = options.get("tlscertificatekeyfile")
77
+ passphrase = options.get("tlscertificatekeyfilepassword")
78
+ ca_certs = options.get("tlscafile")
79
+ crlfile = options.get("tlscrlfile")
80
+ allow_invalid_certificates = options.get("tlsallowinvalidcertificates", False)
81
+ allow_invalid_hostnames = options.get("tlsallowinvalidhostnames", False)
82
+ disable_ocsp_endpoint_check = options.get("tlsdisableocspendpointcheck", False)
83
+
84
+ enabled_tls_opts = []
85
+ for opt in (
86
+ "tlscertificatekeyfile",
87
+ "tlscertificatekeyfilepassword",
88
+ "tlscafile",
89
+ "tlscrlfile",
90
+ ):
91
+ # Any non-null value of these options implies tls=True.
92
+ if opt in options and options[opt]:
93
+ enabled_tls_opts.append(opt)
94
+ for opt in (
95
+ "tlsallowinvalidcertificates",
96
+ "tlsallowinvalidhostnames",
97
+ "tlsdisableocspendpointcheck",
98
+ ):
99
+ # A value of False for these options implies tls=True.
100
+ if opt in options and not options[opt]:
101
+ enabled_tls_opts.append(opt)
102
+
103
+ if enabled_tls_opts:
104
+ if use_tls is None:
105
+ # Implicitly enable TLS when one of the tls* options is set.
106
+ use_tls = True
107
+ elif not use_tls:
108
+ # Error since tls is explicitly disabled but a tls option is set.
109
+ raise ConfigurationError(
110
+ "TLS has not been enabled but the "
111
+ "following tls parameters have been set: "
112
+ "%s. Please set `tls=True` or remove." % ", ".join(enabled_tls_opts)
113
+ )
114
+
115
+ if use_tls:
116
+ ctx = get_ssl_context(
117
+ certfile,
118
+ passphrase,
119
+ ca_certs,
120
+ crlfile,
121
+ allow_invalid_certificates,
122
+ allow_invalid_hostnames,
123
+ disable_ocsp_endpoint_check,
124
+ )
125
+ return ctx, allow_invalid_hostnames
126
+ return None, allow_invalid_hostnames
127
+
128
+
129
+ def _parse_pool_options(username, password, database, options):
130
+ """Parse connection pool options."""
131
+ credentials = _parse_credentials(username, password, database, options)
132
+ max_pool_size = options.get("maxpoolsize", common.MAX_POOL_SIZE)
133
+ min_pool_size = options.get("minpoolsize", common.MIN_POOL_SIZE)
134
+ max_idle_time_seconds = options.get("maxidletimems", common.MAX_IDLE_TIME_SEC)
135
+ if max_pool_size is not None and min_pool_size > max_pool_size:
136
+ raise ValueError("minPoolSize must be smaller or equal to maxPoolSize")
137
+ connect_timeout = options.get("connecttimeoutms", common.CONNECT_TIMEOUT)
138
+ socket_timeout = options.get("sockettimeoutms")
139
+ wait_queue_timeout = options.get("waitqueuetimeoutms", common.WAIT_QUEUE_TIMEOUT)
140
+ event_listeners = options.get("event_listeners")
141
+ appname = options.get("appname")
142
+ driver = options.get("driver")
143
+ server_api = options.get("server_api")
144
+ compression_settings = CompressionSettings(
145
+ options.get("compressors", []), options.get("zlibcompressionlevel", -1)
146
+ )
147
+ ssl_context, tls_allow_invalid_hostnames = _parse_ssl_options(options)
148
+ load_balanced = options.get("loadbalanced")
149
+ max_connecting = options.get("maxconnecting", common.MAX_CONNECTING)
150
+ return PoolOptions(
151
+ max_pool_size,
152
+ min_pool_size,
153
+ max_idle_time_seconds,
154
+ connect_timeout,
155
+ socket_timeout,
156
+ wait_queue_timeout,
157
+ ssl_context,
158
+ tls_allow_invalid_hostnames,
159
+ _EventListeners(event_listeners),
160
+ appname,
161
+ driver,
162
+ compression_settings,
163
+ max_connecting=max_connecting,
164
+ server_api=server_api,
165
+ load_balanced=load_balanced,
166
+ credentials=credentials,
167
+ )
168
+
169
+
170
+ class ClientOptions(object):
171
+ """Read only configuration options for a MongoClient.
172
+
173
+ Should not be instantiated directly by application developers. Access
174
+ a client's options via :attr:`pymongo.mongo_client.MongoClient.options`
175
+ instead.
176
+ """
177
+
178
+ def __init__(self, username, password, database, options):
179
+ self.__options = options
180
+ self.__codec_options = _parse_codec_options(options)
181
+ self.__direct_connection = options.get("directconnection")
182
+ self.__local_threshold_ms = options.get("localthresholdms", common.LOCAL_THRESHOLD_MS)
183
+ # self.__server_selection_timeout is in seconds. Must use full name for
184
+ # common.SERVER_SELECTION_TIMEOUT because it is set directly by tests.
185
+ self.__server_selection_timeout = options.get(
186
+ "serverselectiontimeoutms", common.SERVER_SELECTION_TIMEOUT
187
+ )
188
+ self.__pool_options = _parse_pool_options(username, password, database, options)
189
+ self.__read_preference = _parse_read_preference(options)
190
+ self.__replica_set_name = options.get("replicaset")
191
+ self.__write_concern = _parse_write_concern(options)
192
+ self.__read_concern = _parse_read_concern(options)
193
+ self.__connect = options.get("connect")
194
+ self.__heartbeat_frequency = options.get("heartbeatfrequencyms", common.HEARTBEAT_FREQUENCY)
195
+ self.__retry_writes = options.get("retrywrites", common.RETRY_WRITES)
196
+ self.__retry_reads = options.get("retryreads", common.RETRY_READS)
197
+ self.__server_selector = options.get("server_selector", any_server_selector)
198
+ self.__auto_encryption_opts = options.get("auto_encryption_opts")
199
+ self.__load_balanced = options.get("loadbalanced")
200
+ self.__timeout = options.get("timeoutms")
201
+
202
+ @property
203
+ def _options(self):
204
+ """The original options used to create this ClientOptions."""
205
+ return self.__options
206
+
207
+ @property
208
+ def connect(self):
209
+ """Whether to begin discovering a MongoDB topology automatically."""
210
+ return self.__connect
211
+
212
+ @property
213
+ def codec_options(self):
214
+ """A :class:`~bson.codec_options.CodecOptions` instance."""
215
+ return self.__codec_options
216
+
217
+ @property
218
+ def direct_connection(self):
219
+ """Whether to connect to the deployment in 'Single' topology."""
220
+ return self.__direct_connection
221
+
222
+ @property
223
+ def local_threshold_ms(self):
224
+ """The local threshold for this instance."""
225
+ return self.__local_threshold_ms
226
+
227
+ @property
228
+ def server_selection_timeout(self):
229
+ """The server selection timeout for this instance in seconds."""
230
+ return self.__server_selection_timeout
231
+
232
+ @property
233
+ def server_selector(self):
234
+ return self.__server_selector
235
+
236
+ @property
237
+ def heartbeat_frequency(self):
238
+ """The monitoring frequency in seconds."""
239
+ return self.__heartbeat_frequency
240
+
241
+ @property
242
+ def pool_options(self):
243
+ """A :class:`~pymongo.pool.PoolOptions` instance."""
244
+ return self.__pool_options
245
+
246
+ @property
247
+ def read_preference(self):
248
+ """A read preference instance."""
249
+ return self.__read_preference
250
+
251
+ @property
252
+ def replica_set_name(self):
253
+ """Replica set name or None."""
254
+ return self.__replica_set_name
255
+
256
+ @property
257
+ def write_concern(self):
258
+ """A :class:`~pymongo.write_concern.WriteConcern` instance."""
259
+ return self.__write_concern
260
+
261
+ @property
262
+ def read_concern(self):
263
+ """A :class:`~pymongo.read_concern.ReadConcern` instance."""
264
+ return self.__read_concern
265
+
266
+ @property
267
+ def timeout(self) -> Optional[float]:
268
+ """The configured timeoutMS converted to seconds, or None.
269
+
270
+ ..versionadded: 4.2
271
+ """
272
+ return self.__timeout
273
+
274
+ @property
275
+ def retry_writes(self):
276
+ """If this instance should retry supported write operations."""
277
+ return self.__retry_writes
278
+
279
+ @property
280
+ def retry_reads(self):
281
+ """If this instance should retry supported read operations."""
282
+ return self.__retry_reads
283
+
284
+ @property
285
+ def auto_encryption_opts(self):
286
+ """A :class:`~pymongo.encryption.AutoEncryptionOpts` or None."""
287
+ return self.__auto_encryption_opts
288
+
289
+ @property
290
+ def load_balanced(self):
291
+ """True if the client was configured to connect to a load balancer."""
292
+ return self.__load_balanced
293
+
294
+ @property
295
+ def event_listeners(self):
296
+ """The event listeners registered for this client.
297
+
298
+ See :mod:`~pymongo.monitoring` for details.
299
+
300
+ .. versionadded:: 4.0
301
+ """
302
+ return self.__pool_options._event_listeners.event_listeners()