sensu-plugins-mysql-nagyt 2.6.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.
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # MySQL Select Count Metric
4
+ #
5
+ # Creates a graphite-formatted metric for the first value of a result set from a MySQL query.
6
+ #
7
+ # Copyright 2017 Andrew Thal <athal7@me.com>
8
+ # Copyright 2018 Tibor Nagy <nagyt@hu.inter.net>
9
+ #
10
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
11
+ # for details.
12
+
13
+ require 'sensu-plugin/metric/cli'
14
+ require 'mysql'
15
+ require 'inifile'
16
+
17
+ class MysqlQueryCountMetric < Sensu::Plugin::Metric::CLI::Graphite
18
+ option :host,
19
+ short: '-h HOST',
20
+ long: '--host HOST',
21
+ description: 'MySQL Host to connect to',
22
+ required: true
23
+
24
+ option :port,
25
+ short: '-P PORT',
26
+ long: '--port PORT',
27
+ description: 'MySQL Port to connect to',
28
+ proc: proc(&:to_i),
29
+ default: 3306
30
+
31
+ option :username,
32
+ short: '-u USERNAME',
33
+ long: '--user USERNAME',
34
+ description: 'MySQL Username'
35
+
36
+ option :password,
37
+ short: '-p PASSWORD',
38
+ long: '--pass PASSWORD',
39
+ description: 'MySQL password'
40
+
41
+ option :database,
42
+ short: '-d DATABASE',
43
+ long: '--database DATABASE',
44
+ description: 'MySQL database',
45
+ default: ''
46
+
47
+ option :ini,
48
+ short: '-i',
49
+ long: '--ini VALUE',
50
+ description: 'My.cnf ini file'
51
+
52
+ option :ini_section,
53
+ description: 'Section in my.cnf ini file',
54
+ long: '--ini-section VALUE',
55
+ default: 'client'
56
+
57
+ option :socket,
58
+ short: '-S SOCKET',
59
+ long: '--socket SOCKET',
60
+ description: 'MySQL Unix socket to connect to'
61
+
62
+ option :name,
63
+ short: '-n NAME',
64
+ long: '--name NAME',
65
+ description: 'Metric name for a configured handler',
66
+ default: 'mysql.query_count'
67
+
68
+ option :query,
69
+ short: '-q SELECT_COUNT_QUERY',
70
+ long: '--query SELECT_COUNT_QUERY',
71
+ description: 'Query to execute',
72
+ required: true
73
+
74
+ def run
75
+ if config[:ini]
76
+ ini = IniFile.load(config[:ini])
77
+ section = ini[config[:ini_section]]
78
+ db_user = section['user']
79
+ db_pass = section['password']
80
+ else
81
+ db_user = config[:username]
82
+ db_pass = config[:password]
83
+ end
84
+ raise "invalid query : #{config[:query]}" unless config[:query] =~ /^select\s+count\(\s*\*\s*\)/i
85
+
86
+ db = Mysql.real_connect(config[:host], db_user, db_pass, config[:database], config[:port], config[:socket])
87
+ count = db.query(config[:query]).fetch_row[0].to_i
88
+
89
+ output config[:name], count
90
+ ok
91
+
92
+ rescue Mysql::Error => e
93
+ errstr = "Error code: #{e.errno} Error message: #{e.error}"
94
+ critical "#{errstr} SQLSTATE: #{e.sqlstate}" if e.respond_to?('sqlstate')
95
+
96
+ rescue StandardError => e
97
+ critical "unhandled exception: #{e}"
98
+
99
+ ensure
100
+ db.close if db
101
+ end
102
+ end
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Copyright 2014 Paulo Miguel Almeida Rodenas (paulo.ubuntu@gmail.com)
4
+ #
5
+ # Depends on mysql gem
6
+ # gem install mysql
7
+ #
8
+ # This handler sends metrics to a MySQL database for later user such as
9
+ # historic comparisons, charts and so on
10
+ #
11
+ # =========== Initial DDL ===========
12
+ # MySQL initial can be found in mysql-metrics.sql
13
+ #
14
+ # =========== Config ===========
15
+ # MySQL 'hostname', 'username', and 'password' must be
16
+ # specified in a config file in /etc/sensu/conf.d.
17
+ # See mysql-metrics.json for an example.
18
+ #
19
+ # Released under the same terms as Sensu (the MIT license); see LICENSE
20
+ # for details.
21
+
22
+ require 'sensu-handler'
23
+ require 'json'
24
+ require 'mysql'
25
+
26
+ class MysqlMetric < Sensu::Handler
27
+ # override filters from Sensu::Handler. not appropriate for metric handlers
28
+ def filter; end
29
+
30
+ def handle
31
+ # mysql settings
32
+ mysql_hostname = settings['mysql']['hostname']
33
+ mysql_username = settings['mysql']['username']
34
+ mysql_password = settings['mysql']['password']
35
+
36
+ # event values
37
+ client_id = @event['client']['name']
38
+ check_name = @event['check']['name']
39
+ check_issued = @event['check']['issued']
40
+ check_output = @event['check']['output']
41
+ check_status = @event['check']['status']
42
+
43
+ begin
44
+ con = Mysql.new mysql_hostname, mysql_username, mysql_password
45
+ con.query('INSERT INTO '\
46
+ 'sensumetrics.sensu_historic_metrics('\
47
+ 'client_id, check_name, issue_time, '\
48
+ 'output, status) '\
49
+ "VALUES ('#{client_id}', '#{check_name}', "\
50
+ "#{check_issued}, '#{check_output}', #{check_status})")
51
+ rescue Mysql::Error => e
52
+ puts e.errno
53
+ puts e.error
54
+ ensure
55
+ con.close if con
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,15 @@
1
+ create database sensumetrics;
2
+ use sensumetrics;
3
+ create table sensu_historic_metrics(
4
+ `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
5
+ `client_id` VARCHAR(150) NOT NULL,
6
+ `check_name` VARCHAR(100) NOT NULL,
7
+ `issue_time` INT(8) UNSIGNED NOT NULL,
8
+ `output` TEXT,
9
+ `status` INT(2) UNSIGNED,
10
+ INDEX `client_id_idx` (`client_id`),
11
+ INDEX `check_name_idx` (`check_name`),
12
+ INDEX `issue_time_idx` (`issue_time`)
13
+ );
14
+ GRANT SELECT,INSERT on sensumetrics.sensu_historic_metrics TO sensu_user@'localhost' IDENTIFIED BY 'sensu_user_pass';
15
+ FLUSH PRIVILEGES;
@@ -0,0 +1 @@
1
+ require 'sensu-plugins-mysql/version'
@@ -0,0 +1,9 @@
1
+ module SensuPluginsMySql
2
+ module Version
3
+ MAJOR = 2
4
+ MINOR = 6
5
+ PATCH = 0
6
+
7
+ VER_STRING = [MAJOR, MINOR, PATCH].compact.join('.')
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,262 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sensu-plugins-mysql-nagyt
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.6.0
5
+ platform: ruby
6
+ authors:
7
+ - Sensu-Plugins and contributors
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-11-20 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: inifile
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 3.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 3.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: ruby-mysql
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.9'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sensu-plugin
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: codeclimate-test-reporter
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.4'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: bundler
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.7'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.7'
83
+ - !ruby/object:Gem::Dependency
84
+ name: github-markup
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.3'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.10'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.10'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '10.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '10.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: redcarpet
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3.2'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3.2'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '3.1'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '3.1'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 0.40.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 0.40.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: yard
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.8'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '0.8'
181
+ description: |-
182
+ This plugin provides native MySQL instrumentation
183
+ for monitoring and metrics collection, including:
184
+ service health, database connectivity, `InnoDB`
185
+ locks, replication status, metrics collection, and
186
+ sending metrics to a MySQL database.
187
+ email: "<sensu-users@googlegroups.com>"
188
+ executables:
189
+ - check-mysql-status.rb
190
+ - check-mysql-connections.rb
191
+ - check-mysql-threads.rb
192
+ - check-mysql-select-count.rb
193
+ - metrics-mysql-select-count.rb
194
+ - check-mysql-alive.rb
195
+ - metrics-mysql-query-result-count.rb
196
+ - check-mysql-disk.rb
197
+ - check-mysql-msr-replication-status.rb
198
+ - metrics-mysql-raw.rb
199
+ - metrics-mysql-multiple-select-count.rb
200
+ - check-mysql-innodb-lock.rb
201
+ - metrics-mysql-processes.rb
202
+ - check-mysql-replication-status.rb
203
+ - metrics-mysql-graphite.rb
204
+ - check-mysql-query-result-count.rb
205
+ - metrics-mysql.rb
206
+ extensions: []
207
+ extra_rdoc_files: []
208
+ files:
209
+ - CHANGELOG.md
210
+ - LICENSE
211
+ - README.md
212
+ - bin/check-mysql-alive.rb
213
+ - bin/check-mysql-connections.rb
214
+ - bin/check-mysql-disk.rb
215
+ - bin/check-mysql-innodb-lock.rb
216
+ - bin/check-mysql-msr-replication-status.rb
217
+ - bin/check-mysql-query-result-count.rb
218
+ - bin/check-mysql-replication-status.rb
219
+ - bin/check-mysql-select-count.rb
220
+ - bin/check-mysql-status.rb
221
+ - bin/check-mysql-threads.rb
222
+ - bin/metrics-mysql-graphite.rb
223
+ - bin/metrics-mysql-multiple-select-count.rb
224
+ - bin/metrics-mysql-processes.rb
225
+ - bin/metrics-mysql-query-result-count.rb
226
+ - bin/metrics-mysql-raw.rb
227
+ - bin/metrics-mysql-select-count.rb
228
+ - bin/metrics-mysql.rb
229
+ - bin/mysql-metrics.sql
230
+ - lib/sensu-plugins-mysql.rb
231
+ - lib/sensu-plugins-mysql/version.rb
232
+ homepage: https://github.com/nagyt/sensu-plugins-mysql
233
+ licenses:
234
+ - MIT
235
+ metadata:
236
+ maintainer: sensu-plugin
237
+ development_status: active
238
+ production_status: unstable - testing recommended
239
+ release_draft: 'false'
240
+ release_prerelease: 'false'
241
+ post_install_message: You can use the embedded Ruby by setting EMBEDDED_RUBY=true
242
+ in /etc/default/sensu
243
+ rdoc_options: []
244
+ require_paths:
245
+ - lib
246
+ required_ruby_version: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: 2.0.0
251
+ required_rubygems_version: !ruby/object:Gem::Requirement
252
+ requirements:
253
+ - - ">="
254
+ - !ruby/object:Gem::Version
255
+ version: '0'
256
+ requirements: []
257
+ rubyforge_project:
258
+ rubygems_version: 2.7.3
259
+ signing_key:
260
+ specification_version: 4
261
+ summary: Sensu plugins for MySql
262
+ test_files: []