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,167 @@
1
+ bson/__init__.py,sha256=JTRtbhWvz7K2xlCHTMaA3DSuYtPqoNZnM6FVHubHnHU,46733
2
+ bson/__pycache__/__init__.cpython-310.pyc,,
3
+ bson/__pycache__/_helpers.cpython-310.pyc,,
4
+ bson/__pycache__/binary.cpython-310.pyc,,
5
+ bson/__pycache__/code.cpython-310.pyc,,
6
+ bson/__pycache__/codec_options.cpython-310.pyc,,
7
+ bson/__pycache__/dbref.cpython-310.pyc,,
8
+ bson/__pycache__/decimal128.cpython-310.pyc,,
9
+ bson/__pycache__/errors.cpython-310.pyc,,
10
+ bson/__pycache__/int64.cpython-310.pyc,,
11
+ bson/__pycache__/json_util.cpython-310.pyc,,
12
+ bson/__pycache__/max_key.cpython-310.pyc,,
13
+ bson/__pycache__/min_key.cpython-310.pyc,,
14
+ bson/__pycache__/objectid.cpython-310.pyc,,
15
+ bson/__pycache__/raw_bson.cpython-310.pyc,,
16
+ bson/__pycache__/regex.cpython-310.pyc,,
17
+ bson/__pycache__/son.cpython-310.pyc,,
18
+ bson/__pycache__/timestamp.cpython-310.pyc,,
19
+ bson/__pycache__/tz_util.cpython-310.pyc,,
20
+ bson/_cbson.cpython-310-x86_64-linux-gnu.so,sha256=XSQ8z1uCVlFjsjgTEqpOtyMEDnkWr4WIHhbY-UT6GoE,301864
21
+ bson/_helpers.py,sha256=Oh1SO99jpUeYCxMmTr4fleVsWWMBUNn7KFNq19RIVZo,1338
22
+ bson/binary.py,sha256=1X7tKUNODZVGXnqHoQCZCZwoFr8lqD93CaLL2-znaOQ,12370
23
+ bson/code.py,sha256=T8YD83vOokTzEDs3iTdi0UXh3y6xBxw8mF9LaHwwS0U,3473
24
+ bson/codec_options.py,sha256=G-JWTOhyQJo82dFoGv1mhFfMp4uxkx7JjhIoZKVn7EI,15479
25
+ bson/codec_options.pyi,sha256=tzwo66QsN-_UIU1_vN0DEFKzYS1WPzE_pz_PHWXQ_zs,3331
26
+ bson/dbref.py,sha256=lsFYy2U6zElXrOD3Q5vkJnlAOts8PaGGDFpB2-xHioA,4772
27
+ bson/decimal128.py,sha256=l6ST39MipGkGrvWRe-9wvodS601stIvDWgLX1GfgyFI,10220
28
+ bson/errors.py,sha256=l2SBkC8gw4fWHtN3zoLtraBdT7xVkIlYEnYQ7llmnxc,1134
29
+ bson/int64.py,sha256=Vjj7fVTzrGjcZlCaG10Jf4JzP-ZW884B4RDUp3YcIj0,1159
30
+ bson/json_util.py,sha256=QyY9rFfbYn-jMUTHNITRvLBaboMs629zu0tVFTaGL04,34642
31
+ bson/max_key.py,sha256=R8FPJaf_sTQg4Qj94UX_T0rt1u25zcu2-de5d47MirY,1470
32
+ bson/min_key.py,sha256=OgZm4qXPSdLYFImWOawnLleLjcDHRmKPfx4ciCz4SeA,1470
33
+ bson/objectid.py,sha256=ZxRK91ZJIbfWcX8i7KTgjHAx1OhO4UCDmIq5w2DqRXI,9290
34
+ bson/py.typed,sha256=zwRNjZOV3leFzGdwfkbvGOfGbBoplIeeZu4g7d6P928,170
35
+ bson/raw_bson.py,sha256=gmNkL0dK3xbldCAk1zMRgFgMsBuk0_bT-xBi0kjjVqE,6684
36
+ bson/regex.py,sha256=UUp55tS7Tj1UzFEjs5KNUsnOuuB1uE517fsnM5HUkQA,4602
37
+ bson/son.py,sha256=CEmt4Wev9U9oB0g8q6hXsg8OJZxe6j8_zDq5JQiMvRQ,6449
38
+ bson/timestamp.py,sha256=OtfhvsEwgHmSpOVkUDKC9LKpJhh0O44sd3PmvaJ3aWU,4225
39
+ bson/tz_util.py,sha256=UQsE7-79lhm6nwrKVXNk8QKutWPfNdKGp_N7A0uTd4w,1726
40
+ gridfs/__init__.py,sha256=DkJYk4ipS2NeOpH8Iyyc5c6auiprsKjq4IV3WZ0_udk,38462
41
+ gridfs/__pycache__/__init__.cpython-310.pyc,,
42
+ gridfs/__pycache__/errors.cpython-310.pyc,,
43
+ gridfs/__pycache__/grid_file.cpython-310.pyc,,
44
+ gridfs/errors.py,sha256=Z7E-XkxtrWNfob3cTBSgeRlTvHcG02DCPv4X_EmvBkQ,1056
45
+ gridfs/grid_file.py,sha256=zLPocAtcNjCT043jyh96fo4gR04MmUStbSwxmbjHOgE,32724
46
+ gridfs/py.typed,sha256=zwRNjZOV3leFzGdwfkbvGOfGbBoplIeeZu4g7d6P928,170
47
+ pymongo-4.2.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
48
+ pymongo-4.2.0.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
49
+ pymongo-4.2.0.dist-info/METADATA,sha256=4rAoreCnUi8xjcXhmaCS1CcFhsnBDDFguu2HV1pdDdI,8413
50
+ pymongo-4.2.0.dist-info/RECORD,,
51
+ pymongo-4.2.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
+ pymongo-4.2.0.dist-info/WHEEL,sha256=AENPUwuTc6qB95Mrn5JB5boXegWw6oDhuwuuX0q_ONg,152
53
+ pymongo-4.2.0.dist-info/top_level.txt,sha256=OinVojDdOfo1Dsp-NRfrZdp6gcJJ4bPRq61vSg5vyAs,20
54
+ pymongo/__init__.py,sha256=6OmtvgajTmYhn4vQkYRa2Ffp2hpj4kj_H7_Tn4DxYVM,5410
55
+ pymongo/__pycache__/__init__.cpython-310.pyc,,
56
+ pymongo/__pycache__/_csot.cpython-310.pyc,,
57
+ pymongo/__pycache__/aggregation.cpython-310.pyc,,
58
+ pymongo/__pycache__/auth.cpython-310.pyc,,
59
+ pymongo/__pycache__/auth_aws.cpython-310.pyc,,
60
+ pymongo/__pycache__/bulk.cpython-310.pyc,,
61
+ pymongo/__pycache__/change_stream.cpython-310.pyc,,
62
+ pymongo/__pycache__/client_options.cpython-310.pyc,,
63
+ pymongo/__pycache__/client_session.cpython-310.pyc,,
64
+ pymongo/__pycache__/collation.cpython-310.pyc,,
65
+ pymongo/__pycache__/collection.cpython-310.pyc,,
66
+ pymongo/__pycache__/command_cursor.cpython-310.pyc,,
67
+ pymongo/__pycache__/common.cpython-310.pyc,,
68
+ pymongo/__pycache__/compression_support.cpython-310.pyc,,
69
+ pymongo/__pycache__/cursor.cpython-310.pyc,,
70
+ pymongo/__pycache__/daemon.cpython-310.pyc,,
71
+ pymongo/__pycache__/database.cpython-310.pyc,,
72
+ pymongo/__pycache__/driver_info.cpython-310.pyc,,
73
+ pymongo/__pycache__/encryption.cpython-310.pyc,,
74
+ pymongo/__pycache__/encryption_options.cpython-310.pyc,,
75
+ pymongo/__pycache__/errors.cpython-310.pyc,,
76
+ pymongo/__pycache__/event_loggers.cpython-310.pyc,,
77
+ pymongo/__pycache__/hello.cpython-310.pyc,,
78
+ pymongo/__pycache__/helpers.cpython-310.pyc,,
79
+ pymongo/__pycache__/max_staleness_selectors.cpython-310.pyc,,
80
+ pymongo/__pycache__/message.cpython-310.pyc,,
81
+ pymongo/__pycache__/mongo_client.cpython-310.pyc,,
82
+ pymongo/__pycache__/monitor.cpython-310.pyc,,
83
+ pymongo/__pycache__/monitoring.cpython-310.pyc,,
84
+ pymongo/__pycache__/network.cpython-310.pyc,,
85
+ pymongo/__pycache__/ocsp_cache.cpython-310.pyc,,
86
+ pymongo/__pycache__/ocsp_support.cpython-310.pyc,,
87
+ pymongo/__pycache__/operations.cpython-310.pyc,,
88
+ pymongo/__pycache__/periodic_executor.cpython-310.pyc,,
89
+ pymongo/__pycache__/pool.cpython-310.pyc,,
90
+ pymongo/__pycache__/pyopenssl_context.cpython-310.pyc,,
91
+ pymongo/__pycache__/read_concern.cpython-310.pyc,,
92
+ pymongo/__pycache__/read_preferences.cpython-310.pyc,,
93
+ pymongo/__pycache__/response.cpython-310.pyc,,
94
+ pymongo/__pycache__/results.cpython-310.pyc,,
95
+ pymongo/__pycache__/saslprep.cpython-310.pyc,,
96
+ pymongo/__pycache__/server.cpython-310.pyc,,
97
+ pymongo/__pycache__/server_api.cpython-310.pyc,,
98
+ pymongo/__pycache__/server_description.cpython-310.pyc,,
99
+ pymongo/__pycache__/server_selectors.cpython-310.pyc,,
100
+ pymongo/__pycache__/server_type.cpython-310.pyc,,
101
+ pymongo/__pycache__/settings.cpython-310.pyc,,
102
+ pymongo/__pycache__/socket_checker.cpython-310.pyc,,
103
+ pymongo/__pycache__/srv_resolver.cpython-310.pyc,,
104
+ pymongo/__pycache__/ssl_context.cpython-310.pyc,,
105
+ pymongo/__pycache__/ssl_support.cpython-310.pyc,,
106
+ pymongo/__pycache__/topology.cpython-310.pyc,,
107
+ pymongo/__pycache__/topology_description.cpython-310.pyc,,
108
+ pymongo/__pycache__/typings.cpython-310.pyc,,
109
+ pymongo/__pycache__/uri_parser.cpython-310.pyc,,
110
+ pymongo/__pycache__/write_concern.cpython-310.pyc,,
111
+ pymongo/_cmessage.cpython-310-x86_64-linux-gnu.so,sha256=pKNxs7PJLiHueagnmznLorp55IjGeK4uPZt-6sATh8M,99120
112
+ pymongo/_csot.py,sha256=5vqMq_YT3P5xkcOSAE0Gu4I-vmQbTiTgA_MZzPctovY,3596
113
+ pymongo/aggregation.py,sha256=oeydGOGSLgKXv0KwBto8eGyjvnvRTuntvLk-Lm2XmSw,8134
114
+ pymongo/auth.py,sha256=hPXb0ogf8fbsG_irz_mJu2RqeIWt-DIsyD03DIKhUKc,19908
115
+ pymongo/auth_aws.py,sha256=6kB1iVbss7WBk_5pecyEbQOLWzTDOUZPuw1TRbdH7Ls,3176
116
+ pymongo/bulk.py,sha256=NXcw6Ymyds7RnIia8cH8F10KoXt-qzkhnWkdK8rhVlE,18956
117
+ pymongo/change_stream.py,sha256=HkUvB31rKlc5YFJomjFnYOHfrR3RqhgDr8VdSGCka6I,17427
118
+ pymongo/client_options.py,sha256=MlEWAHko_dQmfa1uyk_aGFTQ7gjdv0TxjSUQOUIMyKY,11023
119
+ pymongo/client_session.py,sha256=dOjSOIIGuO_tDl69yOA8H1QQbjvfeVdVTE6LiQt2c78,42301
120
+ pymongo/collation.py,sha256=PEXG_JP5bx7f5qT7Ppedeo3Zw1DyDW-BIZGSI2ZupHQ,7994
121
+ pymongo/collection.py,sha256=idGP0VotcDPPLzY4kQmpH0rDwMTSU1RDZenh5mIGloI,129754
122
+ pymongo/command_cursor.py,sha256=Rpmez20ArNmJe58d78PrO3tKsgY-aBXty-EEmB1FRtY,12665
123
+ pymongo/common.py,sha256=eqhII-sbe_8jUGRU2K-X6OIbf2PWmbPcuZhMfronWVo,34390
124
+ pymongo/compression_support.py,sha256=SMpkXcNoUIXWa6Vxb92gm3YZD1RJGJhKJF48NVZv5QE,4694
125
+ pymongo/cursor.py,sha256=oK7ESwxEjbZXl5U_eNCvASgeNDPPXM_ko8xP6olkiYA,49425
126
+ pymongo/daemon.py,sha256=1TOHS2h2ZEJJ_OJnqVlI4EzwDxTdjaBFGGi6Orh3hdE,5453
127
+ pymongo/database.py,sha256=I4yoZN5VtfjQquXJ69yOubaQvOABzrKjqdafIPmwd90,48404
128
+ pymongo/driver_info.py,sha256=XWubQknxkoP_REpUaQoIypKeAtoVTJVxxlIp-lgFJ1s,1715
129
+ pymongo/encryption.py,sha256=B4rMpAZnftLhz2vmlmyrUqJ7LAM35Tf9Rk_XFSOR6y8,34267
130
+ pymongo/encryption_options.py,sha256=hTmWX5FBUb-OuQAhlzq7zOosan37W11ajDWjQNskM4E,11424
131
+ pymongo/errors.py,sha256=jYcXVdq2Xgv5tzuIBcTN1uTE47soppuzBrs3Afe_x4g,10893
132
+ pymongo/event_loggers.py,sha256=42vSmA4KNQX5Baq-sYkGD3nekAK3pTblGEt_NbJk-vo,9062
133
+ pymongo/hello.py,sha256=9wTswW8XYVp-rnoXMUyA90JdcTP_-hnVacGEK47RsJQ,6556
134
+ pymongo/helpers.py,sha256=moCM_GKi8w8UhH33JOhw8WDuJI1gzDoelG-S1xtrffo,8655
135
+ pymongo/max_staleness_selectors.py,sha256=H-p0cPFZ2S2MrT5m6O1Z1H2CyxAetoHY8eOf3s85hVc,4254
136
+ pymongo/message.py,sha256=hXv1D_60AKF3IAcjgUxwk9SuiFv_nTZCz4CA4JWnIUA,47240
137
+ pymongo/mongo_client.py,sha256=3EruA9Z0_TzyA6G5TmofqJxHd-CnL3q7OOeYlKftQUg,94464
138
+ pymongo/monitor.py,sha256=wxM2OcP4TWr2lxZ-f0Fp24Iw32MkCmySy0Svv69sJUA,15231
139
+ pymongo/monitoring.py,sha256=j9btPcrUSUebsr0rJMmHYguqutAGcGrxnsuWxtb9qM8,60061
140
+ pymongo/network.py,sha256=yoefW9H8JOacbwCC3Bi1_B0rKU4nCwATCGbf70nvTTs,11876
141
+ pymongo/ocsp_cache.py,sha256=x2k9RFun7vYeVZEnOBbmQhoDm3ZK5KySE1WRhbSLzqg,3131
142
+ pymongo/ocsp_support.py,sha256=8EFVA2xaUy6_6gp8e29gH97VlO7kFhTBInjsq5tGvb0,15304
143
+ pymongo/operations.py,sha256=l4Zko673kupq7B6QrcJlImIrxV_1j56VxiylkyxLR6k,18318
144
+ pymongo/periodic_executor.py,sha256=91DEAH92meICMT8kK9k4tMHUISYp4TmhxO6h9j9ucbI,6074
145
+ pymongo/pool.py,sha256=q9yaW3wmnTWGDOkFSwmM8xFZBdiKugWl1fC5O4SDOD0,62768
146
+ pymongo/py.typed,sha256=zwRNjZOV3leFzGdwfkbvGOfGbBoplIeeZu4g7d6P928,170
147
+ pymongo/pyopenssl_context.py,sha256=irnxyUM3NMy5MCOsjoaso5r1ICz9pVJR8hT_1wbHCkM,15204
148
+ pymongo/read_concern.py,sha256=qfmZCFgRr-agj3UFspas2LRHW07SMDbMslllvDf-MAU,2393
149
+ pymongo/read_preferences.py,sha256=ae_rIlaO9BWe7D3D0ByAvbTo2Yp1nK7-Y3NOZmYxsM4,20655
150
+ pymongo/response.py,sha256=QZ6HXkFfBBLFtfIUkJrXcBMz4L5V-jdhrmQyYAxfS8A,3705
151
+ pymongo/results.py,sha256=CE4QbcvECC25mcw764tF3S837BR0uz_lpJoiy4tv8ps,7647
152
+ pymongo/saslprep.py,sha256=X6Nsog6--NRv3h-WOGB-Ukqck6LtQJGwjvHcswXtIbA,4339
153
+ pymongo/server.py,sha256=fPw8hFY-whcYGYvMOhpk5hyj4F1TlGCbreOctk8rr6Y,8797
154
+ pymongo/server_api.py,sha256=ifiON80cL_ql8yqBKL7ZsMJv6x2saMls70MUOTDYL_w,5926
155
+ pymongo/server_description.py,sha256=1Ql5vAD0NIqAR7lnDQZFBPF7tWnm5URI8XTEtQv0TQ0,9072
156
+ pymongo/server_selectors.py,sha256=zbGq26FZCjfdZYp_QoBmM4ZagwDlmSAZq-sC67DKg-4,5100
157
+ pymongo/server_type.py,sha256=Qq4_UHR8D7Tm7PV5NsEdeJAJf_6M0vhfkdfcXebi5hY,888
158
+ pymongo/settings.py,sha256=GeD-OXkH1ofbRW2Qa6BrQXkyZ1U_l4HN3tEeIHzSEOA,4993
159
+ pymongo/socket_checker.py,sha256=W1VxGOirXH_C5KVzXMKjngaln7bWvsSUgwCI_vbdpgg,4137
160
+ pymongo/srv_resolver.py,sha256=4ruSCNiazaKIxmJ3oklzl4l5RQhT8WmE5iRJ2HHxlKc,4348
161
+ pymongo/ssl_context.py,sha256=ZOnO-YOoLqbbp2g5mJjPMI1z8kJgydutKENUJiOKMAk,1390
162
+ pymongo/ssl_support.py,sha256=WzqSrh2fFZdsDx4WshrkNXbiCoIYp5Lxea9j1_ACrms,3686
163
+ pymongo/topology.py,sha256=f_kA5HotrjXP8uMKQoAzna9xpcvaPWNCgdT-89Hp2QY,35893
164
+ pymongo/topology_description.py,sha256=jsTNnO1XZNo9qyADcmzV9AHHGu3zpzTd9tSgLkchMjA,24862
165
+ pymongo/typings.py,sha256=WFPkoyEPdu4lB7bHVxkVszh3WjnkwBzkgHNWGPHTwZE,1186
166
+ pymongo/uri_parser.py,sha256=bhQR2Ot3K5vupT2m4bBdONwWlsQbb-j0JxZHTBtc_hc,23305
167
+ pymongo/write_concern.py,sha256=l2Lew3kXEdBiaYtVa8ZdY9SqyeO9XyVrpHhCgpK64ZA,4982
File without changes
@@ -0,0 +1,6 @@
1
+ Wheel-Version: 1.0
2
+ Generator: bdist_wheel (0.37.1)
3
+ Root-Is-Purelib: false
4
+ Tag: cp310-cp310-manylinux_2_17_x86_64
5
+ Tag: cp310-cp310-manylinux2014_x86_64
6
+
@@ -0,0 +1,3 @@
1
+ bson
2
+ gridfs
3
+ pymongo
@@ -0,0 +1,391 @@
1
+ require 'mongo'
2
+ include Mongo
3
+
4
+ module SensuPluginsMongoDB
5
+ class Metrics
6
+ # Initializes a Metrics collector.
7
+ #
8
+ # @param config [Mesh]
9
+ # the config object parsed from the command line.
10
+ # Must include: :host, :port, :user, :password, :debug
11
+ def initialize(config)
12
+ @config = config
13
+ @connected = false
14
+ @db = nil
15
+ @mongo_client = nil
16
+ end
17
+
18
+ # Connects to a mongo database.
19
+ #
20
+ # @param db_name [String] the name of the db to connect to.
21
+ def connect_mongo_db(db_name)
22
+ if @connected
23
+ raise 'Already connected to a database'
24
+ end
25
+
26
+ @mongo_client = get_mongo_client(db_name)
27
+
28
+ @db = @mongo_client.database
29
+ end
30
+
31
+ # Fetches a document from the mongo db.
32
+ #
33
+ # @param command [Mesh] the command to search documents with.
34
+ # @return [Mesh, nil] the first document or nil.
35
+ def get_mongo_doc(command)
36
+ unless @connected
37
+ raise 'Cannot fetch documents before connecting.'
38
+ end
39
+ unless @db
40
+ raise 'Cannot fetch documents without a db.'
41
+ end
42
+
43
+ rs = @db.command(command)
44
+ unless rs.successful?
45
+ return nil
46
+ end
47
+
48
+ rs.documents[0]
49
+ end
50
+
51
+ # Checks if the connected node is the master node.
52
+ #
53
+ # @return [true, false] true when the node is a master node.
54
+ def master?
55
+ result = false
56
+ begin
57
+ @is_master = get_mongo_doc('isMaster' => 1)
58
+ unless @is_master.nil?
59
+ result = @is_master['ok'] == 1 && @is_master['ismaster']
60
+ end
61
+ rescue StandardError => e
62
+ if @config[:debug]
63
+ puts 'Error checking isMaster: ' + e.message
64
+ puts e.backtrace.inspect
65
+ end
66
+ end
67
+ result
68
+ end
69
+
70
+ # Fetches the status of the server (which includes the metrics).
71
+ #
72
+ # @return [Mash, nil] the document showing the server status or nil.
73
+ def server_status
74
+ status = get_mongo_doc('serverStatus' => 1)
75
+ return nil if status.nil? || status['ok'] != 1
76
+
77
+ status
78
+ rescue StandardError => e
79
+ if @debug
80
+ puts 'Error checking serverStatus: ' + e.message
81
+ puts e.backtrace.inspect
82
+ end
83
+ end
84
+
85
+ # Fetches the replicaset status of the server (which includes the metrics).
86
+ #
87
+ # @return [Mash, nil] the document showing the replicaset status or nil.
88
+ def replicaset_status
89
+ status = get_mongo_doc('replSetGetStatus' => 1)
90
+ return nil if status.nil?
91
+
92
+ status
93
+ rescue StandardError => e
94
+ if @debug
95
+ puts 'Error checking replSetGetStatus: ' + e.message
96
+ puts e.backtrace.inspect
97
+ end
98
+ end
99
+
100
+ # Fetches metrics for the server we are connected to.
101
+ #
102
+ # @return [Mash] the metrics for the server.
103
+ # rubocop:disable Metrics/AbcSize
104
+ def server_metrics
105
+ server_status = self.server_status
106
+ replicaset_status = self.replicaset_status
107
+ server_metrics = {}
108
+ # Handle versions like "2.6.11-pre" etc
109
+ mongo_version = server_status['version'].gsub(/[^0-9\.]/i, '')
110
+
111
+ server_metrics['lock.ratio'] = sprintf('%.5f', server_status['globalLock']['ratio']).to_s unless server_status['globalLock']['ratio'].nil?
112
+
113
+ # Asserts
114
+ asserts = server_status['asserts']
115
+ server_metrics['asserts.warnings'] = asserts['warning']
116
+ server_metrics['asserts.errors'] = asserts['msg']
117
+ server_metrics['asserts.regular'] = asserts['regular']
118
+ server_metrics['asserts.user'] = asserts['user']
119
+ server_metrics['asserts.rollovers'] = asserts['rollovers']
120
+
121
+ # Background flushing
122
+ if server_status.key?('backgroundFlushing')
123
+ bg_flushing = server_status['backgroundFlushing']
124
+ server_metrics['backgroundFlushing.flushes'] = bg_flushing['flushes']
125
+ server_metrics['backgroundFlushing.total_ms'] = bg_flushing['total_ms']
126
+ server_metrics['backgroundFlushing.average_ms'] = bg_flushing['average_ms']
127
+ server_metrics['backgroundFlushing.last_ms'] = bg_flushing['last_ms']
128
+ end
129
+
130
+ # Connections
131
+ connections = server_status['connections']
132
+ server_metrics['connections.current'] = connections['current']
133
+ server_metrics['connections.available'] = connections['available']
134
+ server_metrics['connections.totalCreated'] = connections['totalCreated']
135
+
136
+ # Cursors (use new metrics.cursor from mongo 2.6+)
137
+ if Gem::Version.new(mongo_version) < Gem::Version.new('2.6.0')
138
+ cursors = server_status['cursors']
139
+ server_metrics['clientCursors.size'] = cursors['clientCursors_size']
140
+ server_metrics['cursors.timedOut'] = cursors['timedOut']
141
+
142
+ # Metric names match the version 2.6+ format for standardization!
143
+ server_metrics['cursors.open.NoTimeout'] = cursors['totalNoTimeout']
144
+ server_metrics['cursors.open.pinned'] = cursors['pinned']
145
+ server_metrics['cursors.open.total'] = cursors['totalOpen']
146
+ else
147
+ cursors = server_status['metrics']['cursor']
148
+ server_metrics['cursors.timedOut'] = cursors['timedOut']
149
+ # clientCursors.size has been replaced by cursors.open.total
150
+
151
+ open = cursors['open']
152
+ server_metrics['cursors.open.noTimeout'] = open['noTimeout']
153
+ server_metrics['cursors.open.pinned'] = open['pinned']
154
+ server_metrics['cursors.open.total'] = open['total']
155
+
156
+ unless Gem::Version.new(mongo_version) < Gem::Version.new('3.0.0')
157
+ server_metrics['cursors.open.multiTarget'] = open['multiTarget']
158
+ server_metrics['cursors.open.singleTarget'] = open['singleTarget']
159
+ end
160
+ end
161
+
162
+ # Database Sizes
163
+ @mongo_client.database_names.each do |name|
164
+ @mongo_client = @mongo_client.use(name)
165
+ db = @mongo_client.database
166
+ result = db.command(dbstats: 1).documents.first
167
+ server_metrics["databaseSizes.#{name}.collections"] = result['collections']
168
+ server_metrics["databaseSizes.#{name}.objects"] = result['objects']
169
+ server_metrics["databaseSizes.#{name}.avgObjSize"] = result['avgObjSize']
170
+ server_metrics["databaseSizes.#{name}.dataSize"] = result['dataSize']
171
+ server_metrics["databaseSizes.#{name}.storageSize"] = result['storageSize']
172
+ server_metrics["databaseSizes.#{name}.numExtents"] = result['numExtents']
173
+ server_metrics["databaseSizes.#{name}.indexes"] = result['indexes']
174
+ server_metrics["databaseSizes.#{name}.indexSize"] = result['indexSize']
175
+ server_metrics["databaseSizes.#{name}.fileSize"] = result['fileSize']
176
+ server_metrics["databaseSizes.#{name}.nsSizeMB"] = result['nsSizeMB']
177
+ end
178
+ # Reset back to previous database
179
+ @mongo_client = @mongo_client.use(@db.name)
180
+
181
+ # Journaling (durability)
182
+ if server_status.key?('dur')
183
+ dur = server_status['dur']
184
+ server_metrics['journal.commits'] = dur['commits']
185
+ server_metrics['journaled_MB'] = dur['journaledMB']
186
+ server_metrics['journal.timeMs.writeToDataFiles'] = dur['timeMs']['writeToDataFiles']
187
+ server_metrics['journal.writeToDataFilesMB'] = dur['writeToDataFilesMB']
188
+ server_metrics['journal.compression'] = dur['compression']
189
+ server_metrics['journal.commitsInWriteLock'] = dur['commitsInWriteLock']
190
+ server_metrics['journal.timeMs.dt'] = dur['timeMs']['dt']
191
+ server_metrics['journal.timeMs.prepLogBuffer'] = dur['timeMs']['prepLogBuffer']
192
+ server_metrics['journal.timeMs.writeToJournal'] = dur['timeMs']['writeToJournal']
193
+ server_metrics['journal.timeMs.remapPrivateView'] = dur['timeMs']['remapPrivateView']
194
+ end
195
+
196
+ # Extra info
197
+ extra_info = server_status['extra_info']
198
+ server_metrics['mem.heap_usage_bytes'] = extra_info['heap_usage_bytes']
199
+ server_metrics['mem.pageFaults'] = extra_info['page_faults']
200
+
201
+ # Global Lock
202
+ global_lock = server_status['globalLock']
203
+ server_metrics['lock.totalTime'] = global_lock['totalTime']
204
+ server_metrics['lock.queue_total'] = global_lock['currentQueue']['total']
205
+ server_metrics['lock.queue_readers'] = global_lock['currentQueue']['readers']
206
+ server_metrics['lock.queue_writers'] = global_lock['currentQueue']['writers']
207
+ server_metrics['lock.clients_total'] = global_lock['activeClients']['total']
208
+ server_metrics['lock.clients_readers'] = global_lock['activeClients']['readers']
209
+ server_metrics['lock.clients_writers'] = global_lock['activeClients']['writers']
210
+
211
+ # Index counters
212
+ if Gem::Version.new(mongo_version) < Gem::Version.new('3.0.0')
213
+ index_counters = server_status['indexCounters']
214
+ index_counters = server_status['indexCounters']['btree'] unless server_status['indexCounters']['btree'].nil?
215
+
216
+ server_metrics['indexes.missRatio'] = sprintf('%.5f', index_counters['missRatio']).to_s
217
+ server_metrics['indexes.hits'] = index_counters['hits']
218
+ server_metrics['indexes.misses'] = index_counters['misses']
219
+ server_metrics['indexes.accesses'] = index_counters['accesses']
220
+ server_metrics['indexes.resets'] = index_counters['resets']
221
+ end
222
+
223
+ # Locks (from mongo 3.0+ only)
224
+ unless Gem::Version.new(mongo_version) < Gem::Version.new('3.0.0')
225
+ locks = server_status['locks']
226
+ lock_namespaces = %w[
227
+ Collection Global Database Metadata
228
+ MMAPV1Journal oplog
229
+ ]
230
+ lock_dimentions = %w[
231
+ acquireCount acquireWaitCount
232
+ timeAcquiringMicros deadlockCount
233
+ ]
234
+
235
+ lock_namespaces.each do |ns|
236
+ lock_dimentions.each do |dm|
237
+ next unless locks.key?(ns) && locks[ns].key?(dm)
238
+
239
+ lock = locks[ns][dm]
240
+ server_metrics["locks.#{ns}.#{dm}_r"] = lock['r'] if lock.key?('r')
241
+ server_metrics["locks.#{ns}.#{dm}_w"] = lock['r'] if lock.key?('w')
242
+ server_metrics["locks.#{ns}.#{dm}_R"] = lock['r'] if lock.key?('R')
243
+ server_metrics["locks.#{ns}.#{dm}_W"] = lock['r'] if lock.key?('W')
244
+ end
245
+ end
246
+ end
247
+
248
+ # Network
249
+ network = server_status['network']
250
+ server_metrics['network.bytesIn'] = network['bytesIn']
251
+ server_metrics['network.bytesOut'] = network['bytesOut']
252
+ server_metrics['network.numRequests'] = network['numRequests']
253
+
254
+ # Opcounters
255
+ opcounters = server_status['opcounters']
256
+ server_metrics['opcounters.insert'] = opcounters['insert']
257
+ server_metrics['opcounters.query'] = opcounters['query']
258
+ server_metrics['opcounters.update'] = opcounters['update']
259
+ server_metrics['opcounters.delete'] = opcounters['delete']
260
+ server_metrics['opcounters.getmore'] = opcounters['getmore']
261
+ server_metrics['opcounters.command'] = opcounters['command']
262
+
263
+ # Opcounters Replication
264
+ opcounters_repl = server_status['opcountersRepl']
265
+ server_metrics['opcountersRepl.insert'] = opcounters_repl['insert']
266
+ server_metrics['opcountersRepl.query'] = opcounters_repl['query']
267
+ server_metrics['opcountersRepl.update'] = opcounters_repl['update']
268
+ server_metrics['opcountersRepl.delete'] = opcounters_repl['delete']
269
+ server_metrics['opcountersRepl.getmore'] = opcounters_repl['getmore']
270
+ server_metrics['opcountersRepl.command'] = opcounters_repl['command']
271
+
272
+ # Memory
273
+ mem = server_status['mem']
274
+ server_metrics['mem.residentMb'] = mem['resident']
275
+ server_metrics['mem.virtualMb'] = mem['virtual']
276
+ server_metrics['mem.mapped'] = mem['mapped']
277
+ server_metrics['mem.mappedWithJournal'] = mem['mappedWithJournal']
278
+
279
+ # Metrics (documents)
280
+ document = server_status['metrics']['document']
281
+ server_metrics['metrics.document.deleted'] = document['deleted']
282
+ server_metrics['metrics.document.inserted'] = document['inserted']
283
+ server_metrics['metrics.document.returned'] = document['returned']
284
+ server_metrics['metrics.document.updated'] = document['updated']
285
+
286
+ # Metrics (getLastError)
287
+ get_last_error = server_status['metrics']['getLastError']
288
+ server_metrics['metrics.getLastError.wtime_num'] = get_last_error['wtime']['num']
289
+ server_metrics['metrics.getLastError.wtime_totalMillis'] = get_last_error['wtime']['totalMillis']
290
+ server_metrics['metrics.getLastError.wtimeouts'] = get_last_error['wtimeouts']
291
+
292
+ # Metrics (operation)
293
+ operation = server_status['metrics']['operation']
294
+ server_metrics['metrics.operation.fastmod'] = operation['fastmod']
295
+ server_metrics['metrics.operation.idhack'] = operation['idhack']
296
+ server_metrics['metrics.operation.scanAndOrder'] = operation['scanAndOrder']
297
+
298
+ # Metrics (operation)
299
+ query_executor = server_status['metrics']['queryExecutor']
300
+ server_metrics['metrics.queryExecutor.scanned'] = query_executor['scanned']
301
+ server_metrics['metrics.queryExecutor.scannedObjects'] = query_executor['scannedObjects']
302
+ server_metrics['metrics.record.moves'] = server_status['metrics']['record']['moves']
303
+
304
+ # Metrics (repl)
305
+ repl = server_status['metrics']['repl']
306
+ server_metrics['metrics.repl.apply.batches_num'] = repl['apply']['batches']['num']
307
+ server_metrics['metrics.repl.apply.batches_totalMillis'] = repl['apply']['batches']['totalMillis']
308
+ server_metrics['metrics.repl.apply.ops'] = repl['apply']['ops']
309
+ server_metrics['metrics.repl.buffer.count'] = repl['buffer']['count']
310
+ server_metrics['metrics.repl.buffer.maxSizeBytes'] = repl['buffer']['maxSizeBytes']
311
+ server_metrics['metrics.repl.buffer.sizeBytes'] = repl['buffer']['sizeBytes']
312
+ server_metrics['metrics.repl.network.bytes'] = repl['network']['bytes']
313
+ server_metrics['metrics.repl.network.getmores_num'] = repl['network']['getmores']['num']
314
+ server_metrics['metrics.repl.network.getmores_totalMillis'] = repl['network']['getmores']['totalMillis']
315
+ server_metrics['metrics.repl.network.ops'] = repl['network']['ops']
316
+ server_metrics['metrics.repl.network.readersCreated'] = repl['network']['readersCreated']
317
+
318
+ if Gem::Version.new(mongo_version) <= Gem::Version.new('4.0.0')
319
+ server_metrics['metrics.repl.preload.docs_num'] = repl['preload']['docs']['num']
320
+ server_metrics['metrics.repl.preload.docs_totalMillis'] = repl['preload']['docs']['totalMillis']
321
+ server_metrics['metrics.repl.preload.indexes_num'] = repl['preload']['indexes']['num']
322
+ server_metrics['metrics.repl.preload.indexes_totalMillis'] = repl['preload']['indexes']['totalMillis']
323
+ end
324
+
325
+ # Metrics (replicaset status)
326
+ # MongoDB will fail if not running with --replSet, hence the check for nil
327
+ unless replicaset_status.nil?
328
+ server_metrics['metrics.replicaset.state'] = replicaset_status['myState']
329
+ end
330
+
331
+ # Metrics (storage)
332
+ if Gem::Version.new(mongo_version) <= Gem::Version.new('4.0.0')
333
+ freelist = server_status['metrics']['storage']['freelist']
334
+ server_metrics['metrics.storage.freelist.search_bucketExhauseted'] = freelist['search']['bucketExhausted']
335
+ server_metrics['metrics.storage.freelist.search_requests'] = freelist['search']['requests']
336
+ server_metrics['metrics.storage.freelist.search_scanned'] = freelist['search']['scanned']
337
+ end
338
+
339
+ # Metrics (ttl)
340
+ ttl = server_status['metrics']['ttl']
341
+ server_metrics['metrics.ttl.deletedDocuments'] = ttl['deletedDocuments']
342
+ server_metrics['metrics.ttl.passes'] = ttl['passes']
343
+
344
+ # Return metrics map.
345
+ # MongoDB returns occasional nils and floats as {"floatApprox": x}.
346
+ # Clean up the results once here to avoid per-metric logic.
347
+ clean_metrics = {}
348
+ server_metrics.each do |k, v|
349
+ next if v.nil?
350
+
351
+ if v.is_a?(Hash) && v.key?('floatApprox')
352
+ v = v['floatApprox']
353
+ end
354
+ clean_metrics[k] = v
355
+ end
356
+ clean_metrics
357
+ end
358
+ # rubocop:enable Metrics/AbcSize
359
+
360
+ private
361
+
362
+ def get_mongo_client(db_name)
363
+ @connected = true
364
+ host = @config[:host]
365
+ port = @config[:port]
366
+ db_user = @config[:user]
367
+ db_password = @config[:password]
368
+ ssl = @config[:ssl]
369
+ ssl_cert = @config[:ssl_cert]
370
+ ssl_key = @config[:ssl_key]
371
+ ssl_ca_cert = @config[:ssl_ca_cert]
372
+ ssl_verify = @config[:ssl_verify]
373
+
374
+ address_str = "#{host}:#{port}"
375
+ client_opts = {}
376
+ client_opts[:database] = db_name
377
+ unless db_user.nil?
378
+ client_opts[:user] = db_user
379
+ client_opts[:password] = db_password
380
+ end
381
+ if ssl
382
+ client_opts[:ssl] = true
383
+ client_opts[:ssl_cert] = ssl_cert
384
+ client_opts[:ssl_key] = ssl_key
385
+ client_opts[:ssl_ca_cert] = ssl_ca_cert
386
+ client_opts[:ssl_verify] = ssl_verify
387
+ end
388
+ Mongo::Client.new([address_str], client_opts)
389
+ end
390
+ end
391
+ end
@@ -0,0 +1,9 @@
1
+ module SensuPluginsMongoDB
2
+ module Version
3
+ MAJOR = 1
4
+ MINOR = 4
5
+ PATCH = 0
6
+
7
+ VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
+ end
9
+ end
@@ -0,0 +1 @@
1
+ require 'sensu-plugins-mongodb/version'