ruminate 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.md +8 -0
- data/README.md +1 -1
- data/config/templates/plot_timer.yml +16 -0
- data/lib/ruminate/plugin.rb +12 -2
- data/lib/ruminate.rb +58 -1
- metadata +51 -42
data/History.md
CHANGED
data/README.md
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
:requires: measurement
|
2
|
+
:graph_args: --base 1000 -l 0
|
3
|
+
:graph_vlabel: msec
|
4
|
+
:plot:
|
5
|
+
- :label: avg
|
6
|
+
:info: Average time of %measurement%
|
7
|
+
:draw: LINE
|
8
|
+
:field: avg_time
|
9
|
+
- :label: min
|
10
|
+
:info: Min time of %measurement%
|
11
|
+
:draw: LINE
|
12
|
+
:field: min_time
|
13
|
+
- :label: max
|
14
|
+
:info: Max time of %measurement%
|
15
|
+
:draw: LINE
|
16
|
+
:field: max_time
|
data/lib/ruminate/plugin.rb
CHANGED
@@ -40,8 +40,11 @@ def ruminate(arg0, rumx_mount, username, password, host, port, smtp_host, config
|
|
40
40
|
res.body.split("\n").each do |line|
|
41
41
|
if (i = line.index('=')) >= 0
|
42
42
|
value = line[(i+1)..-1]
|
43
|
-
|
44
|
-
|
43
|
+
if value.match(/^\s*[+-]?\d+\s*$/)
|
44
|
+
value = value.to_i
|
45
|
+
elsif value.match(/^\s*[+-]?((\d+_?)*\d+(\.(\d+_?)*\d+)?|\.(\d+_?)*\d+)(\s*|([eE][+-]?(\d+_?)*\d+)\s*)$/)
|
46
|
+
value = value.to_f
|
47
|
+
end
|
45
48
|
result_hash[line[0,i]] = value
|
46
49
|
end
|
47
50
|
end
|
@@ -64,6 +67,9 @@ def ruminate(arg0, rumx_mount, username, password, host, port, smtp_host, config
|
|
64
67
|
The following filter has been triggered:
|
65
68
|
|
66
69
|
#{filter}
|
70
|
+
|
71
|
+
Output:
|
72
|
+
#{res.body}
|
67
73
|
EOM
|
68
74
|
send_email(smtp_host, alert[:email], "ALERT: #{alert[:title]}", message)
|
69
75
|
end
|
@@ -73,8 +79,12 @@ The following filter caused an exception #{e.message}:
|
|
73
79
|
|
74
80
|
Original Filter: #{alert[:filter]}
|
75
81
|
Evaled Filter: #{filter}
|
82
|
+
|
83
|
+
Output:
|
84
|
+
#{res.body}
|
76
85
|
EOM
|
77
86
|
send_email(smtp_host, alert[:email], "ALERT EXCEPTION: #{alert[:title]}", message)
|
87
|
+
raise
|
78
88
|
end
|
79
89
|
end
|
80
90
|
end
|
data/lib/ruminate.rb
CHANGED
@@ -5,7 +5,6 @@ module Ruminate
|
|
5
5
|
require 'ruminate/railtie' if defined?(Rails)
|
6
6
|
|
7
7
|
def self.create_plugins(config_file, ruminate_dir, plugin_dir)
|
8
|
-
FileUtils.rm_rf(plugin_dir)
|
9
8
|
FileUtils.mkdir_p(plugin_dir)
|
10
9
|
config = YAML.load(File.read(config_file))
|
11
10
|
ruminate_plugin = File.expand_path('../ruminate/plugin.rb', __FILE__)
|
@@ -20,8 +19,10 @@ module Ruminate
|
|
20
19
|
Dir["#{ruminate_dir}/*.yml"].each do |plugin_config_file|
|
21
20
|
plugin_basename = File.basename(plugin_config_file, '.*')
|
22
21
|
plugin_config = YAML.load(File.read(plugin_config_file))
|
22
|
+
replace_templates(plugin_config, ruminate_dir)
|
23
23
|
plugin_config.each do |graph_category, graph_configs|
|
24
24
|
graph_configs.each do |graph_config|
|
25
|
+
raise "No plot\n#{graph_config.inspect}" unless graph_config[:plot]
|
25
26
|
config_params = ''
|
26
27
|
graph_config.each do |key, value|
|
27
28
|
config_params += "#{key} #{value}\n" if key.to_s.start_with?('graph_')
|
@@ -29,6 +30,7 @@ module Ruminate
|
|
29
30
|
config_params += "graph_category #{graph_category}\n" unless graph_config[:graph_category]
|
30
31
|
graph_config[:plot].each_with_index do |field_hash, i|
|
31
32
|
field_hash.each do |key, value|
|
33
|
+
next if key == :field
|
32
34
|
config_params += "field#{i}.#{key} #{value}\n"
|
33
35
|
end
|
34
36
|
end
|
@@ -87,4 +89,59 @@ ruminate(
|
|
87
89
|
end
|
88
90
|
#system '/etc/init.d/munin-node restart'
|
89
91
|
end
|
92
|
+
|
93
|
+
private
|
94
|
+
|
95
|
+
def self.replace_templates(hash, ruminate_dir)
|
96
|
+
read_hash = hash.dup
|
97
|
+
read_hash.each do |key, value|
|
98
|
+
if key == :template
|
99
|
+
hash.delete(:template)
|
100
|
+
add_template_to_hash(hash, ruminate_dir, value)
|
101
|
+
else
|
102
|
+
replace_value(value, ruminate_dir)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def self.add_template_to_hash(hash, ruminate_dir, template_value)
|
108
|
+
variables = template_value.split
|
109
|
+
template_name = variables.shift
|
110
|
+
filename = File.join(ruminate_dir, 'templates', "#{template_name}.yml")
|
111
|
+
unless File.exist?(filename)
|
112
|
+
filename = File.expand_path("../../config/templates/#{template_name}.yml", __FILE__)
|
113
|
+
raise "Could not find template #{template_name}.yml" unless File.exist?(filename)
|
114
|
+
end
|
115
|
+
child_hash = YAML.load(File.read(filename))
|
116
|
+
raise "Template #{template_name}.yml is not a hash" unless child_hash.kind_of?(Hash)
|
117
|
+
variable_hash = {}
|
118
|
+
variables.each do |value|
|
119
|
+
eq_i = value.index('=')
|
120
|
+
raise "Invalid substitution value #{value}" unless eq_i
|
121
|
+
variable_hash[value[0,eq_i]] = value[eq_i+1..-1]
|
122
|
+
end
|
123
|
+
replace_variables(child_hash, variable_hash)
|
124
|
+
replace_templates(child_hash, ruminate_dir)
|
125
|
+
hash.merge!(child_hash)
|
126
|
+
end
|
127
|
+
|
128
|
+
def self.replace_value(value, ruminate_dir)
|
129
|
+
if value.kind_of?(Array)
|
130
|
+
value.each {|sub_value| replace_value(sub_value, ruminate_dir)}
|
131
|
+
elsif value.kind_of?(Hash)
|
132
|
+
replace_templates(value, ruminate_dir)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
def self.replace_variables(value, variable_hash)
|
137
|
+
if value.kind_of?(String)
|
138
|
+
variable_hash.each do |variable, sub|
|
139
|
+
value.gsub!("%#{variable}%", sub)
|
140
|
+
end
|
141
|
+
elsif value.kind_of?(Array)
|
142
|
+
value.each {|sub_value| replace_variables(sub_value, variable_hash)}
|
143
|
+
elsif value.kind_of?(Hash)
|
144
|
+
value.each_value {|sub_value| replace_variables(sub_value, variable_hash)}
|
145
|
+
end
|
146
|
+
end
|
90
147
|
end
|
metadata
CHANGED
@@ -1,64 +1,73 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruminate
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.2
|
3
|
+
version: !ruby/object:Gem::Version
|
5
4
|
prerelease:
|
5
|
+
version: 0.0.3
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
8
|
-
- Brad Pardee
|
7
|
+
authors:
|
8
|
+
- Brad Pardee
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
12
|
+
|
13
|
+
date: 2012-01-11 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rumx
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.1.5
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: *id001
|
25
26
|
description: Simple process for generating munin plugins to monitor your Rails application
|
26
|
-
email:
|
27
|
-
- bradpardee@gmail.com
|
27
|
+
email:
|
28
|
+
- bradpardee@gmail.com
|
28
29
|
executables: []
|
30
|
+
|
29
31
|
extensions: []
|
32
|
+
|
30
33
|
extra_rdoc_files: []
|
31
|
-
|
32
|
-
|
33
|
-
- lib/ruminate
|
34
|
-
- lib/ruminate.rb
|
35
|
-
- lib/
|
36
|
-
-
|
37
|
-
-
|
38
|
-
-
|
39
|
-
-
|
34
|
+
|
35
|
+
files:
|
36
|
+
- lib/ruminate.rb
|
37
|
+
- lib/ruminate/plugin.rb
|
38
|
+
- lib/ruminate/railtie.rb
|
39
|
+
- lib/tasks/ruminate.rake
|
40
|
+
- config/templates/plot_timer.yml
|
41
|
+
- LICENSE.txt
|
42
|
+
- Rakefile
|
43
|
+
- History.md
|
44
|
+
- README.md
|
40
45
|
homepage: http://github.com/ClarityServices/ruminate
|
41
46
|
licenses: []
|
47
|
+
|
42
48
|
post_install_message:
|
43
49
|
rdoc_options: []
|
44
|
-
|
45
|
-
|
46
|
-
|
50
|
+
|
51
|
+
require_paths:
|
52
|
+
- lib
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
54
|
none: false
|
48
|
-
requirements:
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: "0"
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
53
60
|
none: false
|
54
|
-
requirements:
|
55
|
-
|
56
|
-
|
57
|
-
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0"
|
58
65
|
requirements: []
|
66
|
+
|
59
67
|
rubyforge_project:
|
60
|
-
rubygems_version: 1.8.
|
68
|
+
rubygems_version: 1.8.9
|
61
69
|
signing_key:
|
62
70
|
specification_version: 3
|
63
71
|
summary: Easy generation of munin plugins to monitor your app
|
64
72
|
test_files: []
|
73
|
+
|