kstats-node 1.0.2 → 1.0.3
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/bin/kstats-node +34 -51
- data/kstats-node.gemspec +1 -1
- data/lib/kstats/node/app.rb +58 -0
- data/lib/kstats/node/version.rb +1 -1
- data/lib/kstats/node.rb +1 -1
- data/lib/kstats/probes/cpu.rb +32 -0
- data/lib/kstats/probes/disk.rb +35 -0
- data/{test/probes/memory.rb → lib/kstats/probes/mem.rb} +0 -0
- data/test/conf/conf.yml +5 -0
- data/test/db.sqlite3 +0 -0
- data/test/probes/mem.rb +37 -0
- metadata +13 -5
data/bin/kstats-node
CHANGED
@@ -16,6 +16,37 @@ optparse = OptionParser.new do |opts|
|
|
16
16
|
opts.on('-c', '--config CONF', 'Set configuration file (required)') do |config|
|
17
17
|
options[:config] = config
|
18
18
|
end
|
19
|
+
|
20
|
+
opts.on('-i', '--install', 'Build into current directory all startup files.') do
|
21
|
+
pwd = `pwd`.gsub("\n", "")
|
22
|
+
|
23
|
+
puts "Create #{pwd}/conf..."
|
24
|
+
`mkdir conf`
|
25
|
+
|
26
|
+
puts "Create #{pwd}/probes..."
|
27
|
+
`mkdir probes`
|
28
|
+
|
29
|
+
puts "Create #{pwd}/conf/conf.yml..."
|
30
|
+
File.open('conf/conf.yml', 'w') do |f|
|
31
|
+
content = <<CONF
|
32
|
+
probes_dir: #{pwd}/probes
|
33
|
+
db_dir: #{pwd}/db.sqlite3
|
34
|
+
server:
|
35
|
+
port: 1234
|
36
|
+
bind: 0.0.0.0
|
37
|
+
CONF
|
38
|
+
f.write content
|
39
|
+
end
|
40
|
+
|
41
|
+
Dir[File.expand_path('../../lib/kstats/probes/*', __FILE__)].each do |probefile|
|
42
|
+
puts "cp #{probefile} #{pwd}/probes/"
|
43
|
+
`cp #{probefile} #{pwd}/probes/`
|
44
|
+
end
|
45
|
+
|
46
|
+
puts "Done"
|
47
|
+
|
48
|
+
exit
|
49
|
+
end
|
19
50
|
end
|
20
51
|
|
21
52
|
optparse.parse!
|
@@ -26,67 +57,19 @@ if options[:config].nil?
|
|
26
57
|
exit
|
27
58
|
end
|
28
59
|
|
29
|
-
require 'sinatra'
|
30
|
-
|
31
60
|
puts "KStats::Node"
|
32
61
|
|
33
62
|
puts "Load configuration file"
|
34
63
|
config = YAML::load(File.read(options[:config]))
|
35
64
|
Kstats::Node::Config.init(config)
|
36
65
|
|
37
|
-
set :port, Kstats::Node::Config['server.port', 4567].to_i
|
38
|
-
set :bind, Kstats::Node::Config['server.bind', '0.0.0.0']
|
39
|
-
|
40
66
|
puts "Initialize database"
|
41
67
|
Kstats::Node::Database.init
|
42
68
|
|
43
|
-
get '/probes/list' do
|
44
|
-
Kstats::Node::Probe.list.to_json
|
45
|
-
end
|
46
|
-
|
47
|
-
#Display data for daily infos
|
48
|
-
get '/probe/:id/:target' do
|
49
|
-
now = Time.now
|
50
|
-
|
51
|
-
case params[:target]
|
52
|
-
when 'tick'
|
53
|
-
start = now - (60*60*24)
|
54
|
-
when 'weekly'
|
55
|
-
start = now - 7*(60*60*24)
|
56
|
-
when 'monthly'
|
57
|
-
start = now - 30*(60*60*24)
|
58
|
-
when 'yearly'
|
59
|
-
start = now - 365*(60*60*24)
|
60
|
-
else
|
61
|
-
return 403
|
62
|
-
end
|
63
|
-
|
64
|
-
|
65
|
-
data =Kstats::Node::Database.db.execute(
|
66
|
-
"SELECT probe_key, date, probe_value FROM probe_data WHERE period_type=? AND probe_id = ? AND date >= ? ORDER BY date ASC",
|
67
|
-
params[:target],
|
68
|
-
params[:id],
|
69
|
-
start.to_s
|
70
|
-
)
|
71
|
-
|
72
|
-
datas = {}
|
73
|
-
data.each do |record|
|
74
|
-
key, date, value = record
|
75
|
-
datas[key] ||= []
|
76
|
-
datas[key] << [Time.parse(date), value]
|
77
|
-
end
|
78
|
-
|
79
|
-
datas.each do |key, value|
|
80
|
-
datas[key] = Kstats::Node::Helper.generate_array(value, start, (now-start)/60, 288)
|
81
|
-
end
|
82
|
-
|
83
|
-
{
|
84
|
-
start_at: start,
|
85
|
-
format: Kstats::Node::Probe.get_format(params[:id]),
|
86
|
-
data: datas
|
87
|
-
}.to_json
|
88
|
-
end
|
89
69
|
|
90
70
|
Kstats::Node::Worker.launch!
|
91
71
|
|
72
|
+
require 'kstats/node/app'
|
73
|
+
Kstats::Node::App.run!
|
74
|
+
|
92
75
|
puts "Service is launched"
|
data/kstats-node.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Yacine Petitprez"]
|
10
10
|
spec.email = ["yacine@kosmogo.com"]
|
11
11
|
spec.summary = %q{Node for the project kstats}
|
12
|
-
spec.description = %q{Provide a simple way to make probe on system values, and
|
12
|
+
spec.description = %q{Provide a simple way to make probe on system values, and monitoring theses values.}
|
13
13
|
spec.homepage = ""
|
14
14
|
spec.license = "MIT"
|
15
15
|
spec.executables << 'kstats-node'
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'sinatra'
|
2
|
+
|
3
|
+
module Kstats
|
4
|
+
module Node
|
5
|
+
class App < Sinatra::Base
|
6
|
+
set :port, Kstats::Node::Config['server.port', 4567].to_i
|
7
|
+
set :bind, Kstats::Node::Config['server.bind', '0.0.0.0']
|
8
|
+
|
9
|
+
get '/probes/list' do
|
10
|
+
Kstats::Node::Probe.list.to_json
|
11
|
+
end
|
12
|
+
|
13
|
+
#Display data for daily infos
|
14
|
+
get '/probe/:id/:target' do
|
15
|
+
now = Time.now
|
16
|
+
|
17
|
+
case params[:target]
|
18
|
+
when 'tick'
|
19
|
+
start = now - (60*60*24)
|
20
|
+
when 'weekly'
|
21
|
+
start = now - 7*(60*60*24)
|
22
|
+
when 'monthly'
|
23
|
+
start = now - 30*(60*60*24)
|
24
|
+
when 'yearly'
|
25
|
+
start = now - 365*(60*60*24)
|
26
|
+
else
|
27
|
+
return 403
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
data =Kstats::Node::Database.db.execute(
|
32
|
+
"SELECT probe_key, date, probe_value FROM probe_data WHERE period_type=? AND probe_id = ? AND date >= ? ORDER BY date ASC",
|
33
|
+
params[:target],
|
34
|
+
params[:id],
|
35
|
+
start.to_s
|
36
|
+
)
|
37
|
+
|
38
|
+
datas = {}
|
39
|
+
data.each do |record|
|
40
|
+
key, date, value = record
|
41
|
+
datas[key] ||= []
|
42
|
+
datas[key] << [Time.parse(date), value]
|
43
|
+
end
|
44
|
+
|
45
|
+
datas.each do |key, value|
|
46
|
+
datas[key] = Kstats::Node::Helper.generate_array(value, start, (now-start)/60, 288)
|
47
|
+
end
|
48
|
+
|
49
|
+
{
|
50
|
+
start_at: start,
|
51
|
+
format: Kstats::Node::Probe.get_format(params[:id]),
|
52
|
+
data: datas
|
53
|
+
}.to_json
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
data/lib/kstats/node/version.rb
CHANGED
data/lib/kstats/node.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
Kstats::Node::Probe.register 'cpu' do
|
2
|
+
category 'Hardware'
|
3
|
+
name 'CPU usage'
|
4
|
+
|
5
|
+
type :curve
|
6
|
+
|
7
|
+
command{ `cat /proc/loadavg`.split(/\s/).map(&:to_f) }
|
8
|
+
|
9
|
+
variable :load_avg_1mn do
|
10
|
+
desc 'Load average (1mn)'
|
11
|
+
color '#0000FF'
|
12
|
+
probe do
|
13
|
+
command[0]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
variable :load_avg_5mn do
|
18
|
+
desc 'Load average (5mn)'
|
19
|
+
color '#00FF00'
|
20
|
+
probe do
|
21
|
+
command[1]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
variable :load_avg_15mn do
|
26
|
+
desc 'Load average (15mn)'
|
27
|
+
color '#FF0000'
|
28
|
+
probe do
|
29
|
+
command[2]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
Kstats::Node::Probe.register 'disk' do
|
2
|
+
category 'Hardware'
|
3
|
+
name 'Disk usage'
|
4
|
+
|
5
|
+
type :curve
|
6
|
+
|
7
|
+
_self = self
|
8
|
+
instance_eval do
|
9
|
+
def parsedf
|
10
|
+
disks = `df`.split(/\n/).map do |x|
|
11
|
+
x.split(/\s+/)
|
12
|
+
end
|
13
|
+
|
14
|
+
disks.reject!{|x| x[0] == 'udev' || x[0] == 'none' || x[0] == 'tmpfs' || x[0] == 'Filesystem' }
|
15
|
+
disks.map!{|x| {name: x[0], space: 100*(x[2].to_f/x[1].to_f) }}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
parsedf.each do |infos|
|
20
|
+
var = infos[:name]
|
21
|
+
|
22
|
+
variable var do
|
23
|
+
desc "Filling of `#{infos[:name]}`"
|
24
|
+
color "#0000FF"
|
25
|
+
probe do
|
26
|
+
val = _self.parsedf.select{|x| x[:name] == var }.first[:space]
|
27
|
+
|
28
|
+
puts val
|
29
|
+
|
30
|
+
val
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
File without changes
|
data/test/conf/conf.yml
ADDED
data/test/db.sqlite3
ADDED
Binary file
|
data/test/probes/mem.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
Kstats::Node::Probe.register 'hwmem' do
|
2
|
+
category 'Hardware'
|
3
|
+
name 'Memory usage'
|
4
|
+
|
5
|
+
type :curve
|
6
|
+
|
7
|
+
command do
|
8
|
+
cmd = `cat /proc/meminfo`
|
9
|
+
lines = cmd.split(/\n/)
|
10
|
+
|
11
|
+
memtotal = lines.select{|x| x =~ /MemTotal/ }.first.gsub(/[^0-9]/, '').to_f
|
12
|
+
active = lines.select{|x| x =~ /Active/ }.first.gsub(/[^0-9]/, '').to_f
|
13
|
+
inactive = lines.select{|x| x =~ /Inactive/ }.first.gsub(/[^0-9]/, '').to_f
|
14
|
+
memfree = lines.select{|x| x =~ /MemFree/ }.first.gsub(/[^0-9]/, '').to_f
|
15
|
+
swaptotal = lines.select{|x| x =~ /SwapTotal/ }.first.gsub(/[^0-9]/, '').to_f
|
16
|
+
swapfree = lines.select{|x| x =~ /SwapFree/ }.first.gsub(/[^0-9]/, '').to_f
|
17
|
+
|
18
|
+
[memtotal, active, inactive, memfree, swaptotal, swapfree]
|
19
|
+
end
|
20
|
+
|
21
|
+
variable :mem_load do
|
22
|
+
desc 'Memory load (%)'
|
23
|
+
color '#0000FF'
|
24
|
+
probe do
|
25
|
+
1-(command[3]/command[0])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
variable :swap_load do
|
30
|
+
desc 'Swap load (%)'
|
31
|
+
color '#FF0000'
|
32
|
+
|
33
|
+
probe do
|
34
|
+
1-(command[5]/command[4])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kstats-node
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-05-
|
12
|
+
date: 2014-05-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
@@ -75,7 +75,7 @@ dependencies:
|
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: '0'
|
78
|
-
description: Provide a simple way to make probe on system values, and
|
78
|
+
description: Provide a simple way to make probe on system values, and monitoring theses
|
79
79
|
values.
|
80
80
|
email:
|
81
81
|
- yacine@kosmogo.com
|
@@ -92,16 +92,22 @@ files:
|
|
92
92
|
- bin/kstats-node
|
93
93
|
- kstats-node.gemspec
|
94
94
|
- lib/kstats/node.rb
|
95
|
+
- lib/kstats/node/app.rb
|
95
96
|
- lib/kstats/node/config.rb
|
96
97
|
- lib/kstats/node/database.rb
|
97
98
|
- lib/kstats/node/helper.rb
|
98
99
|
- lib/kstats/node/probe.rb
|
99
100
|
- lib/kstats/node/version.rb
|
100
101
|
- lib/kstats/node/worker.rb
|
102
|
+
- lib/kstats/probes/cpu.rb
|
103
|
+
- lib/kstats/probes/disk.rb
|
104
|
+
- lib/kstats/probes/mem.rb
|
101
105
|
- test/conf.yml
|
106
|
+
- test/conf/conf.yml
|
107
|
+
- test/db.sqlite3
|
102
108
|
- test/probes/cpu.rb
|
103
109
|
- test/probes/disk.rb
|
104
|
-
- test/probes/
|
110
|
+
- test/probes/mem.rb
|
105
111
|
homepage: ''
|
106
112
|
licenses:
|
107
113
|
- MIT
|
@@ -129,7 +135,9 @@ specification_version: 3
|
|
129
135
|
summary: Node for the project kstats
|
130
136
|
test_files:
|
131
137
|
- test/conf.yml
|
138
|
+
- test/conf/conf.yml
|
139
|
+
- test/db.sqlite3
|
132
140
|
- test/probes/cpu.rb
|
133
141
|
- test/probes/disk.rb
|
134
|
-
- test/probes/
|
142
|
+
- test/probes/mem.rb
|
135
143
|
has_rdoc:
|