metrics_influx 0.0.2
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 +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/bin/metrics-influx +7 -0
- data/lib/metrics_influx/cli.rb +70 -0
- data/lib/metrics_influx/engine.rb +91 -0
- data/lib/metrics_influx/module/graphitecli.rb +23 -0
- data/lib/metrics_influx/module/procloadavg.rb +27 -0
- data/lib/metrics_influx/module/procmeminfo.rb +33 -0
- data/lib/metrics_influx/module/procstatcpu.rb +26 -0
- data/lib/metrics_influx/module/procstatprocs.rb +21 -0
- data/lib/metrics_influx/module/procvmstat.rb +21 -0
- data/lib/metrics_influx/module/sysnetstat.rb +24 -0
- data/lib/metrics_influx/module.rb +42 -0
- data/lib/metrics_influx/version.rb +3 -0
- data/lib/metrics_influx.rb +13 -0
- data/metrics_influx.gemspec +32 -0
- metadata +176 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bdd8f2c2aab1d5b3c4335d81609ecfae1c4f6546
|
4
|
+
data.tar.gz: 31ef97f68ea6377fedb567651dcfd33526929f67
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bf9f1cddf750df277500b35870d51431d397eaf65a489aec14b7630dd443f9b047ab1ba681e15cb2449978a84a97bdc69b39ed6a0cff10af87ba4e4e23ff2145
|
7
|
+
data.tar.gz: 2c6986cb56e73379617a4d9893a941d0ef4612658c82228f053ed05b80ba8ccaf9a45905fc0c26a721306efeecd13274e54b66247469b01679120ccb404a43f3
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 Alex Hornung
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# MetricsInflux
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'metrics_influx'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install metrics_influx
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/metrics-influx
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'metrics_influx/version'
|
2
|
+
require 'metrics_influx/engine'
|
3
|
+
require 'metrics_influx'
|
4
|
+
|
5
|
+
require 'thor'
|
6
|
+
require 'logger'
|
7
|
+
require 'syslog/logger'
|
8
|
+
require 'daemons'
|
9
|
+
require 'yaml'
|
10
|
+
|
11
|
+
class MetricsInflux::CLI < Thor
|
12
|
+
|
13
|
+
desc "collect", ""
|
14
|
+
method_option :config, :aliases => "-c", :type => :string, :required => true
|
15
|
+
method_option :log, :aliases => "-l", :type => :string, :default => "-", :desc => "Specify a file to log to, or '-' to log to the standard output, or 'syslog' to log to syslog"
|
16
|
+
method_option :debug, :aliases => "-d", :type => :boolean, :default => false, :desc => "Specify this option to run with debug logging enabled"
|
17
|
+
method_option :daemonize, :aliases => "-D", :type => :boolean, :default => false, :desc => "Specify this option to daemonize the process instead of running in the foreground"
|
18
|
+
def collect
|
19
|
+
setup_logging
|
20
|
+
read_config
|
21
|
+
Daemons.daemonize if options[:daemonize]
|
22
|
+
begin
|
23
|
+
engine.run!
|
24
|
+
rescue SignalException => e
|
25
|
+
case Signal.signame(e.signo)
|
26
|
+
when "TERM", "INT"
|
27
|
+
MetricsInflux.logger.info "Received SIGTERM/SIGINT, shutting down."
|
28
|
+
exit 0
|
29
|
+
else
|
30
|
+
MetricsInflux.logger.fatal "Fatal unhandled signal in event loop: #{Signal.signame(e.signo)}"
|
31
|
+
e.backtrace.each { |line| MetricsInflux.logger.fatal " #{line}" }
|
32
|
+
end
|
33
|
+
rescue Exception => e
|
34
|
+
MetricsInflux.logger.fatal "Fatal unhandled exception in event loop: #{e.class.name} -> #{e.message}"
|
35
|
+
e.backtrace.each { |line| MetricsInflux.logger.fatal " #{line}" }
|
36
|
+
exit 1
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
no_tasks do
|
41
|
+
def engine
|
42
|
+
@engine ||= begin
|
43
|
+
engine = MetricsInflux::Engine.new(options, @config)
|
44
|
+
engine
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def setup_logging
|
49
|
+
case options[:log]
|
50
|
+
when "syslog"
|
51
|
+
@logger = Syslog::Logger.new('metrics-influx')
|
52
|
+
when "-"
|
53
|
+
@logger = Logger.new(STDOUT)
|
54
|
+
else
|
55
|
+
@logger = Logger.new(options[:log])
|
56
|
+
end
|
57
|
+
@logger.level = options[:debug] ? Logger::DEBUG : Logger::INFO
|
58
|
+
MetricsInflux.logger=(@logger)
|
59
|
+
end
|
60
|
+
|
61
|
+
def read_config
|
62
|
+
begin
|
63
|
+
@config = YAML.load_file(options[:config])
|
64
|
+
rescue SyntaxError => e
|
65
|
+
MetricsInflux.logger.fatal "Error loading config: #{e.message}"
|
66
|
+
exit 1
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'metrics_influx/version'
|
2
|
+
require 'metrics_influx/module'
|
3
|
+
require 'metrics_influx'
|
4
|
+
require 'net/http'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
class MetricsInflux::Engine
|
8
|
+
class Error < StandardError; end
|
9
|
+
|
10
|
+
def initialize(options, config)
|
11
|
+
@config = config
|
12
|
+
@collectors = config['collectors']
|
13
|
+
@timers = Timers::Group.new
|
14
|
+
|
15
|
+
@collectors.each do |coll|
|
16
|
+
coll[:instance] = MetricsInflux::Module[coll['type']].new(coll['config'])
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def connection
|
21
|
+
@http ||= begin
|
22
|
+
raise ArgumentError, "Unknown InfluxDB protocol #{@config['server']['protocol']}" unless ['http', 'https'].include? @config['server']['protocol']
|
23
|
+
http = Net::HTTP.new(@config['server']['host'], @config['server']['port'])
|
24
|
+
http.use_ssl = @config['server']['protocol'] == 'https'
|
25
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if @config['server'].fetch('no_verify', false)
|
26
|
+
http
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def do_query(q)
|
31
|
+
request = Net::HTTP::Get.new("/db/#{@config['database']}/series?q=#{CGI.escape(q)}")
|
32
|
+
request.basic_auth @config['server']['user'], @config['server']['pass']
|
33
|
+
connection.request(request)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_connection!
|
37
|
+
response = do_query('list series')
|
38
|
+
raise Error.new response.body unless response.kind_of? Net::HTTPSuccess
|
39
|
+
MetricsInflux.logger.debug "influxdb: Connection tested successfully"
|
40
|
+
end
|
41
|
+
|
42
|
+
def do_post!(data)
|
43
|
+
request = Net::HTTP::Post.new("/db/#{@config['database']}/series?time_precision=s")
|
44
|
+
request.basic_auth @config['server']['user'], @config['server']['pass']
|
45
|
+
request.add_field('Content-Type', 'application/json')
|
46
|
+
request.body = data.to_json
|
47
|
+
response = connection.request(request)
|
48
|
+
raise Error.new response.body unless response.kind_of? Net::HTTPSuccess
|
49
|
+
end
|
50
|
+
|
51
|
+
def run!
|
52
|
+
grouped_collectors = @collectors.group_by { |coll| coll['interval'] }
|
53
|
+
|
54
|
+
grouped_collectors.each do |interval,collectors|
|
55
|
+
@timers.every(interval) { sample(collectors) }
|
56
|
+
end
|
57
|
+
|
58
|
+
loop { @timers.wait }
|
59
|
+
end
|
60
|
+
|
61
|
+
def sample(collectors)
|
62
|
+
futures = collectors.map { |coll| { coll: coll, future: coll[:instance].future(:sample) } }
|
63
|
+
|
64
|
+
data = []
|
65
|
+
|
66
|
+
futures.each do |c|
|
67
|
+
coll = c[:coll]
|
68
|
+
kvs = c[:future].value
|
69
|
+
kvs = [kvs] if kvs.is_a? Hash
|
70
|
+
kvs.each do |kv|
|
71
|
+
data << {
|
72
|
+
name: coll['series'],
|
73
|
+
columns: kv.keys.map { |k| "#{coll['prefix'] || ""}#{k}" },
|
74
|
+
points: [ kv.values ]
|
75
|
+
}
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
begin
|
80
|
+
do_post! data
|
81
|
+
rescue MetricsInflux::Engine::Error => e
|
82
|
+
DockerBoss.logger.error "Error posting update: #{e.message}"
|
83
|
+
rescue Net::OpenTimeout => e
|
84
|
+
DockerBoss.logger.error "Error posting update: #{e.message}"
|
85
|
+
rescue Errno::ECONNREFUSED => e
|
86
|
+
DockerBoss.logger.error "Error posting update: #{e.message}"
|
87
|
+
rescue SocketError => e
|
88
|
+
DockerBoss.logger.error "Error posting update: #{e.message}"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'metrics_influx/module'
|
2
|
+
require 'metrics_influx'
|
3
|
+
|
4
|
+
class MetricsInflux::Module::GraphiteCLI < MetricsInflux::Module::Base
|
5
|
+
class Error < StandardError; end
|
6
|
+
|
7
|
+
def initialize(config, params = {})
|
8
|
+
@config = config
|
9
|
+
@params = params
|
10
|
+
end
|
11
|
+
|
12
|
+
def sample
|
13
|
+
time_now = Time.now.to_i
|
14
|
+
data = { time: time_now }
|
15
|
+
output = %x(#{@config['cmd']})
|
16
|
+
output.lines.each do |line|
|
17
|
+
(k,v,time) = line.split(/\s+/, 3)
|
18
|
+
data[k] = v
|
19
|
+
data[:time] = time if time
|
20
|
+
end
|
21
|
+
data
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'metrics_influx/module'
|
2
|
+
require 'metrics_influx'
|
3
|
+
|
4
|
+
class MetricsInflux::Module::ProcLoadavg < MetricsInflux::Module::Base
|
5
|
+
class Error < StandardError; end
|
6
|
+
|
7
|
+
def initialize(config, params = {})
|
8
|
+
@config = config
|
9
|
+
@params = params
|
10
|
+
end
|
11
|
+
|
12
|
+
def sample
|
13
|
+
time_now = Time.now.to_i
|
14
|
+
line = File.readlines('/proc/loadavg').first
|
15
|
+
(avg_1min, avg_5min, avg_15min, procs, last_pid) = line.chomp.split(/\s+/, 5)
|
16
|
+
(thread_run, thread_total) = procs.split(/\//, 2)
|
17
|
+
|
18
|
+
{
|
19
|
+
time: time_now,
|
20
|
+
load_avg1min: avg_1min.to_f,
|
21
|
+
load_avg5min: avg_5min.to_f,
|
22
|
+
load_avg15min: avg_15min.to_f,
|
23
|
+
entities_run: thread_run.to_i,
|
24
|
+
entities_total: thread_total.to_i
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'metrics_influx/module'
|
2
|
+
require 'metrics_influx'
|
3
|
+
|
4
|
+
class MetricsInflux::Module::ProcMeminfo < MetricsInflux::Module::Base
|
5
|
+
class Error < StandardError; end
|
6
|
+
|
7
|
+
def initialize(config, params = {})
|
8
|
+
@config = config
|
9
|
+
@params = params
|
10
|
+
end
|
11
|
+
|
12
|
+
def sample
|
13
|
+
time_now = Time.now.to_i
|
14
|
+
data = { time: time_now }
|
15
|
+
File.readlines('/proc/meminfo').each do |line|
|
16
|
+
(k,v,unit) = line.chomp.split(/\s+/, 3)
|
17
|
+
key = k[0..-2].gsub(/\(([^\)]+)\)/, '_\1')
|
18
|
+
v = v.to_i
|
19
|
+
case unit
|
20
|
+
when 'kB'
|
21
|
+
v *= 1024
|
22
|
+
when 'MB'
|
23
|
+
v *= 1024 * 1024
|
24
|
+
when 'GB'
|
25
|
+
v *= 1024 * 1024 * 1024
|
26
|
+
when 'TB'
|
27
|
+
v *= 1024 * 1024 * 1024 * 1024
|
28
|
+
end
|
29
|
+
data[k.downcase] = v
|
30
|
+
end
|
31
|
+
data
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'metrics_influx/module'
|
2
|
+
require 'metrics_influx'
|
3
|
+
|
4
|
+
class MetricsInflux::Module::ProcStatCpu < MetricsInflux::Module::Base
|
5
|
+
class Error < StandardError; end
|
6
|
+
|
7
|
+
def initialize(config, params = {})
|
8
|
+
@config = config
|
9
|
+
@params = params
|
10
|
+
end
|
11
|
+
|
12
|
+
def sample
|
13
|
+
time_now = Time.now.to_i
|
14
|
+
data = { time: time_now }
|
15
|
+
File.readlines('/proc/stat').each do |line|
|
16
|
+
(k,v) = line.chomp.split(/\s+/, 2)
|
17
|
+
if k == "cpu"
|
18
|
+
vals = v.split(/\s+/)
|
19
|
+
%w(user nice sys idle iowait irq softirq steal guest guest_nice).each_with_index do |key,idx|
|
20
|
+
data[key] = vals.fetch(idx, 0).to_i
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
data
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'metrics_influx/module'
|
2
|
+
require 'metrics_influx'
|
3
|
+
|
4
|
+
class MetricsInflux::Module::ProcStatProcs < MetricsInflux::Module::Base
|
5
|
+
class Error < StandardError; end
|
6
|
+
|
7
|
+
def initialize(config, params = {})
|
8
|
+
@config = config
|
9
|
+
@params = params
|
10
|
+
end
|
11
|
+
|
12
|
+
def sample
|
13
|
+
time_now = Time.now.to_i
|
14
|
+
data = { time: time_now }
|
15
|
+
File.readlines('/proc/stat').each do |line|
|
16
|
+
(k,v) = line.chomp.split(/\s+/, 2)
|
17
|
+
data[k.downcase] = v.to_i if %w(ctxt processes procs_running procs_blocked).include? k
|
18
|
+
end
|
19
|
+
data
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'metrics_influx/module'
|
2
|
+
require 'metrics_influx'
|
3
|
+
|
4
|
+
class MetricsInflux::Module::ProcVmstat < MetricsInflux::Module::Base
|
5
|
+
class Error < StandardError; end
|
6
|
+
|
7
|
+
def initialize(config, params = {})
|
8
|
+
@config = config
|
9
|
+
@params = params
|
10
|
+
end
|
11
|
+
|
12
|
+
def sample
|
13
|
+
time_now = Time.now.to_i
|
14
|
+
data = { time: time_now }
|
15
|
+
File.readlines('/proc/vmstat').each do |line|
|
16
|
+
(k,v) = line.chomp.split(/\s+/, 2)
|
17
|
+
data[k.downcase] = v.to_i
|
18
|
+
end
|
19
|
+
data
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'metrics_influx/module'
|
2
|
+
require 'metrics_influx'
|
3
|
+
|
4
|
+
class MetricsInflux::Module::SysNetStat < MetricsInflux::Module::Base
|
5
|
+
class Error < StandardError; end
|
6
|
+
|
7
|
+
def initialize(config, params = {})
|
8
|
+
@config = config
|
9
|
+
@config['stats'] ||= %w(rx_packets rx_bytes rx_errors tx_packets tx_bytes tx_errors)
|
10
|
+
@config['interfaces'] ||= Dir.glob('/sys/class/net/*').map { |f| File.basename f }
|
11
|
+
@params = params
|
12
|
+
end
|
13
|
+
|
14
|
+
def sample
|
15
|
+
@config['interfaces'].map do |intf|
|
16
|
+
data = { time: Time.now.to_i }
|
17
|
+
@config['stats'].each do |k|
|
18
|
+
v = File.read("/sys/class/net/#{intf}/statistics/#{k}").chomp
|
19
|
+
data["#{intf}_#{k}"] = v.to_i
|
20
|
+
end
|
21
|
+
data
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'metrics_influx/version'
|
2
|
+
require 'metrics_influx'
|
3
|
+
|
4
|
+
require 'celluloid'
|
5
|
+
|
6
|
+
module MetricsInflux::Module
|
7
|
+
@modules = {}
|
8
|
+
|
9
|
+
def self.<<(klass)
|
10
|
+
key = klass.name.split('::')[-1].downcase
|
11
|
+
@modules[key] = klass
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.[](key)
|
15
|
+
key = key.downcase
|
16
|
+
|
17
|
+
unless @modules.has_key? key
|
18
|
+
path = "metrics_influx/module/#{key}"
|
19
|
+
|
20
|
+
spec = Gem::Specification.find_by_path(path)
|
21
|
+
unless spec.nil?
|
22
|
+
activated = spec.activate
|
23
|
+
MetricsInflux.logger.info "Activated gem `#{spec.full_name}`" if activated
|
24
|
+
end
|
25
|
+
|
26
|
+
begin
|
27
|
+
require path
|
28
|
+
rescue LoadError
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
raise IndexError, "Unknown module #{key}" unless @modules.has_key? key
|
33
|
+
@modules[key]
|
34
|
+
end
|
35
|
+
|
36
|
+
class Base
|
37
|
+
def self.inherited(klass)
|
38
|
+
klass.include Celluloid
|
39
|
+
MetricsInflux::Module << klass
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'metrics_influx/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "metrics_influx"
|
8
|
+
spec.version = MetricsInflux::VERSION
|
9
|
+
spec.authors = ["Alex Hornung"]
|
10
|
+
spec.email = ["alex@alexhornung.com"]
|
11
|
+
spec.description = %q{MetricsInflux is a pluggable metrics collector feeding into InfluxDB}
|
12
|
+
spec.summary = spec.description
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.required_ruby_version = '>= 1.9.3'
|
22
|
+
|
23
|
+
spec.add_dependency "thor", "~> 0.19.1"
|
24
|
+
spec.add_dependency "daemons", "~> 1.1.9"
|
25
|
+
spec.add_dependency "celluloid", "~> 0.16.0"
|
26
|
+
spec.add_dependency "timers", "~> 4.0.1"
|
27
|
+
spec.add_dependency "json", "~> 1.8.1"
|
28
|
+
|
29
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
30
|
+
spec.add_development_dependency "rake", "~> 10.4.2"
|
31
|
+
spec.add_development_dependency "rspec", "~> 3.1.0"
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: metrics_influx
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alex Hornung
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-01-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.19.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.19.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: daemons
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.1.9
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.1.9
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: celluloid
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.16.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.16.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: timers
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 4.0.1
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 4.0.1
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: json
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.8.1
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.8.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.3'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.3'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 10.4.2
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 10.4.2
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 3.1.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ~>
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 3.1.0
|
125
|
+
description: MetricsInflux is a pluggable metrics collector feeding into InfluxDB
|
126
|
+
email:
|
127
|
+
- alex@alexhornung.com
|
128
|
+
executables:
|
129
|
+
- metrics-influx
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- .gitignore
|
134
|
+
- Gemfile
|
135
|
+
- LICENSE.txt
|
136
|
+
- README.md
|
137
|
+
- Rakefile
|
138
|
+
- bin/metrics-influx
|
139
|
+
- lib/metrics_influx.rb
|
140
|
+
- lib/metrics_influx/cli.rb
|
141
|
+
- lib/metrics_influx/engine.rb
|
142
|
+
- lib/metrics_influx/module.rb
|
143
|
+
- lib/metrics_influx/module/graphitecli.rb
|
144
|
+
- lib/metrics_influx/module/procloadavg.rb
|
145
|
+
- lib/metrics_influx/module/procmeminfo.rb
|
146
|
+
- lib/metrics_influx/module/procstatcpu.rb
|
147
|
+
- lib/metrics_influx/module/procstatprocs.rb
|
148
|
+
- lib/metrics_influx/module/procvmstat.rb
|
149
|
+
- lib/metrics_influx/module/sysnetstat.rb
|
150
|
+
- lib/metrics_influx/version.rb
|
151
|
+
- metrics_influx.gemspec
|
152
|
+
homepage: ''
|
153
|
+
licenses:
|
154
|
+
- MIT
|
155
|
+
metadata: {}
|
156
|
+
post_install_message:
|
157
|
+
rdoc_options: []
|
158
|
+
require_paths:
|
159
|
+
- lib
|
160
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - '>='
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: 1.9.3
|
165
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - '>='
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0'
|
170
|
+
requirements: []
|
171
|
+
rubyforge_project:
|
172
|
+
rubygems_version: 2.0.14
|
173
|
+
signing_key:
|
174
|
+
specification_version: 4
|
175
|
+
summary: MetricsInflux is a pluggable metrics collector feeding into InfluxDB
|
176
|
+
test_files: []
|