Merge remote-tracking branch 'upstream/master'
[torrus-plus.git] / src / lib / Torrus / DevDiscover / EmpireSystemedge.pm
blob3a971f1cee28e0980b82460a3fce2568dd80ac72
1 # Copyright (C) 2003 Shawn Ferry
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software
15 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
17 # Shawn Ferry <sferry at sevenspace dot com> <lalartu at obscure dot org>
19 # there are lots of errors, but we cannot re-test the module yet.
20 ## no critic (Variables::ProhibitReusedNames)
22 package Torrus::DevDiscover::EmpireSystemedge;
24 use strict;
25 use warnings;
27 use Torrus::Log;
29 our $VERSION = 1.0;
32 $Torrus::DevDiscover::registry{'EmpireSystemedge'} = {
33 'sequence' => 500,
34 'checkdevtype' => \&checkdevtype,
35 'discover' => \&discover,
36 'buildConfig' => \&buildConfig
40 # define the oids that are needed to determine support,
41 # capabilities and information about the device
42 our %oiddef =
44 'empire' => '1.3.6.1.4.1.546',
46 'sysedge_opmode' => '1.3.6.1.4.1.546.1.1.1.17.0',
47 'empireSystemType' => '1.3.6.1.4.1.546.1.1.1.12.0',
49 # Empire Cpu Table
50 'empireCpuStatsTable' => '1.3.6.1.4.1.546.13.1.1',
51 'empireCpuStatsIndex' => '1.3.6.1.4.1.546.13.1.1.1',
52 'empireCpuStatsDescr' => '1.3.6.1.4.1.546.13.1.1.2',
54 # Empire Cpu Totals
55 'empireCpuTotalWait' => '1.3.6.1.4.1.546.13.5.0',
57 # Empire Swap Counters
58 'empireNumPageSwapIns' => '1.3.6.1.4.1.546.1.1.7.8.18.0',
60 # Empire Load Average
61 'empireLoadAverage' => '1.3.6.1.4.1.546.1.1.7.8.26.0',
63 # Empire Device Table and Oids
64 'empireDevTable' => '1.3.6.1.4.1.546.1.1.1.7.1',
65 'empireDevIndex' => '1.3.6.1.4.1.546.1.1.1.7.1.1',
66 'empireDevMntPt' => '1.3.6.1.4.1.546.1.1.1.7.1.3',
67 'empireDevBsize' => '1.3.6.1.4.1.546.1.1.1.7.1.4',
68 'empireDevTblks' => '1.3.6.1.4.1.546.1.1.1.7.1.5',
69 'empireDevType' => '1.3.6.1.4.1.546.1.1.1.7.1.10',
70 'empireDevDevice' => '1.3.6.1.4.1.546.1.1.1.7.1.2',
72 # Empire Device Stats Table and Oids
73 'empireDiskStatsTable' => '1.3.6.1.4.1.546.12.1.1',
74 'empireDiskStatsIndex' => '1.3.6.1.4.1.546.12.1.1.1',
75 'empireDiskStatsHostIndex' => '1.3.6.1.4.1.546.12.1.1.9',
76 'hrDeviceDescr' => '1.3.6.1.2.1.25.3.2.1.3',
78 # Empire Performance and related oids
79 'empirePerformance' => '1.3.6.1.4.1.546.1.1.7',
80 'empireNumTraps' => '1.3.6.1.4.1.546.1.1.7.8.15.0',
82 # Empire Process Stats
83 'empireRunq' => '1.3.6.1.4.1.546.1.1.7.8.4.0',
84 'empireDiskWait' => '1.3.6.1.4.1.546.1.1.7.8.5.0',
85 'empirePageWait' => '1.3.6.1.4.1.546.1.1.7.8.6.0',
86 'empireSwapActive' => '1.3.6.1.4.1.546.1.1.7.8.7.0',
87 'empireSleepActive' => '1.3.6.1.4.1.546.1.1.7.8.8.0',
89 # Empire Extensions NTREGPERF
90 'empireNTREGPERF' => '1.3.6.1.4.1.546.5.7',
92 'empireDnlc' => '1.3.6.1.4.1.546.1.1.11',
93 'empireRpc' => '1.3.6.1.4.1.546.8.1',
94 'empireNfs' => '1.3.6.1.4.1.546.8.2',
95 'empireMon' => '1.3.6.1.4.1.546.6.1.1',
96 'empirePmon' => '1.3.6.1.4.1.546.15.1.1',
97 'empireLog' => '1.3.6.1.4.1.546.11.1.1',
100 our %storageDescTranslate = ( '/' => {'subtree' => 'root' } );
102 # template => 1 if specific templates for the name explicitly exist,
103 # othewise the template used is based on ident
105 # Generally only hosts that have been directly observed should have
106 # templates, the "unix" and "nt" templates are generally aiming for the
107 # lowest common denominator.
109 # templates also need to be added to devdiscover-config.pl
111 # Templated "names" require a specific template for each of the
112 # following base template types:
113 # <template name="empire-swap-counters-NAME">
114 # <template name="empire-counters-NAME">
115 # <template name="empire-total-cpu-NAME">
116 # <template name="empire-total-cpu-raw-NAME">
117 # <template name="empire-cpu-NAME">
118 # <template name="empire-cpu-raw-NAME">
119 # <template name="empire-disk-stats-NAME">
121 # i.e.
122 # <template name="empire-swap-counters-solarisSparc">
123 # <template name="empire-counters-solarisSparc">
124 # <template name="empire-total-cpu-solarisSparc">
125 # <template name="empire-total-cpu-raw-solarisSparc">
126 # <template name="empire-cpu-solarisSparc">
127 # <template name="empire-cpu-raw-solarisSparc">
128 # <template name="empire-disk-stats-solarisSparc">
132 our %osTranslate =
134 1 => { 'name' => 'unknown', 'ident' => 'unknown', 'template' => 0, },
135 2 => { 'name' => 'solarisSparc', 'ident' => 'unix', 'template' => 1, },
136 3 => { 'name' => 'solarisIntel', 'ident' => 'unix', 'template' => 0, },
137 4 => { 'name' => 'solarisPPC', 'ident' => 'unix', 'template' => 0, },
138 5 => { 'name' => 'sunosSparc', 'ident' => 'unix', 'template' => 0, },
139 6 => { 'name' => 'hpux9Parisc', 'ident' => 'unix', 'template' => 0, },
140 7 => { 'name' => 'hpux10Parisc', 'ident' => 'unix', 'template' => 0, },
141 8 => { 'name' => 'nt351Intel', 'ident' => 'nt', 'template' => 0, },
142 9 => { 'name' => 'nt351Alpha', 'ident' => 'nt', 'template' => 0, },
143 10 => { 'name' => 'nt40Intel', 'ident' => 'nt', 'template' => 1, },
144 11 => { 'name' => 'nt40Alpha', 'ident' => 'nt', 'template' => 0, },
145 12 => { 'name' => 'irix62Mips', 'ident' => 'unix', 'template' => 0, },
146 13 => { 'name' => 'irix63Mips', 'ident' => 'unix', 'template' => 0, },
147 14 => { 'name' => 'irix64Mips', 'ident' => 'unix', 'template' => 0, },
148 15 => { 'name' => 'aix41RS6000', 'ident' => 'unix', 'template' => 0, },
149 16 => { 'name' => 'aix42RS6000', 'ident' => 'unix', 'template' => 0, },
150 17 => { 'name' => 'aix43RS6000', 'ident' => 'unix', 'template' => 0, },
151 18 => { 'name' => 'irix65Mips', 'ident' => 'unix', 'template' => 0, },
152 19 => { 'name' => 'digitalUNIX', 'ident' => 'unix', 'template' => 0, },
153 20 => { 'name' => 'linuxIntel', 'ident' => 'unix', 'template' => 1, },
154 21 => { 'name' => 'hpux11Parisc', 'ident' => 'unix', 'template' => 0, },
155 22 => { 'name' => 'nt50Intel', 'ident' => 'nt', 'template' => 1, },
156 23 => { 'name' => 'nt50Alpha', 'ident' => 'nt', 'template' => 0, },
157 25 => { 'name' => 'aix5RS6000', 'ident' => 'unix', 'template' => 1, },
158 26 => { 'name' => 'nt52Intel', 'ident' => 'nt', 'template' => 0, },
161 # Solaris Virtual Interface Filtering
162 our $interfaceFilter;
163 my %solarisVirtualInterfaceFilter;
165 %solarisVirtualInterfaceFilter = (
166 'Virtual Interface (iana 62)' => {
167 'ifType' => 62, # Obsoleted
168 'ifDescr' => '^\w+:\d+$', # Virtual Interface in the form xxx:1
169 # e.g. eri:1 eri1:2
172 'Virtual Interface' => {
173 'ifType' => 6,
174 'ifDescr' => '^\w+:\d+$', # Virtual Interface in the form xxx:1
175 # e.g. eri:1 eri1:2
179 our $storageGraphTop;
180 our $storageHiMark;
181 our $shortTemplate;
182 our $longTemplate;
184 sub checkdevtype
186 my $dd = shift;
187 my $devdetails = shift;
189 my $session = $dd->session();
190 my $data = $devdetails->data();
192 if( not $dd->checkSnmpTable( 'empire' ) )
194 return 0;
197 my $result = $dd->retrieveSnmpOIDs( 'sysedge_opmode',
198 'empireSystemType' );
199 if( $result->{'sysedge_opmode'} == 2 )
201 Error("Sysedge Agent NOT Licensed");
202 $devdetails->setCap('SysedgeNotLicensed');
205 # Empire OS Type (Needed here for interface filtering)
207 my $empireOsType = $result->{'empireSystemType'};
208 if( defined($empireOsType) and $empireOsType > 0 )
210 $devdetails->setCap('EmpireSystemedge::' .
211 $osTranslate{$empireOsType}{ident} );
213 $devdetails->{'os_ident'} = $osTranslate{$empireOsType}{ident};
216 $devdetails->setCap('EmpireSystemedge::' .
217 $osTranslate{$empireOsType}{name} );
219 $devdetails->{'os_name'} = $osTranslate{$empireOsType}{name};
221 $devdetails->{'os_name_template'} =
222 $osTranslate{$empireOsType}{template};
225 # Exclude Virtual Interfaces on Solaris
226 if( $devdetails->{'os_name'} =~ /solaris/i ) {
228 $interfaceFilter = \%solarisVirtualInterfaceFilter;
229 &Torrus::DevDiscover::RFC2863_IF_MIB::addInterfaceFilter
230 ($devdetails, $interfaceFilter);
233 return 1;
237 sub discover
239 my $dd = shift;
240 my $devdetails = shift;
242 my $data = $devdetails->data();
243 my $session = $dd->session();
246 if( $dd->checkSnmpOID('empireCpuTotalWait') )
248 $devdetails->setCap('EmpireSystemedge::CpuTotal::Wait');
251 # Empire Dev Stats Table
253 my $empireDiskStatsTable =
254 $session->get_table( -baseoid =>
255 $dd->oiddef('empireDiskStatsTable') );
257 my $hrDeviceDescr = $session->get_table( -baseoid =>
258 $dd->oiddef('hrDeviceDescr') );
260 if( defined($empireDiskStatsTable) and defined($hrDeviceDescr) )
262 $devdetails->setCap('EmpireSystemedge::DiskStats');
263 $devdetails->storeSnmpVars( $empireDiskStatsTable );
264 $devdetails->storeSnmpVars( $hrDeviceDescr );
266 my $ref= {'indices' => []};
267 $data->{'empireDiskStats'} = $ref;
269 for my $INDEX
270 ( $devdetails->
271 getSnmpIndices( $dd->oiddef('empireDiskStatsIndex') ) )
273 next if( $INDEX < 1 );
275 my $hrindex =
276 $devdetails->snmpVar( $dd->oiddef('empireDiskStatsHostIndex') .
277 '.' . $INDEX );
279 next if( $hrindex < 1 );
281 push( @{ $ref->{'indices'} }, $INDEX );
283 my $descr = $devdetails->snmpVar($dd->oiddef('hrDeviceDescr') .
284 '.' . $hrindex );
286 my $ref = { 'param' => {}, 'templates' => [] };
287 $data->{'empireDiskStats'}{$INDEX} = $ref;
288 my $param = $ref->{'param'};
291 $param->{'comment'} = $descr;
293 $param->{'HRINDEX'} = $hrindex;
295 if ( not defined $descr )
297 $descr = "Index $hrindex";
299 $param->{'disk-stats-description'} = $descr;
301 $descr =~ s/^\///;
302 $descr =~ s/\W/_/g;
303 $param->{'disk-stats-nick'} = $descr;
306 } # end empireDiskStatsTable
308 # Empire Dev Table
310 my $empireDevTable = $session->get_table( -baseoid =>
311 $dd->oiddef('empireDevTable') );
313 if( defined( $empireDevTable ) )
316 $devdetails->setCap('EmpireSystemedge::Devices');
317 $devdetails->storeSnmpVars( $empireDevTable );
319 my $ref= {};
320 $data->{'empireDev'} = $ref;
322 for my $INDEX
323 ( $devdetails->getSnmpIndices($dd->oiddef('empireDevIndex') ) )
325 next if( $INDEX < 1 );
328 my $type = $devdetails->snmpVar( $dd->oiddef('empireDevType') .
329 '.' . $INDEX );
331 my $descr = $devdetails->snmpVar($dd->oiddef('empireDevMntPt') .
332 '.' . $INDEX );
334 my $bsize = $devdetails->snmpVar($dd->oiddef('empireDevBsize') .
335 '.' . $INDEX );
337 # NFS has a block size of 0, it will be skipped
338 if( $bsize and defined( $descr ) )
340 push( @{ $data->{'empireDev'}->{'indices'} }, $INDEX);
342 my $ref = { 'param' => {}, 'templates' => [] };
343 $data->{'empireDev'}{$INDEX} = $ref;
344 my $param = $ref->{'param'};
346 $param->{'storage-description'} = $descr;
347 $param->{'storage-device'} =
348 $devdetails->snmpVar($dd->oiddef('empireDevDevice')
349 . '.' . $INDEX );
351 my $comment = $type;
352 if( $descr =~ /^\// )
354 $comment .= ' (' . $descr . ')';
356 $param->{'comment'} = $comment;
358 if( $storageDescTranslate{$descr}{'subtree'} )
360 $descr = $storageDescTranslate{$descr}{'subtree'};
362 $descr =~ s/^\///;
363 $descr =~ s/\W/_/g;
364 $param->{'storage-nick'} = $descr;
366 my $units = $bsize;
368 $param->{'collector-scale'} = sprintf('%d,*', $units);
370 my $size =
371 $devdetails->snmpVar
372 ($dd->oiddef('empireDevTblks') . '.' . $INDEX);
374 if( $size )
376 if( $storageGraphTop > 0 )
378 $param->{'graph-upper-limit'} =
379 sprintf('%e',
380 $units * $size * $storageGraphTop / 100 );
383 if( $storageHiMark > 0 )
385 $param->{'upper-limit'} =
386 sprintf('%e',
387 $units * $size * $storageHiMark / 100 );
394 $devdetails->clearCap( 'hrStorage' );
396 } # end empireDevTable
399 # Empire Per - Cpu Table
401 my $empireCpuStatsTable =
402 $session->get_table( -baseoid =>
403 $dd->oiddef('empireCpuStatsTable') );
405 if( defined( $empireCpuStatsTable ) )
407 $devdetails->setCap('EmpireSystemedge::CpuStats');
408 $devdetails->storeSnmpVars( $empireCpuStatsTable );
410 my $ref= {};
411 $data->{'empireCpuStats'} = $ref;
413 for my $INDEX
414 ( $devdetails->
415 getSnmpIndices( $dd->oiddef('empireCpuStatsIndex') ) )
417 next if( $INDEX < 1 );
419 push( @{ $ref->{'indices'} }, $INDEX);
421 my $descr =
422 $devdetails->snmpVar( $dd->oiddef('empireCpuStatsDescr') .
423 '.' . $INDEX );
425 my $ref = { 'param' => {}, 'templates' => [] };
426 $data->{'empireCpuStats'}{$INDEX} = $ref;
427 my $param = $ref->{'param'};
429 $param->{'cpu'} = 'CPU' . $INDEX;
430 $param->{'descr'} = $descr;
431 $param->{'INDEX'} = $INDEX;
432 $param->{'comment'} = $descr . ' (' . 'CPU ' . $INDEX . ')';
436 # Empire Load Average
438 if( $dd->checkSnmpOID('empireLoadAverage') )
440 $devdetails->setCap('EmpireSystemedge::LoadAverage');
443 # Empire Swap Counters
445 if( $dd->checkSnmpOID('empireNumPageSwapIns') )
447 $devdetails->setCap('EmpireSystemedge::SwapCounters');
450 # Empire Counter Traps
452 if( $dd->checkSnmpOID('empireNumTraps') )
454 $devdetails->setCap('EmpireSystemedge::CounterTraps');
457 # Empire Performance
459 my $empirePerformance =
460 $session->get_table( -baseoid => $dd->oiddef('empirePerformance') );
462 if( defined( $empirePerformance ) )
464 $devdetails->setCap('EmpireSystemedge::Performance');
465 $devdetails->storeSnmpVars( $empirePerformance );
467 if( defined $devdetails->snmpVar($dd->oiddef('empireRunq') ) )
469 $devdetails->setCap('EmpireSystemedge::RunQ');
472 if( defined $devdetails->snmpVar($dd->oiddef('empireDiskWait') ) )
474 $devdetails->setCap('EmpireSystemedge::DiskWait');
477 if( defined $devdetails->snmpVar($dd->oiddef('empirePageWait') ) )
479 $devdetails->setCap('EmpireSystemedge::PageWait');
482 if( defined $devdetails->snmpVar($dd->oiddef('empireSwapActive') ) )
484 $devdetails->setCap('EmpireSystemedge::SwapActive');
487 if( defined $devdetails->snmpVar($dd->oiddef('empireSleepActive') ) )
489 $devdetails->setCap('EmpireSystemedge::SleepActive');
493 my $empireNTREGPERF =
494 $session->get_table( -baseoid => $dd->oiddef('empireNTREGPERF') );
495 if( defined $empireNTREGPERF )
497 $devdetails->setCap('empireNTREGPERF');
498 $devdetails->storeSnmpVars( $empireNTREGPERF );
500 my $ref = {};
501 $data->{'empireNTREGPERF'} = $ref;
502 for my $INDEX
503 ( $devdetails->getSnmpIndices($dd->oiddef('empireNTREGPERF') ) )
505 # This is all configured on a per site basis.
506 # The xml will be site specific
507 push( @{ $ref->{'indices'} }, $INDEX);
508 my $template = {};
509 $Torrus::ConfigBuilder::templateRegistry->
510 {'EmpireSystemedge::NTREGPERF_' . $INDEX} = $template;
511 $template->{'name'}='EmpireSystemedge::NTREGPERF_' . $INDEX;
512 $template->{'source'}='vendor/empire.systemedge.ntregperf.xml';
517 #NOT CONFIGURED## Empire DNLC
518 #NOT CONFIGURED# my $empireDnlc = $session->get_table( -baseoid =>
519 #NOT CONFIGURED# $dd->oiddef('empireDnlc') );
520 #NOT CONFIGURED# if( defined $empirePerformance )
521 #NOT CONFIGURED# {
522 #NOT CONFIGURED# # don't do this until we use the data
523 #NOT CONFIGURED# #$devdetails->setCap('empirednlc');
524 #NOT CONFIGURED# #$devdetails->storeSnmpVars( $empireDnlc );
525 #NOT CONFIGURED# }
526 #NOT CONFIGURED#
527 #NOT CONFIGURED## Empire RPC
528 #NOT CONFIGURED# my $empireRpc = $session->get_table( -baseoid =>
529 #NOT CONFIGURED# $dd->oiddef('empireRpc') );
530 #NOT CONFIGURED# if( defined $empireRpc )
531 #NOT CONFIGURED# {
532 #NOT CONFIGURED# # don't do this until we use the data
533 #NOT CONFIGURED# #$devdetails->setCap('empirerpc');
534 #NOT CONFIGURED# #$devdetails->storeSnmpVars( $empireRpc );
535 #NOT CONFIGURED# }
536 #NOT CONFIGURED#
537 #NOT CONFIGURED## Empire NFS
538 #NOT CONFIGURED# my $empireNfs = $session->get_table( -baseoid =>
539 #NOT CONFIGURED# $dd->oiddef('empireNfs') );
540 #NOT CONFIGURED# if( defined $empireRpc )
541 #NOT CONFIGURED# {
542 #NOT CONFIGURED# # don't do this until we use the data
543 #NOT CONFIGURED# #$devdetails->setCap('empirenfs');
544 #NOT CONFIGURED# #$devdetails->storeSnmpVars( $empireNfs );
545 #NOT CONFIGURED# }
546 #NOT CONFIGURED#
547 #NOT CONFIGURED## Empire Mon Entries
548 #NOT CONFIGURED# my $empireMon = $session->get_table( -baseoid =>
549 #NOT CONFIGURED# $dd->oiddef('empireMon') );
550 #NOT CONFIGURED# if( ref( $empireMon ) )
551 #NOT CONFIGURED# {
552 #NOT CONFIGURED# # don't do this until we use the data
553 #NOT CONFIGURED# #$devdetails->setCap('empiremon');
554 #NOT CONFIGURED# #$devdetails->storeSnmpVars( $empireMon );
555 #NOT CONFIGURED# }
556 #NOT CONFIGURED#
557 #NOT CONFIGURED## Empire Process Monitor Entries
558 #NOT CONFIGURED# my $empirePmon = $session->get_table( -baseoid =>
559 #NOT CONFIGURED# $dd->oiddef('empirePmon') );
560 #NOT CONFIGURED# if( ref( $empirePmon ) )
561 #NOT CONFIGURED# {
562 #NOT CONFIGURED# # don't do this until we use the data
563 #NOT CONFIGURED# #$devdetails->setCap('empirePmon');
564 #NOT CONFIGURED# #$devdetails->storeSnmpVars( $empirePmon );
565 #NOT CONFIGURED# }
566 #NOT CONFIGURED#
567 #NOT CONFIGURED## Empire Log Monitor Entries
568 #NOT CONFIGURED# my $empireLog = $session->get_table( -baseoid =>
569 #NOT CONFIGURED# $dd->oiddef('empireLog') );
570 #NOT CONFIGURED# if( ref( $empireLog ) )
571 #NOT CONFIGURED# {
572 #NOT CONFIGURED# # don't do this until we use the data
573 #NOT CONFIGURED# #$devdetails->setCap('empireLog');
574 #NOT CONFIGURED# #$devdetails->storeSnmpVars( $empireLog );
575 #NOT CONFIGURED# }
577 return 1;
581 sub buildConfig
583 my $devdetails = shift;
584 my $cb = shift;
585 my $devNode = shift;
586 my $data = $devdetails->data();
588 my $mononlyTree = "Mon_Only";
589 my $monParam = {
590 'precedence' => '-100000',
591 'comment' => 'Place to Stash Monitoring Data ',
592 'hidden' => 'yes',
595 my $monNode = $cb->addSubtree( $devNode, $mononlyTree, $monParam );
596 $cb->addTemplateApplication
597 ( $monNode, 'EmpireSystemedge::sysedge_opmode' );
599 if( $devdetails->hasCap('SysedgeNotLicensed') )
601 return 1;
604 my $os_target;
605 if( $devdetails->{'os_name_template'} )
607 $os_target = $devdetails->{'os_name'};
609 else
611 $os_target = $devdetails->{'os_ident'};
612 Warn("Using Generic OS Templates '$os_target' for os: "
613 . $devdetails->{'os_name'} );
616 my $subtreeName = "Storage";
618 my $param = {
619 'precedence' => '-1000',
620 'comment' => 'Storage Information',
623 my $StorageNode = $cb->addSubtree( $devNode, $subtreeName, $param );
625 # Empire Devices(Storage)
626 if( $devdetails->hasCap('EmpireSystemedge::Devices') )
628 my $subtreeName = "VolumeInfo";
630 my $param = {
631 'precedence' => '-1000',
632 'comment' => 'Physical/Logical Volume Information',
635 my $subtreeNode =
636 $cb->addSubtree( $StorageNode, $subtreeName, $param,
637 [ 'EmpireSystemedge::empire-device-subtree' ] );
639 for my $INDEX ( sort {$a<=>$b} @{$data->{'empireDev'}{'indices'}} )
641 my $ref = $data->{'empireDev'}{$INDEX};
643 # Display in index order
644 $ref->{'param'}->{'precedence'} = sprintf("%d", 2000 - $INDEX);
646 $cb->addSubtree( $subtreeNode, $ref->{'param'}{'storage-nick'},
647 $ref->{'param'},
648 [ 'EmpireSystemedge::empire-device' ] );
652 # Empire Device Stats
653 if( $devdetails->hasCap('EmpireSystemedge::DiskStats') )
655 my $subtreeName = "DiskInfo";
657 my $param = {
658 'precedence' => '-1000',
659 'comment' => 'Physical/Logical Disk Information',
662 my $subtreeNode =
663 $cb->addSubtree( $StorageNode, $subtreeName, $param,
664 ['EmpireSystemedge::empire-disk-stats-subtree']);
666 for my $INDEX
667 ( sort {$a<=>$b} @{$data->{'empireDiskStats'}{'indices'}} )
669 my $ref = $data->{'empireDiskStats'}{$INDEX};
670 # Display in index order
671 $ref->{'param'}->{'precedence'} = sprintf("%d", 1000 - $INDEX);
673 $cb->addSubtree( $subtreeNode, $ref->{'param'}{'disk-stats-nick'},
674 $ref->{'param'},
675 [ 'EmpireSystemedge::empire-disk-stats-' .
676 $os_target, ] );
681 # Performance Subtree
682 $subtreeName= "System_Performance";
684 $param = {
685 'precedence' => '-900',
686 'comment' => 'System, CPU and memory statistics'
689 my @perfTemplates = ();
691 # Empire Load Average
692 if( $devdetails->hasCap('EmpireSystemedge::LoadAverage') )
694 push( @perfTemplates, 'EmpireSystemedge::empire-load' );
697 # Empire Performance
698 if( $devdetails->hasCap('EmpireSystemedge::Performance') )
700 push( @perfTemplates, 'EmpireSystemedge::empire-memory' );
703 push( @perfTemplates,
704 'EmpireSystemedge::empire-counters-' . $os_target,
705 'EmpireSystemedge::empire-swap-counters-' . $os_target,
706 'EmpireSystemedge::empire-total-cpu-' . $os_target,
707 'EmpireSystemedge::empire-total-cpu-raw-' . $os_target,
710 if( $devdetails->hasCap('EmpireSystemedge::RunQ') )
712 push( @perfTemplates, 'EmpireSystemedge::empire-runq' );
715 if( $devdetails->hasCap('EmpireSystemedge::DiskWait') )
717 push( @perfTemplates, 'EmpireSystemedge::empire-diskwait' );
720 if( $devdetails->hasCap('EmpireSystemedge::PageWait') )
722 push( @perfTemplates, 'EmpireSystemedge::empire-pagewait' );
725 if( $devdetails->hasCap('EmpireSystemedge::SwapActive') )
727 push( @perfTemplates, 'EmpireSystemedge::empire-swapactive' );
730 if( $devdetails->hasCap('EmpireSystemedge::SleepActive') )
732 push( @perfTemplates, 'EmpireSystemedge::empire-sleepactive' );
735 my $PerformanceNode = $cb->addSubtree( $devNode, $subtreeName,
736 $param, \@perfTemplates );
738 # Empire CPU Stats
739 if( $devdetails->hasCap('EmpireSystemedge::CpuStats') )
741 my $ref = $data->{'empireCpuStats'};
743 my $subtreeName = "CpuStats";
745 my $param = {
746 'precedence' => '-1100',
747 'comment' => 'Per-CPU Statistics',
750 my $subtreeNode =
751 $cb->addSubtree( $PerformanceNode, $subtreeName, $param,
752 [ 'EmpireSystemedge::empire-cpu-subtree' ] );
754 for my $INDEX
755 ( sort {$a<=>$b} @{$data->{'empireCpuStats'}{'indices'} } )
757 my $ref = $data->{'empireCpuStats'}{$INDEX};
759 # Display in index order
760 $ref->{'param'}->{'precedence'} = sprintf("%d", 1000 - $INDEX);
762 $cb->addSubtree
763 ( $subtreeNode, $ref->{'param'}{'cpu'},
764 $ref->{'param'},
765 ['EmpireSystemedge::empire-cpu-' . $os_target,
766 'EmpireSystemedge::empire-cpu-raw-' . $os_target],
771 if( $devdetails->hasCap('empireNTREGPERF') )
773 Debug("NTREGPERF");
774 my $ntregTree = "NT_REG_PERF";
775 my $ntregParam = {
776 'precedence' => '-10000',
777 'comment' => 'NT Reg Perf',
779 my $ntregnode =
780 $cb->addSubtree( $devNode, $ntregTree, $ntregParam );
782 for my $INDEX
783 ( sort {$a<=>$b} @{$data->{'empireNTREGPERF'}{'indices'} } )
785 my $ref = $data->{'empireNTREGPERF'}{$INDEX};
786 $cb->addTemplateApplication
787 ( $ntregnode, 'EmpireSystemedge::NTREGPERF_' . $INDEX );
793 return;
800 # Local Variables:
801 # mode: perl
802 # indent-tabs-mode: nil
803 # perl-indent-level: 4
804 # End: