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
;
32 $Torrus::DevDiscover
::registry
{'EmpireSystemedge'} = {
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
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',
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',
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',
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">
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">
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
172 'Virtual Interface' => {
174 'ifDescr' => '^\w+:\d+$', # Virtual Interface in the form xxx:1
179 our $storageGraphTop;
187 my $devdetails = shift;
189 my $session = $dd->session();
190 my $data = $devdetails->data();
192 if( not $dd->checkSnmpTable( 'empire' ) )
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);
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;
271 getSnmpIndices
( $dd->oiddef('empireDiskStatsIndex') ) )
273 next if( $INDEX < 1 );
276 $devdetails->snmpVar( $dd->oiddef('empireDiskStatsHostIndex') .
279 next if( $hrindex < 1 );
281 push( @
{ $ref->{'indices'} }, $INDEX );
283 my $descr = $devdetails->snmpVar($dd->oiddef('hrDeviceDescr') .
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;
303 $param->{'disk-stats-nick'} = $descr;
306 } # end empireDiskStatsTable
310 my $empireDevTable = $session->get_table( -baseoid
=>
311 $dd->oiddef('empireDevTable') );
313 if( defined( $empireDevTable ) )
316 $devdetails->setCap('EmpireSystemedge::Devices');
317 $devdetails->storeSnmpVars( $empireDevTable );
320 $data->{'empireDev'} = $ref;
323 ( $devdetails->getSnmpIndices($dd->oiddef('empireDevIndex') ) )
325 next if( $INDEX < 1 );
328 my $type = $devdetails->snmpVar( $dd->oiddef('empireDevType') .
331 my $descr = $devdetails->snmpVar($dd->oiddef('empireDevMntPt') .
334 my $bsize = $devdetails->snmpVar($dd->oiddef('empireDevBsize') .
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')
352 if( $descr =~ /^\// )
354 $comment .= ' (' . $descr . ')';
356 $param->{'comment'} = $comment;
358 if( $storageDescTranslate{$descr}{'subtree'} )
360 $descr = $storageDescTranslate{$descr}{'subtree'};
364 $param->{'storage-nick'} = $descr;
368 $param->{'collector-scale'} = sprintf('%d,*', $units);
372 ($dd->oiddef('empireDevTblks') . '.' . $INDEX);
376 if( $storageGraphTop > 0 )
378 $param->{'graph-upper-limit'} =
380 $units * $size * $storageGraphTop / 100 );
383 if( $storageHiMark > 0 )
385 $param->{'upper-limit'} =
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 );
411 $data->{'empireCpuStats'} = $ref;
415 getSnmpIndices
( $dd->oiddef('empireCpuStatsIndex') ) )
417 next if( $INDEX < 1 );
419 push( @
{ $ref->{'indices'} }, $INDEX);
422 $devdetails->snmpVar( $dd->oiddef('empireCpuStatsDescr') .
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');
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 );
501 $data->{'empireNTREGPERF'} = $ref;
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);
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 )
522 #NOT CONFIGURED# # don't do this until we use the data
523 #NOT CONFIGURED# #$devdetails->setCap('empirednlc');
524 #NOT CONFIGURED# #$devdetails->storeSnmpVars( $empireDnlc );
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 )
532 #NOT CONFIGURED# # don't do this until we use the data
533 #NOT CONFIGURED# #$devdetails->setCap('empirerpc');
534 #NOT CONFIGURED# #$devdetails->storeSnmpVars( $empireRpc );
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 )
542 #NOT CONFIGURED# # don't do this until we use the data
543 #NOT CONFIGURED# #$devdetails->setCap('empirenfs');
544 #NOT CONFIGURED# #$devdetails->storeSnmpVars( $empireNfs );
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 ) )
552 #NOT CONFIGURED# # don't do this until we use the data
553 #NOT CONFIGURED# #$devdetails->setCap('empiremon');
554 #NOT CONFIGURED# #$devdetails->storeSnmpVars( $empireMon );
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 ) )
562 #NOT CONFIGURED# # don't do this until we use the data
563 #NOT CONFIGURED# #$devdetails->setCap('empirePmon');
564 #NOT CONFIGURED# #$devdetails->storeSnmpVars( $empirePmon );
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 ) )
572 #NOT CONFIGURED# # don't do this until we use the data
573 #NOT CONFIGURED# #$devdetails->setCap('empireLog');
574 #NOT CONFIGURED# #$devdetails->storeSnmpVars( $empireLog );
583 my $devdetails = shift;
586 my $data = $devdetails->data();
588 my $mononlyTree = "Mon_Only";
590 'precedence' => '-100000',
591 'comment' => 'Place to Stash Monitoring Data ',
595 my $monNode = $cb->addSubtree( $devNode, $mononlyTree, $monParam );
596 $cb->addTemplateApplication
597 ( $monNode, 'EmpireSystemedge::sysedge_opmode' );
599 if( $devdetails->hasCap('SysedgeNotLicensed') )
605 if( $devdetails->{'os_name_template'} )
607 $os_target = $devdetails->{'os_name'};
611 $os_target = $devdetails->{'os_ident'};
612 Warn
("Using Generic OS Templates '$os_target' for os: "
613 . $devdetails->{'os_name'} );
616 my $subtreeName = "Storage";
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";
631 'precedence' => '-1000',
632 'comment' => 'Physical/Logical Volume Information',
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'},
648 [ 'EmpireSystemedge::empire-device' ] );
652 # Empire Device Stats
653 if( $devdetails->hasCap('EmpireSystemedge::DiskStats') )
655 my $subtreeName = "DiskInfo";
658 'precedence' => '-1000',
659 'comment' => 'Physical/Logical Disk Information',
663 $cb->addSubtree( $StorageNode, $subtreeName, $param,
664 ['EmpireSystemedge::empire-disk-stats-subtree']);
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'},
675 [ 'EmpireSystemedge::empire-disk-stats-' .
681 # Performance Subtree
682 $subtreeName= "System_Performance";
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' );
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 );
739 if( $devdetails->hasCap('EmpireSystemedge::CpuStats') )
741 my $ref = $data->{'empireCpuStats'};
743 my $subtreeName = "CpuStats";
746 'precedence' => '-1100',
747 'comment' => 'Per-CPU Statistics',
751 $cb->addSubtree( $PerformanceNode, $subtreeName, $param,
752 [ 'EmpireSystemedge::empire-cpu-subtree' ] );
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);
763 ( $subtreeNode, $ref->{'param'}{'cpu'},
765 ['EmpireSystemedge::empire-cpu-' . $os_target,
766 'EmpireSystemedge::empire-cpu-raw-' . $os_target],
771 if( $devdetails->hasCap('empireNTREGPERF') )
774 my $ntregTree = "NT_REG_PERF";
776 'precedence' => '-10000',
777 'comment' => 'NT Reg Perf',
780 $cb->addSubtree( $devNode, $ntregTree, $ntregParam );
783 ( sort {$a<=>$b} @
{$data->{'empireNTREGPERF'}{'indices'} } )
785 my $ref = $data->{'empireNTREGPERF'}{$INDEX};
786 $cb->addTemplateApplication
787 ( $ntregnode, 'EmpireSystemedge::NTREGPERF_' . $INDEX );
802 # indent-tabs-mode: nil
803 # perl-indent-level: 4