munin2graphite 0.2.3 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0e7d1f3af9f61a3019509bb83aa174e8c594e44f
4
- data.tar.gz: 67385d7038ed1dad8f8731d69bd10ef26767f3e9
3
+ metadata.gz: 4726ddda92c26d794bb3015c44dee126bfc5aa04
4
+ data.tar.gz: 55e16f215324c77407719c6bf7410bf26e0e1dff
5
5
  SHA512:
6
- metadata.gz: 30196b2187dc60116cd8cf8dfed75c4b5a25962e4a48559a777523b60ee099415c9ba117bfbd9203e1cefce860e56e6f4d1e353416140ab808aebe4ca32fe7f4
7
- data.tar.gz: 1f3434e11378e26163a641af24bda48241863fc02693090e8cfe593ede2356a9b08d6e2111bc863a33e485c4d46d5892257c7129dfbb92ec2aa5e5f4d65ec885
6
+ metadata.gz: 0b996f9f88b6b11cd094d0829de7eadce6806e741e764ed35b9368593848260f4f0724c88a458cdc9d5eca41f1a5fd869d3890b6a3655676636d1f19e8116c90
7
+ data.tar.gz: ed9c0b1867ff224575713f17108d28536836c4247b64ba965f4c13dd17b3e4a200a2b065e448d6fe29710f9b4e1ea184a03313c233aa0cedcd6432f8b805a254
data/Gemfile CHANGED
@@ -9,6 +9,7 @@ gem "daemons", "1.1.4"
9
9
  gem "parseconfig"
10
10
  gem "munin-ruby", "~> 0.2.1"
11
11
  gem "json", "~> 1.8.2"
12
+ gem 'diplomat', '~> 2.0', '>= 2.0.2'
12
13
 
13
14
 
14
15
  # Add dependencies to develop your gem here.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.3
1
+ 0.3.0
@@ -1,4 +1,4 @@
1
- require 'uri'
1
+ require 'cgi'
2
2
 
3
3
  class ASTNode
4
4
 
@@ -92,14 +92,14 @@ class ASTNode
92
92
  aux_graph_properties.delete :yMin
93
93
  end
94
94
 
95
- aux = aux_graph_properties.map{|i,j| "#{i}=#{URI.escape(j.to_s.gsub('%','percent'))}"}.join("&")
95
+ aux = aux_graph_properties.map{|i,j| "#{i}=#{CGI.escape(j.to_s.gsub('%','percent'))}"}.join("&")
96
96
  return aux
97
97
  end
98
98
 
99
99
  # This returns the url field of the graph after compiling it
100
100
  def url
101
101
  self.compile
102
- url = "#{properties[:endpoint]}/render/?width=586&height=308&#{properties_to_url}&target=" + URI.escape(targets.map{|i| i.compile}.compact.join("&target="))
102
+ url = "#{properties[:endpoint]}/render/?width=586&height=308&#{properties_to_url}&target=" + CGI.escape(targets.map{|i| i.compile}.compact.join("&target="))
103
103
  end
104
104
 
105
105
  def to_gdash
@@ -124,7 +124,7 @@ end
124
124
  class GlobalDeclarationNode < ASTNode
125
125
  def initialize(line)
126
126
  super
127
- line =~ /^([\w_]*)\ (.*)/
127
+ line =~ /^([\w]*)\ (.*)/
128
128
  @value = $2
129
129
  end
130
130
  end
@@ -254,7 +254,7 @@ class FieldPropertyNode < ASTNode
254
254
 
255
255
  def initialize(line)
256
256
  super
257
- line =~ /([\w_]+)\.(\w+)\ (.*)$/
257
+ line =~ /([\w]+)\.(\w+)\ (.*)$/
258
258
  @metric = $1
259
259
  @function = $2
260
260
  @value = $3
@@ -17,7 +17,7 @@ module Munin2Graphite
17
17
  end
18
18
 
19
19
  def workers
20
- return @config.groups
20
+ return @config.groups + @config.params['workers'].to_a
21
21
  end
22
22
 
23
23
  attr_accessor :config
@@ -17,6 +17,7 @@
17
17
  # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
18
  require 'rufus/scheduler'
19
19
  require 'thread'
20
+ require 'diplomat'
20
21
  module Munin2Graphite
21
22
  ##
22
23
  # This class holds the main scheduler of the system, it will perform the applicacion loops
@@ -41,13 +42,30 @@ module Munin2Graphite
41
42
  raise "CategoryNotFound in #{config}"
42
43
  end
43
44
 
45
+ def workers_from_consul_config!
46
+ return unless @config['consul_url']
47
+ Diplomat.configure do |c|
48
+ c.url = @config['consul_url']
49
+ end
50
+ Diplomat::Service.get(@config['consul_service'], :all).each do |i|
51
+ @config.config.params['workers'] ||= []
52
+ @config.config.params['workers'] << i['Node']
53
+ @config.config.params[i['Node']] = {
54
+ 'munin_hostname' => i['Address'],
55
+ 'munin_port' => i['ServicePort'],
56
+ }
57
+ end
58
+ end
59
+
44
60
  def munin_config(reload = false)
45
61
  return @munin_config if @munin_config && !reload
46
62
  @munin_config = {}
47
63
  @config.log.info("Obtaining metrics configuration")
48
64
  @munin_config[:workers] = []
65
+
49
66
  semaphore = Mutex.new
50
67
  threads = []
68
+
51
69
  workers.each do |worker|
52
70
  threads << Thread.new do
53
71
  current_config = {}
@@ -60,6 +78,7 @@ module Munin2Graphite
60
78
  config.log.error("This node will be skipped")
61
79
  Thread.current.exit
62
80
  end
81
+
63
82
  current_config[:nodes] = {}
64
83
  semaphore_nodes = Mutex.new
65
84
  threads_nodes = []
@@ -112,6 +131,7 @@ module Munin2Graphite
112
131
  end
113
132
 
114
133
  def workers
134
+ workers_from_consul_config!
115
135
  @workers ||= (@config.workers.empty? ? ["global"] : @config.workers )
116
136
  end
117
137
 
@@ -135,19 +155,16 @@ module Munin2Graphite
135
155
  metrics_threads = []
136
156
  categories = {}
137
157
  metrics.each do |metric|
138
- metrics_threads << Thread.new do
139
- begin
140
- local_munin = Munin::Node.new(config["munin_hostname"],config["munin_port"])
141
- values[metric] = local_munin.fetch metric
142
- local_munin.disconnect
143
- rescue Exception => e
144
- @config.log.error("There was a problem when getting the metric #{metric} for #{node} , Ignored")
145
- @config.log.error(e.message)
146
- @config.log.error(e.backtrace.inspect)
147
- end
158
+ begin
159
+ local_munin = Munin::Node.new(config["munin_hostname"],config["munin_port"])
160
+ values[metric] = local_munin.fetch metric
161
+ local_munin.disconnect
162
+ rescue Exception => e
163
+ @config.log.error("There was a problem when getting the metric #{metric} for #{node} , Ignored")
164
+ @config.log.error(e.message)
165
+ @config.log.error(e.backtrace.inspect)
148
166
  end
149
167
  end
150
- metrics_threads.each {|i| i.join}
151
168
  config.log.debug(values.inspect)
152
169
  config.log.info("Done with: #{node} (#{Time.now - metric_time} s)")
153
170
  carbon = @carbon || Carbon.new(config["carbon_hostname"],config["carbon_port"])
@@ -233,14 +250,6 @@ module Munin2Graphite
233
250
  @scheduler.every config["scheduler_metrics_period"] do
234
251
  metric_loop(worker)
235
252
  end
236
-
237
- =begin
238
- # Graph rereading is disabled by now there are concurrency problems
239
- @scheduler.every config["scheduler_graphs_period"] do
240
- obtain_graphs
241
- end
242
- =end
243
-
244
253
  end
245
254
  end
246
255
  end
@@ -85,25 +85,25 @@ class MuninGraph
85
85
  {:matcher => /^graph_width .*/, :klass => GraphWidthGlobalDeclarationNode},
86
86
  {:matcher => /^graph_height .*/, :klass => GraphHeightGlobalDeclarationNode},
87
87
  {:matcher => /^graph_printfformat .*/, :klass => GraphPrintFormatGlobalDeclarationNode},
88
- {:matcher => /([\w_]+)\.label\ .*$/,:klass => LabelFieldPropertyNode},
89
- {:matcher => /([\w_]+)\.cdef\ .*$/,:klass => CDefFieldPropertyNode},
90
- {:matcher => /([\w_]+)\.draw\ .*$/,:klass => DrawFieldPropertyNode},
91
- {:matcher => /([\w_]+)\.graph\ .*$/,:klass => GraphFieldPropertyNode},
92
- {:matcher => /([\w_]+)\.info\ .*$/,:klass => InfoFieldPropertyNode},
93
- {:matcher => /([\w_]+)\.extinfo\ .*$/,:klass => ExtInfoFieldPropertyNode},
94
- {:matcher => /([\w_]+)\.max\ .*$/,:klass => MaxFieldPropertyNode},
95
- {:matcher => /([\w_]+)\.min\ .*$/,:klass => MinFieldPropertyNode},
96
- {:matcher => /([\w_]+)\.negative\ .*$/,:klass => NegativeFieldPropertyNode},
97
- {:matcher => /([\w_]+)\.type\ .*$/,:klass => TypeFieldPropertyNode},
98
- {:matcher => /([\w_]+)\.warning\ .*$/,:klass => WarningFieldPropertyNode},
99
- {:matcher => /([\w_]+)\.critical\ .*$/,:klass => CriticalFieldPropertyNode},
100
- {:matcher => /([\w_]+)\.colour\ .*$/,:klass => ColourFieldPropertyNode},
101
- {:matcher => /([\w_]+)\.skipdraw\ .*$/,:klass => SkipDrawFieldPropertyNode},
102
- {:matcher => /([\w_]+)\.sum\ .*$/,:klass => SumFieldPropertyNode},
103
- {:matcher => /([\w_]+)\.stack\ .*$/,:klass => StackFieldPropertyNode},
104
- {:matcher => /([\w_]+)\.linevalue\[:color\[:label\]\]\ .*$/,:klass => LineValueFieldPropertyNode},
105
- {:matcher => /([\w_]+)\.oldname\ .*$/,:klass => OldNameFieldPropertyNode},
106
- {:matcher => /([\w_]+)\.value\ .*$/,:klass => ValueFieldPropertyNode}
88
+ {:matcher => /([\w]+)\.label\ .*$/,:klass => LabelFieldPropertyNode},
89
+ {:matcher => /([\w]+)\.cdef\ .*$/,:klass => CDefFieldPropertyNode},
90
+ {:matcher => /([\w]+)\.draw\ .*$/,:klass => DrawFieldPropertyNode},
91
+ {:matcher => /([\w]+)\.graph\ .*$/,:klass => GraphFieldPropertyNode},
92
+ {:matcher => /([\w]+)\.info\ .*$/,:klass => InfoFieldPropertyNode},
93
+ {:matcher => /([\w]+)\.extinfo\ .*$/,:klass => ExtInfoFieldPropertyNode},
94
+ {:matcher => /([\w]+)\.max\ .*$/,:klass => MaxFieldPropertyNode},
95
+ {:matcher => /([\w]+)\.min\ .*$/,:klass => MinFieldPropertyNode},
96
+ {:matcher => /([\w]+)\.negative\ .*$/,:klass => NegativeFieldPropertyNode},
97
+ {:matcher => /([\w]+)\.type\ .*$/,:klass => TypeFieldPropertyNode},
98
+ {:matcher => /([\w]+)\.warning\ .*$/,:klass => WarningFieldPropertyNode},
99
+ {:matcher => /([\w]+)\.critical\ .*$/,:klass => CriticalFieldPropertyNode},
100
+ {:matcher => /([\w]+)\.colour\ .*$/,:klass => ColourFieldPropertyNode},
101
+ {:matcher => /([\w]+)\.skipdraw\ .*$/,:klass => SkipDrawFieldPropertyNode},
102
+ {:matcher => /([\w]+)\.sum\ .*$/,:klass => SumFieldPropertyNode},
103
+ {:matcher => /([\w]+)\.stack\ .*$/,:klass => StackFieldPropertyNode},
104
+ {:matcher => /([\w]+)\.linevalue\[:color\[:label\]\]\ .*$/,:klass => LineValueFieldPropertyNode},
105
+ {:matcher => /([\w]+)\.oldname\ .*$/,:klass => OldNameFieldPropertyNode},
106
+ {:matcher => /([\w]+)\.value\ .*$/,:klass => ValueFieldPropertyNode}
107
107
  ]
108
108
 
109
109
  def parse_config
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: munin2graphite 0.2.3 ruby lib
5
+ # stub: munin2graphite 0.3.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "munin2graphite"
9
- s.version = "0.2.3"
9
+ s.version = "0.3.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Jose Fernandez (magec)"]
14
- s.date = "2017-01-23"
14
+ s.date = "2017-11-06"
15
15
  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."
16
16
  s.email = "jfernandezperez@gmail.com"
17
17
  s.executables = ["munin2gdash", "munin2graphite", "munin2graphite-1r", "munin2graphite-daemon"]
@@ -55,7 +55,7 @@ Gem::Specification.new do |s|
55
55
  ]
56
56
  s.homepage = "http://github.com/magec/munin2graphite"
57
57
  s.licenses = ["MIT"]
58
- s.rubygems_version = "2.4.5"
58
+ s.rubygems_version = "2.4.5.1"
59
59
  s.summary = "Allows to post both data and graphic info from munin to graphite (https://launchpad.net/graphite)"
60
60
 
61
61
  if s.respond_to? :specification_version then
@@ -67,6 +67,7 @@ Gem::Specification.new do |s|
67
67
  s.add_runtime_dependency(%q<parseconfig>, [">= 0"])
68
68
  s.add_runtime_dependency(%q<munin-ruby>, ["~> 0.2.1"])
69
69
  s.add_runtime_dependency(%q<json>, ["~> 1.8.2"])
70
+ s.add_runtime_dependency(%q<diplomat>, [">= 2.0.2", "~> 2.0"])
70
71
  s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
71
72
  s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
72
73
  else
@@ -75,6 +76,7 @@ Gem::Specification.new do |s|
75
76
  s.add_dependency(%q<parseconfig>, [">= 0"])
76
77
  s.add_dependency(%q<munin-ruby>, ["~> 0.2.1"])
77
78
  s.add_dependency(%q<json>, ["~> 1.8.2"])
79
+ s.add_dependency(%q<diplomat>, [">= 2.0.2", "~> 2.0"])
78
80
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
79
81
  s.add_dependency(%q<yard>, ["~> 0.6.0"])
80
82
  end
@@ -84,6 +86,7 @@ Gem::Specification.new do |s|
84
86
  s.add_dependency(%q<parseconfig>, [">= 0"])
85
87
  s.add_dependency(%q<munin-ruby>, ["~> 0.2.1"])
86
88
  s.add_dependency(%q<json>, ["~> 1.8.2"])
89
+ s.add_dependency(%q<diplomat>, [">= 2.0.2", "~> 2.0"])
87
90
  s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
88
91
  s.add_dependency(%q<yard>, ["~> 0.6.0"])
89
92
  end
@@ -6,8 +6,9 @@ class TestMyGraph < Test::Unit::TestCase
6
6
  def setup
7
7
  Munin2Graphite::Config.config_file = TEST_CONFIG_FILE
8
8
  @graphic = Graphite::MyGraph.new
9
- @graphic.url = "http://graphite.uoc.es/composer/../render/?width=1371&height=707&_salt=1312965749.741&target=alias(scale(derivative(campus.frontends.linux.aleia.apache.apache_volume.volume80)%2C0.016666666666666666)%2C%22Bytes%20por%20segundo%22)&title=Bytes%20transmitidos"
9
+ @graphic.url = "http://test.es/composer/../render/?width=1371&height=707&_salt=1312965749.741&target=alias(scale(derivative(campus.frontends.linux.aleia.apache.apache_volume.volume80)%2C0.016666666666666666)%2C%22Bytes%20por%20segundo%22)&title=Bytes%20transmitidos"
10
10
  @graphic.name = "Apache.Transferencia"
11
+ puts @graphic.inspect
11
12
  @graphic.save!
12
13
  end
13
14
 
@@ -22,6 +23,7 @@ class TestMyGraph < Test::Unit::TestCase
22
23
  end
23
24
 
24
25
  def test_find_by_name
26
+ puts Graphite::MyGraph.find_by_name("Apache.Transferencia").inspect
25
27
  assert_equal Graphite::MyGraph.find_by_name("Apache.Transferencia").name , "Apache.Transferencia"
26
28
  end
27
29
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: munin2graphite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jose Fernandez (magec)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-23 00:00:00.000000000 Z
11
+ date: 2017-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rufus-scheduler
@@ -80,6 +80,26 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 1.8.2
83
+ - !ruby/object:Gem::Dependency
84
+ name: diplomat
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 2.0.2
90
+ - - "~>"
91
+ - !ruby/object:Gem::Version
92
+ version: '2.0'
93
+ type: :runtime
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: 2.0.2
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '2.0'
83
103
  - !ruby/object:Gem::Dependency
84
104
  name: jeweler
85
105
  requirement: !ruby/object:Gem::Requirement
@@ -174,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
194
  version: '0'
175
195
  requirements: []
176
196
  rubyforge_project:
177
- rubygems_version: 2.4.5
197
+ rubygems_version: 2.4.5.1
178
198
  signing_key:
179
199
  specification_version: 4
180
200
  summary: Allows to post both data and graphic info from munin to graphite (https://launchpad.net/graphite)