Merge remote-tracking branch 'upstream/master'
[torrus-plus.git] / src / lib / Torrus / DevDiscover / CasaCMTS.pm
blob404ce8a7b8e1030b660a07d6c2198a977a056c93
1 # Copyright (C) 2010 Stanislav Sinyagin
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 # $Id: CiscoIOS_Docsis.pm 439 2006-09-27 08:56:30Z ssinyagin $
18 # Stanislav Sinyagin <ssinyagin@yahoo.com>
20 # DOCSIS interface, CASA specific
22 package Torrus::DevDiscover::CasaCMTS;
24 use strict;
25 use warnings;
27 use Torrus::Log;
29 our $VERSION = 1.0;
31 $Torrus::DevDiscover::registry{'CasaCMTS'} = {
32 'sequence' => 500,
33 'checkdevtype' => \&checkdevtype,
34 'discover' => \&discover,
35 'buildConfig' => \&buildConfig
39 $Torrus::DevDiscover::RFC2863_IF_MIB::knownSelectorActions{
40 'DocsisMacModemsMonitor'} = 'CasaCMTS';
43 our %oiddef =
45 'casaProducts' => '1.3.6.1.4.1.20858.2',
49 sub checkdevtype
51 my $dd = shift;
52 my $devdetails = shift;
54 if( not $dd->oidBaseMatch
55 ( 'casaProducts',
56 $devdetails->snmpVar( $dd->oiddef('sysObjectID') ) ) or
57 not $devdetails->isDevType('RFC2670_DOCS_IF') )
59 return 0;
62 return 1;
66 sub discover
68 my $dd = shift;
69 my $devdetails = shift;
71 my $data = $devdetails->data();
73 push( @{$data->{'docsConfig'}{'docsCableMaclayer'}{'templates'}},
74 'CasaCMTS::casa-docsis-mac-subtree' );
76 for my $ifIndex ( @{$data->{'docsCableMaclayer'}} )
78 my $interface = $data->{'interfaces'}{$ifIndex};
80 push( @{$interface->{'docsTemplates'}},
81 'CasaCMTS::casa-docsis-mac-util' );
84 for my $ifIndex ( @{$data->{'docsCableUpstream'}} )
86 my $interface = $data->{'interfaces'}{$ifIndex};
88 push( @{$interface->{'docsTemplates'}},
89 'CasaCMTS::casa-docsis-upstream-util' );
92 for my $ifIndex ( @{$data->{'docsCableDownstream'}} )
94 my $interface = $data->{'interfaces'}{$ifIndex};
96 push( @{$interface->{'docsTemplates'}},
97 'CasaCMTS::casa-docsis-downstream-util' );
100 $data->{'nameref'}{'ifNodeid'} = 'ifNameT';
102 return 1;
106 sub buildConfig
108 my $devdetails = shift;
109 my $cb = shift;
110 my $devNode = shift;
112 my $data = $devdetails->data();
115 if( scalar( @{$data->{'docsCableMaclayer'}} ) > 0 )
117 # Build All_Modems summary graph
118 my $param = {
119 'ds-type' => 'rrd-multigraph',
120 'ds-names' => 'total,active,registered',
121 'graph-lower-limit' => '0',
122 'precedence' => '1000',
123 'vertical-label' => 'Modems',
125 'graph-legend-total' => 'Total',
126 'line-style-total' => '##totalresource',
127 'line-color-total' => '##totalresource',
128 'line-order-total' => '1',
130 'graph-legend-active' => 'Active',
131 'line-style-active' => '##resourcepartusage',
132 'line-color-active' => '##resourcepartusage',
133 'line-order-active' => '2',
135 'graph-legend-registered' => 'Registered',
136 'line-style-registered' => '##resourceusage',
137 'line-color-registered' => '##resourceusage',
138 'line-order-registered' => '3',
139 'descriptive-nickname' => '%system-id%: All modems'
142 # for the sake of better Emacs formatting
143 $param->{'comment'} =
144 'Registered, Active and Total modems on CMTS';
146 $param->{'nodeid'} =
147 $data->{'docsConfig'}{'docsCableMaclayer'}{'nodeidCategory'} .
148 '//%nodeid-device%//modems';
150 my $first = 1;
151 for my $ifIndex ( @{$data->{'docsCableMaclayer'}} )
153 my $interface = $data->{'interfaces'}{$ifIndex};
155 my $intf = $interface->{$data->{'nameref'}{'ifSubtreeName'}};
157 if( $first )
159 $param->{'ds-expr-total'} =
160 '{' . $intf . '/Modems_Total}';
161 $param->{'ds-expr-active'} =
162 '{' . $intf . '/Modems_Active}';
163 $param->{'ds-expr-registered'} =
164 '{' . $intf . '/Modems_Registered}';
165 $first = 0;
167 else
169 $param->{'ds-expr-total'} .=
170 ',{' . $intf . '/Modems_Total},+';
171 $param->{'ds-expr-active'} .=
172 ',{' . $intf . '/Modems_Active},+';
173 $param->{'ds-expr-registered'} .=
174 ',{' . $intf . '/Modems_Registered},+';
178 my $macNode =
179 $cb->getChildSubtree( $devNode,
180 $data->{'docsConfig'}{
181 'docsCableMaclayer'}{
182 'subtreeName'} );
183 if( defined( $macNode ) )
185 $cb->addLeaf( $macNode, 'All_Modems', $param, [] );
187 else
189 Error('Could not find the MAC layer subtree');
190 exit 1;
193 # Apply selector actions
194 for my $ifIndex ( @{$data->{'docsCableMaclayer'}} )
196 my $interface = $data->{'interfaces'}{$ifIndex};
198 my $intf = $interface->{$data->{'nameref'}{'ifSubtreeName'}};
200 my $monitor =
201 $interface->{'selectorActions'}{'DocsisMacModemsMonitor'};
202 if( defined( $monitor ) )
204 my $intfNode = $cb->getChildSubtree( $macNode, $intf );
205 $cb->addLeaf( $intfNode, 'Modems_Registered',
206 {'monitor' => $monitor } );
211 if( scalar( @{$data->{'docsCableUpstream'}} ) > 0 )
213 my $upstrNode =
214 $cb->getChildSubtree( $devNode,
215 $data->{'docsConfig'}{'docsCableUpstream'}{
216 'subtreeName'} );
218 # Override the overview shortcus defined in rfc2670.docsis-if.xml
220 my $shortcuts = 'snr,fec,freq,modems';
222 my $param = {
223 'overview-shortcuts' =>
224 $shortcuts,
226 'overview-subleave-name-modems' => 'Modems',
227 'overview-direct-link-modems' => 'yes',
228 'overview-direct-link-view-modems' => 'expanded-dir-html',
229 'overview-shortcut-text-modems' => 'All modems',
230 'overview-shortcut-title-modems'=>
231 'Show modem quantities in one page',
232 'overview-page-title-modems' => 'Modem quantities',
235 $cb->addParams( $upstrNode, $param );
238 if( scalar( @{$data->{'docsCableDownstream'}} ) > 0 )
240 my $downstrNode =
241 $cb->getChildSubtree( $devNode,
242 $data->{'docsConfig'}{'docsCableDownstream'}{
243 'subtreeName'} );
245 # Override the overview shortcus defined in rfc2670.docsis-if.xml
247 my $shortcuts = 'util,modems';
249 my $param = {
250 'overview-shortcuts' => $shortcuts,
251 'overview-subleave-name-modems' => 'Modems',
252 'overview-direct-link-modems' => 'yes',
253 'overview-direct-link-view-modems' => 'expanded-dir-html',
254 'overview-shortcut-text-modems' => 'All modems',
255 'overview-shortcut-title-modems' =>
256 'Show modem quantities in one page',
257 'overview-page-title-modems' => 'Modem quantities',
260 $cb->addParams( $downstrNode, $param );
268 # Local Variables:
269 # mode: perl
270 # indent-tabs-mode: nil
271 # perl-indent-level: 4
272 # End: