munin_manager 1.2.1

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,66 @@
1
+ class Starling
2
+ def stats
3
+ raise MemCacheError, "No active servers" unless active?
4
+ server_stats = {}
5
+
6
+ @servers.each do |server|
7
+ sock = server.socket
8
+ raise MemCacheError, "No connection to server" if sock.nil?
9
+
10
+ value = nil
11
+ begin
12
+ sock.write "stats\r\n"
13
+ stats = {}
14
+ while line = sock.gets do
15
+ break if line == "END\r\n"
16
+ if line =~ /^STAT/ then
17
+ stat, name, value = line.split
18
+ stats[name] = case name
19
+ when 'version'
20
+ value
21
+ when 'rusage_user', 'rusage_system' then
22
+ seconds, microseconds = value.split(/:/, 2)
23
+ microseconds ||= 0
24
+ Float(seconds) + (Float(microseconds) / 1_000_000)
25
+ else
26
+ if value =~ /^\d+$/ then
27
+ value.to_i
28
+ else
29
+ value
30
+ end
31
+ end
32
+ end
33
+ end
34
+ server_stats["#{server.host}:#{server.port}"] = stats
35
+ rescue SocketError, SystemCallError, IOError => err
36
+ puts err.inspect
37
+ server.close
38
+ raise MemCacheError, err.message
39
+ end
40
+ end
41
+
42
+ server_stats
43
+ end
44
+
45
+ ##
46
+ # returns the number of items in +queue+. If +queue+ is +:all+, a hash of all
47
+ # queue sizes will be returned.
48
+
49
+ def sizeof(queue, statistics = nil)
50
+ statistics ||= stats
51
+
52
+ if queue == :all
53
+ queue_sizes = {}
54
+ available_queues(statistics).each do |queue|
55
+ queue_sizes[queue] = sizeof(queue, statistics)
56
+ end
57
+ return queue_sizes
58
+ end
59
+
60
+ statistics.inject(0) { |m,(k,v)| m + v["queue_#{make_cache_key(queue)}_items"].to_i }
61
+ end
62
+
63
+ def queue_names
64
+ return available_queues
65
+ end
66
+ end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+
3
+ class HaproxyResponseTimeTest < Test::Unit::TestCase
4
+ include MuninManager::Plugins
5
+
6
+ def setup
7
+ @reader = HaproxyResponseTime.new("#{TEST_DIR}/logs/haproxy.log")
8
+ @reader.state_dir = "#{TEST_DIR}/tmp"
9
+ end
10
+
11
+ def teardown
12
+ File.unlink(@reader.state_file)
13
+ rescue
14
+ # Do nothing
15
+ end
16
+
17
+ def test_parsing
18
+ @reader.collect!
19
+
20
+ expected_values = {
21
+ :rails_action => "0.0005463880",
22
+ :total => "0.5552000000",
23
+ :client_connect => "0.0000000000",
24
+ :waiting_in_queue => "0.0000000000",
25
+ :server_connect => "0.0000000000",
26
+ :server_response => "0.5547000000"
27
+ }
28
+
29
+ expected_values.each do |field, val|
30
+ assert_equal(val, @reader.data[field], "Value mismatch in #{field}")
31
+ end
32
+ end
33
+
34
+ def test_has_help_text
35
+ assert !HaproxyResponseTime.help_text.empty?
36
+ end
37
+ end
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+
3
+ class LogReaderTest < Test::Unit::TestCase
4
+ def setup
5
+ @reader = RailsLogReader.new("#{HERE}/logs/rails.log")
6
+
7
+ File.open(@reader.file_name, 'w') do |f|
8
+ 10.times {f.puts("Completed in")}
9
+ 20.times {f.puts("Some other stuff")}
10
+ end
11
+ end
12
+
13
+ def teardown
14
+ File.unlink(@reader.state_file)
15
+ end
16
+
17
+ def test_remembers_last_position_in_log
18
+ @reader.collect!
19
+ assert_equal 10, @reader.num_requests
20
+
21
+ File.open(@reader.file_name, 'a+') do |f|
22
+ 10.times {f.puts("Completed in")}
23
+ end
24
+
25
+ @new_reader = RailsLogReader.new(@reader.file_name)
26
+ @new_reader.collect!
27
+
28
+ assert_equal 10, @new_reader.num_requests
29
+ assert_equal 40, File.new(@new_reader.file_name).readlines.length
30
+ end
31
+ end
@@ -0,0 +1,51 @@
1
+ require File.dirname(__FILE__) + "/test_helper"
2
+
3
+ class RailsResponseTimeTest < Test::Unit::TestCase
4
+ include MuninManager::Plugins
5
+
6
+ def setup
7
+ @reader = RailsResponseTime.new("#{TEST_DIR}/logs/rails.log")
8
+ @reader.state_dir = "#{TEST_DIR}/tmp"
9
+ end
10
+
11
+ def teardown
12
+ File.unlink(@reader.state_file)
13
+ rescue
14
+ # Do nothing
15
+ end
16
+
17
+ def test_has_default_search_pattern
18
+ assert_kind_of Regexp, @reader.search_pattern
19
+ end
20
+
21
+ def test_parsing_with_default_search_pattern
22
+ @reader.collect!
23
+ assert @reader.data.keys.length > 0
24
+
25
+ @reader.data.each_pair do |k, v|
26
+ assert v > 0, "Value mismatch for #{k}"
27
+ end
28
+ end
29
+
30
+ def test_parsing_with_non_default_search_string
31
+ @reader.search_pattern = /UsersController.*/
32
+ @reader.collect!
33
+
34
+ @reader.data.each_pair do |action_name, time|
35
+ assert_not_nil /UsersController.*/.match(action_name), "'%s' does not match search pattern" % action_name
36
+ end
37
+ end
38
+
39
+ def test_config_parses_log
40
+ assert @reader.config.split("\n").select {|line| not line.starts_with?("graph_")}.length > 0
41
+ end
42
+
43
+ def test_config_does_not_save_state
44
+ @reader.config
45
+ assert !File.exists?(@reader.state_file)
46
+ end
47
+
48
+ def test_has_help_text
49
+ assert !RailsResponseTime.help_text.empty?
50
+ end
51
+ end
@@ -0,0 +1,32 @@
1
+ TEST_DIR = File.dirname(__FILE__)
2
+ %w(lib ext bin test).each do |dir|
3
+ $LOAD_PATH.unshift "#{TEST_DIR}/../#{dir}"
4
+ end
5
+
6
+ %w(rubygems test/unit ruby-debug munin_manager).each do |f|
7
+ require f
8
+ end
9
+
10
+ class RailsLogReader < MuninManager::LogReader
11
+ def initialize(*params)
12
+ super
13
+ @state_dir = "#{TEST_DIR}/tmp"
14
+ @state_file = File.join(@state_dir, @me)
15
+ end
16
+
17
+ def scan(log_file)
18
+ @req_counter = 0
19
+ loop do
20
+ line = log_file.readline
21
+ @req_counter += 1 if line =~ /Completed in/
22
+ end
23
+ end
24
+
25
+ def process!
26
+ # Do nothing
27
+ end
28
+
29
+ def num_requests
30
+ @req_counter
31
+ end
32
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: munin_manager
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.1
5
+ platform: ruby
6
+ authors:
7
+ - Rohith Ravi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-07 00:00:00 -07:00
13
+ default_executable: munin_manager
14
+ dependencies: []
15
+
16
+ description:
17
+ email: entombedvirus@gmail.com
18
+ executables:
19
+ - munin_manager
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.markdown
24
+ files:
25
+ - Manifest
26
+ - README.markdown
27
+ - Rakefile
28
+ - VERSION
29
+ - bin/munin_manager
30
+ - bin/runner
31
+ - lib/munin_manager.rb
32
+ - lib/munin_manager/acts_as_munin_plugin.rb
33
+ - lib/munin_manager/log_reader.rb
34
+ - lib/munin_manager/plugins.rb
35
+ - lib/munin_manager/plugins/fbproxy_latency.rb
36
+ - lib/munin_manager/plugins/haproxy_app_response_time.rb
37
+ - lib/munin_manager/plugins/haproxy_response_time.rb
38
+ - lib/munin_manager/plugins/haproxy_rps.rb
39
+ - lib/munin_manager/plugins/network_latency.rb
40
+ - lib/munin_manager/plugins/notification_classification.rb
41
+ - lib/munin_manager/plugins/packet_loss.rb
42
+ - lib/munin_manager/plugins/rails_rendering.rb
43
+ - lib/munin_manager/plugins/rails_response_time.rb
44
+ - lib/munin_manager/plugins/scribe_net.rb
45
+ - lib/munin_manager/plugins/starling_age.rb
46
+ - lib/munin_manager/plugins/starling_net.rb
47
+ - lib/munin_manager/plugins/starling_ops.rb
48
+ - lib/munin_manager/plugins/starling_queue.rb
49
+ - lib/munin_manager/starling/starling_stats.rb
50
+ - test/haproxy_response_time_test.rb
51
+ - test/log_reader_test.rb
52
+ - test/rails_response_time_test.rb
53
+ - test/test_helper.rb
54
+ has_rdoc: true
55
+ homepage: http://github.com/entombedvirus/jeweler
56
+ licenses: []
57
+
58
+ post_install_message:
59
+ rdoc_options:
60
+ - --charset=UTF-8
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ version:
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: "0"
74
+ version:
75
+ requirements: []
76
+
77
+ rubyforge_project:
78
+ rubygems_version: 1.3.2
79
+ signing_key:
80
+ specification_version: 3
81
+ summary: Tool to maintain and install munin plugins written in Ruby
82
+ test_files:
83
+ - test/haproxy_response_time_test.rb
84
+ - test/log_reader_test.rb
85
+ - test/rails_response_time_test.rb
86
+ - test/test_helper.rb