munin2graphite 0.1.2 → 0.1.6
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.
- data/VERSION +1 -1
- data/bin/munin2gdash +54 -0
- data/conf/munin2graphite.conf.example +4 -0
- data/lib/ast_node.rb +19 -2
- data/lib/munin2graphite/config.rb +5 -3
- data/lib/munin2graphite/scheduler.rb +114 -112
- data/lib/munin_graph.rb +5 -0
- data/munin2graphite.gemspec +4 -3
- metadata +21 -19
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.6
|
data/bin/munin2gdash
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
$:.unshift(File.expand_path(File.join(File.dirname(__FILE__),"..","lib")))
|
3
|
+
require 'rubygems'
|
4
|
+
require 'munin2graphite'
|
5
|
+
require 'optparse'
|
6
|
+
require 'erb'
|
7
|
+
|
8
|
+
options = {}
|
9
|
+
optparse = OptionParser.new do |opts|
|
10
|
+
opts.banner = "Usage: #{__FILE__} [options]"
|
11
|
+
|
12
|
+
opts.on( '-t', '--template-dir TEMPLATE_DIR', 'The directory you want the template files to be placed' ) do |td|
|
13
|
+
options[:template_dir] = td
|
14
|
+
end
|
15
|
+
|
16
|
+
options[:config_file] = "/etc/munin2graphite/munin2graphite.conf"
|
17
|
+
opts.on( '-c', '--config CONFIG_FILE', 'The munin2graphite config file' ) do |td|
|
18
|
+
options[:config_file] = td
|
19
|
+
end
|
20
|
+
|
21
|
+
opts.on( '-n', '--node NODE', "The munin node you want the data to be extracted from") do |n|
|
22
|
+
options[:node] = n
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
optparse.parse!
|
27
|
+
|
28
|
+
if !options[:template_dir]
|
29
|
+
puts "Error, no template dir specified"
|
30
|
+
puts optparse.help
|
31
|
+
exit 1
|
32
|
+
end
|
33
|
+
|
34
|
+
Munin2Graphite::Config.config_file = options[:config_file]
|
35
|
+
scheduler = Munin2Graphite::Scheduler.new(Munin2Graphite::Config)
|
36
|
+
|
37
|
+
munin_config = scheduler.munin_config
|
38
|
+
munin_config[:workers].each do |worker|
|
39
|
+
time = Time.now
|
40
|
+
config = Munin2Graphite::Config.config_for_worker worker
|
41
|
+
munin_config[worker][:nodes].keys.each do |node|
|
42
|
+
config.log.info("Graphs for #{node}")
|
43
|
+
munin_config[worker][:nodes][node][:metrics].each do |metric,value|
|
44
|
+
munin_graph = MuninGraph.graph_for value[:raw_config]
|
45
|
+
munin_graph.config = config.merge("metric" => "#{metric}","hostname" => node.split(".").first)
|
46
|
+
File.open(File.join(options[:template_dir],metric.to_s + ".graph"), "w+") do |file|
|
47
|
+
file.write munin_graph.to_gdash
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
config.log.info("End : Sending Graph Information to Graphite for worker #{worker}, elapsed time (#{Time.now - time}s)")
|
52
|
+
end
|
53
|
+
#puts scheduler.munin_config
|
54
|
+
scheduler
|
@@ -1,8 +1,12 @@
|
|
1
1
|
# Log config
|
2
2
|
# log: The logfile, STDOUT if stdout is needed
|
3
3
|
# log_level: Either DEBUG, INFO or WARN
|
4
|
+
# Rotation (shift_age and shift_size)
|
5
|
+
#
|
4
6
|
log=/var/log/munin2graphite.log
|
5
7
|
log_level=INFO
|
8
|
+
log_shift_age=1 # 0 if for no rotation
|
9
|
+
log_shift_size=100000
|
6
10
|
|
7
11
|
# Carbon backend
|
8
12
|
# This has to point to the carbon backend to submit metrics
|
data/lib/ast_node.rb
CHANGED
@@ -96,6 +96,22 @@ class ASTNode
|
|
96
96
|
url = "#{properties[:endpoint]}/render/?width=586&height=308&#{properties_to_url}&target=" + URI.escape(targets.map{|i| i.compile}.compact.join("&target="))
|
97
97
|
end
|
98
98
|
|
99
|
+
def to_gdash
|
100
|
+
output = ""
|
101
|
+
self.compile
|
102
|
+
self.graph_properties.each do |k,v|
|
103
|
+
output += k.to_s + "\t\t" + '"' + v.to_s + '"' + "\n" unless k == :colorList || k == :yMin || k== :yMax
|
104
|
+
end
|
105
|
+
count = 0
|
106
|
+
targets.each do |tg|
|
107
|
+
metric_alias = tg.properties.delete(:alias)
|
108
|
+
tg.children.delete_if { |i| i.class == LabelFieldPropertyNode}
|
109
|
+
output += "field :#{tg.metric.split(".").last.to_sym},:alias => '#{metric_alias}', :data => \"#{tg.compile}\"\n"
|
110
|
+
count += 1
|
111
|
+
end
|
112
|
+
return output
|
113
|
+
end
|
114
|
+
|
99
115
|
end
|
100
116
|
|
101
117
|
|
@@ -248,8 +264,9 @@ class TypeFieldPropertyNode < FieldPropertyNode
|
|
248
264
|
|
249
265
|
def apply_function(operand)
|
250
266
|
if @value == "DERIVE" || @value == "COUNTER"
|
251
|
-
# The scaling is because of the minutes/seconds"
|
252
|
-
return "scale(nonNegativeDerivative(#{operand}),0.0166666666666667)"
|
267
|
+
# The scaling is because of the minutes/(60*seconds)"
|
268
|
+
#return "scale(nonNegativeDerivative(#{operand}),0.0166666666666667)"
|
269
|
+
return "scale(nonNegativeDerivative(#{operand}),0.00333333333333333)"
|
253
270
|
end
|
254
271
|
operand
|
255
272
|
end
|
@@ -89,11 +89,13 @@ module Munin2Graphite
|
|
89
89
|
super
|
90
90
|
end
|
91
91
|
|
92
|
-
def log
|
92
|
+
def log
|
93
|
+
shift_age = self["log_shift_age"] ? self["log_shift_age"].to_i : 1
|
94
|
+
shift_size = self["log_shift_size"].to_i || 100000
|
93
95
|
@log ||= if self["log"] == "STDOUT"
|
94
|
-
Logger.new(STDOUT)
|
96
|
+
Logger.new(STDOUT, shift_age, shift_size)
|
95
97
|
else
|
96
|
-
Logger.new(self["log"])
|
98
|
+
Logger.new(self["log"], shift_age, shift_size)
|
97
99
|
end
|
98
100
|
@log.level = self["log_level"] == "DEBUG" ? Logger::DEBUG : Logger::INFO
|
99
101
|
@log
|
@@ -26,43 +26,50 @@ module Munin2Graphite
|
|
26
26
|
def initialize(config)
|
27
27
|
@config = config
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
def category_from_config(config)
|
31
31
|
config.each_line do |configline|
|
32
|
-
if configline =~ /^graph_category ([
|
32
|
+
if configline =~ /^graph_category ([\w\-_\.]+)$/
|
33
33
|
return configline.split[1]
|
34
34
|
end
|
35
|
-
end
|
36
|
-
return "other"
|
35
|
+
end
|
37
36
|
raise "CategoryNotFound in #{config}"
|
38
37
|
end
|
39
38
|
|
40
39
|
def munin_config
|
41
|
-
return @munin_config if @munin_config
|
40
|
+
return @munin_config if @munin_config
|
42
41
|
@munin_config = {}
|
43
|
-
|
42
|
+
@config.log.info("Obtaining metrics configuration")
|
43
|
+
@munin_config[:workers] = []
|
44
44
|
workers.each do |worker|
|
45
|
-
|
45
|
+
current_config = {}
|
46
46
|
config = @config.config_for_worker(worker)
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
47
|
+
munin = Munin::Node.new(config["munin_hostname"],config["munin_port"])
|
48
|
+
nodes = config["munin_nodes"] ? config["munin_nodes"].split(",") : munin.nodes
|
49
|
+
current_config[:nodes] = {}
|
50
|
+
nodes.each do |node|
|
51
|
+
metrics = munin.list(node)
|
52
|
+
current_config[:nodes][node] = { :metrics => {} }
|
53
|
+
metrics.each do |metric|
|
54
|
+
begin
|
55
|
+
raw_config = munin.config(metric,true)[metric]
|
56
|
+
category = category_from_config(raw_config)
|
57
|
+
current_config[:nodes][node][:metrics][metric] = {
|
58
|
+
:config => munin.config(metric)[metric],
|
59
|
+
:raw_config => raw_config,
|
60
|
+
:category => category
|
61
|
+
}
|
62
|
+
rescue Exception
|
63
|
+
config.log.error("Error when trying to obtain graph conf. Ignored (config was #{raw_config})")
|
58
64
|
end
|
59
65
|
end
|
60
|
-
munin.disconnect
|
61
|
-
rescue Exception
|
62
|
-
config.log.error("There was an error trying to obtain info from node #{config["munin_hostname"]}")
|
63
|
-
config.log.error $!
|
64
66
|
end
|
67
|
+
# @config.log.debug(current_config.inspect)
|
68
|
+
@munin_config[worker] = current_config
|
69
|
+
@munin_config[:workers] << worker
|
70
|
+
munin.disconnect
|
65
71
|
end
|
72
|
+
# @config.log.debug(@munin_config.inspect)
|
66
73
|
@munin_config
|
67
74
|
end
|
68
75
|
|
@@ -72,112 +79,107 @@ module Munin2Graphite
|
|
72
79
|
|
73
80
|
#
|
74
81
|
# This is the loop of the metrics scheduling
|
75
|
-
def obtain_metrics
|
82
|
+
def obtain_metrics(worker = "global")
|
76
83
|
config = @config.config_for_worker("global")
|
77
|
-
config.log.info("Obtaining metrics configuration")
|
78
|
-
munin_config
|
79
|
-
config.log.info("Getting metrics")
|
80
84
|
time = Time.now
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
values[metric] = local_munin.fetch metric
|
104
|
-
local_munin.disconnect
|
105
|
-
rescue Exception
|
106
|
-
config.log.error("Error when trying to obtain values for #{metric}. Ignored")
|
107
|
-
config.log.error $!
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
metrics_threads.each {|i| i.join;i.kill}
|
112
|
-
config.log.info("Done with: #{node} (#{Time.now - metric_time} s)")
|
113
|
-
carbon = Carbon.new(config["carbon_hostname"],config["carbon_port"])
|
114
|
-
string_to_send = ""
|
115
|
-
values.each do |metric,results|
|
116
|
-
category = munin_config[worker][:nodes][node][:categories][metric]
|
117
|
-
results.each do |k,v|
|
118
|
-
v.each do |c_metric,c_value|
|
119
|
-
string_to_send += "#{node_name}.#{category}.#{metric}.#{c_metric} #{c_value} #{Time.now.to_i}\n".gsub("-","_") if c_value != "U"
|
120
|
-
end
|
121
|
-
end
|
85
|
+
config = @config.config_for_worker(worker)
|
86
|
+
config.log.info("Worker #{worker}")
|
87
|
+
metric_base = config["graphite_metric_prefix"]
|
88
|
+
|
89
|
+
munin_config[worker][:nodes].each do |node,node_info|
|
90
|
+
node_name = metric_base + "." + node.split(".").first
|
91
|
+
config.log.debug("Doing #{node_name}")
|
92
|
+
values = {}
|
93
|
+
config.log.debug("Asking for: #{node}")
|
94
|
+
metric_time = Time.now
|
95
|
+
metrics = node_info[:metrics].keys
|
96
|
+
config.log.debug("Metrics " + metrics.join(","))
|
97
|
+
metrics_threads = []
|
98
|
+
categories = {}
|
99
|
+
metrics.each do |metric|
|
100
|
+
metrics_threads << Thread.new do
|
101
|
+
begin
|
102
|
+
local_munin = Munin::Node.new(config["munin_hostname"],config["munin_port"])
|
103
|
+
values[metric] = local_munin.fetch metric
|
104
|
+
local_munin.disconnect
|
105
|
+
rescue
|
106
|
+
@config.log.error("There was a problem when getting the metric #{metric} for #{node} , Ignored")
|
122
107
|
end
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
108
|
+
end
|
109
|
+
end
|
110
|
+
metrics_threads.each {|i| i.join;i.kill}
|
111
|
+
config.log.debug(values.inspect)
|
112
|
+
config.log.info("Done with: #{node} (#{Time.now - metric_time} s)")
|
113
|
+
carbon = Carbon.new(config["carbon_hostname"],config["carbon_port"])
|
114
|
+
string_to_send = ""
|
115
|
+
values.each do |metric,results|
|
116
|
+
category = node_info[:metrics][metric][:category]
|
117
|
+
results.each do |k,v|
|
118
|
+
v.each do |c_metric,c_value|
|
119
|
+
string_to_send += "#{node_name}.#{category}.#{metric}.#{c_metric} #{c_value} #{Time.now.to_i}\n".gsub("-","_") if c_value != "U"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
@config.log.debug(string_to_send)
|
124
|
+
send_time = Time.now
|
125
|
+
carbon.send(string_to_send)
|
126
|
+
carbon.flush
|
127
|
+
carbon.close
|
128
|
+
end if munin_config[worker]
|
129
|
+
@config.log.info("End getting metrics for worker #{worker}, elapsed time (#{Time.now - time}s)")
|
132
130
|
end
|
133
131
|
|
134
|
-
##
|
135
|
-
# The loop of the graphics creation
|
136
132
|
def obtain_graphs
|
137
|
-
|
138
|
-
workers
|
139
|
-
|
140
|
-
|
141
|
-
workers.each do |worker|
|
142
|
-
time = Time.now
|
133
|
+
munin_config
|
134
|
+
munin_config[:workers].each do |worker|
|
135
|
+
time = Time.now
|
143
136
|
config = @config.config_for_worker worker
|
144
|
-
config.log.info("Begin : Sending Graph Information to Graphite for worker #{worker}")
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
config.
|
153
|
-
|
154
|
-
|
155
|
-
munin_graph = MuninGraph.graph_for munin.config(metric,true)[metric]
|
156
|
-
munin_graph.config = config.merge("metric" => "#{metric}","hostname" => node.split(".").first)
|
157
|
-
config.log.debug("Saving graph #{metric}")
|
158
|
-
munin_graph.to_graphite.save!
|
159
|
-
end
|
137
|
+
@config.log.info("Begin : Sending Graph Information to Graphite for worker #{worker}")
|
138
|
+
Graphite::Base.set_connection(config["graphite_endpoint"])
|
139
|
+
Graphite::Base.authenticate(config["graphite_user"],config["graphite_password"])
|
140
|
+
munin_config[worker][:nodes].keys.each do |node|
|
141
|
+
@config.log.info("Graphs for #{node}")
|
142
|
+
munin_config[worker][:nodes][node][:metrics].each do |metric,value|
|
143
|
+
@config.log.info("Configuring #{metric}")
|
144
|
+
munin_graph = MuninGraph.graph_for value[:raw_config]
|
145
|
+
munin_graph.config = config.merge("metric" => "#{metric}","hostname" => node.split(".").first)
|
146
|
+
@config.log.debug("Saving graph #{metric}")
|
147
|
+
munin_graph.to_graphite.save!
|
160
148
|
end
|
161
|
-
config.log.info("End : Sending Graph Information to Graphite for worker #{worker}, elapsed time (#{Time.now - time}s)")
|
162
|
-
munin_graph.to_graphite.save!
|
163
|
-
|
164
|
-
munin.disconnect
|
165
|
-
rescue Exception
|
166
|
-
config.log.error("Error when trying to obtain graph conf. Ignored")
|
167
|
-
config.log.error $!
|
168
149
|
end
|
150
|
+
config.log.info("End : Sending Graph Information to Graphite for worker #{worker}, elapsed time (#{Time.now - time}s)")
|
169
151
|
end
|
152
|
+
end
|
170
153
|
|
154
|
+
def metric_loop(worker)
|
155
|
+
config = @config.config_for_worker worker
|
156
|
+
retries = 3
|
157
|
+
begin
|
158
|
+
obtain_metrics(worker)
|
159
|
+
rescue => e
|
160
|
+
config.log.error("Exception found: (#{e.to_s})")
|
161
|
+
e.backtrace.each { |line| config.log.error(line) }
|
162
|
+
sleep 1
|
163
|
+
retries -= 1
|
164
|
+
config.log.error("Retrying")
|
165
|
+
retry unless retries < 0
|
166
|
+
config.log.error("Exitting, exception not solved")
|
167
|
+
exit(1)
|
168
|
+
end
|
171
169
|
end
|
172
170
|
|
173
171
|
def start
|
174
172
|
@config.log.info("Scheduler started")
|
175
|
-
@scheduler = Rufus::Scheduler.start_new
|
176
|
-
obtain_metrics
|
177
|
-
@scheduler.every @config["scheduler_metrics_period"] do
|
178
|
-
obtain_metrics
|
179
|
-
end
|
180
173
|
obtain_graphs
|
174
|
+
@scheduler = Rufus::Scheduler.start_new
|
175
|
+
workers.each do |worker|
|
176
|
+
config = @config.config_for_worker worker
|
177
|
+
config.log.info("Scheduling worker #{worker} every #{config["scheduler_metrics_period"]} ")
|
178
|
+
metric_loop(worker)
|
179
|
+
@scheduler.every config["scheduler_metrics_period"] do
|
180
|
+
metric_loop(worker)
|
181
|
+
end
|
182
|
+
end
|
181
183
|
end
|
182
184
|
end
|
183
185
|
end
|
data/lib/munin_graph.rb
CHANGED
data/munin2graphite.gemspec
CHANGED
@@ -5,14 +5,14 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "munin2graphite"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jose Fernandez (magec)"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2012-02-17"
|
13
13
|
s.description = "This gem will install as a daemon and can be used to connect to a graphite and a carbon backend. It will not only post the data for the metrics but also create graphs into graphite, by means of a translation from munin-node."
|
14
14
|
s.email = "jfernandezperez@gmail.com"
|
15
|
-
s.executables = ["munin2graphite", "munin2graphite-daemon"]
|
15
|
+
s.executables = ["munin2gdash", "munin2graphite", "munin2graphite-daemon"]
|
16
16
|
s.extra_rdoc_files = [
|
17
17
|
"LICENSE.txt",
|
18
18
|
"README.markdown"
|
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
"README.markdown",
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
|
+
"bin/munin2gdash",
|
26
27
|
"bin/munin2graphite",
|
27
28
|
"bin/munin2graphite-daemon",
|
28
29
|
"conf/munin2graphite.conf.example",
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: munin2graphite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-02-17 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rufus-scheduler
|
16
|
-
requirement: &
|
16
|
+
requirement: &13760080 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - =
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 2.0.10
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *13760080
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: daemons
|
27
|
-
requirement: &
|
27
|
+
requirement: &13744200 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - =
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.1.4
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *13744200
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: parseconfig
|
38
|
-
requirement: &
|
38
|
+
requirement: &13743300 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *13743300
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: munin-ruby
|
49
|
-
requirement: &
|
49
|
+
requirement: &13742340 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.2.1
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *13742340
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: json
|
60
|
-
requirement: &
|
60
|
+
requirement: &13741460 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.6.3
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *13741460
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bundler
|
71
|
-
requirement: &
|
71
|
+
requirement: &13740580 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.0.0
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *13740580
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: jeweler
|
82
|
-
requirement: &
|
82
|
+
requirement: &13740060 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.5.2
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *13740060
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: yard
|
93
|
-
requirement: &
|
93
|
+
requirement: &13739540 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,12 +98,13 @@ dependencies:
|
|
98
98
|
version: 0.6.0
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *13739540
|
102
102
|
description: This gem will install as a daemon and can be used to connect to a graphite
|
103
103
|
and a carbon backend. It will not only post the data for the metrics but also create
|
104
104
|
graphs into graphite, by means of a translation from munin-node.
|
105
105
|
email: jfernandezperez@gmail.com
|
106
106
|
executables:
|
107
|
+
- munin2gdash
|
107
108
|
- munin2graphite
|
108
109
|
- munin2graphite-daemon
|
109
110
|
extensions: []
|
@@ -116,6 +117,7 @@ files:
|
|
116
117
|
- README.markdown
|
117
118
|
- Rakefile
|
118
119
|
- VERSION
|
120
|
+
- bin/munin2gdash
|
119
121
|
- bin/munin2graphite
|
120
122
|
- bin/munin2graphite-daemon
|
121
123
|
- conf/munin2graphite.conf.example
|
@@ -155,7 +157,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
155
157
|
version: '0'
|
156
158
|
segments:
|
157
159
|
- 0
|
158
|
-
hash:
|
160
|
+
hash: -732552108967367199
|
159
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
162
|
none: false
|
161
163
|
requirements:
|