collectd-interface 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +19 -35
- data/bin/collectd-interface-daemon +32 -23
- data/bin/collectd-interface-plugins +1 -1
- data/public/images/cpus.png +0 -0
- data/public/images/disk-traffic-root.png +0 -0
- data/public/images/disk-traffic-tmp.png +0 -0
- data/public/images/load.png +0 -0
- data/public/images/memory.png +0 -0
- data/public/images/network-eth0.png +0 -0
- data/public/images/network-lo.png +0 -0
- data/public/images/processes.png +0 -0
- data/views/README.md +19 -35
- data/views/graph_header.erb +6 -0
- data/views/graphs/cpus.erb +73 -0
- data/views/graphs/disk-traffic-root.erb +24 -0
- data/views/graphs/disk-traffic-srv.erb.disabled +25 -0
- data/views/graphs/disk-traffic-tmp.erb.disabled +24 -0
- data/views/graphs/disk-traffic-var.erb.disabled +25 -0
- data/views/graphs/gridengine-jobs.erb.disabled +29 -0
- data/views/graphs/load.erb +32 -0
- data/views/graphs/memory.erb +43 -0
- data/views/graphs/network-eth0.erb +23 -0
- data/views/graphs/network-lo.erb +23 -0
- data/views/graphs/processes.erb +63 -0
- data/views/template/navigation.erb +1 -1
- data/views/template/options/data.erb +4 -0
- metadata +19 -19
- data/graphs/cpus.erb +0 -76
- data/graphs/disk-traffic-root.erb +0 -30
- data/graphs/disk-traffic-srv.erb.disabled +0 -30
- data/graphs/disk-traffic-tmp.erb.disabled +0 -30
- data/graphs/disk-traffic-var.erb.disabled +0 -30
- data/graphs/gridengine-jobs.erb.disabled +0 -32
- data/graphs/load.erb +0 -36
- data/graphs/memory.erb +0 -47
- data/graphs/network-eth0.erb +0 -26
- data/graphs/network-lo.erb +0 -26
- data/graphs/processes.erb +0 -66
- data/views/readme.erb +0 -3
- data/views/template/options/readme.erb +0 -0
data/README.md
CHANGED
@@ -4,21 +4,27 @@ By Victor Penso
|
|
4
4
|
Description
|
5
5
|
===========
|
6
6
|
|
7
|
-
_Collectd-Interface_
|
8
|
-
by
|
9
|
-
|
7
|
+
_Collectd-Interface_ provides a web user-interface to data stored
|
8
|
+
by Collectd. Furthermore it serves a REST
|
9
|
+
interface to all RRD files of Collectd.
|
10
|
+
|
11
|
+
![Screenshot of User-Interface](https://github.com/vpenso/collectd-interface/raw/master/public/readme/user-interface.png "Screenshot of the User-Interface")
|
10
12
|
|
11
13
|
Installation
|
12
14
|
============
|
13
15
|
|
14
|
-
Download and install Collectd following the instructions
|
16
|
+
Download and install [Collectd](http://collectd.org/) following the instructions
|
15
17
|
from the developers.
|
16
18
|
|
17
19
|
On Debian flavored Linux use:
|
18
20
|
|
19
21
|
apt-get install collectd rrdtool
|
20
22
|
|
21
|
-
You will need
|
23
|
+
You will need [RRDtool](http://oss.oetiker.ch/rrdtool/) too.
|
24
|
+
|
25
|
+
Install the Collectd-Interface RubyGem:
|
26
|
+
|
27
|
+
gem install collectd-interface
|
22
28
|
|
23
29
|
Usage
|
24
30
|
=====
|
@@ -31,7 +37,9 @@ Start the Collectd Interface in fore-ground:
|
|
31
37
|
|
32
38
|
collectd-interface-daemon
|
33
39
|
|
34
|
-
Open the web-interface <a href='localhost:4567'>localhost:4567</a>.
|
40
|
+
Open the web-interface at <a href='localhost:4567'>localhost:4567</a>.
|
41
|
+
Collectd-Interface expects the RRD file in `/var/lib/collectd/rrd/`
|
42
|
+
by default. Overwrite it with the option `-f PATH`.
|
35
43
|
|
36
44
|
Start the Collectd Interface as daemon:
|
37
45
|
|
@@ -41,14 +49,14 @@ Start the Collectd Interface as daemon:
|
|
41
49
|
Interfaces
|
42
50
|
==========
|
43
51
|
|
44
|
-
Collectd-Interface servers three different
|
52
|
+
Collectd-Interface servers three different interfaces:
|
45
53
|
|
46
54
|
1. `/graph` is the user-interface showing line charts of many
|
47
55
|
of the data accumulated by Collectd.
|
48
56
|
2. `/report` presents tables of system specific information
|
49
|
-
like disk capacity
|
57
|
+
like disk capacity or a list of network sockets.
|
50
58
|
3. `/data` servers an REST API to all data available from
|
51
|
-
Collectd.
|
59
|
+
Collectd RRD files.
|
52
60
|
|
53
61
|
All content from `/graph`, `/report` and `/data` is accessible
|
54
62
|
by a REST interface, to allow embedding this content into other
|
@@ -57,13 +65,10 @@ applications.
|
|
57
65
|
Graph
|
58
66
|
-----
|
59
67
|
|
60
|
-
![Screenshot of User-Interface](https://github.com/vpenso/collectd-interface/raw/master/public/readme/user-interface.png "Screenshot of the User-Interface")
|
61
|
-
|
62
68
|
You can select individual graphs using the drop-down menu followed by
|
63
69
|
clicking the "Show" button. In case you just want to have the image, to
|
64
|
-
embed it into another web-page, use the links beneath the graph.
|
65
|
-
|
66
|
-
Once the graph is generated the caller will be redirected to `/image/`.
|
70
|
+
embed it into another web-page, use the links beneath the graph. Once
|
71
|
+
the graph is generated the caller will be redirected to `/image/`.
|
67
72
|
|
68
73
|
**Parameters**
|
69
74
|
|
@@ -76,27 +81,6 @@ This simple example:
|
|
76
81
|
|
77
82
|
Requests an SVG image with the memory graph for the last week.
|
78
83
|
|
79
|
-
**Plugin**
|
80
|
-
|
81
|
-
You can create add a custom graph rendering data from Collectd
|
82
|
-
by creating a template which is used to generate the <tt>rrdtool graph</tt>.
|
83
|
-
Take a look to the <tt>graphs/</tt> and <tt>disabled/graphs/</tt> directories
|
84
|
-
for examples. I recommend you the start the Collectd-Interface in
|
85
|
-
debug mode (option <tt>-d</tt>) while you develop new graph templates.
|
86
|
-
|
87
|
-
In case you want to enable graphs from <tt>disabled/graphs/</tt> create
|
88
|
-
a soft link from <tt>graphs/</tt>. The <tt>collectd-interface</tt> daemon will
|
89
|
-
automatically recognize new templates within <tt>graphs</tt> on start.
|
90
|
-
|
91
|
-
Report
|
92
|
-
------
|
93
|
-
|
94
|
-
Reports a basically wrappers around commands like <tt>df -l</tt> or
|
95
|
-
<tt>ss -ar</tt>. The output is available as HTML in the "Report" section
|
96
|
-
of the user-interface.
|
97
|
-
|
98
|
-
TODO
|
99
|
-
|
100
84
|
Data
|
101
85
|
----
|
102
86
|
|
@@ -137,10 +137,11 @@ class CollectdInterface < Sinatra::Base
|
|
137
137
|
|
138
138
|
# Load all graphic plug-ins available
|
139
139
|
graphs = Hash.new
|
140
|
-
Dir["#{settings.root}/graphs/*.erb"].each do |file|
|
140
|
+
Dir["#{settings.root}/views/graphs/*.erb"].each do |file|
|
141
141
|
graphs[File.basename(file,'.erb')] = file
|
142
142
|
end
|
143
143
|
set :plugins, graphs
|
144
|
+
|
144
145
|
# List all RRD files available
|
145
146
|
rrd_values = Array.new
|
146
147
|
Dir["#{settings.rrd_path}/**/*.rrd"].each do |file|
|
@@ -156,7 +157,6 @@ class CollectdInterface < Sinatra::Base
|
|
156
157
|
reports = Hash.new
|
157
158
|
Dir["#{settings.root}/views/reports/*.erb"].each { |f| reports[File.basename(f,'.erb')] = f }
|
158
159
|
set :reports, reports
|
159
|
-
|
160
160
|
end
|
161
161
|
|
162
162
|
get '/data' do
|
@@ -254,7 +254,12 @@ class CollectdInterface < Sinatra::Base
|
|
254
254
|
end
|
255
255
|
end
|
256
256
|
|
257
|
+
##
|
258
|
+
## Web-Interface to all graphs generated from the Collectd RRD files
|
259
|
+
##
|
257
260
|
get '/graph' do
|
261
|
+
# Clients can discover a list of available graphs using the
|
262
|
+
# format parameters
|
258
263
|
if params.has_key? 'format'
|
259
264
|
graph_list = settings.plugins.keys.sort.map! { |g| "/graph/#{g}" }
|
260
265
|
if params['format'] == 'json'
|
@@ -264,17 +269,28 @@ class CollectdInterface < Sinatra::Base
|
|
264
269
|
content_type :text
|
265
270
|
graph_list.join("\n")
|
266
271
|
end
|
272
|
+
# By default the web-interface will be displayed
|
267
273
|
else
|
268
274
|
# default parameters
|
269
275
|
params['last'] = '12h' unless params.has_key?('last')
|
270
276
|
params['image'] = 'png' unless params.has_key?('image')
|
271
|
-
|
272
|
-
|
277
|
+
# display only a subset of the graphs by default
|
278
|
+
unless params.has_key?('display')
|
279
|
+
params['display'] = [ 'cpus', 'memory', 'load', ]
|
280
|
+
end
|
281
|
+
# pass the list of graphs to display into the template
|
282
|
+
@display = params['display']
|
283
|
+
# remove it from the parameter list
|
273
284
|
params.delete('display') if params.has_key?('display')
|
274
|
-
|
285
|
+
# all other parameters will be appended for the graph
|
286
|
+
# generation.
|
275
287
|
p = Array.new; params.each_pair { |k,v| p << "#{k}=#{v}" }
|
276
288
|
@args = p.join('&')
|
289
|
+
# list of all available graphs for the drop down menu
|
290
|
+
@graphs = settings.plugins
|
291
|
+
# identifier for the template
|
277
292
|
@target = 'graph'
|
293
|
+
# render the templates
|
278
294
|
erb :graph, :layout => "template/default".to_sym
|
279
295
|
end
|
280
296
|
end
|
@@ -283,7 +299,7 @@ class CollectdInterface < Sinatra::Base
|
|
283
299
|
unless settings.plugins.has_key? path
|
284
300
|
redirect '/'
|
285
301
|
else
|
286
|
-
color = {
|
302
|
+
@color = {
|
287
303
|
:red_light => '#FF000044', :red_dark => '#FF0000AA',
|
288
304
|
:green_light => '#00F00022', :green_dark => '#00F000AA',
|
289
305
|
:yellow_light => '#FFFF0022', :yellow_dark => '#FFFF00AA',
|
@@ -292,14 +308,14 @@ class CollectdInterface < Sinatra::Base
|
|
292
308
|
:cyan_light => '#00FFFF22', :cyan_dark => '#00FFFFAA',
|
293
309
|
:purple_light => '#FF00FF22', :purple_dark => '#FF00FFAA'
|
294
310
|
}
|
295
|
-
type = params.has_key?('image') ? params['image'] : 'png'
|
296
|
-
last = params.has_key?('last') ? params['last'] : '10800s'
|
297
|
-
target = %Q[#{settings.public_folder}/images/#{path}.#{type}]
|
298
|
-
rrd_path = settings.rrd_path
|
299
|
-
command =
|
311
|
+
@type = params.has_key?('image') ? params['image'] : 'png'
|
312
|
+
@last = params.has_key?('last') ? params['last'] : '10800s'
|
313
|
+
@target = %Q[#{settings.public_folder}/images/#{path}.#{@type}]
|
314
|
+
@rrd_path = settings.rrd_path
|
315
|
+
command = erb "graphs/#{path}".to_sym, :layout => :graph_header
|
300
316
|
puts command if $DEBUG
|
301
317
|
system("#{command} > /dev/null 2>&1")
|
302
|
-
redirect %Q[/images/#{path}.#{type}]
|
318
|
+
redirect %Q[/images/#{path}.#{@type}]
|
303
319
|
end
|
304
320
|
end
|
305
321
|
|
@@ -317,11 +333,10 @@ class CollectdInterface < Sinatra::Base
|
|
317
333
|
end
|
318
334
|
# Render a HTML representation of all/a single report(s)
|
319
335
|
else
|
320
|
-
|
321
|
-
|
322
|
-
else
|
323
|
-
@display = 'all'
|
336
|
+
unless params.has_key? 'display'
|
337
|
+
params['display'] = 'disk-free'
|
324
338
|
end
|
339
|
+
@display = params['display']
|
325
340
|
@target = 'report'
|
326
341
|
erb :report, :layout => "template/default".to_sym
|
327
342
|
end
|
@@ -352,13 +367,7 @@ class CollectdInterface < Sinatra::Base
|
|
352
367
|
redirect '/graph'
|
353
368
|
end
|
354
369
|
|
355
|
-
|
356
|
-
@target = 'readme'
|
357
|
-
erb :readme, :layout => "template/default".to_sym
|
358
|
-
end
|
359
|
-
|
360
|
-
error do
|
361
|
-
flash[:error] = env['sinatra.error'].to_s
|
370
|
+
error 404 do
|
362
371
|
redirect '/'
|
363
372
|
end
|
364
373
|
|
@@ -7,7 +7,7 @@ application_root = File.expand_path(File.join(File.dirname(File.expand_path(__FI
|
|
7
7
|
|
8
8
|
name = File.basename(__FILE__)
|
9
9
|
|
10
|
-
graphs = "#{application_root}/graphs"
|
10
|
+
graphs = "#{application_root}/views/graphs"
|
11
11
|
reports = "#{application_root}/views/reports"
|
12
12
|
|
13
13
|
def list(path)
|
data/public/images/cpus.png
CHANGED
Binary file
|
Binary file
|
Binary file
|
data/public/images/load.png
CHANGED
Binary file
|
data/public/images/memory.png
CHANGED
Binary file
|
Binary file
|
Binary file
|
data/public/images/processes.png
CHANGED
Binary file
|
data/views/README.md
CHANGED
@@ -4,21 +4,27 @@ By Victor Penso
|
|
4
4
|
Description
|
5
5
|
===========
|
6
6
|
|
7
|
-
_Collectd-Interface_
|
8
|
-
by
|
9
|
-
|
7
|
+
_Collectd-Interface_ provides a web user-interface to data stored
|
8
|
+
by Collectd. Furthermore it serves a REST
|
9
|
+
interface to all RRD files of Collectd.
|
10
|
+
|
11
|
+
![Screenshot of User-Interface](https://github.com/vpenso/collectd-interface/raw/master/public/readme/user-interface.png "Screenshot of the User-Interface")
|
10
12
|
|
11
13
|
Installation
|
12
14
|
============
|
13
15
|
|
14
|
-
Download and install Collectd following the instructions
|
16
|
+
Download and install [Collectd](http://collectd.org/) following the instructions
|
15
17
|
from the developers.
|
16
18
|
|
17
19
|
On Debian flavored Linux use:
|
18
20
|
|
19
21
|
apt-get install collectd rrdtool
|
20
22
|
|
21
|
-
You will need
|
23
|
+
You will need [RRDtool](http://oss.oetiker.ch/rrdtool/) too.
|
24
|
+
|
25
|
+
Install the Collectd-Interface RubyGem:
|
26
|
+
|
27
|
+
gem install collectd-interface
|
22
28
|
|
23
29
|
Usage
|
24
30
|
=====
|
@@ -31,7 +37,9 @@ Start the Collectd Interface in fore-ground:
|
|
31
37
|
|
32
38
|
collectd-interface-daemon
|
33
39
|
|
34
|
-
Open the web-interface <a href='localhost:4567'>localhost:4567</a>.
|
40
|
+
Open the web-interface at <a href='localhost:4567'>localhost:4567</a>.
|
41
|
+
Collectd-Interface expects the RRD file in `/var/lib/collectd/rrd/`
|
42
|
+
by default. Overwrite it with the option `-f PATH`.
|
35
43
|
|
36
44
|
Start the Collectd Interface as daemon:
|
37
45
|
|
@@ -41,14 +49,14 @@ Start the Collectd Interface as daemon:
|
|
41
49
|
Interfaces
|
42
50
|
==========
|
43
51
|
|
44
|
-
Collectd-Interface servers three different
|
52
|
+
Collectd-Interface servers three different interfaces:
|
45
53
|
|
46
54
|
1. `/graph` is the user-interface showing line charts of many
|
47
55
|
of the data accumulated by Collectd.
|
48
56
|
2. `/report` presents tables of system specific information
|
49
|
-
like disk capacity
|
57
|
+
like disk capacity or a list of network sockets.
|
50
58
|
3. `/data` servers an REST API to all data available from
|
51
|
-
Collectd.
|
59
|
+
Collectd RRD files.
|
52
60
|
|
53
61
|
All content from `/graph`, `/report` and `/data` is accessible
|
54
62
|
by a REST interface, to allow embedding this content into other
|
@@ -57,13 +65,10 @@ applications.
|
|
57
65
|
Graph
|
58
66
|
-----
|
59
67
|
|
60
|
-
![Screenshot of User-Interface](https://github.com/vpenso/collectd-interface/raw/master/public/readme/user-interface.png "Screenshot of the User-Interface")
|
61
|
-
|
62
68
|
You can select individual graphs using the drop-down menu followed by
|
63
69
|
clicking the "Show" button. In case you just want to have the image, to
|
64
|
-
embed it into another web-page, use the links beneath the graph.
|
65
|
-
|
66
|
-
Once the graph is generated the caller will be redirected to `/image/`.
|
70
|
+
embed it into another web-page, use the links beneath the graph. Once
|
71
|
+
the graph is generated the caller will be redirected to `/image/`.
|
67
72
|
|
68
73
|
**Parameters**
|
69
74
|
|
@@ -76,27 +81,6 @@ This simple example:
|
|
76
81
|
|
77
82
|
Requests an SVG image with the memory graph for the last week.
|
78
83
|
|
79
|
-
**Plugin**
|
80
|
-
|
81
|
-
You can create add a custom graph rendering data from Collectd
|
82
|
-
by creating a template which is used to generate the <tt>rrdtool graph</tt>.
|
83
|
-
Take a look to the <tt>graphs/</tt> and <tt>disabled/graphs/</tt> directories
|
84
|
-
for examples. I recommend you the start the Collectd-Interface in
|
85
|
-
debug mode (option <tt>-d</tt>) while you develop new graph templates.
|
86
|
-
|
87
|
-
In case you want to enable graphs from <tt>disabled/graphs/</tt> create
|
88
|
-
a soft link from <tt>graphs/</tt>. The <tt>collectd-interface</tt> daemon will
|
89
|
-
automatically recognize new templates within <tt>graphs</tt> on start.
|
90
|
-
|
91
|
-
Report
|
92
|
-
------
|
93
|
-
|
94
|
-
Reports a basically wrappers around commands like <tt>df -l</tt> or
|
95
|
-
<tt>ss -ar</tt>. The output is available as HTML in the "Report" section
|
96
|
-
of the user-interface.
|
97
|
-
|
98
|
-
TODO
|
99
|
-
|
100
84
|
Data
|
101
85
|
----
|
102
86
|
|
@@ -0,0 +1,73 @@
|
|
1
|
+
<%
|
2
|
+
|
3
|
+
lines = String.new
|
4
|
+
areas = String.new
|
5
|
+
cores = `grep -c processor /proc/cpuinfo`.to_i
|
6
|
+
limit = cores*100
|
7
|
+
|
8
|
+
if cores > 1
|
9
|
+
cores = "#{cores} cores"
|
10
|
+
else
|
11
|
+
cores = "#{cores} core"
|
12
|
+
end
|
13
|
+
|
14
|
+
def define(name,files,function = "AVERAGE")
|
15
|
+
defs = String.new
|
16
|
+
cdef = "CDEF:#{name}="
|
17
|
+
tail = String.new
|
18
|
+
cpu = 1
|
19
|
+
files.each do |f|
|
20
|
+
n = "#{name}_#{cpu}"
|
21
|
+
defs << %Q[DEF:#{n}=#{f}:value:#{function} ]
|
22
|
+
cdef << "#{n},"
|
23
|
+
tail << "+,"
|
24
|
+
cpu += 1
|
25
|
+
end
|
26
|
+
return defs << cdef << tail.chop.chop.chop << ' '
|
27
|
+
end
|
28
|
+
|
29
|
+
definitions = define('sys_av',Dir["#{@rrd_path}cpu*/cpu-system.rrd"] )
|
30
|
+
definitions << define('sys_min',Dir["#{@rrd_path}cpu*/cpu-system.rrd"],'MIN' )
|
31
|
+
definitions << define('sys_max',Dir["#{@rrd_path}cpu*/cpu-system.rrd"],'MAX' )
|
32
|
+
lines << %Q[LINE1:sys_av#{@color[:green_dark]}:'System\t\t\t\t\t' GPRINT:sys_min:MIN:"Min. %4.0lf" GPRINT:sys_av:AVERAGE:"Avg. %4.0lf" GPRINT:sys_max:MAX:"Max. %4.0lf" GPRINT:sys_av:LAST:'Last %4.0lf' ]
|
33
|
+
|
34
|
+
|
35
|
+
definitions << define('user_av',Dir["#{@rrd_path}cpu*/cpu-user.rrd"] )
|
36
|
+
definitions << define('user_min',Dir["#{@rrd_path}cpu*/cpu-user.rrd"],'MIN' )
|
37
|
+
definitions << define('user_max',Dir["#{@rrd_path}cpu*/cpu-user.rrd"],'MAX' )
|
38
|
+
lines << %Q[LINE1:user_av#{@color[:blue_dark]}:'User\t\t\t\t\t\t\t' GPRINT:user_min:MIN:"Min. %4.0lf" GPRINT:user_av:AVERAGE:"Avg. %4.0lf" GPRINT:user_max:MAX:'Max. %4.0lf' GPRINT:user_av:LAST:'Last %4.0lf' ]
|
39
|
+
|
40
|
+
definitions << define('idle_av',Dir["#{@rrd_path}cpu*/cpu-idle.rrd"] )
|
41
|
+
definitions << define('idle_min',Dir["#{@rrd_path}cpu*/cpu-idle.rrd"],'MIN' )
|
42
|
+
definitions << define('idle_max',Dir["#{@rrd_path}cpu*/cpu-idle.rrd"],'MAX' )
|
43
|
+
areas << %Q[AREA:idle_av#F5F5F588 ]
|
44
|
+
lines << %Q[LINE1:idle_av#CCCCCCAA:'Idle\t\t\t\t\t\t\t' GPRINT:idle_min:MIN:"Min. %4.0lf" GPRINT:idle_av:AVERAGE:"Avg. %4.0lf" GPRINT:idle_max:MAX:"Max. %4.0lf" GPRINT:idle_av:LAST:'Last %4.0lf' ]
|
45
|
+
|
46
|
+
definitions << define('nice_av',Dir["#{@rrd_path}cpu*/cpu-nice.rrd"] )
|
47
|
+
definitions << define('nice_min',Dir["#{@rrd_path}cpu*/cpu-nice.rrd"],'MIN' )
|
48
|
+
definitions << define('nice_max',Dir["#{@rrd_path}cpu*/cpu-nice.rrd"],'MAX' )
|
49
|
+
lines << %Q[LINE1:nice_av#{@color[:yellow_dark]}:'Nice\t\t\t\t\t\t\t' GPRINT:nice_min:MIN:"Min. %4.0lf" GPRINT:nice_av:AVERAGE:"Avg. %4.0lf" GPRINT:nice_max:MAX:"Max. %4.0lf" GPRINT:nice_av:LAST:'Last %4.0lf' ]
|
50
|
+
|
51
|
+
definitions << define('wait_av',Dir["#{@rrd_path}cpu*/cpu-wait.rrd"] )
|
52
|
+
definitions << define('wait_min',Dir["#{@rrd_path}cpu*/cpu-wait.rrd"],'MIN' )
|
53
|
+
definitions << define('wait_max',Dir["#{@rrd_path}cpu*/cpu-wait.rrd"],'MAX' )
|
54
|
+
lines << %Q[LINE1:wait_av#{@color[:orange_dark]}:'Wait (IO)\t\t\t' GPRINT:wait_min:MIN:"Min. %4.0lf" GPRINT:wait_av:AVERAGE:"Avg. %4.0lf" GPRINT:wait_max:MAX:"Max. %4.0lf" GPRINT:wait_av:LAST:"Last %4.0lf" ]
|
55
|
+
|
56
|
+
definitions << define('steal_av',Dir["#{@rrd_path}cpu*/cpu-steal.rrd"] )
|
57
|
+
definitions << define('steal_min',Dir["#{@rrd_path}cpu*/cpu-steal.rrd"],'MIN' )
|
58
|
+
definitions << define('steal_max',Dir["#{@rrd_path}cpu*/cpu-steal.rrd"],'MAX' )
|
59
|
+
lines << %Q[LINE1:steal_av#{@color[:red_dark]}:'Steal\t\t\t\t\t\t' GPRINT:steal_min:MIN:"Min. %4.0lf" GPRINT:steal_av:AVERAGE:"Avg. %4.0lf" GPRINT:steal_max:MAX:"Max. %4.0lf" GPRINT:steal_av:LAST:"Last %4.0lf" ]
|
60
|
+
|
61
|
+
|
62
|
+
definitions << define('int_av',Dir["#{@rrd_path}cpu*/cpu-interrupt.rrd"] )
|
63
|
+
definitions << define('int_min',Dir["#{@rrd_path}cpu*/cpu-interrupt.rrd"],'MIN' )
|
64
|
+
definitions << define('int_max',Dir["#{@rrd_path}cpu*/cpu-interrupt.rrd"],'MAX' )
|
65
|
+
lines << %Q[LINE1:int_av#{@color[:cyan_dark]}:'IRQ\t\t\t\t\t\t\t\t' GPRINT:int_min:MIN:"Min. %4.0lf" GPRINT:int_av:AVERAGE:"Avg. %4.0lf" GPRINT:int_max:MAX:"Max. %4.0lf" GPRINT:int_av:LAST:"Last %4.0lf" ]
|
66
|
+
|
67
|
+
definitions << define('sint_av',Dir["#{@rrd_path}cpu*/cpu-softirq.rrd"] )
|
68
|
+
definitions << define('sint_min',Dir["#{@rrd_path}cpu*/cpu-softirq.rrd"],'MIN' )
|
69
|
+
definitions << define('sint_max',Dir["#{@rrd_path}cpu*/cpu-softirq.rrd"],'MAX' )
|
70
|
+
lines << %Q[LINE1:sint_av#{@color[:purple_dark]}:'IRQ (soft)\t\t\t' GPRINT:sint_min:MIN:"Min. %4.0lf" GPRINT:sint_av:AVERAGE:"Avg. %4.0lf" GPRINT:sint_max:MAX:"Max. %4.0lf" GPRINT:sint_av:LAST:"Last %4.0lf" ]
|
71
|
+
|
72
|
+
|
73
|
+
%> --title="CPU Usage (<%= cores %>)" --vertical-label="Jiffies" --units-exponent=k --lower-limit=0 --legend-position=south --force-rules-legend --slope-mode --upper-limit <%= limit %> <%= definitions %> <%= areas %> <%= lines %>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<% name = '/' %>
|
2
|
+
<% device = `df -l #{name} | grep '/dev/'`.split[0].split('/')[-1] %>
|
3
|
+
--title='Disk Traffic "<%= name %>"' --vertical-label="Bytes" \
|
4
|
+
--alt-autoscale-max --base 1024 \
|
5
|
+
DEF:read_av=<%= @rrd_path %>disk-<%= device %>/disk_octets.rrd:read:AVERAGE \
|
6
|
+
DEF:read_min=<%= @rrd_path %>disk-<%= device %>/disk_octets.rrd:read:MIN \
|
7
|
+
DEF:read_max=<%= @rrd_path %>disk-<%= device %>/disk_octets.rrd:read:MAX \
|
8
|
+
DEF:write_av=<%= @rrd_path %>disk-<%= device %>/disk_octets.rrd:write:AVERAGE \
|
9
|
+
DEF:write_min=<%= @rrd_path %>disk-<%= device %>/disk_octets.rrd:write:MIN \
|
10
|
+
DEF:write_max=<%= @rrd_path %>disk-<%= device %>/disk_octets.rrd:write:MAX \
|
11
|
+
AREA:read_max<%= @color[:green_light] %> \
|
12
|
+
AREA:read_min#ffffff \
|
13
|
+
AREA:write_max<%= @color[:blue_light] %> \
|
14
|
+
AREA:write_min#ffffff \
|
15
|
+
LINE1:read_av<%= @color[:green_dark] %>:"Read\t\t\t" \
|
16
|
+
GPRINT:read_min:MIN:"Min. %3.0lf%sB" \
|
17
|
+
GPRINT:read_av:AVERAGE:"Avg. %3.0lf%sB" \
|
18
|
+
GPRINT:read_max:MAX:"Max. %3.0lf%sB" \
|
19
|
+
GPRINT:read_av:LAST:"Last %3.0lf%sB" \
|
20
|
+
LINE1:write_av<%= @color[:blue_dark] %>:"Write\t\t" \
|
21
|
+
GPRINT:write_min:MIN:"Min. %3.0lf%sB" \
|
22
|
+
GPRINT:write_av:AVERAGE:"Avg. %3.0lf%sB" \
|
23
|
+
GPRINT:write_max:MAX:"Max. %3.0lf%sB" \
|
24
|
+
GPRINT:write_av:LAST:"Last %3.0lf%sB" \
|