sensu-plugins-mongodb-mrtrotl 1.4.0

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 (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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4bf92415bc202c93667c938be921e397412b5581
4
+ data.tar.gz: bdeb2ad885fddfecf96f4c8eb3752d4227e1d069
5
+ SHA512:
6
+ metadata.gz: 3cb5d08f107811a2bb47c2fcf3a4b64e6eb6a77011b33b9011fbdb4321713bcc7b2b890d102751ae4214e94dcdb5b61a16a381f49990ec3acbfab54e10e73bba
7
+ data.tar.gz: 56bc629f8ee1401818ba34c448a75848e6b849c8e50a7661d2beff75360f846b7914839fd414f09544bd7fadc21a6987737d4cfab3d02679e51c203058c83a37
data/CHANGELOG.md ADDED
@@ -0,0 +1 @@
1
+ Can be found at [https://github.com/boutetnico/sensu-plugins-mongodb/releases](https://github.com/boutetnico/sensu-plugins-mongodb/releases).
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Sensu-Plugins
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,27 @@
1
+ ## Sensu-Plugins-mongodb
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/sensu-plugins-mongodb-boutetnico.svg)](https://badge.fury.io/rb/sensu-plugins-mongodb-boutetnico.svg)
4
+ [![Sensu Bonsai Asset](https://img.shields.io/badge/Bonsai-Download%20Me-brightgreen.svg?colorB=89C967&logo=sensu)](https://bonsai.sensu.io/assets/boutetnico/sensu-plugins-mongodb)
5
+
6
+ ## This is an unofficial fork
7
+
8
+ This fork is automatically tested, built and published to [RubyGems](https://rubygems.org/gems/sensu-plugins-mongodb-boutetnico/) and [Bonsai](https://bonsai.sensu.io/assets/boutetnico/sensu-plugins-mongodb).
9
+
10
+ ## Files
11
+
12
+ * bin/check-mongodb.py
13
+ * bin/check-mongodb.rb - wrapper for check-mongodb.py
14
+ * bin/check-mongodb-metric.rb
15
+ * bin/check-mongodb-query-count.rb
16
+ * bin/metrics-mongodb.rb
17
+ * bin/metrics-mongodb-replication.rb
18
+
19
+ ## Usage
20
+
21
+ ## Installation
22
+
23
+ [Installation and Setup](http://sensu-plugins.io/docs/installation_instructions.html)
24
+
25
+ ## Notes
26
+
27
+ The `pymongo` python package needs to be installed to use `check-mongodb`
@@ -0,0 +1,144 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-mongodb-metric.rb
4
+ #
5
+ # DESCRIPTION:
6
+ #
7
+ # OUTPUT:
8
+ # plain text
9
+ #
10
+ # PLATFORMS:
11
+ # Linux
12
+ #
13
+ # DEPENDENCIES:
14
+ # gem: sensu-plugin
15
+ # gem: mongo
16
+ # gem: bson
17
+ # gem: bson_ext
18
+ #
19
+ # USAGE:
20
+ # #YELLOW
21
+ #
22
+ # NOTES:
23
+ #
24
+ # LICENSE:
25
+ # Copyright 2016 Conversocial https://github.com/conversocial
26
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
27
+ # for details.
28
+ #
29
+
30
+ require 'sensu-plugin/check/cli'
31
+ require 'sensu-plugins-mongodb/metrics'
32
+ require 'mongo'
33
+ include Mongo
34
+
35
+ #
36
+ # Mongodb
37
+ #
38
+
39
+ class CheckMongodbMetric < Sensu::Plugin::Check::CLI
40
+ option :host,
41
+ description: 'MongoDB host',
42
+ long: '--host HOST',
43
+ default: 'localhost'
44
+
45
+ option :port,
46
+ description: 'MongoDB port',
47
+ long: '--port PORT',
48
+ default: 27_017
49
+
50
+ option :user,
51
+ description: 'MongoDB user',
52
+ long: '--user USER',
53
+ default: nil
54
+
55
+ option :password,
56
+ description: 'MongoDB password',
57
+ long: '--password PASSWORD',
58
+ default: nil
59
+
60
+ option :ssl,
61
+ description: 'Connect using SSL',
62
+ long: '--ssl',
63
+ default: false
64
+
65
+ option :ssl_cert,
66
+ description: 'The certificate file used to identify the local connection against mongod',
67
+ long: '--ssl-cert SSL_CERT',
68
+ default: ''
69
+
70
+ option :ssl_key,
71
+ description: 'The private key used to identify the local connection against mongod',
72
+ long: '--ssl-key SSL_KEY',
73
+ default: ''
74
+
75
+ option :ssl_ca_cert,
76
+ description: 'The set of concatenated CA certificates, which are used to validate certificates passed from the other end of the connection',
77
+ long: '--ssl-ca-cert SSL_CA_CERT',
78
+ default: ''
79
+
80
+ option :ssl_verify,
81
+ description: 'Whether or not to do peer certification validation',
82
+ long: '--ssl-verify',
83
+ default: false
84
+
85
+ option :debug,
86
+ description: 'Enable debug',
87
+ long: '--debug',
88
+ default: false
89
+
90
+ option :require_master,
91
+ description: 'Require the node to be a master node',
92
+ long: '--require-master',
93
+ default: false
94
+
95
+ option :metric,
96
+ description: 'Name of the metric to check',
97
+ long: '--metric METRIC',
98
+ short: '-m METRIC',
99
+ required: true
100
+
101
+ option :warn,
102
+ description: 'Warn if values are above this threshold',
103
+ short: '-w WARN',
104
+ proc: proc(&:to_i),
105
+ default: 0
106
+
107
+ option :crit,
108
+ description: 'Fail if values are above this threshold',
109
+ short: '-c CRIT',
110
+ proc: proc(&:to_i),
111
+ default: 0
112
+
113
+ def run
114
+ Mongo::Logger.logger.level = Logger::FATAL
115
+ @debug = config[:debug]
116
+ if @debug
117
+ Mongo::Logger.logger.level = Logger::DEBUG
118
+ config_debug = config.clone
119
+ config_debug[:password] = '***'
120
+ puts 'Arguments: ' + config_debug.inspect
121
+ end
122
+
123
+ # Get the metrics.
124
+ collector = SensuPluginsMongoDB::Metrics.new(config)
125
+ collector.connect_mongo_db('admin')
126
+ exit(1) if config[:require_master] && !collector.master?
127
+ metrics = collector.server_metrics
128
+
129
+ # Make sure the requested value is available.
130
+ unless metrics.key?(config[:metric])
131
+ unknown "Unable to find a value for metric '#{config[:metric]}'"
132
+ end
133
+
134
+ # Check the requested value against the thresholds.
135
+ value = metrics[config[:metric]]
136
+ if value >= config[:crit]
137
+ critical "The value of '#{config[:metric]}' exceeds #{config[:crit]}."
138
+ end
139
+ if value >= config[:warn]
140
+ warning "The value of '#{config[:metric]}' exceeds #{config[:warn]}."
141
+ end
142
+ ok "The value of '#{config[:metric]}' is below all threshold."
143
+ end
144
+ end
@@ -0,0 +1,267 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # check-mongodb-query-count.rb
4
+ #
5
+ # DESCRIPTION:
6
+ # Check how many documents are returned by a MongoDB query.
7
+ #
8
+ # OUTPUT:
9
+ # Plain text
10
+ #
11
+ # PLATFORMS:
12
+ # Linux
13
+ #
14
+ # DEPENDENCIES:
15
+ # gem: sensu-plugin
16
+ # gem: mongo
17
+ # gem: bson
18
+ # gem: bson_ext
19
+ # gem: json
20
+ #
21
+ # USAGE:
22
+ # # Check MongoDB collection "logs" for critical events
23
+ # ./check-mongodb-query-count.rb --user sensu --pass sensu --database test --collection logs
24
+ # --query '{"level":"CRITICAL"}'
25
+ # --minutes-previous 5
26
+ # -w 0 -c 10 --include-results
27
+ #
28
+ # NOTES:
29
+ # Ruby is shit.
30
+ #
31
+ # LICENSE:
32
+ # Copyright 2019 github.com/boutetnico
33
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
34
+ # for details.
35
+ #
36
+
37
+ require 'sensu-plugin/check/cli'
38
+ require 'mongo'
39
+ require 'json'
40
+ include Mongo
41
+
42
+ #
43
+ # Mongodb
44
+ #
45
+
46
+ class MongoDBQueryCount < Sensu::Plugin::Check::CLI
47
+ option :host,
48
+ description: 'MongoDB host',
49
+ long: '--host HOST',
50
+ default: 'localhost'
51
+
52
+ option :port,
53
+ description: 'MongoDB port',
54
+ long: '--port PORT',
55
+ default: 27_017
56
+
57
+ option :user,
58
+ description: 'MongoDB user',
59
+ long: '--user USER',
60
+ default: nil
61
+
62
+ option :password,
63
+ description: 'MongoDB password',
64
+ long: '--password PASSWORD',
65
+ default: nil
66
+
67
+ option :ssl,
68
+ description: 'Connect using SSL',
69
+ long: '--ssl',
70
+ default: false
71
+
72
+ option :ssl_cert,
73
+ description: 'The certificate file used to identify the local connection against mongod',
74
+ long: '--ssl-cert SSL_CERT',
75
+ default: ''
76
+
77
+ option :ssl_key,
78
+ description: 'The private key used to identify the local connection against mongod',
79
+ long: '--ssl-key SSL_KEY',
80
+ default: ''
81
+
82
+ option :ssl_ca_cert,
83
+ description: 'The set of concatenated CA certificates, which are used to validate certificates passed from the other end of the connection',
84
+ long: '--ssl-ca-cert SSL_CA_CERT',
85
+ default: ''
86
+
87
+ option :ssl_verify,
88
+ description: 'Whether or not to do peer certification validation',
89
+ long: '--ssl-verify',
90
+ default: false
91
+
92
+ option :debug,
93
+ description: 'Enable debug',
94
+ long: '--debug',
95
+ default: false
96
+
97
+ option :database,
98
+ description: 'Database to perform query on',
99
+ short: '-d DATABASE',
100
+ long: '--database DATABASE',
101
+ required: true
102
+
103
+ option :collection,
104
+ description: 'Collection to perform query on',
105
+ short: '-C COLLECTION',
106
+ long: '--collection COLLECTION',
107
+ required: true
108
+
109
+ option :query,
110
+ description: 'Query to perform',
111
+ short: '-q QUERY',
112
+ long: '--query QUERY',
113
+ required: true
114
+
115
+ option :warn,
116
+ short: '-w N',
117
+ long: '--warn N',
118
+ description: 'Result count WARNING threshold',
119
+ proc: proc(&:to_i),
120
+ default: 0
121
+
122
+ option :crit,
123
+ short: '-c N',
124
+ long: '--crit N',
125
+ description: 'Result count CRITICAL threshold',
126
+ proc: proc(&:to_i),
127
+ default: 0
128
+
129
+ option :invert,
130
+ long: '--invert',
131
+ description: 'Invert thresholds',
132
+ boolean: true
133
+
134
+ option :date_field,
135
+ description: 'Field to use instead of "date" for query.',
136
+ long: '--date-field FIELD_NAME',
137
+ default: 'date'
138
+
139
+ option :minutes_previous,
140
+ description: 'Minutes before offset to check date field against query.',
141
+ long: '--minutes-previous MINUTES_PREVIOUS',
142
+ proc: proc(&:to_i),
143
+ default: 0
144
+
145
+ option :hours_previous,
146
+ description: 'Hours before offset to check date field against query.',
147
+ long: '--hours-previous HOURS_PREVIOUS',
148
+ proc: proc(&:to_i),
149
+ default: 0
150
+
151
+ option :days_previous,
152
+ description: 'Days before offset to check date field against query.',
153
+ long: '--days-previous DAYS_PREVIOUS',
154
+ proc: proc(&:to_i),
155
+ default: 0
156
+
157
+ option :weeks_previous,
158
+ description: 'Weeks before offset to check date field against query.',
159
+ long: '--weeks-previous WEEKS_PREVIOUS',
160
+ proc: proc(&:to_i),
161
+ default: 0
162
+
163
+ option :months_previous,
164
+ description: 'Months before offset to check date field against query.',
165
+ long: '--months-previous MONTHS_PREVIOUS',
166
+ proc: proc(&:to_i),
167
+ default: 0
168
+
169
+ option :include_results,
170
+ long: '--include-results',
171
+ description: 'Include results in response',
172
+ boolean: false
173
+
174
+ def connect_mongo_db
175
+ address_str = "#{config[:host]}:#{config[:port]}"
176
+ client_opts = {}
177
+ client_opts[:database] = config[:database]
178
+ unless config[:user].nil?
179
+ client_opts[:user] = config[:user]
180
+ client_opts[:password] = config[:password]
181
+ end
182
+ if config[:ssl]
183
+ client_opts[:ssl] = true
184
+ client_opts[:ssl_cert] = config[:ssl_cert]
185
+ client_opts[:ssl_key] = config[:ssl_key]
186
+ client_opts[:ssl_ca_cert] = config[:ssl_ca_cert]
187
+ client_opts[:ssl_verify] = config[:ssl_verify]
188
+ end
189
+ mongo_client = Mongo::Client.new([address_str], client_opts)
190
+ @db = mongo_client.database
191
+ end
192
+
193
+ def query_mongo
194
+ collection = @db[config[:collection]]
195
+ begin
196
+ query = JSON.parse(config[:query])
197
+ rescue JSON::ParserError
198
+ unknown 'Failed to parse query. Provide a valid JSON array.'
199
+ end
200
+
201
+ start_time = Time.now.utc.to_i
202
+ if config[:minutes_previous] != 0
203
+ start_time -= (config[:minutes_previous] * 60)
204
+ end
205
+ if config[:hours_previous] != 0
206
+ start_time -= (config[:hours_previous] * 60 * 60)
207
+ end
208
+ if config[:days_previous] != 0
209
+ start_time -= (config[:days_previous] * 60 * 60 * 24)
210
+ end
211
+ if config[:weeks_previous] != 0
212
+ start_time -= (config[:weeks_previous] * 60 * 60 * 24 * 7)
213
+ end
214
+ if config[:months_previous] != 0
215
+ start_time -= (config[:months_previous] * 60 * 60 * 24 * 31)
216
+ end
217
+
218
+ query[config[:date_field]] = { '$gte' => Time.at(start_time).to_datetime }
219
+
220
+ if config[:debug]
221
+ puts 'Query: ' + query.inspect
222
+ end
223
+
224
+ collection.find(query)
225
+ end
226
+
227
+ def print_results(results)
228
+ count = results.count
229
+
230
+ if config[:include_results]
231
+ results.each { |document| puts document.inspect }
232
+ end
233
+
234
+ if config[:invert]
235
+ if count < config[:crit]
236
+ critical "Query count (#{count}) was below critical threshold."
237
+ elsif count < config[:warn]
238
+ warning "Query count (#{count}) was below warning threshold."
239
+ else
240
+ ok "Query count (#{count}) was ok"
241
+ end
242
+ elsif count > config[:crit]
243
+ critical "Query count (#{count}) was above critical threshold."
244
+ elsif count > config[:warn]
245
+ warning "Query count (#{count}) was above warning threshold."
246
+ else
247
+ ok "Query count (#{count}) was ok"
248
+ end
249
+ end
250
+
251
+ def run
252
+ Mongo::Logger.logger.level = Logger::FATAL
253
+ @debug = config[:debug]
254
+ if @debug
255
+ Mongo::Logger.logger.level = Logger::DEBUG
256
+ config_debug = config.clone
257
+ config_debug[:password] = '***'
258
+ puts 'Arguments: ' + config_debug.inspect
259
+ end
260
+
261
+ connect_mongo_db
262
+
263
+ results = query_mongo
264
+
265
+ print_results(results)
266
+ end
267
+ end