per-agent configuration of batch processors, #71837
[freeside.git] / torrus / perllib / Torrus / DevDiscover / EmpireSystemedge.pm
1 #  Copyright (C) 2003 Shawn Ferry
2 #
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.
7 #
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.
12 #
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.
16
17 # $Id: EmpireSystemedge.pm,v 1.1 2010-12-27 00:03:55 ivan Exp $
18 # Shawn Ferry <sferry at sevenspace dot com> <lalartu at obscure dot org>
19
20 package Torrus::DevDiscover::EmpireSystemedge;
21
22 use strict;
23 use Torrus::Log;
24
25
26 $Torrus::DevDiscover::registry{'EmpireSystemedge'} = {
27     'sequence'     => 500,
28     'checkdevtype' => \&checkdevtype,
29     'discover'     => \&discover,
30     'buildConfig'  => \&buildConfig
31     };
32
33
34 # define the oids that are needed to determine support,
35 # capabilities and information about the device
36 our %oiddef =
37     (
38      'empire'                   => '1.3.6.1.4.1.546',
39
40      'sysedge_opmode'           => '1.3.6.1.4.1.546.1.1.1.17.0',
41      'empireSystemType'         => '1.3.6.1.4.1.546.1.1.1.12.0',
42
43      # Empire Cpu Table
44      'empireCpuStatsTable'      => '1.3.6.1.4.1.546.13.1.1',
45      'empireCpuStatsIndex'      => '1.3.6.1.4.1.546.13.1.1.1',
46      'empireCpuStatsDescr'      => '1.3.6.1.4.1.546.13.1.1.2',
47
48      # Empire Cpu Totals
49      'empireCpuTotalWait'       => '1.3.6.1.4.1.546.13.5.0',
50
51      # Empire Swap Counters
52      'empireNumPageSwapIns'      => '1.3.6.1.4.1.546.1.1.7.8.18.0',
53
54      # Empire Load Average
55      'empireLoadAverage'        => '1.3.6.1.4.1.546.1.1.7.8.26.0',
56
57      # Empire Device Table and Oids
58      'empireDevTable'           => '1.3.6.1.4.1.546.1.1.1.7.1',
59      'empireDevIndex'           => '1.3.6.1.4.1.546.1.1.1.7.1.1',
60      'empireDevMntPt'           => '1.3.6.1.4.1.546.1.1.1.7.1.3',
61      'empireDevBsize'           => '1.3.6.1.4.1.546.1.1.1.7.1.4',
62      'empireDevTblks'           => '1.3.6.1.4.1.546.1.1.1.7.1.5',
63      'empireDevType'            => '1.3.6.1.4.1.546.1.1.1.7.1.10',
64      'empireDevDevice'          => '1.3.6.1.4.1.546.1.1.1.7.1.2',
65
66      # Empire Device Stats Table and Oids
67      'empireDiskStatsTable'      => '1.3.6.1.4.1.546.12.1.1',
68      'empireDiskStatsIndex'      => '1.3.6.1.4.1.546.12.1.1.1',
69      'empireDiskStatsHostIndex'  => '1.3.6.1.4.1.546.12.1.1.9',
70      'hrDeviceDescr'             => '1.3.6.1.2.1.25.3.2.1.3',
71
72      # Empire Performance and related oids
73      'empirePerformance'        => '1.3.6.1.4.1.546.1.1.7',
74      'empireNumTraps'           => '1.3.6.1.4.1.546.1.1.7.8.15.0',
75
76      # Empire Process Stats
77      'empireRunq'               => '1.3.6.1.4.1.546.1.1.7.8.4.0',
78      'empireDiskWait'           => '1.3.6.1.4.1.546.1.1.7.8.5.0',
79      'empirePageWait'           => '1.3.6.1.4.1.546.1.1.7.8.6.0',
80      'empireSwapActive'         => '1.3.6.1.4.1.546.1.1.7.8.7.0',
81      'empireSleepActive'        => '1.3.6.1.4.1.546.1.1.7.8.8.0',
82
83      # Empire Extensions NTREGPERF
84      'empireNTREGPERF'          => '1.3.6.1.4.1.546.5.7',
85
86      'empireDnlc'               => '1.3.6.1.4.1.546.1.1.11',
87      'empireRpc'                => '1.3.6.1.4.1.546.8.1',
88      'empireNfs'                => '1.3.6.1.4.1.546.8.2',
89      'empireMon'                => '1.3.6.1.4.1.546.6.1.1',
90      'empirePmon'               => '1.3.6.1.4.1.546.15.1.1',
91      'empireLog'                => '1.3.6.1.4.1.546.11.1.1',
92      );
93
94 our %storageDescTranslate =  ( '/' => {'subtree' => 'root' } );
95
96 # template => 1 if specific templates for the name explicitly exist,
97 # othewise the template used is based on ident
98 #
99 # Generally only hosts that have been directly observed should have
100 # templates, the "unix" and "nt" templates are generally aiming for the
101 # lowest common denominator.
102 #
103 # templates also need to be added to devdiscover-config.pl
104 #
105 #    Templated "names" require a specific template for each of the
106 #    following base template types:
107 #    <template name="empire-swap-counters-NAME">
108 #    <template name="empire-counters-NAME">
109 #    <template name="empire-total-cpu-NAME">
110 #    <template name="empire-total-cpu-raw-NAME">
111 #    <template name="empire-cpu-NAME">
112 #    <template name="empire-cpu-raw-NAME">
113 #    <template name="empire-disk-stats-NAME">
114 #
115 #    i.e.
116 #    <template name="empire-swap-counters-solarisSparc">
117 #    <template name="empire-counters-solarisSparc">
118 #    <template name="empire-total-cpu-solarisSparc">
119 #    <template name="empire-total-cpu-raw-solarisSparc">
120 #    <template name="empire-cpu-solarisSparc">
121 #    <template name="empire-cpu-raw-solarisSparc">
122 #    <template name="empire-disk-stats-solarisSparc">
123 #
124
125
126 our %osTranslate =
127     (
128      1  => { 'name' => 'unknown',   'ident' => 'unknown', 'template' => 0, },
129      2  => { 'name' => 'solarisSparc', 'ident' => 'unix', 'template' => 1, },
130      3  => { 'name' => 'solarisIntel', 'ident' => 'unix', 'template' => 0, },
131      4  => { 'name' => 'solarisPPC',   'ident' => 'unix', 'template' => 0, },
132      5  => { 'name' => 'sunosSparc',   'ident' => 'unix', 'template' => 0, },
133      6  => { 'name' => 'hpux9Parisc',  'ident' => 'unix', 'template' => 0, },
134      7  => { 'name' => 'hpux10Parisc', 'ident' => 'unix', 'template' => 0, },
135      8  => { 'name' => 'nt351Intel',   'ident' => 'nt',   'template' => 0, },
136      9  => { 'name' => 'nt351Alpha',   'ident' => 'nt',   'template' => 0, },
137      10 => { 'name' => 'nt40Intel',    'ident' => 'nt',   'template' => 1, },
138      11 => { 'name' => 'nt40Alpha',    'ident' => 'nt',   'template' => 0, },
139      12 => { 'name' => 'irix62Mips',   'ident' => 'unix', 'template' => 0, },
140      13 => { 'name' => 'irix63Mips',   'ident' => 'unix', 'template' => 0, },
141      14 => { 'name' => 'irix64Mips',   'ident' => 'unix', 'template' => 0, },
142      15 => { 'name' => 'aix41RS6000',  'ident' => 'unix', 'template' => 0, },
143      16 => { 'name' => 'aix42RS6000',  'ident' => 'unix', 'template' => 0, },
144      17 => { 'name' => 'aix43RS6000',  'ident' => 'unix', 'template' => 0, },
145      18 => { 'name' => 'irix65Mips',   'ident' => 'unix', 'template' => 0, },
146      19 => { 'name' => 'digitalUNIX',  'ident' => 'unix', 'template' => 0, },
147      20 => { 'name' => 'linuxIntel',   'ident' => 'unix', 'template' => 1, },
148      21 => { 'name' => 'hpux11Parisc', 'ident' => 'unix', 'template' => 0, },
149      22 => { 'name' => 'nt50Intel',    'ident' => 'nt',   'template' => 1, },
150      23 => { 'name' => 'nt50Alpha',    'ident' => 'nt',   'template' => 0, },
151      25 => { 'name' => 'aix5RS6000',   'ident' => 'unix', 'template' => 1, },
152      26 => { 'name' => 'nt52Intel',    'ident' => 'nt',   'template' => 0, },
153      );
154
155 # Solaris Virtual Interface Filtering
156 our $interfaceFilter;
157 my %solarisVirtualInterfaceFilter;
158
159 %solarisVirtualInterfaceFilter = (
160     'Virtual Interface (iana 62)' => {
161         'ifType'    =>  62,             # Obsoleted
162         'ifDescr'   =>  '^\w+:\d+$',    # Virtual Interface in the form xxx:1
163                                         # e.g. eri:1 eri1:2
164         },
165
166     'Virtual Interface' => {
167         'ifType'    =>  6,
168         'ifDescr'   =>  '^\w+:\d+$',    # Virtual Interface in the form xxx:1
169                                         # e.g. eri:1 eri1:2
170         },
171     );
172
173 our $storageGraphTop;
174 our $storageHiMark;
175 our $shortTemplate;
176 our $longTemplate;
177
178 sub checkdevtype
179 {
180     my $dd = shift;
181     my $devdetails = shift;
182
183     my $session = $dd->session();
184     my $data = $devdetails->data();
185
186     my $session = $dd->session();
187
188     if( not $dd->checkSnmpTable( 'empire' ) )
189     {
190         return 0;
191     }
192
193     my $result = $dd->retrieveSnmpOIDs( 'sysedge_opmode',
194                                         'empireSystemType' );
195     if( $result->{'sysedge_opmode'} == 2 )
196     {
197         Error("Sysedge Agent NOT Licensed");
198         $devdetails->setCap('SysedgeNotLicensed');
199     }
200
201     # Empire OS Type (Needed here for interface filtering)
202     
203     my $empireOsType = $result->{'empireSystemType'};
204     if( defined($empireOsType) and $empireOsType > 0 )
205     {
206         $devdetails->setCap('EmpireSystemedge::' .
207                             $osTranslate{$empireOsType}{ident} );
208         
209         $devdetails->{'os_ident'} = $osTranslate{$empireOsType}{ident};
210
211         
212         $devdetails->setCap('EmpireSystemedge::' .
213                             $osTranslate{$empireOsType}{name} );
214         
215         $devdetails->{'os_name'} = $osTranslate{$empireOsType}{name};
216
217         $devdetails->{'os_name_template'} =
218             $osTranslate{$empireOsType}{template};
219     }
220
221     # Exclude Virtual Interfaces on Solaris
222     if( $devdetails->{'os_name'} =~ /solaris/i ) {
223
224         $interfaceFilter = \%solarisVirtualInterfaceFilter;
225         &Torrus::DevDiscover::RFC2863_IF_MIB::addInterfaceFilter
226             ($devdetails, $interfaceFilter);
227     }
228
229     return 1;
230 }
231
232
233 sub discover
234 {
235     my $dd = shift;
236     my $devdetails = shift;
237
238     my $data = $devdetails->data();
239     my $session = $dd->session();
240
241
242     if( $dd->checkSnmpOID('empireCpuTotalWait') )
243     {
244         $devdetails->setCap('EmpireSystemedge::CpuTotal::Wait');
245     }
246
247     # Empire Dev Stats Table
248
249     my $empireDiskStatsTable =
250         $session->get_table( -baseoid =>
251                              $dd->oiddef('empireDiskStatsTable') );
252
253     my $hrDeviceDescr = $session->get_table( -baseoid =>
254                                              $dd->oiddef('hrDeviceDescr') );
255
256     if( defined($empireDiskStatsTable) and defined($hrDeviceDescr) )
257     {
258         $devdetails->setCap('EmpireSystemedge::DiskStats');
259         $devdetails->storeSnmpVars( $empireDiskStatsTable );
260         $devdetails->storeSnmpVars( $hrDeviceDescr );
261
262         my $ref= {'indices' => []};
263         $data->{'empireDiskStats'} = $ref;
264
265         foreach my $INDEX
266             ( $devdetails->
267               getSnmpIndices( $dd->oiddef('empireDiskStatsIndex') ) )
268         {
269             next if( $INDEX < 1 );
270
271             my $hrindex =
272                 $devdetails->snmpVar( $dd->oiddef('empireDiskStatsHostIndex') .
273                                       '.' . $INDEX );
274
275             next if( $hrindex < 1 );
276
277             push( @{ $ref->{'indices'} }, $INDEX );
278
279             my $descr = $devdetails->snmpVar($dd->oiddef('hrDeviceDescr') .
280                                              '.' . $hrindex );
281
282             my $ref = { 'param' => {}, 'templates' => [] };
283             $data->{'empireDiskStats'}{$INDEX} = $ref;
284             my $param = $ref->{'param'};
285
286
287             $param->{'comment'} = $descr;
288
289             $param->{'HRINDEX'} = $hrindex;
290
291             if ( not defined $descr )
292             {
293                 $descr = "Index $hrindex";
294             }
295             $param->{'disk-stats-description'} = $descr;
296
297             $descr =~ s/^\///;
298             $descr =~ s/\W/_/g;
299             $param->{'disk-stats-nick'} = $descr;
300
301         }
302     } # end empireDiskStatsTable
303
304     # Empire Dev Table
305
306     my $empireDevTable = $session->get_table( -baseoid =>
307                                               $dd->oiddef('empireDevTable') );
308
309     if( defined( $empireDevTable ) )
310     {
311
312         $devdetails->setCap('EmpireSystemedge::Devices');
313         $devdetails->storeSnmpVars( $empireDevTable );
314
315         my $ref= {};
316         $data->{'empireDev'} = $ref;
317
318         foreach my $INDEX
319             ( $devdetails->getSnmpIndices($dd->oiddef('empireDevIndex') ) )
320         {
321             next if( $INDEX < 1 );
322
323
324             my $type = $devdetails->snmpVar( $dd->oiddef('empireDevType') .
325                                              '.' . $INDEX );
326
327             my $descr = $devdetails->snmpVar($dd->oiddef('empireDevMntPt') .
328                                              '.' . $INDEX );
329
330             my $bsize =  $devdetails->snmpVar($dd->oiddef('empireDevBsize') .
331                                               '.' . $INDEX );
332
333             # NFS has a block size of 0, it will be skipped
334             if( $bsize and defined( $descr ) )
335             {
336                 push( @{ $data->{'empireDev'}->{'indices'} }, $INDEX);
337
338                 my $ref = { 'param' => {}, 'templates' => [] };
339                 $data->{'empireDev'}{$INDEX} = $ref;
340                 my $param = $ref->{'param'};
341
342                 $param->{'storage-description'} = $descr;
343                 $param->{'storage-device'} =
344                     $devdetails->snmpVar($dd->oiddef('empireDevDevice')
345                                          . '.' . $INDEX );
346
347                 my $comment = $type;
348                 if( $descr =~ /^\// )
349                 {
350                     $comment .= ' (' . $descr . ')';
351                 }
352                 $param->{'comment'} = $comment;
353
354                 if( $storageDescTranslate{$descr}{'subtree'} )
355                 {
356                     $descr = $storageDescTranslate{$descr}{'subtree'};
357                 }
358                 $descr =~ s/^\///;
359                 $descr =~ s/\W/_/g;
360                 $param->{'storage-nick'} = $descr;
361
362                 my $units = $bsize;
363
364                 $param->{'collector-scale'} = sprintf('%d,*', $units);
365
366                 my $size =
367                     $devdetails->snmpVar
368                     ($dd->oiddef('empireDevTblks') . '.' . $INDEX);
369
370                 if( $size )
371                 {
372                     if( $storageGraphTop > 0 )
373                     {
374                         $param->{'graph-upper-limit'} =
375                             sprintf('%e',
376                                     $units * $size * $storageGraphTop / 100 );
377                     }
378
379                     if( $storageHiMark > 0 )
380                     {
381                         $param->{'upper-limit'} =
382                             sprintf('%e',
383                                     $units * $size * $storageHiMark / 100 );
384                     }
385                 }
386
387             }
388         }
389
390         $devdetails->clearCap( 'hrStorage' );
391
392     } # end empireDevTable
393
394
395     # Empire Per - Cpu Table
396
397     my $empireCpuStatsTable =
398         $session->get_table( -baseoid =>
399                              $dd->oiddef('empireCpuStatsTable') );
400
401     if( defined( $empireCpuStatsTable ) )
402     {
403         $devdetails->setCap('EmpireSystemedge::CpuStats');
404         $devdetails->storeSnmpVars( $empireCpuStatsTable );
405
406         my $ref= {};
407         $data->{'empireCpuStats'} = $ref;
408
409         foreach my $INDEX
410             ( $devdetails->
411               getSnmpIndices( $dd->oiddef('empireCpuStatsIndex') ) )
412         {
413             next if( $INDEX < 1 );
414
415             push( @{ $ref->{'indices'} }, $INDEX);
416
417             my $descr =
418                 $devdetails->snmpVar( $dd->oiddef('empireCpuStatsDescr') .
419                                       '.' . $INDEX );
420
421             my $ref = { 'param' => {}, 'templates' => [] };
422             $data->{'empireCpuStats'}{$INDEX} = $ref;
423             my $param = $ref->{'param'};
424
425             $param->{'cpu'} = 'CPU' . $INDEX;
426             $param->{'descr'} = $descr;
427             $param->{'INDEX'} = $INDEX;
428             $param->{'comment'} = $descr . ' (' . 'CPU ' . $INDEX . ')';
429         }
430     }
431
432     # Empire Load Average
433
434     if( $dd->checkSnmpOID('empireLoadAverage') )
435     {
436         $devdetails->setCap('EmpireSystemedge::LoadAverage');
437     }
438
439     # Empire Swap Counters
440
441     if( $dd->checkSnmpOID('empireNumPageSwapIns') )
442     {
443         $devdetails->setCap('EmpireSystemedge::SwapCounters');
444     }
445
446     # Empire Counter Traps
447
448     if( $dd->checkSnmpOID('empireNumTraps') )
449     {
450         $devdetails->setCap('EmpireSystemedge::CounterTraps');
451     }
452
453     # Empire Performance
454
455     my $empirePerformance =
456         $session->get_table( -baseoid => $dd->oiddef('empirePerformance') );
457
458     if( defined( $empirePerformance ) )
459     {
460         $devdetails->setCap('EmpireSystemedge::Performance');
461         $devdetails->storeSnmpVars( $empirePerformance );
462
463         if( defined $devdetails->snmpVar($dd->oiddef('empireRunq') ) )
464         {
465             $devdetails->setCap('EmpireSystemedge::RunQ');
466         }
467
468         if( defined $devdetails->snmpVar($dd->oiddef('empireDiskWait') ) )
469         {
470             $devdetails->setCap('EmpireSystemedge::DiskWait');
471         }
472
473         if( defined $devdetails->snmpVar($dd->oiddef('empirePageWait') ) )
474         {
475             $devdetails->setCap('EmpireSystemedge::PageWait');
476         }
477
478         if( defined $devdetails->snmpVar($dd->oiddef('empireSwapActive') ) )
479         {
480             $devdetails->setCap('EmpireSystemedge::SwapActive');
481         }
482
483         if( defined $devdetails->snmpVar($dd->oiddef('empireSleepActive') ) )
484         {
485             $devdetails->setCap('EmpireSystemedge::SleepActive');
486         }
487     }
488
489     my $empireNTREGPERF =
490         $session->get_table( -baseoid => $dd->oiddef('empireNTREGPERF') );
491     if( defined $empireNTREGPERF )
492     {
493         $devdetails->setCap('empireNTREGPERF');
494         $devdetails->storeSnmpVars( $empireNTREGPERF );
495
496         my $ref = {};
497         $data->{'empireNTREGPERF'} = $ref;
498         foreach my $INDEX
499             ( $devdetails->getSnmpIndices($dd->oiddef('empireNTREGPERF') ) )
500         {
501             # This is all configured on a per site basis.
502             # The xml will be site specific
503             push( @{ $ref->{'indices'} }, $INDEX);
504             my $template = {};
505             $Torrus::ConfigBuilder::templateRegistry->
506             {'EmpireSystemedge::NTREGPERF_' . $INDEX} = $template;
507             $template->{'name'}='EmpireSystemedge::NTREGPERF_' . $INDEX;
508             $template->{'source'}='vendor/empire.systemedge.ntregperf.xml';
509
510         }
511     }
512
513 #NOT CONFIGURED## Empire DNLC
514 #NOT CONFIGURED#    my $empireDnlc = $session->get_table( -baseoid =>
515 #NOT CONFIGURED#        $dd->oiddef('empireDnlc') );
516 #NOT CONFIGURED#    if( defined $empirePerformance )
517 #NOT CONFIGURED#    {
518 #NOT CONFIGURED#        # don't do this until we use the data
519 #NOT CONFIGURED#        #$devdetails->setCap('empirednlc');
520 #NOT CONFIGURED#        #$devdetails->storeSnmpVars( $empireDnlc );
521 #NOT CONFIGURED#    }
522 #NOT CONFIGURED#
523 #NOT CONFIGURED## Empire RPC
524 #NOT CONFIGURED#    my $empireRpc = $session->get_table( -baseoid =>
525 #NOT CONFIGURED#        $dd->oiddef('empireRpc') );
526 #NOT CONFIGURED#    if( defined $empireRpc )
527 #NOT CONFIGURED#    {
528 #NOT CONFIGURED#        # don't do this until we use the data
529 #NOT CONFIGURED#        #$devdetails->setCap('empirerpc');
530 #NOT CONFIGURED#        #$devdetails->storeSnmpVars( $empireRpc );
531 #NOT CONFIGURED#    }
532 #NOT CONFIGURED#
533 #NOT CONFIGURED## Empire NFS
534 #NOT CONFIGURED#    my $empireNfs = $session->get_table( -baseoid =>
535 #NOT CONFIGURED#        $dd->oiddef('empireNfs') );
536 #NOT CONFIGURED#    if( defined $empireRpc )
537 #NOT CONFIGURED#    {
538 #NOT CONFIGURED#        # don't do this until we use the data
539 #NOT CONFIGURED#        #$devdetails->setCap('empirenfs');
540 #NOT CONFIGURED#        #$devdetails->storeSnmpVars( $empireNfs );
541 #NOT CONFIGURED#    }
542 #NOT CONFIGURED#
543 #NOT CONFIGURED## Empire Mon Entries
544 #NOT CONFIGURED#    my $empireMon = $session->get_table( -baseoid =>
545 #NOT CONFIGURED#        $dd->oiddef('empireMon') );
546 #NOT CONFIGURED#    if( ref( $empireMon ) )
547 #NOT CONFIGURED#    {
548 #NOT CONFIGURED#        # don't do this until we use the data
549 #NOT CONFIGURED#        #$devdetails->setCap('empiremon');
550 #NOT CONFIGURED#        #$devdetails->storeSnmpVars( $empireMon );
551 #NOT CONFIGURED#    }
552 #NOT CONFIGURED#
553 #NOT CONFIGURED## Empire Process Monitor Entries
554 #NOT CONFIGURED#    my $empirePmon = $session->get_table( -baseoid =>
555 #NOT CONFIGURED#        $dd->oiddef('empirePmon') );
556 #NOT CONFIGURED#    if( ref( $empirePmon ) )
557 #NOT CONFIGURED#    {
558 #NOT CONFIGURED#        # don't do this until we use the data
559 #NOT CONFIGURED#        #$devdetails->setCap('empirePmon');
560 #NOT CONFIGURED#        #$devdetails->storeSnmpVars( $empirePmon );
561 #NOT CONFIGURED#    }
562 #NOT CONFIGURED#
563 #NOT CONFIGURED## Empire Log Monitor Entries
564 #NOT CONFIGURED#    my $empireLog = $session->get_table( -baseoid =>
565 #NOT CONFIGURED#        $dd->oiddef('empireLog') );
566 #NOT CONFIGURED#    if( ref( $empireLog ) )
567 #NOT CONFIGURED#    {
568 #NOT CONFIGURED#        # don't do this until we use the data
569 #NOT CONFIGURED#        #$devdetails->setCap('empireLog');
570 #NOT CONFIGURED#        #$devdetails->storeSnmpVars( $empireLog );
571 #NOT CONFIGURED#    }
572
573     return 1;
574 }
575
576
577 sub buildConfig
578 {
579     my $devdetails = shift;
580     my $cb = shift;
581     my $devNode = shift;
582     my $data = $devdetails->data();
583
584     my $mononlyTree = "Mon_Only";
585     my $monParam = {
586         'precedence'    => '-100000',
587         'comment'       => 'Place to Stash Monitoring Data ',
588         'hidden'        => 'yes',
589     };
590
591     my $monNode = $cb->addSubtree( $devNode, $mononlyTree, $monParam );
592     $cb->addTemplateApplication
593         ( $monNode, 'EmpireSystemedge::sysedge_opmode' );
594
595     if( $devdetails->hasCap('SysedgeNotLicensed') )
596     {
597         return 1;
598     }
599
600     my $os_target;
601     if( $devdetails->{'os_name_template'} )
602     {
603         $os_target = $devdetails->{'os_name'};
604     }
605     else
606     {
607         $os_target = $devdetails->{'os_ident'};
608         Warn("Using Generic OS Templates '$os_target' for os: "
609              .  $devdetails->{'os_name'} );
610     }
611
612     my $subtreeName = "Storage";
613
614     my $param = {
615         'precedence'    => '-1000',
616         'comment'       => 'Storage Information',
617     };
618
619     my $StorageNode = $cb->addSubtree( $devNode, $subtreeName, $param );
620
621     # Empire Devices(Storage)
622     if( $devdetails->hasCap('EmpireSystemedge::Devices') )
623     {
624         my $subtreeName = "VolumeInfo";
625
626         my $param = {
627             'precedence'    => '-1000',
628             'comment'       => 'Physical/Logical Volume Information',
629         };
630
631         my $subtreeNode =
632             $cb->addSubtree( $StorageNode, $subtreeName, $param,
633                              [ 'EmpireSystemedge::empire-device-subtree' ] );
634
635         foreach my $INDEX ( sort {$a<=>$b} @{$data->{'empireDev'}{'indices'}} )
636         {
637             my $ref = $data->{'empireDev'}{$INDEX};
638
639             # Display in index order
640             $ref->{'param'}->{'precedence'} = sprintf("%d", 2000 - $INDEX);
641
642             $cb->addSubtree( $subtreeNode, $ref->{'param'}{'storage-nick'},
643                              $ref->{'param'},
644                              [ 'EmpireSystemedge::empire-device' ] );
645         }
646     }
647
648     # Empire Device Stats
649     if( $devdetails->hasCap('EmpireSystemedge::DiskStats') )
650     {
651         my $subtreeName = "DiskInfo";
652
653         my $param = {
654             'precedence'    => '-1000',
655             'comment'       => 'Physical/Logical Disk Information',
656         };
657
658         my $subtreeNode =
659             $cb->addSubtree( $StorageNode, $subtreeName, $param,
660                              ['EmpireSystemedge::empire-disk-stats-subtree']);
661
662         foreach my $INDEX
663             ( sort {$a<=>$b} @{$data->{'empireDiskStats'}{'indices'}} )
664         {
665             my $ref = $data->{'empireDiskStats'}{$INDEX};
666             # Display in index order
667             $ref->{'param'}->{'precedence'} = sprintf("%d", 1000 - $INDEX);
668
669             $cb->addSubtree( $subtreeNode, $ref->{'param'}{'disk-stats-nick'},
670                              $ref->{'param'},
671                              [ 'EmpireSystemedge::empire-disk-stats-' .
672                                $os_target, ] );
673         }
674     }
675
676
677     # Performance Subtree
678     my $subtreeName= "System_Performance";
679
680     my $param = {
681         'precedence'     => '-900',
682         'comment'        => 'System, CPU and memory statistics'
683         };
684
685     my @perfTemplates = ();
686
687     # Empire Load Average
688     if( $devdetails->hasCap('EmpireSystemedge::LoadAverage') )
689     {
690         push( @perfTemplates, 'EmpireSystemedge::empire-load' );
691     }
692
693     # Empire Performance
694     if( $devdetails->hasCap('EmpireSystemedge::Performance') )
695     {
696         push( @perfTemplates, 'EmpireSystemedge::empire-memory' );
697     }
698
699     push( @perfTemplates,
700           'EmpireSystemedge::empire-counters-' . $os_target,
701           'EmpireSystemedge::empire-swap-counters-' . $os_target,
702           'EmpireSystemedge::empire-total-cpu-' .  $os_target,
703           'EmpireSystemedge::empire-total-cpu-raw-' .  $os_target,
704           );
705
706     if( $devdetails->hasCap('EmpireSystemedge::RunQ') )
707     {
708         push( @perfTemplates, 'EmpireSystemedge::empire-runq' );
709     }
710
711     if( $devdetails->hasCap('EmpireSystemedge::DiskWait') )
712     {
713         push( @perfTemplates, 'EmpireSystemedge::empire-diskwait' );
714     }
715
716     if( $devdetails->hasCap('EmpireSystemedge::PageWait') )
717     {
718         push( @perfTemplates, 'EmpireSystemedge::empire-pagewait' );
719     }
720
721     if( $devdetails->hasCap('EmpireSystemedge::SwapActive') )
722     {
723         push( @perfTemplates, 'EmpireSystemedge::empire-swapactive' );
724     }
725
726     if( $devdetails->hasCap('EmpireSystemedge::SleepActive') )
727     {
728         push( @perfTemplates, 'EmpireSystemedge::empire-sleepactive' );
729     }
730
731     my $PerformanceNode = $cb->addSubtree( $devNode, $subtreeName,
732                                            $param, \@perfTemplates   );
733
734     # Empire CPU Stats
735     if( $devdetails->hasCap('EmpireSystemedge::CpuStats') )
736     {
737         my $ref = $data->{'empireCpuStats'};
738
739         my $subtreeName = "CpuStats";
740
741         my $param = {
742             'precedence'    => '-1100',
743             'comment'       => 'Per-CPU Statistics',
744         };
745
746         my $subtreeNode =
747             $cb->addSubtree( $PerformanceNode, $subtreeName, $param,
748                              [ 'EmpireSystemedge::empire-cpu-subtree' ] );
749
750         foreach my $INDEX
751             ( sort {$a<=>$b} @{$data->{'empireCpuStats'}{'indices'} } )
752         {
753             my $ref = $data->{'empireCpuStats'}{$INDEX};
754
755             # Display in index order
756             $ref->{'param'}->{'precedence'} = sprintf("%d", 1000 - $INDEX);
757
758             $cb->addSubtree
759                 ( $subtreeNode, $ref->{'param'}{'cpu'},
760                   $ref->{'param'},
761                   ['EmpireSystemedge::empire-cpu-' . $os_target,
762                    'EmpireSystemedge::empire-cpu-raw-' . $os_target],
763                   );
764         }
765     }
766
767     if( $devdetails->hasCap('empireNTREGPERF') )
768     {
769         Debug("NTREGPERF");
770         my $ntregTree = "NT_REG_PERF";
771         my $ntregParam = {
772             'precedence'    => '-10000',
773             'comment'       => 'NT Reg Perf',
774         };
775         my $ntregnode =
776             $cb->addSubtree( $devNode, $ntregTree, $ntregParam );
777
778         foreach my $INDEX
779             ( sort {$a<=>$b} @{$data->{'empireNTREGPERF'}{'indices'} } )
780         {
781             my $ref = $data->{'empireNTREGPERF'}{$INDEX};
782             $cb->addTemplateApplication
783                 ( $ntregnode, 'EmpireSystemedge::NTREGPERF_' . $INDEX );
784
785         }
786
787     }
788 }
789
790
791 1;
792
793
794 # Local Variables:
795 # mode: perl
796 # indent-tabs-mode: nil
797 # perl-indent-level: 4
798 # End: