gri 10.0.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 (107) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/MIT-LICENSE.txt +20 -0
  4. data/README.md +132 -0
  5. data/Rakefile +5 -0
  6. data/bin/grapher +17 -0
  7. data/bin/gri +5 -0
  8. data/bin/gricast +17 -0
  9. data/bin/grispark +5 -0
  10. data/bin/griwalk +9 -0
  11. data/bin/trad +19 -0
  12. data/bin/trad-http +17 -0
  13. data/gri.gemspec +21 -0
  14. data/lib/fluent/plugin/out_gri.rb +56 -0
  15. data/lib/gri/api.rb +28 -0
  16. data/lib/gri/app_collector.rb +154 -0
  17. data/lib/gri/app_walker.rb +23 -0
  18. data/lib/gri/blank.rb +49 -0
  19. data/lib/gri/builtindefs.rb +211 -0
  20. data/lib/gri/cast.rb +84 -0
  21. data/lib/gri/cgraph.rb +37 -0
  22. data/lib/gri/clist.rb +163 -0
  23. data/lib/gri/collector.rb +284 -0
  24. data/lib/gri/config.rb +134 -0
  25. data/lib/gri/ds_list.rb +166 -0
  26. data/lib/gri/format_helper.rb +112 -0
  27. data/lib/gri/gparams.rb +43 -0
  28. data/lib/gri/graph.rb +239 -0
  29. data/lib/gri/grapher.rb +70 -0
  30. data/lib/gri/ldb.rb +160 -0
  31. data/lib/gri/list.rb +242 -0
  32. data/lib/gri/log.rb +140 -0
  33. data/lib/gri/loop.rb +109 -0
  34. data/lib/gri/ltsv.rb +58 -0
  35. data/lib/gri/main.rb +107 -0
  36. data/lib/gri/mlog.rb +22 -0
  37. data/lib/gri/mmsgpack.rb +57 -0
  38. data/lib/gri/msnmp.rb +601 -0
  39. data/lib/gri/page.rb +235 -0
  40. data/lib/gri/pcollector.rb +209 -0
  41. data/lib/gri/plugin.rb +75 -0
  42. data/lib/gri/plugin/bootstrap.rb +65 -0
  43. data/lib/gri/plugin/cisco.rb +98 -0
  44. data/lib/gri/plugin/exec_collector.rb +89 -0
  45. data/lib/gri/plugin/juniper.rb +5 -0
  46. data/lib/gri/plugin/netsnmp.rb +8 -0
  47. data/lib/gri/plugin/ucdavis.rb +176 -0
  48. data/lib/gri/plugin/writer_fluentd.rb +26 -0
  49. data/lib/gri/polling_unit.rb +88 -0
  50. data/lib/gri/q.rb +5 -0
  51. data/lib/gri/request.rb +29 -0
  52. data/lib/gri/rrd.rb +438 -0
  53. data/lib/gri/scheduler.rb +68 -0
  54. data/lib/gri/sgraph.rb +147 -0
  55. data/lib/gri/spark.rb +94 -0
  56. data/lib/gri/tra_collector.rb +80 -0
  57. data/lib/gri/trad.rb +170 -0
  58. data/lib/gri/updater.rb +201 -0
  59. data/lib/gri/util_daemon.rb +19 -0
  60. data/lib/gri/util_marshal.rb +13 -0
  61. data/lib/gri/utils.rb +63 -0
  62. data/lib/gri/vendor.rb +76 -0
  63. data/lib/gri/version.rb +3 -0
  64. data/lib/gri/wmain.rb +67 -0
  65. data/lib/gri/writer.rb +184 -0
  66. data/mcollector +47 -0
  67. data/test/mock.rb +60 -0
  68. data/test/root/gra/.sysdb/sysdb.txt +3 -0
  69. data/test/root/gra/testhost/.records.txt +2 -0
  70. data/test/root/if.def +2 -0
  71. data/test/root/test.conf +4 -0
  72. data/test/root/testtab +9 -0
  73. data/test/root/testtab2 +2 -0
  74. data/test/root/tra/testhost/_/20130614 +20 -0
  75. data/test/test_app.rb +58 -0
  76. data/test/test_builtindefs.rb +24 -0
  77. data/test/test_collector.rb +58 -0
  78. data/test/test_config.rb +62 -0
  79. data/test/test_ds_list.rb +48 -0
  80. data/test/test_exec_collector.rb +33 -0
  81. data/test/test_format_helper.rb +68 -0
  82. data/test/test_graph.rb +69 -0
  83. data/test/test_ldb.rb +29 -0
  84. data/test/test_list.rb +65 -0
  85. data/test/test_log.rb +16 -0
  86. data/test/test_loop.rb +35 -0
  87. data/test/test_ltsv.rb +38 -0
  88. data/test/test_main.rb +19 -0
  89. data/test/test_mmsgpack.rb +27 -0
  90. data/test/test_msnmp.rb +147 -0
  91. data/test/test_page.rb +51 -0
  92. data/test/test_pcollector.rb +71 -0
  93. data/test/test_plugin.rb +62 -0
  94. data/test/test_plugin_cisco.rb +23 -0
  95. data/test/test_polling_unit.rb +58 -0
  96. data/test/test_request.rb +26 -0
  97. data/test/test_rrd.rb +53 -0
  98. data/test/test_rrd_updater.rb +139 -0
  99. data/test/test_scheduler.rb +31 -0
  100. data/test/test_tra_collector.rb +40 -0
  101. data/test/test_trad.rb +33 -0
  102. data/test/test_util_marshal.rb +17 -0
  103. data/test/test_utils.rb +15 -0
  104. data/test/test_vendor.rb +40 -0
  105. data/test/test_writer.rb +33 -0
  106. data/test/unittest_helper.rb +27 -0
  107. metadata +208 -0
@@ -0,0 +1,65 @@
1
+ module GRI
2
+ module Bootstrap
3
+ extend Bootstrap
4
+ def layout
5
+ <<EOS
6
+ <!DOCTYPE html>
7
+ <html>
8
+ <head>
9
+ <title><%= @title %></title>
10
+ <style>
11
+ span.large {font-size: x-large;}
12
+ table.ds {margin-bottom: 2px;}
13
+ table.ds td {padding:0;background:#f9f9f9; border-collapse: separate;}
14
+ table.ds th {background:#ffd0d0;
15
+ background:linear-gradient(to bottom, #ffd8d8 0%,#ffcccc 45%,#ffc0c0 100%);
16
+ text-align:left;}
17
+ hr {border:none;border-top:1px #cccccc solid;}
18
+ </style>
19
+ <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">
20
+ <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-theme.min.css">
21
+ </head>
22
+
23
+ <body>
24
+
25
+ <div class="navbar navbar-static-top navbar-inverse">
26
+ <div class="container">
27
+ <div class="navbar-header">
28
+ <a class="navbar-brand" href="<%= url_to ''%>">GRI</a>
29
+ </div>
30
+ </div>
31
+ </div>
32
+
33
+ <div class="container">
34
+ <%= yield %>
35
+ </div>
36
+
37
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js">
38
+ </script>
39
+ <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
40
+ </body>
41
+ </html>
42
+ EOS
43
+ end
44
+ end
45
+
46
+ class Grapher
47
+ def public_dir
48
+ File.dirname(__FILE__) + '/../../../public'
49
+ end
50
+
51
+ def self.layout
52
+ Bootstrap.layout
53
+ end
54
+ end
55
+
56
+ class Cast
57
+ def public_dir
58
+ File.dirname(__FILE__) + '/../../../public'
59
+ end
60
+
61
+ def self.layout
62
+ Bootstrap.layout
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,98 @@
1
+ SNMP.update 'ciscoMemoryPoolMIB'=>'1.3.6.1.4.1.9.9.48',
2
+ 'ciscoMemoryPoolObjects'=>'1.3.6.1.4.1.9.9.48.1',
3
+ 'ciscoMemoryPoolTable'=>'1.3.6.1.4.1.9.9.48.1.1',
4
+ 'ciscoMemoryPoolEntry'=>'1.3.6.1.4.1.9.9.48.1.1.1',
5
+ 'ciscoMemoryPoolName'=>'1.3.6.1.4.1.9.9.48.1.1.1.2',
6
+ 'ciscoMemoryPoolUsed'=>'1.3.6.1.4.1.9.9.48.1.1.1.5',
7
+ 'ciscoMemoryPoolFree'=>'1.3.6.1.4.1.9.9.48.1.1.1.6',
8
+ 'ciscoMemoryPoolLargestFree'=>'1.3.6.1.4.1.9.9.48.1.1.1.7',
9
+
10
+ 'cipMacTable'=>'1.3.6.1.4.1.9.9.84.1.2.1',
11
+ 'cipMacSwitchedPkts'=>'1.3.6.1.4.1.9.9.84.1.2.1.1.3',
12
+ 'cipMacSwitchedBytes'=>'1.3.6.1.4.1.9.9.84.1.2.1.1.4',
13
+
14
+ 'cipMacXTable'=>'1.3.6.1.4.1.9.9.84.1.2.3',
15
+ 'cipMacHCSwitchedPkts'=>'1.3.6.1.4.1.9.9.84.1.2.3.1.1',
16
+ 'cipMacHCSwitchedBytes'=>'1.3.6.1.4.1.9.9.84.1.2.3.1.2',
17
+
18
+ 'lcpu'=>'1.3.6.1.4.1.9.2.1',
19
+ 'busyPer'=>'1.3.6.1.4.1.9.2.1.56.0',
20
+ 'avgBusy1'=>'1.3.6.1.4.1.9.2.1.57.0',
21
+ 'avgBusy5'=>'1.3.6.1.4.1.9.2.1.58.0',
22
+
23
+ 'cpmCPUTotalPhysicalIndex'=>'1.3.6.1.4.1.9.9.109.1.1.1.1.2',
24
+ 'cpmCPUTotal5sec'=>'1.3.6.1.4.1.9.9.109.1.1.1.1.3',
25
+ 'cpmCPUTotal1min'=>'1.3.6.1.4.1.9.9.109.1.1.1.1.4',
26
+ 'cpmCPUTotal5min'=>'1.3.6.1.4.1.9.9.109.1.1.1.1.5',
27
+
28
+ 'ciscoEnvMonMIB'=>'1.3.6.1.4.1.9.9.13',
29
+ 'ciscoEnvMonObjects'=>'1.3.6.1.4.1.9.9.13.1',
30
+ 'ciscoEnvMonTemperatureStatusTable'=>'1.3.6.1.4.1.9.9.13.1.3',
31
+ 'ciscoEnvMonTemperatureStatusEntry'=>'1.3.6.1.4.1.9.9.13.1.3.1',
32
+ 'ciscoEnvMonTemperatureStatusDescr'=>'1.3.6.1.4.1.9.9.13.1.3.1.2',
33
+ 'ciscoEnvMonTemperatureStatusValue'=>'1.3.6.1.4.1.9.9.13.1.3.1.3',
34
+
35
+ 'cempMemPoolName'=>'1.3.6.1.4.1.9.9.221.1.1.1.1.3',
36
+ 'cempMemPoolUsed'=>'1.3.6.1.4.1.9.9.221.1.1.1.1.7',
37
+ 'cempMemPoolFree'=>'1.3.6.1.4.1.9.9.221.1.1.1.1.8',
38
+ 'cempMemPoolLargestFree'=>'1.3.6.1.4.1.9.9.221.1.1.1.1.9',
39
+ 'cempMemPoolHCFree'=>'1.3.6.1.4.1.9.9.221.1.1.1.1.20',
40
+ 'cempMemPoolHCLargestFree'=>'1.3.6.1.4.1.9.9.221.1.1.1.1.22',
41
+ 'cempMemPoolHCUsed'=>'1.3.6.1.4.1.9.9.221.1.1.1.1.26'
42
+
43
+ GRI::Vendor::DEFS.update '9'=>{
44
+ :name=>'Cisco',
45
+ :options=>{'ver'=>'2c', 'ifMIB'=>true, 'lcpu'=>true,
46
+ 'ciscoEnvMonTemperature'=>true},
47
+ :firm_re=>/Software\s*\(([\w\d]+)/,
48
+ :version_re=>/Version\s+([\.\d\w()]+)/,
49
+ :after_initialize=>proc {|sysinfo, options|
50
+ options.set_unless_defined 'entityu' if options['lccpu']
51
+ if (sysdescr = sysinfo['sysDescr']) =~
52
+ /\s(\S+)\s+Software \(([^\)]+)\).*Version ([^,\s]+)/
53
+ sysinfo['_firm'] = $2
54
+ sysinfo['_ver'] = $3
55
+ sysinfo['_sysdescr'] = "IOS #{$1} Software (#{$2}), Version #{$3}"
56
+ elsif sysdescr =~ /Cisco Systems(, Inc\.)? (\S+)[\s\S]*Catalyst Operating System.*Version (\S+)/
57
+ sysinfo['_firm'] = $2
58
+ sysinfo['_ver'] = $3
59
+ sysinfo['_sysdescr'] = "Catalyst Operating System (#{$2}), Version #{$3}"
60
+ end
61
+ },
62
+ }
63
+
64
+ GRI::DEFS.update 'lcpu'=>{:pucat=>:cpu,
65
+ :oid=>['busyPer', 'avgBusy1', 'avgBusy5'],
66
+ :tdb=>['cpu', 'busyPer', 'avgBusy1', 'avgBusy5'],
67
+ :ds=>['busyPer,busyper,GAUGE,MAX,LINE1,#ff4020',
68
+ 'avgBusy1,avgbusy1,GAUGE,MAX,LINE1,#40ff20',
69
+ 'avgBusy5,avgbusy5,GAUGE,MAX,LINE1,#4020ff'],
70
+ :prop=>{:lastvalue=>'busyPer', :name=>'cpu'},
71
+ :list=>['CPU BUSY', '%N,%L %%\r'],
72
+ :graph=>[['percent', 0]],
73
+ },
74
+ 'ciscoEnvMonTemperature'=>{:cat=>:temperature,
75
+ :oid=>['ciscoEnvMonTemperatureStatusEntry'],
76
+ :tdb=>['t', 'ciscoEnvMonTemperatureStatusDescr',
77
+ 'ciscoEnvMonTemperatureStatusValue'],
78
+ :ds=>['ciscoEnvMonTemperatureStatusValue,temperature,GAUGE'],
79
+ :prop=>{:lastvalue=>'ciscoEnvMonTemperatureStatusValue',
80
+ :name=>'ciscoEnvMonTemperatureStatusDescr'},
81
+ :list=>['Temperature', '%N,%L &deg;C\r'],
82
+ :graph=>[['degrees Celsius', 0, [0, 1000]]],
83
+ :composite=>['v', 't'],
84
+ },
85
+ 'lccpu'=>{
86
+ :oid=>['cpmCPUTotalPhysicalIndex', 'cpmCPUTotal5sec',
87
+ 'cpmCPUTotal1min', 'cpmCPUTotal5min'],
88
+ :tdb=>['lccpu', 'entPhysicalDescr', 'entPhysicalName',
89
+ 'cpmCPUTotal5sec', 'cpmCPUTotal1min', 'cpmCPUTotal5min'],
90
+ :join=>[:entityu, 'cpmCPUTotalPhysicalIndex'],
91
+ :ds=>['cpmCPUTotal5sec,busyper,GAUGE,MAX,LINE1,#ff4020',
92
+ 'cpmCPUTotal1min,avgbusy1,GAUGE,MAX,LINE1,#40ff20',
93
+ 'cpmCPUTotal5min,avgbusy5,GAUGE,MAX,LINE1,#4020ff'],
94
+ :prop=>{:description=>'entPhysicalDescr',
95
+ :lastvalue=>'cpmCPUTotal5sec', :name=>'entPhysicalName'},
96
+ :list=>['LC CPU BUSY', '%N,%D,%L %%\r'],
97
+ :graph=>[['percent', 0]],
98
+ }
@@ -0,0 +1,89 @@
1
+ if Object.const_defined? :RUBY_VERSION
2
+
3
+ require 'open3'
4
+ require 'gri/collector'
5
+
6
+ module GRI
7
+ class ExecCollector < Collector
8
+ TYPES['exec'] = self
9
+ MAX_INPUT_SIZE = 8192
10
+
11
+ def sync?; false; end
12
+
13
+ def on_init
14
+ @rbuf = ''
15
+ case options['separator']
16
+ when 'tab'
17
+ @sep = /\t/
18
+ when /^[!"%&,->@-Z_-z]+/
19
+ @sep = Regexp.new options['separator']
20
+ else
21
+ @sep = nil
22
+ end
23
+ if options['out_keys']
24
+ @out_keys = options['out_keys'].split(/\s*,\s*/)
25
+ end
26
+ @transpose = !!options['transpose']
27
+ end
28
+
29
+ def on_attach
30
+ cmd = options['cmd']
31
+ stdin, stdout, stderr, wait_thr = popen cmd
32
+ stdin.close
33
+ loop.watch stdout, :r, 0, self
34
+ loop.watch stderr, :r, 0, self
35
+ end
36
+
37
+ def popen cmd
38
+ Open3.popen3 cmd
39
+ end
40
+
41
+ def on_readable io=nil
42
+ begin
43
+ while data = io.read_nonblock(MAX_INPUT_SIZE)
44
+ on_read data
45
+ end
46
+ rescue Errno::EAGAIN, Errno::EINTR
47
+ loop.watch io, :r, 0, self
48
+ rescue SystemCallError, EOFError, IOError, SocketError
49
+ on_close
50
+ end
51
+ end
52
+
53
+ def on_read data
54
+ @rbuf << data
55
+ records = []
56
+ while true
57
+ break unless @rbuf =~ /\n/
58
+ line, rbuf = @rbuf.split /^/, 2
59
+ @rbuf.replace(rbuf || '')
60
+ line.chomp!
61
+ record = values2record line.split(@sep)
62
+ if @transpose
63
+ records += record.inject([]) {|a, kv|
64
+ a.push({'_host'=>host, '_key'=>"num_#{kv.first}", 'num'=>kv.last})
65
+ a
66
+ }
67
+ else
68
+ record['_host'] = host
69
+ records.push record
70
+ end
71
+ end
72
+ @cb.call records unless records.empty?
73
+ end
74
+
75
+ def values2record values
76
+ h = {}
77
+ values.each_with_index {|v, i|
78
+ h[@out_keys[i]] = v if @out_keys[i]
79
+ }
80
+ h
81
+ end
82
+
83
+ def on_close
84
+ loop.detach self
85
+ end
86
+ end
87
+ end
88
+
89
+ end
@@ -0,0 +1,5 @@
1
+ GRI::Vendor::DEFS.update '2636.1'=>{
2
+ :name=>'Juniper',
3
+ :options=>{'ver'=>'2c', 'ifMIB'=>true},
4
+ :version_re=>/JUNOS\s+(\d[\.\d\w]*)/,
5
+ }
@@ -0,0 +1,8 @@
1
+ GRI::Vendor::DEFS.update '8072' => {
2
+ :name=>'NetSNMP',
3
+ :options=>{'ver'=>'2c', 'ifMIB'=>true,
4
+ 'ucd-la'=>true, 'ucd-pr'=>true, 'ucd-ext'=>true, 'ucd-memory'=>true,
5
+ 'ucd-systemstats'=>true, #'ucd-diskio'=>true,
6
+ 'hrStorage'=>true, 'hrMemorySize'=>true,
7
+ 'hrSystemNumUsers'=>true, 'hrSystemProcesses'=>true},
8
+ }
@@ -0,0 +1,176 @@
1
+ SNMP.update 'ucdavis'=>'1.3.6.1.4.1.2021',
2
+ 'prEntry'=>'1.3.6.1.4.1.2021.2.1',
3
+ 'prNames'=>'1.3.6.1.4.1.2021.2.1.2',
4
+ 'prCount'=>'1.3.6.1.4.1.2021.2.1.5',
5
+
6
+ 'extEntry'=>'1.3.6.1.4.1.2021.8.1',
7
+ 'extNames'=>'1.3.6.1.4.1.2021.8.1.2',
8
+ 'extOutput'=>'1.3.6.1.4.1.2021.8.1.101',
9
+
10
+ 'dskEntry'=>'1.3.6.1.4.1.2021.9.1',
11
+ 'dskPath'=>'1.3.6.1.4.1.2021.9.1.2',
12
+ 'dskDevice'=>'1.3.6.1.4.1.2021.9.1.3',
13
+ 'dskTotal'=>'1.3.6.1.4.1.2021.9.1.6',
14
+ 'dskUsed'=>'1.3.6.1.4.1.2021.9.1.8',
15
+ 'dskPercent'=>'1.3.6.1.4.1.2021.9.1.9',
16
+ 'dskPercentNode'=>'1.3.6.1.4.1.2021.9.1.10',
17
+ 'dskTotalLow'=>'1.3.6.1.4.1.2021.9.1.11',
18
+ 'dskTotalHigh'=>'1.3.6.1.4.1.2021.9.1.12',
19
+ 'dskUsedLow'=>'1.3.6.1.4.1.2021.9.1.15',
20
+ 'dskUsedHigh'=>'1.3.6.1.4.1.2021.9.1.16',
21
+
22
+ 'laEntry'=>'1.3.6.1.4.1.2021.10.1',
23
+ 'laNames'=>'1.3.6.1.4.1.2021.10.1.2',
24
+ 'laLoad'=>'1.3.6.1.4.1.2021.10.1.3',
25
+
26
+ 'memory'=>'1.3.6.1.4.1.2021.4',
27
+ 'memTotalSwap'=>'1.3.6.1.4.1.2021.4.3.0',
28
+ 'memAvailSwap'=>'1.3.6.1.4.1.2021.4.4.0',
29
+ 'memTotalReal'=>'1.3.6.1.4.1.2021.4.5.0',
30
+ 'memAvailReal'=>'1.3.6.1.4.1.2021.4.6.0',
31
+ 'memTotalFree'=>'1.3.6.1.4.1.2021.4.11.0',
32
+ 'memShared'=>'1.3.6.1.4.1.2021.4.13.0',
33
+ 'memBuffer'=>'1.3.6.1.4.1.2021.4.14.0',
34
+ 'memCached'=>'1.3.6.1.4.1.2021.4.15.0',
35
+
36
+ 'systemStats'=>'1.3.6.1.4.1.2021.11',
37
+ 'ssCpuRawUser'=>'1.3.6.1.4.1.2021.11.50.0',
38
+ 'ssCpuRawNice'=>'1.3.6.1.4.1.2021.11.51.0',
39
+ 'ssCpuRawSystem'=>'1.3.6.1.4.1.2021.11.52.0',
40
+ 'ssCpuRawIdle'=>'1.3.6.1.4.1.2021.11.53.0',
41
+ 'ssCpuRawWait'=>'1.3.6.1.4.1.2021.11.54.0',
42
+ 'ssCpuRawKernel'=>'1.3.6.1.4.1.2021.11.55.0',
43
+ 'ssCpuRawInterrupt'=>'1.3.6.1.4.1.2021.11.56.0',
44
+ 'ssIORawSent'=>'1.3.6.1.4.1.2021.11.57.0',
45
+ 'ssIORawReceived'=>'1.3.6.1.4.1.2021.11.58.0',
46
+ 'ssRawInterrupts'=>'1.3.6.1.4.1.2021.11.59.0',
47
+ 'ssRawContexts'=>'1.3.6.1.4.1.2021.11.60.0',
48
+
49
+ 'diskIOTable'=>'1.3.6.1.4.1.2021.13.15.1',
50
+ 'diskIOIndex'=>'1.3.6.1.4.1.2021.13.15.1.1.1',
51
+ 'diskIODevice'=>'1.3.6.1.4.1.2021.13.15.1.1.2',
52
+ 'diskIONRead'=>'1.3.6.1.4.1.2021.13.15.1.1.3',
53
+ 'diskIONWritten'=>'1.3.6.1.4.1.2021.13.15.1.1.4',
54
+ 'diskIOReads'=>'1.3.6.1.4.1.2021.13.15.1.1.5',
55
+ 'diskIOWrites'=>'1.3.6.1.4.1.2021.13.15.1.1.6',
56
+ 'diskIONReadX'=>'1.3.6.1.4.1.2021.13.15.1.1.12',
57
+ 'diskIONWrittenX'=>'1.3.6.1.4.1.2021.13.15.1.1.13'
58
+
59
+ GRI::DEFS.update 'ucd-la'=>{:cat=>:l,
60
+ :oid=>['laEntry'],
61
+ :tdb=>['l', 'laNames', 'laLoad'],
62
+ #:conv_val => Proc.new {|sym_oid, val|
63
+ # (sym_oid == 'laLoad') ? val.to_f : val
64
+ #},
65
+ :ds=>['laLoad,load,GAUGE,MAX,LINE1,#ff3333,load'],
66
+ :prop=>{:lastvalue=>'laLoad', :name=>'laNames'},
67
+ :list=>['Load Average', '%N,%L\r'],
68
+ :graph=>[['load average', 0]],
69
+ :composite=>['v', 't'],
70
+ },
71
+ 'ucd-pr'=>{:cat=>:proc,
72
+ :oid=>['prEntry'],
73
+ :tdb=>['p', 'prNames', 'prCount'],
74
+ :ds=>['prCount,running,GAUGE,MAX,LINE1,#ff3333,process'],
75
+ :prop=>{:lastvalue=>'prCount', :name=>'prNames'},
76
+ :list=>['Process Count', '%N,%L\r'],
77
+ :graph=>[['process count', 0]],
78
+ },
79
+ 'ucd-ext'=>{:cat=>:ext,
80
+ :oid=>['extEntry'],
81
+ :tdb=>['ucdext', 'extNames', 'extOutput'],
82
+ :ds=>['extOutput,output,GAUGE'],
83
+ :prop=>{:name=>'extNames'},
84
+ :list=>['Extensible Output', '%N,%L\r'],
85
+ :graph=>[['output', 0]],
86
+ },
87
+ 'ucd-dsk'=>{:cat=>:disk,
88
+ :oid=>['dskEntry'],
89
+ :tdb=>['d', 'dskPath', 'dskTotal', 'dskUsed', 'dskDevice'],
90
+ :fix_workhash=>proc {|wh|
91
+ for k, r in wh[:disk]
92
+ if r['dskTotalLow']
93
+ r['dskTotal'] = r['dskTotalHigh'].to_i * 4294967296 + r['dskTotalLow'].to_i
94
+ r['dskUsed'] = r['dskUsedHigh'].to_i * 4294967296 + r['dskUsedLow'].to_i
95
+ end
96
+ r['dskTotal'] = r['dskTotal'].to_i * 1024
97
+ r['dskUsed'] = r['dskUsed'].to_i * 1024
98
+ end
99
+ },
100
+ :ds=>['dskUsed,used,GAUGE,MAX,AREA,#40ff40'],
101
+ :prop=>{:ub=>'dskTotal', :lastvalue=>'dskUsed', :name=>'dskPath',
102
+ :description=>'dskDevice',
103
+ },
104
+ :list_text=>['Disk Used', '%N,%D,%1024L / %1024U\r'],
105
+ :graph=>[['"disk used"', 1024]],
106
+ },
107
+ 'ucd-memory'=>{:cat=>:ucdm,
108
+ :oid=>['memory'],
109
+ :fix_workhash=>lambda {|wh|
110
+ if (h = wh[:ucdm]) and (h0 = h[0])
111
+ ind = 0
112
+ h0.keys.sort.each {|key|
113
+ ind = {'memTotalSwap'=>0, 'memAvailSwap'=>1, 'memTotalReal'=>2,
114
+ 'memAvailReal'=>3, 'memTotalFree'=>4,
115
+ 'memShared'=>5, 'memBuffer'=>6, 'memCached'=>7}[key]
116
+ h[ind] = {'dummyName'=>key.dup, 'dummyFree'=>h0[key] * 1024} if ind
117
+ }
118
+ end
119
+ },
120
+ :ds=>['dummyFree,free,GAUGE,MAX,LINE1,#4020ff,memory'],
121
+ :prop=>{:lastvalue=>'dummyFree', :name=>'dummyName'},
122
+ :list=>['UCD Memory', '%N,%1024L\r'],
123
+ :graph=>[['bytes', 1024]],
124
+ :composite=>['t'],
125
+ },
126
+ 'ucd-diskio'=>{:cat=>:diskio, :puclass=>'UCDDiskIO',
127
+ :oid=>['diskIODevice', 'diskIOReads', 'diskIOWrites',
128
+ 'diskIONReadX', 'diskIONWrittenX'],
129
+ :tdb=>['diskIO', 'diskIODevice', 'diskIOReads', 'diskIOWrites',
130
+ 'diskIONReadX', 'diskIONWrittenX'],
131
+ :ds=>['diskIOReads,reads,DERIVE,MAX,AREA,#90f090',
132
+ 'diskIOWrites,writes,DERIVE,MAX,LINE1,#4020ff',
133
+ 'diskIONReadX,nread,DERIVE,MAX,AREA,#90f090',
134
+ 'diskIONWrittenX,nwritten,DERIVE,MAX,LINE1,#4020ff',],
135
+ :list=>['Disk I/O', '%N'],
136
+ :prop=>{:name=>'diskIODevice'},
137
+ :graph=>[['access', 0, [0, nil], /reads|writes/],
138
+ ['byte/sec', 1000, [0, nil], /nread|nwritten/],], #/
139
+ :composite=>['v', 't'],
140
+ },
141
+ 'ucd-systemstats'=>{
142
+ :oid=>['systemStats'],
143
+ :tdb=>['systemstats', 'ssCpuRawUser', 'ssCpuRawNice',
144
+ 'ssCpuRawSystem', 'ssCpuRawIdle', 'ssCpuRawWait',
145
+ 'ssCpuRawKernel', 'ssCpuRawInterrupt',
146
+ 'ssRawInterrupts', 'ssRawContexts',
147
+ 'ssIORawSent', 'ssIORawReceived',
148
+ ],
149
+ :ds=>[
150
+ 'ssCpuRawKernel,ssCpuRawKernel,DERIVE,MAX,AREA,#0000ff',
151
+ 'ssCpuRawSystem,ssCpuRawSystem,DERIVE,MAX,STACK,#0000ff',
152
+ 'ssCpuRawUser,ssCpuRawUser,DERIVE,MAX,STACK,#ff8080',
153
+ 'ssCpuRawWait,ssCpuRawWait,DERIVE,MAX,STACK,#ffff80',
154
+ 'ssCpuRawIdle,ssCpuRawIdle,DERIVE,MAX,STACK,#80ff80',
155
+
156
+ 'ssRawContexts,ssRawContexts,DERIVE,MAX,AREA,#ff8080',
157
+ 'ssRawInterrupts,ssRawInterrupts,DERIVE,MAX,STACK,#80ff80',
158
+
159
+ 'ssIORawReceived,ssIORawReceived,DERIVE,MAX,AREA,#80ff80',
160
+ 'ssIORawSent,ssIORawSent,DERIVE,MAX,STACK,#ff8080',
161
+ ],
162
+ :list=>['System Stats', '%N'],
163
+ :prop=>{:name=>'systemStats'},
164
+ :graph=>[['"CPU time"', 0, [0, nil], /Idle|Wait|User|System|Kernel/],
165
+ ['num', 0, [0, nil], /Interrupts|Contexts/],
166
+ ['blocks', 0, [0, nil], /Sent|Received/],
167
+ #['blocks', 0, nil, /ssIORaw/],
168
+ ],
169
+ }
170
+
171
+ GRI::Vendor::DEFS.update '2021'=>[
172
+ 'UCDavis',
173
+ {'ver'=>'2c', 'ifMIB'=>true,
174
+ 'ucd-la'=>true, 'ucd-dsk'=>true, 'ucd-pr'=>true, 'ucd-ext'=>true,
175
+ 'ucd-memory'=>true, 'ucd-systemstats'=>true,},
176
+ ]