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,229 @@
1
+ # Copyright 2019-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
+ """Perform aggregation operations on a collection or database."""
16
+
17
+ from bson.son import SON
18
+ from pymongo import common
19
+ from pymongo.collation import validate_collation_or_none
20
+ from pymongo.errors import ConfigurationError
21
+ from pymongo.read_preferences import ReadPreference, _AggWritePref
22
+
23
+
24
+ class _AggregationCommand(object):
25
+ """The internal abstract base class for aggregation cursors.
26
+
27
+ Should not be called directly by application developers. Use
28
+ :meth:`pymongo.collection.Collection.aggregate`, or
29
+ :meth:`pymongo.database.Database.aggregate` instead.
30
+ """
31
+
32
+ def __init__(
33
+ self,
34
+ target,
35
+ cursor_class,
36
+ pipeline,
37
+ options,
38
+ explicit_session,
39
+ let=None,
40
+ user_fields=None,
41
+ result_processor=None,
42
+ comment=None,
43
+ ):
44
+ if "explain" in options:
45
+ raise ConfigurationError(
46
+ "The explain option is not supported. Use Database.command instead."
47
+ )
48
+
49
+ self._target = target
50
+
51
+ pipeline = common.validate_list("pipeline", pipeline)
52
+ self._pipeline = pipeline
53
+ self._performs_write = False
54
+ if pipeline and ("$out" in pipeline[-1] or "$merge" in pipeline[-1]):
55
+ self._performs_write = True
56
+
57
+ common.validate_is_mapping("options", options)
58
+ if let is not None:
59
+ common.validate_is_mapping("let", let)
60
+ options["let"] = let
61
+ if comment is not None:
62
+ options["comment"] = comment
63
+ self._options = options
64
+
65
+ # This is the batchSize that will be used for setting the initial
66
+ # batchSize for the cursor, as well as the subsequent getMores.
67
+ self._batch_size = common.validate_non_negative_integer_or_none(
68
+ "batchSize", self._options.pop("batchSize", None)
69
+ )
70
+
71
+ # If the cursor option is already specified, avoid overriding it.
72
+ self._options.setdefault("cursor", {})
73
+ # If the pipeline performs a write, we ignore the initial batchSize
74
+ # since the server doesn't return results in this case.
75
+ if self._batch_size is not None and not self._performs_write:
76
+ self._options["cursor"]["batchSize"] = self._batch_size
77
+
78
+ self._cursor_class = cursor_class
79
+ self._explicit_session = explicit_session
80
+ self._user_fields = user_fields
81
+ self._result_processor = result_processor
82
+
83
+ self._collation = validate_collation_or_none(options.pop("collation", None))
84
+
85
+ self._max_await_time_ms = options.pop("maxAwaitTimeMS", None)
86
+ self._write_preference = None
87
+
88
+ @property
89
+ def _aggregation_target(self):
90
+ """The argument to pass to the aggregate command."""
91
+ raise NotImplementedError
92
+
93
+ @property
94
+ def _cursor_namespace(self):
95
+ """The namespace in which the aggregate command is run."""
96
+ raise NotImplementedError
97
+
98
+ def _cursor_collection(self, cursor_doc):
99
+ """The Collection used for the aggregate command cursor."""
100
+ raise NotImplementedError
101
+
102
+ @property
103
+ def _database(self):
104
+ """The database against which the aggregation command is run."""
105
+ raise NotImplementedError
106
+
107
+ def get_read_preference(self, session):
108
+ if self._write_preference:
109
+ return self._write_preference
110
+ pref = self._target._read_preference_for(session)
111
+ if self._performs_write and pref != ReadPreference.PRIMARY:
112
+ self._write_preference = pref = _AggWritePref(pref)
113
+ return pref
114
+
115
+ def get_cursor(self, session, server, sock_info, read_preference):
116
+ # Serialize command.
117
+ cmd = SON([("aggregate", self._aggregation_target), ("pipeline", self._pipeline)])
118
+ cmd.update(self._options)
119
+
120
+ # Apply this target's read concern if:
121
+ # readConcern has not been specified as a kwarg and either
122
+ # - server version is >= 4.2 or
123
+ # - server version is >= 3.2 and pipeline doesn't use $out
124
+ if ("readConcern" not in cmd) and (
125
+ not self._performs_write or (sock_info.max_wire_version >= 8)
126
+ ):
127
+ read_concern = self._target.read_concern
128
+ else:
129
+ read_concern = None
130
+
131
+ # Apply this target's write concern if:
132
+ # writeConcern has not been specified as a kwarg and pipeline doesn't
133
+ # perform a write operation
134
+ if "writeConcern" not in cmd and self._performs_write:
135
+ write_concern = self._target._write_concern_for(session)
136
+ else:
137
+ write_concern = None
138
+
139
+ # Run command.
140
+ result = sock_info.command(
141
+ self._database.name,
142
+ cmd,
143
+ read_preference,
144
+ self._target.codec_options,
145
+ parse_write_concern_error=True,
146
+ read_concern=read_concern,
147
+ write_concern=write_concern,
148
+ collation=self._collation,
149
+ session=session,
150
+ client=self._database.client,
151
+ user_fields=self._user_fields,
152
+ )
153
+
154
+ if self._result_processor:
155
+ self._result_processor(result, sock_info)
156
+
157
+ # Extract cursor from result or mock/fake one if necessary.
158
+ if "cursor" in result:
159
+ cursor = result["cursor"]
160
+ else:
161
+ # Unacknowledged $out/$merge write. Fake a cursor.
162
+ cursor = {
163
+ "id": 0,
164
+ "firstBatch": result.get("result", []),
165
+ "ns": self._cursor_namespace,
166
+ }
167
+
168
+ # Create and return cursor instance.
169
+ cmd_cursor = self._cursor_class(
170
+ self._cursor_collection(cursor),
171
+ cursor,
172
+ sock_info.address,
173
+ batch_size=self._batch_size or 0,
174
+ max_await_time_ms=self._max_await_time_ms,
175
+ session=session,
176
+ explicit_session=self._explicit_session,
177
+ comment=self._options.get("comment"),
178
+ )
179
+ cmd_cursor._maybe_pin_connection(sock_info)
180
+ return cmd_cursor
181
+
182
+
183
+ class _CollectionAggregationCommand(_AggregationCommand):
184
+ @property
185
+ def _aggregation_target(self):
186
+ return self._target.name
187
+
188
+ @property
189
+ def _cursor_namespace(self):
190
+ return self._target.full_name
191
+
192
+ def _cursor_collection(self, cursor):
193
+ """The Collection used for the aggregate command cursor."""
194
+ return self._target
195
+
196
+ @property
197
+ def _database(self):
198
+ return self._target.database
199
+
200
+
201
+ class _CollectionRawAggregationCommand(_CollectionAggregationCommand):
202
+ def __init__(self, *args, **kwargs):
203
+ super(_CollectionRawAggregationCommand, self).__init__(*args, **kwargs)
204
+
205
+ # For raw-batches, we set the initial batchSize for the cursor to 0.
206
+ if not self._performs_write:
207
+ self._options["cursor"]["batchSize"] = 0
208
+
209
+
210
+ class _DatabaseAggregationCommand(_AggregationCommand):
211
+ @property
212
+ def _aggregation_target(self):
213
+ return 1
214
+
215
+ @property
216
+ def _cursor_namespace(self):
217
+ return "%s.$cmd.aggregate" % (self._target.name,)
218
+
219
+ @property
220
+ def _database(self):
221
+ return self._target
222
+
223
+ def _cursor_collection(self, cursor):
224
+ """The Collection used for the aggregate command cursor."""
225
+ # Collection level aggregate may not always return the "ns" field
226
+ # according to our MockupDB tests. Let's handle that case for db level
227
+ # aggregate too by defaulting to the <db>.$cmd.aggregate namespace.
228
+ _, collname = cursor.get("ns", self._cursor_namespace).split(".", 1)
229
+ return self._database[collname]