panoptimon-collector-mysql_status 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 483190bb891141489d94cbf036b1c231945486dd
4
+ data.tar.gz: 5f0049416ad44ec2b72e0428cbc2cd7009d4c85c
5
+ SHA512:
6
+ metadata.gz: d0561e6be297f5e68e0e9d348d5ab04ec4c71df820e285a570d219f94d74c8ffc2af3702f76ad2efe38823dd106475e9acf56e9fb1131d50fba5813bca663985
7
+ data.tar.gz: 7ed5704fcb2d29402ff528d7f9c94b1f48cf8cbf0f4b3d1f9d70eb6b43e650930725118f32b6a9d6af707f6c531e872cc0aabed84583a021f17da7dc334af732
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,29 @@
1
+ Copyright (C) 2012 Sourcefire, Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are
6
+ met:
7
+
8
+ * Redistributions of source code must retain the above copyright
9
+ notice, this list of conditions and the following disclaimer.
10
+
11
+ * Redistributions in binary form must reproduce the above copyright
12
+ notice, this list of conditions and the following disclaimer in the
13
+ documentation and/or other materials provided with the distribution.
14
+
15
+ * Neither the name of *Sourcefire, Inc.* nor the names of its
16
+ contributors may be used to endorse or promote products derived from
17
+ this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20
+ IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21
+ TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
+ HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
25
+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,11 @@
1
+ panoptimon-collector-mysql_status
2
+ =================================
3
+
4
+ A MySQL metrics collector for panoptimon
5
+
6
+ Installation
7
+ ------------
8
+
9
+ * `gem install panoptimon`
10
+ * `gem install panoptimon-collector-mysql_status`
11
+ * Copy an example configuration and place it in your pan collectors folder (typically */etc/panoptimon/collectors/*) as *mysql_status.json*
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'mysql';
4
+ require 'json';
5
+
6
+ class String; def as_number # from perlfaq4
7
+ self =~ %r{\A[+-]?(?=\.?\d)\d*\.?\d*(?:[Ee][+-]?\d+)?\z} \
8
+ ? (self =~ %r{[\.Ee]} ? self.to_f : self.to_i)
9
+ : nil
10
+ end; end
11
+
12
+ class Mysql_status
13
+
14
+ def self.get_status (db)
15
+ rs = db.query("SHOW STATUS")
16
+ h = {}
17
+ while( r = rs.fetch_row )
18
+ h[r[0].downcase] = r[1]
19
+ end
20
+ return h
21
+ end
22
+
23
+ def self.get_slave_status (db)
24
+ rs = db.query('SHOW SLAVE STATUS')
25
+ h = rs.fetch_hash or return {}
26
+ raise "too many results" if rs.num_rows > 1
27
+ return Hash[* h.keys.map {|k| [k.downcase, h[k]]}.flatten]
28
+ end
29
+
30
+ def self.run (config)
31
+ db = Mysql.new(*
32
+ %w{hostname username password database port socket}.
33
+ map {|k| config[k]})
34
+
35
+ m = get_status(db)
36
+ m.merge(get_slave_status(db))
37
+ info = {}
38
+ m.keys.each {|k|
39
+ n = m[k].as_number
40
+ if n
41
+ m[k] = n
42
+ else
43
+ info[k] = m.delete(k)
44
+ end
45
+ }
46
+ m[:_info] = info if info.length > 0
47
+ puts JSON::generate(m)
48
+ end
49
+
50
+ end
51
+
52
+ config = JSON::parse(ARGV[0])
53
+ Mysql_status.run(config)
@@ -0,0 +1,3 @@
1
+ {
2
+ "socket" : "/tmp/mysql.socket"
3
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "hostname" : "mysql.example.com",
3
+ "port" : "3306"
4
+ "database" : "bakesale"
5
+ "username" : "bob"
6
+ "password" : "cookies"
7
+ }
@@ -0,0 +1,15 @@
1
+ Gem::Specification.new { |gem|
2
+ gem.name = 'panoptimon-collector-mysql_status'
3
+ gem.version = '0.1.0'
4
+ gem.summary = 'collect information from MySQL'
5
+ gem.description = 'collect information from MySQL for use by panoptimon'
6
+ gem.authors = ['Eric Wilhelm']
7
+ gem.email = "sysops@sourcefire.com"
8
+ gem.homepage = "https://github.com/synthesist/panoptimon"
9
+ gem.license = 'bsd' # The (three-clause) BSD License
10
+ gem.files = `git ls-files`.split($\)
11
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
12
+
13
+ gem.add_dependency 'panoptimon', '~> 0.1.0'
14
+ gem.add_dependency 'mysql'
15
+ }
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: panoptimon-collector-mysql_status
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Eric Wilhelm
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: panoptimon
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: mysql
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: collect information from MySQL for use by panoptimon
42
+ email: sysops@sourcefire.com
43
+ executables:
44
+ - pancollect-mysql_status
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - .gitignore
49
+ - Gemfile
50
+ - LICENSE
51
+ - README.md
52
+ - bin/pancollect-mysql_status
53
+ - example_configs/localhost.json
54
+ - example_configs/remote.json
55
+ - panoptimon-collector-mysql_status.gemspec
56
+ homepage: https://github.com/synthesist/panoptimon
57
+ licenses:
58
+ - bsd
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 2.0.3
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: collect information from MySQL
80
+ test_files: []