collectd-interface 0.3.1 → 0.5.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.
Files changed (126) hide show
  1. data/bin/collectd-interface-daemon +21 -361
  2. data/bin/collectd-interface-plugins +11 -11
  3. data/lib/collectd/interface/config.rb +117 -0
  4. data/lib/collectd/interface/options.rb +68 -0
  5. data/lib/collectd/interface/service/data.rb +110 -0
  6. data/lib/collectd/interface/service/graph.rb +106 -0
  7. data/lib/collectd/interface/service/report.rb +82 -0
  8. data/lib/collectd/interface/service.rb +44 -0
  9. data/public/images/cpus.png +0 -0
  10. data/public/images/device/ops/sda.png +0 -0
  11. data/public/images/device/ops/sda1.png +0 -0
  12. data/public/images/device/ops/sda2.png +0 -0
  13. data/public/images/device/ops/sda5.png +0 -0
  14. data/public/images/device/ops/sda6.png +0 -0
  15. data/public/images/device/ops/sda7.png +0 -0
  16. data/public/images/device/ops/sda8.png +0 -0
  17. data/public/images/device/ops/sda9.png +0 -0
  18. data/public/images/device/ops/sdb.png +0 -0
  19. data/public/images/device/ops/sdb1.png +0 -0
  20. data/public/images/device/ops/sdh.png +0 -0
  21. data/public/images/device/ops/sdh1.png +0 -0
  22. data/public/images/device/ops/sdh2.png +0 -0
  23. data/public/images/device/ops/sdh3.png +0 -0
  24. data/public/images/device/ops/sdh4.png +0 -0
  25. data/public/images/device/ops/sr0.png +0 -0
  26. data/public/images/device/time/sda.png +0 -0
  27. data/public/images/device/time/sda1.png +0 -0
  28. data/public/images/device/time/sda2.png +0 -0
  29. data/public/images/device/time/sda5.png +0 -0
  30. data/public/images/device/time/sda6.png +0 -0
  31. data/public/images/device/time/sda7.png +0 -0
  32. data/public/images/device/time/sda8.png +0 -0
  33. data/public/images/device/time/sda9.png +0 -0
  34. data/public/images/device/time/sdb.png +0 -0
  35. data/public/images/device/time/sdb1.png +0 -0
  36. data/public/images/device/time/sdh.png +0 -0
  37. data/public/images/device/time/sdh1.png +0 -0
  38. data/public/images/device/time/sdh2.png +0 -0
  39. data/public/images/device/time/sdh3.png +0 -0
  40. data/public/images/device/time/sdh4.png +0 -0
  41. data/public/images/device/time/sr0.png +0 -0
  42. data/public/images/device/traffic/sda.png +0 -0
  43. data/public/images/device/traffic/sda1.png +0 -0
  44. data/public/images/device/traffic/sda2.png +0 -0
  45. data/public/images/device/traffic/sda5.png +0 -0
  46. data/public/images/device/traffic/sda6.png +0 -0
  47. data/public/images/device/traffic/sda7.png +0 -0
  48. data/public/images/device/traffic/sda8.png +0 -0
  49. data/public/images/device/traffic/sda9.png +0 -0
  50. data/public/images/device/traffic/sdb.png +0 -0
  51. data/public/images/device/traffic/sdb1.png +0 -0
  52. data/public/images/device/traffic/sdh.png +0 -0
  53. data/public/images/device/traffic/sdh1.png +0 -0
  54. data/public/images/device/traffic/sdh2.png +0 -0
  55. data/public/images/device/traffic/sdh3.png +0 -0
  56. data/public/images/device/traffic/sdh4.png +0 -0
  57. data/public/images/device/traffic/sr0.png +0 -0
  58. data/public/images/irqs.png +0 -0
  59. data/public/images/load.png +0 -0
  60. data/public/images/memory.png +0 -0
  61. data/public/images/network/packets/eth0.png +0 -0
  62. data/public/images/network/packets/lo.png +0 -0
  63. data/public/images/network/packets/nbr0-nic.png +0 -0
  64. data/public/images/network/packets/nbr0.png +0 -0
  65. data/public/images/network/packets/virbr0.png +0 -0
  66. data/public/images/network/packets/vnet0.png +0 -0
  67. data/public/images/network/packets/vnet1.png +0 -0
  68. data/public/images/network/packets/vnet2.png +0 -0
  69. data/public/images/network/packets/vnet3.png +0 -0
  70. data/public/images/network/packets/vnet4.png +0 -0
  71. data/public/images/network/packets/vnet5.png +0 -0
  72. data/public/images/network/traffic/eth0.png +0 -0
  73. data/public/images/network/traffic/lo.png +0 -0
  74. data/public/images/network/traffic/nbr0-nic.png +0 -0
  75. data/public/images/network/traffic/nbr0.png +0 -0
  76. data/public/images/network/traffic/virbr0.png +0 -0
  77. data/public/images/network/traffic/vnet0.png +0 -0
  78. data/public/images/network/traffic/vnet1.png +0 -0
  79. data/public/images/network/traffic/vnet2.png +0 -0
  80. data/public/images/network/traffic/vnet3.png +0 -0
  81. data/public/images/network/traffic/vnet4.png +0 -0
  82. data/public/images/network/traffic/vnet5.png +0 -0
  83. data/public/images/processes.png +0 -0
  84. data/public/images/users.png +0 -0
  85. data/public/script/table_filter.js +1217 -0
  86. data/public/style/default.css +28 -0
  87. data/test/collectd/interface/config_test.rb +9 -0
  88. data/test/collectd/interface/service_config_test.rb +26 -0
  89. data/test/collectd/interface/service_data_test.rb +46 -0
  90. data/test/start.rb +3 -0
  91. data/views/graph_header.erb +13 -4
  92. data/views/graphs/device/ops.erb +37 -0
  93. data/views/graphs/device/time.erb +37 -0
  94. data/views/graphs/device/traffic.erb +38 -0
  95. data/views/graphs/{irq.erb.disabled → irqs.erb} +8 -8
  96. data/views/graphs/network/packets.erb +35 -0
  97. data/views/graphs/network/traffic.erb +35 -0
  98. data/views/graphs/{users.erb.disabled → users.erb} +0 -0
  99. data/views/report.erb +32 -14
  100. data/views/reports/open-files/local.erb +62 -0
  101. data/views/reports/{processes-cpu-usage.erb → processes.erb} +0 -0
  102. data/views/reports/{system-sockets.erb → sockets.erb} +0 -0
  103. data/views/reports/{disk-free.erb → storage.erb} +1 -1
  104. data/views/template/options/graph.erb +1 -1
  105. metadata +98 -30
  106. data/public/images/cpus.svg +0 -946
  107. data/public/images/disk-traffic-root.png +0 -0
  108. data/public/images/disk-traffic-srv.png +0 -0
  109. data/public/images/disk-traffic-tmp.png +0 -0
  110. data/public/images/disk-traffic-var.png +0 -0
  111. data/public/images/irq.png +0 -0
  112. data/public/images/load.svg +0 -638
  113. data/public/images/memory.svg +0 -741
  114. data/public/images/network-eth0.png +0 -0
  115. data/public/images/network-eth0.svg +0 -609
  116. data/public/images/network-lo.png +0 -0
  117. data/public/images/network-lo.svg +0 -644
  118. data/public/images/processes.svg +0 -832
  119. data/views/graphs/disk-traffic-root.erb +0 -24
  120. data/views/graphs/disk-traffic-srv.erb.disabled +0 -25
  121. data/views/graphs/disk-traffic-tmp.erb.disabled +0 -24
  122. data/views/graphs/disk-traffic-var.erb.disabled +0 -25
  123. data/views/graphs/network-eth0.erb +0 -23
  124. data/views/graphs/network-lo.erb +0 -23
  125. data/views/reports/list-open-files-lustre.erb.disabled +0 -44
  126. data/views/reports/list-open-files-tmp.erb +0 -44
@@ -261,6 +261,34 @@ tbody tr:nth-child(odd) th {
261
261
  background-color: #f5f5f5;
262
262
  }
263
263
 
264
+ table input {
265
+ width:100%;
266
+ font-size: 12px;
267
+ text-align: left;
268
+ vertical-align:middle;
269
+ cursor:pointer;
270
+ border: 1px solid #ccc;
271
+ -webkit-border-radius: 3px;
272
+ -moz-border-radius: 3px;
273
+ border-radius: 3px;
274
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
275
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
276
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
277
+ -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
278
+ -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
279
+ -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
280
+ -o-transition: border linear 0.2s, box-shadow linear 0.2s;
281
+ transition: border linear 0.2s, box-shadow linear 0.2s;
282
+ }
283
+
284
+ table input:focus {
285
+ border-color: rgba(82, 168, 236, 0.8);
286
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
287
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
288
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
289
+ outline: 0;
290
+ outline: thin dotted \9;
291
+ }
264
292
 
265
293
 
266
294
 
@@ -0,0 +1,9 @@
1
+ require 'test/unit'
2
+ require 'collectd/interface/config'
3
+
4
+ class TestCollectdInterfaceConfig < Test::Unit::TestCase
5
+ include Collectd::Interface
6
+ def test_config
7
+ assert_instance_of(String,Config.root)
8
+ end
9
+ end
@@ -0,0 +1,26 @@
1
+ require 'test/unit'
2
+ require 'rack/test'
3
+ require 'pp'
4
+ require 'collectd/interface/service'
5
+
6
+ class TestCollectdInterfaceService < Test::Unit::TestCase
7
+ include Rack::Test::Methods
8
+ def app
9
+ Collectd::Interface::Service
10
+ end
11
+ def test_config
12
+ %w(
13
+ root
14
+ rrd_path
15
+ public_folder
16
+ graphs
17
+ data
18
+ reports
19
+ ).each do |config|
20
+ get "/config/#{config}"
21
+ assert last_response.ok?
22
+ end
23
+ get "/config/foo"
24
+ assert last_response.status == 404
25
+ end
26
+ end
@@ -0,0 +1,46 @@
1
+ require 'test/unit'
2
+ require 'rack/test'
3
+ require 'pp'
4
+ require 'collectd/interface/service'
5
+
6
+ class TestCollectdInterfaceService < Test::Unit::TestCase
7
+ include Rack::Test::Methods
8
+ def app
9
+ Collectd::Interface::Service
10
+ end
11
+ def test_service_data_selector
12
+ get "/data"
13
+ assert last_response.ok?
14
+ get "/data?format=json"
15
+ assert last_response.ok?
16
+ assert last_response.header['Content-Type'] =~ /^application\/json.*/
17
+ get "/data?format=text"
18
+ assert last_response.ok?
19
+ assert last_response.header['Content-Type'] =~ /^text\/plain.*/
20
+ get "/data/"
21
+ follow_redirect!
22
+ assert last_response.ok?
23
+ end
24
+ def test_service_data_sources
25
+ _source = '/data/load/load/midterm'
26
+ [
27
+ _source,
28
+ "#{_source}?last=1w",
29
+ "#{_source}?last=1d",
30
+ "#{_source}?last=30",
31
+ "#{_source}?last=3m",
32
+ "#{_source}?last=0",
33
+ "#{_source}?last=1d&function=last",
34
+ "#{_source}?last=1d&resolution=30s",
35
+ ].each do |query|
36
+ get query
37
+ assert last_response.ok?
38
+ end
39
+ get "#{_source}?format=json"
40
+ assert last_response.ok?
41
+ assert last_response.header['Content-Type'] =~ /^application\/json.*/
42
+ get "#{_source}?format=text"
43
+ assert last_response.ok?
44
+ assert last_response.header['Content-Type'] =~ /^text\/plain.*/
45
+ end
46
+ end
data/test/start.rb ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require 'collectd/interface/service'
3
+ Collectd::Interface::Service.run!
@@ -1,6 +1,15 @@
1
1
  rrdtool graph <%= @target %> \
2
- -a <%= @type.upcase %> \
3
- --end <%= @end %> --start=<%= @start %> \
4
- --grid-dash 1:1 --width=400 --height=100 \
5
- --tabwidth=10 --border=0 --color=BACK#FFFFFF \
2
+ --imgformat <%= @type.upcase %> \
3
+ --end <%= @end %> \
4
+ --start=<%= @start %> \
5
+ --grid-dash 1:1 \
6
+ --width=<%= @width %> \
7
+ --height=<%= @height %> \
8
+ <% if @graph_only %>
9
+ --full-size-mode \
10
+ --only-graph \
11
+ <% end %>
12
+ --tabwidth=10 \
13
+ --border=0 \
14
+ --color=BACK#FFFFFF \
6
15
  <%= yield %>
@@ -0,0 +1,37 @@
1
+ <%# Return a list of all devices this plug-in can answer for %>
2
+ <% if @config %>
3
+ <% __supports = Array.new %>
4
+ <% __path = @rrd_path %>
5
+ <% Dir["#{__path}/disk*/disk_ops.rrd"].each do |file| %>
6
+ <% __supports << file.gsub(%r<#{__path}/disk->,'').gsub(/\/disk_ops\.rrd/,'') %>
7
+ <% end %>
8
+ <% require 'json' %>
9
+ <%= JSON.generate(__supports.sort)%>
10
+ <%# Return the RRD graph parameters to generate the image %>
11
+ <% else %>
12
+ <% __mount_point = `df -l | grep "/dev/#{@param}"`.split[-1] %>
13
+ <% __title = "Disk IO Opperations on /dev/#{@param}" %>
14
+ --title='<%= __title %>' \
15
+ --vertical-label="Per Second" \
16
+ --alt-autoscale-max \
17
+ DEF:read_av=<%= @rrd_path %>disk-<%= @param %>/disk_ops.rrd:read:AVERAGE \
18
+ DEF:read_min=<%= @rrd_path %>disk-<%= @param %>/disk_ops.rrd:read:MIN \
19
+ DEF:read_max=<%= @rrd_path %>disk-<%= @param %>/disk_ops.rrd:read:MAX \
20
+ DEF:write_av=<%= @rrd_path %>disk-<%= @param %>/disk_ops.rrd:write:AVERAGE \
21
+ DEF:write_min=<%= @rrd_path %>disk-<%= @param %>/disk_ops.rrd:write:MIN \
22
+ DEF:write_max=<%= @rrd_path %>disk-<%= @param %>/disk_ops.rrd:write:MAX \
23
+ AREA:read_max<%= @color[:green_light] %> \
24
+ AREA:read_min#ffffff \
25
+ AREA:write_max<%= @color[:blue_light] %> \
26
+ AREA:write_min#ffffff \
27
+ LINE1:read_av<%= @color[:green_dark] %>:"Read\t\t\t\t\t\t" \
28
+ GPRINT:read_min:MIN:"Min. %4.0lf" \
29
+ GPRINT:read_av:AVERAGE:"Avg. %4.0lf" \
30
+ GPRINT:read_max:MAX:"Max. %4.0lf" \
31
+ GPRINT:read_av:LAST:"Last %4.0lf" \
32
+ LINE1:write_av<%= @color[:blue_dark] %>:"Write\t\t\t\t\t" \
33
+ GPRINT:write_min:MIN:"Min. %4.0lf" \
34
+ GPRINT:write_av:AVERAGE:"Avg. %4.0lf" \
35
+ GPRINT:write_max:MAX:"Max. %4.0lf" \
36
+ GPRINT:write_av:LAST:"Last %4.0lf" \
37
+ <% end %>
@@ -0,0 +1,37 @@
1
+ <%# Return a list of all devices this plug-in can answer for %>
2
+ <% if @config %>
3
+ <% __supports = Array.new %>
4
+ <% __path = @rrd_path %>
5
+ <% Dir["#{__path}/disk*/disk_time.rrd"].each do |file| %>
6
+ <% __supports << file.gsub(%r<#{__path}/disk->,'').gsub(/\/disk_time\.rrd/,'') %>
7
+ <% end %>
8
+ <% require 'json' %>
9
+ <%= JSON.generate(__supports.sort)%>
10
+ <%# Return the RRD graph parameters to generate the image %>
11
+ <% else %>
12
+ <% __mount_point = `df -l | grep "/dev/#{@param}"`.split[-1] %>
13
+ <% __title = "Disk Time per Opperation on /dev/#{@param}" %>
14
+ --title='<%= __title %>' \
15
+ --vertical-label="Avg. Time/Ops" \
16
+ --alt-autoscale-max \
17
+ DEF:read_av=<%= @rrd_path %>disk-<%= @param %>/disk_time.rrd:read:AVERAGE \
18
+ DEF:read_min=<%= @rrd_path %>disk-<%= @param %>/disk_time.rrd:read:MIN \
19
+ DEF:read_max=<%= @rrd_path %>disk-<%= @param %>/disk_time.rrd:read:MAX \
20
+ DEF:write_av=<%= @rrd_path %>disk-<%= @param %>/disk_time.rrd:write:AVERAGE \
21
+ DEF:write_min=<%= @rrd_path %>disk-<%= @param %>/disk_time.rrd:write:MIN \
22
+ DEF:write_max=<%= @rrd_path %>disk-<%= @param %>/disk_time.rrd:write:MAX \
23
+ AREA:read_max<%= @color[:green_light] %> \
24
+ AREA:read_min#ffffff \
25
+ AREA:write_max<%= @color[:blue_light] %> \
26
+ AREA:write_min#ffffff \
27
+ LINE1:read_av<%= @color[:green_dark] %>:"Read\t\t\t\t\t" \
28
+ GPRINT:read_min:MIN:"Min. %4.0lf%ss" \
29
+ GPRINT:read_av:AVERAGE:"Avg. %4.0lf%ss" \
30
+ GPRINT:read_max:MAX:"Max. %4.0lf%ss" \
31
+ GPRINT:read_av:LAST:"Last %4.0lf%ss" \
32
+ LINE1:write_av<%= @color[:blue_dark] %>:"Write\t\t\t\t" \
33
+ GPRINT:write_min:MIN:"Min. %4.0lf%ss" \
34
+ GPRINT:write_av:AVERAGE:"Avg. %4.0lf%ss" \
35
+ GPRINT:write_max:MAX:"Max. %4.0lf%ss" \
36
+ GPRINT:write_av:LAST:"Last %4.0lf%ss" \
37
+ <% end %>
@@ -0,0 +1,38 @@
1
+ <%# Return a list of all devices this plug-in can answer for %>
2
+ <% if @config %>
3
+ <% __supports = Array.new %>
4
+ <% __path = @rrd_path %>
5
+ <% Dir["#{__path}/disk*/disk_octets.rrd"].each do |file| %>
6
+ <% __supports << file.gsub(%r<#{__path}/disk->,'').gsub(/\/disk_octets\.rrd/,'') %>
7
+ <% end %>
8
+ <% require 'json' %>
9
+ <%= JSON.generate(__supports.sort)%>
10
+ <%# Return the RRD graph parameters to generate the image %>
11
+ <% else %>
12
+ <% __mount_point = `df -l | grep "/dev/#{@param}"`.split[-1] %>
13
+ <% __title = "Disk Traffic /dev/#{@param}" %>
14
+ <% __title << " at #{__mount_point}" unless __mount_point.nil? %>
15
+ --title='<%= __title %>' \
16
+ --vertical-label="Bytes" \
17
+ --alt-autoscale-max --base 1024 \
18
+ DEF:read_av=<%= @rrd_path %>disk-<%= @param %>/disk_octets.rrd:read:AVERAGE \
19
+ DEF:read_min=<%= @rrd_path %>disk-<%= @param %>/disk_octets.rrd:read:MIN \
20
+ DEF:read_max=<%= @rrd_path %>disk-<%= @param %>/disk_octets.rrd:read:MAX \
21
+ DEF:write_av=<%= @rrd_path %>disk-<%= @param %>/disk_octets.rrd:write:AVERAGE \
22
+ DEF:write_min=<%= @rrd_path %>disk-<%= @param %>/disk_octets.rrd:write:MIN \
23
+ DEF:write_max=<%= @rrd_path %>disk-<%= @param %>/disk_octets.rrd:write:MAX \
24
+ AREA:read_max<%= @color[:green_light] %> \
25
+ AREA:read_min#ffffff \
26
+ AREA:write_max<%= @color[:blue_light] %> \
27
+ AREA:write_min#ffffff \
28
+ LINE1:read_av<%= @color[:green_dark] %>:"Read\t\t\t" \
29
+ GPRINT:read_min:MIN:"Min. %3.0lf%sB" \
30
+ GPRINT:read_av:AVERAGE:"Avg. %3.0lf%sB" \
31
+ GPRINT:read_max:MAX:"Max. %3.0lf%sB" \
32
+ GPRINT:read_av:LAST:"Last %3.0lf%sB" \
33
+ LINE1:write_av<%= @color[:blue_dark] %>:"Write\t\t" \
34
+ GPRINT:write_min:MIN:"Min. %3.0lf%sB" \
35
+ GPRINT:write_av:AVERAGE:"Avg. %3.0lf%sB" \
36
+ GPRINT:write_max:MAX:"Max. %3.0lf%sB" \
37
+ GPRINT:write_av:LAST:"Last %3.0lf%sB" \
38
+ <% end %>
@@ -22,14 +22,14 @@ CDEF:irqs_avg=<%= (files.map { |f| "irq_" + i_num(f) + "_avg,UN,0," "irq_" + i_
22
22
  CDEF:irqs_min=<%= (files.map { |f| "irq_" + i_num(f) + "_min,UN,0," "irq_" + i_num(f) + "_min,IF" }).join(',') %>,<%= tail.join(',') %> \
23
23
  AREA:irqs_max<%= @color[:blue_light] %> \
24
24
  AREA:irqs_min#ffffff \
25
- LINE1:irqs_avg<%= @color[:blue_dark] %>:"Sum \t\t\t\t\t\t\t\t\t\t\t\t\t" \
26
- GPRINT:irqs_max:MIN:"Min. %3.0lf" \
27
- GPRINT:irqs_avg:AVERAGE:"Avg. %3.0lf" \
28
- GPRINT:irqs_max:MAX:"Max. %3.0lf" \
25
+ LINE1:irqs_avg<%= @color[:blue_dark] %>:"Sum \t\t\t\t\t\t\t\t\t\t" \
26
+ GPRINT:irqs_max:MIN:"Min. %7.0lf" \
27
+ GPRINT:irqs_avg:AVERAGE:"Avg. %7.0lf" \
28
+ GPRINT:irqs_max:MAX:"Max. %7.0lf" \
29
29
  <% files.each do |file| %>
30
30
  <% i = i_num(file) %>
31
- LINE1:irq_<%= i %>_max#ffffff00:"IRQ <%= i %> \t\t\t\t\t\t\t\t\t\t\t\t\t" \
32
- GPRINT:irq_<%= i %>_min:MIN:"Min. %3.0lf" \
33
- GPRINT:irq_<%= i %>_avg:AVERAGE:"Avg. %3.0lf" \
34
- GPRINT:irq_<%= i %>_max:MAX:"Max. %3.0lf" \
31
+ LINE1:irq_<%= i %>_max#ffffff00:"IRQ <%= i %> \t\t\t\t\t\t\t\t\t\t" \
32
+ GPRINT:irq_<%= i %>_min:MIN:"Min. %7.0lf" \
33
+ GPRINT:irq_<%= i %>_avg:AVERAGE:"Avg. %7.0lf" \
34
+ GPRINT:irq_<%= i %>_max:MAX:"Max. %7.0lf" \
35
35
  <% end %>
@@ -0,0 +1,35 @@
1
+ <%# Return a list of all network interfaces this plug-in can answer for %>
2
+ <% if @config %>
3
+ <% __supports = Array.new%>
4
+ <% __path = File.join(@rrd_path,'interface')%>
5
+ <% Dir["#{__path}/if_packets*.rrd"].each do |file| %>
6
+ <% __supports << file.gsub(/\.rrd/,'').gsub(%r<#{__path}/if_packets->,'') %>
7
+ <% end %>
8
+ <% require 'json' %>
9
+ <%= JSON.generate(__supports.sort)%>
10
+ <%# Return the RRD graph parameters to generate the image %>
11
+ <% else %>
12
+ --title='Network Packets Interface "<%= @param %>"' \
13
+ --vertical-label="Packets per Second" \
14
+ --alt-autoscale-max \
15
+ DEF:rx_av=<%= @rrd_path %>/interface/if_packets-<%= @param %>.rrd:rx:AVERAGE \
16
+ DEF:rx_min=<%= @rrd_path %>/interface/if_packets-<%= @param %>.rrd:rx:MIN \
17
+ DEF:rx_max=<%= @rrd_path %>/interface/if_packets-<%= @param %>.rrd:rx:MAX \
18
+ DEF:tx_av=<%= @rrd_path %>/interface/if_packets-<%= @param %>.rrd:tx:AVERAGE \
19
+ DEF:tx_min=<%= @rrd_path %>/interface/if_packets-<%= @param %>.rrd:tx:MIN \
20
+ DEF:tx_max=<%= @rrd_path %>/interface/if_packets-<%= @param %>.rrd:tx:MAX \
21
+ AREA:rx_max#00F00022 \
22
+ AREA:rx_min#ffffff \
23
+ AREA:tx_max#0000ff22 \
24
+ AREA:tx_min#ffffff \
25
+ LINE1:rx_av#00f000aa:"Receive " \
26
+ GPRINT:rx_min:MIN:"Min. %3.0lf%s" \
27
+ GPRINT:rx_av:AVERAGE:"Avg. %3.0lf%s" \
28
+ GPRINT:rx_max:MAX:"Max. %3.0lf%s" \
29
+ GPRINT:rx_av:LAST:"Last %3.0lf%s" \
30
+ LINE1:tx_av#0000ffaa:"Transmit" \
31
+ GPRINT:tx_min:MIN:"Min. %3.0lf%s" \
32
+ GPRINT:tx_av:AVERAGE:"Avg. %3.0lf%s" \
33
+ GPRINT:tx_max:MAX:"Max. %3.0lf%s" \
34
+ GPRINT:tx_av:LAST:"Last %3.0lf%s"
35
+ <% end %>
@@ -0,0 +1,35 @@
1
+ <%# Return a list of all network interfaces this plug-in can answer for %>
2
+ <% if @config %>
3
+ <% __supports = Array.new%>
4
+ <% __path = File.join(@rrd_path,'interface')%>
5
+ <% Dir["#{__path}/if_octets*.rrd"].each do |file| %>
6
+ <% __supports << file.gsub(/\.rrd/,'').gsub(%r<#{__path}/if_octets->,'') %>
7
+ <% end %>
8
+ <% require 'json' %>
9
+ <%= JSON.generate(__supports.sort)%>
10
+ <%# Return the RRD graph parameters to generate the image %>
11
+ <% else %>
12
+ --title='Network Traffic Interface "<%= @param %>"' \
13
+ --vertical-label="Bytes per Second" \
14
+ --alt-autoscale-max \
15
+ DEF:rx_av=<%= @rrd_path %>/interface/if_octets-<%= @param %>.rrd:rx:AVERAGE \
16
+ DEF:rx_min=<%= @rrd_path %>/interface/if_octets-<%= @param %>.rrd:rx:MIN \
17
+ DEF:rx_max=<%= @rrd_path %>/interface/if_octets-<%= @param %>.rrd:rx:MAX \
18
+ DEF:tx_av=<%= @rrd_path %>/interface/if_octets-<%= @param %>.rrd:tx:AVERAGE \
19
+ DEF:tx_min=<%= @rrd_path %>/interface/if_octets-<%= @param %>.rrd:tx:MIN \
20
+ DEF:tx_max=<%= @rrd_path %>/interface/if_octets-<%= @param %>.rrd:tx:MAX \
21
+ AREA:rx_max#00F00022 \
22
+ AREA:rx_min#ffffff \
23
+ AREA:tx_max#0000ff22 \
24
+ AREA:tx_min#ffffff \
25
+ LINE1:rx_av#00f000aa:"Receive " \
26
+ GPRINT:rx_min:MIN:"Min. %3.0lf%sb" \
27
+ GPRINT:rx_av:AVERAGE:"Avg. %3.0lf%sb" \
28
+ GPRINT:rx_max:MAX:"Max. %3.0lf%sb" \
29
+ GPRINT:rx_av:LAST:"Last %3.0lf%sb" \
30
+ LINE1:tx_av#0000ffaa:"Transmit" \
31
+ GPRINT:tx_min:MIN:"Min. %3.0lf%sb" \
32
+ GPRINT:tx_av:AVERAGE:"Avg. %3.0lf%sb" \
33
+ GPRINT:tx_max:MAX:"Max. %3.0lf%sb" \
34
+ GPRINT:tx_av:LAST:"Last %3.0lf%sb"
35
+ <% end %>
File without changes
data/views/report.erb CHANGED
@@ -1,17 +1,35 @@
1
1
  <ul style='list-style-type:none; padding-left:0'>
2
- <% if @display == 'all' %>
3
- <% for val in @reports %>
4
- <li>
5
- <%= erb("/reports/#{val}".to_sym) %>
6
- <% url = "/report/#{val}?format=json" %>
7
- <a href="<%= url %>"><%= url %></a>
8
- </li>
9
- <% end %>
10
- <% else %>
11
- <li>
12
- <%= erb("/reports/#{@display}".to_sym)%>
13
- <% url = "/report/#{@display}?format=json" %>
14
- <a href="<%= url%>"><%= url %></a>
15
- </li>
2
+ <% @reports_selected.each_pair do |path,html| %>
3
+ <li>
4
+ <%= html %>
5
+ <a href="<%= path %>"><%= path %></a>
6
+ </li>
16
7
  <% end %>
17
8
  </ul>
9
+ <% if @reports_selected.length < 2 %>
10
+ <script src="script/table_filter.js" type="text/javascript"></script>
11
+ <script language="javascript" type="text/javascript">
12
+ var tableFilters = {
13
+ btn: true,
14
+ loader: true,
15
+ display_all_text: "[ Show all ]",
16
+ loader_text: "Filtering...",
17
+ btn_reset_text: "Clear",
18
+ btn_reset: true,
19
+ }
20
+
21
+ var elems = document.getElementsByTagName('div'),i;
22
+ for (i in elems)
23
+ {
24
+ if(elems[i].className == "content")
25
+ {
26
+ var tables = elems[i].getElementsByTagName("table"),k;
27
+ for(k in tables)
28
+ {
29
+ tables[k].id="table"+k+"";
30
+ setFilterGrid(tables[k].id,0,tableFilters);
31
+ }
32
+ }
33
+ }
34
+ </script>
35
+ <% end %>
@@ -0,0 +1,62 @@
1
+ <% if @config %>
2
+ <% __mounts = Array.new %>
3
+ <% __devices = `df -l | grep '^/dev/'` %>
4
+ <% __devices.split("\n").each do |dev| %>
5
+ <% __mount = dev.split(' ')[-1] %>
6
+ <% if __mount == '/' %>
7
+ <% __mounts << 'root' %>
8
+ <% else %>
9
+ <% __mounts << __mount.gsub(/^\//,'') %>
10
+ <% end %>
11
+ <% end %>
12
+ <%= JSON.generate(__mounts) %>
13
+ <% else %>
14
+ <% if @param == 'root' %>
15
+ <% __path = '/' %>
16
+ <% else %>
17
+ <% __path = "/#{@param}" %>
18
+ <% end %>
19
+ <% __content = `lsof -u ^root -S2 #{__path} | tr -s ' ' | cut -d' ' -f2-4,9-` %>
20
+ <% if @type == 'text' %>
21
+ <%= __content %>
22
+ <% elsif @type == 'json' %>
23
+ <% require 'json' %>
24
+ <% __struct = Array.new %>
25
+ <% __content = __content.split("\n")[1..-1] %>
26
+ <% __keys = ['pid','user','state','file'] %>
27
+ <% unless __content.empty? %>
28
+ <% __content.each do |file| %>
29
+ <% file = file.split %>
30
+ <% values = file[0..2] %>
31
+ <% values << file[3..-1].join(' ') %>
32
+ <% __struct << Hash[*__keys.zip(values).flatten] %>
33
+ <% end %>
34
+ <% end %>
35
+ <%= JSON.pretty_generate __struct %>
36
+ <% else %>
37
+ <div style="font-size:160%"><strong>Open Files in <%= __path %></strong></div>
38
+ <table>
39
+ <thead>
40
+ <tr>
41
+ <td>Process&nbsp;ID</td>
42
+ <td>User</td>
43
+ <td>State</td>
44
+ <td>File</td>
45
+ </tr>
46
+ </thead>
47
+ <tbody>
48
+ <% if __content.empty? %>
49
+ <tr><td>none</td><td>none</td><td>none</td><td>none</td></tr>
50
+ <% else %>
51
+ <% __content.split("\n")[1..-1].each do |file| %>
52
+ <% file = file.split%>
53
+ <tr>
54
+ <td><%= file[0..2].join('</td><td>') %></td>
55
+ <td><span style="font-size:80%"><%= file[3..-1].join(' ')%></span></td>
56
+ </tr>
57
+ <% end %>
58
+ <% end %>
59
+ </tbody>
60
+ </table>
61
+ <% end %>
62
+ <% end %>
File without changes
@@ -1,5 +1,5 @@
1
1
  <% require 'json'
2
- content = `df -lh`.split("\n")
2
+ content = `df -l -h`.split("\n")
3
3
  if @type == 'text' then %><%= content.join("\n") %>
4
4
  <% elsif @type == 'json'
5
5
  keys = content[0].chop.chop.split.map! { |v| v.downcase }
@@ -1,7 +1,7 @@
1
1
  <ul>
2
2
  <li>
3
3
  <div class="label">Select graphs to display:</div>
4
- <select multiple="yes" size="4" name='display[]'>
4
+ <select multiple="yes" size="6" name='display[]'>
5
5
  <option value='all'>all</option>
6
6
  <% @graphs.keys.sort.each do |name| %>
7
7
  <option value='<%= name %>'><%= name %></option>