Cisco-UCS

 view release on metacpan or  search on metacpan

lib/Cisco/UCS/Common/EthernetPort.pm  view on Meta::CPAN

package Cisco::UCS::Common::EthernetPort;

use warnings;
use strict;

use Carp qw(croak);
use Scalar::Util qw(weaken);

our $VERSION = '0.51';

our @ATTRIBUTES = qw( dn epDn mac mode type);

our %ATTRIBUTES = (
	admin_state			=> 'adminState',
	chassis_id			=> 'chassisId',
	if_role				=> 'ifRole',
	if_type				=> 'ifType',
	label				=> 'usrLabel',
	license_state			=> 'licState',
	oper_state			=> 'operState',
	oper_speed			=> 'operSpeed',
	peer_dn				=> 'peerDn',
	peer_port_id			=> 'peerPortId',
	rcvr_type			=> 'xcvrType',
	switch_id			=> 'switchId',
	id				=> 'portId'
);

our %STATS = (
	err				=> 'etherErrStats',
	rx				=> 'etherRxStats',
	tx				=> 'etherTxStats'
	);

our %TX_STATS = our %RX_STATS = (
	intervals			=> 'intervals',
	timestamp			=> 'timeCollected',
	suspect				=> 'suspect',
	update				=> 'update',
	broadcast_packets		=> 'broadcastPackets',
	broadcast_packets_delta		=> 'broadcastPacketsDelta', 
	broadcast_packets_delta_avg	=> 'broadcastPacketsDeltaAvg',
	broadcast_packets_delta_min	=> 'broadcastPacketsDeltaMin',
	broadcast_packets_delta_max	=> 'broadcastPacketsDeltaMax',
	jumbo_packets			=> 'jumboPackets',
	jumbo_packets_delta		=> 'jumboPacketsDelta',
	jumbo_packets_delta_avg		=> 'jumboPacketsDeltaAvg',
	jumbo_packets_delta_min		=> 'jumboPacketsDeltaMin',
	jumbo_packets_delta_max		=> 'jumboPacketsDeltaMax',
	multicast_packets		=> 'multicastPackets',
	multicast_packets_delta		=> 'multicastPacketsDelta',
	multicast_packets_delta_avg	=> 'multicastPacketsDeltaAvg',
	multicast_packets_delta_min	=> 'multicastPacketsDeltaMin',
	multicast_packets_delta_max	=> 'multicastPacketsDeltaMax',
	total_bytes			=> 'totalBytes',
	total_bytes_delta		=> 'totalBytesDelta',
	total_bytes_delta_avg		=> 'totalBytesDeltaAvg',
	total_bytes_delta_min		=> 'totalBytesDeltaMin',
	total_bytes_delta_max		=> 'totalBytesDeltaMax',
	total_packets			=> 'totalPackets',
	total_packets_delta		=> 'totalPacketsDelta',
	total_packets_delta_avg		=> 'totalPacketsDeltaAvg',
	total_packets_delta_min		=> 'totalPacketsDeltaMin',
	total_packets_delta_max		=> 'totalPacketsDeltaMax',
	unicast_packets			=> 'unicastPackets',
	unicast_packets_delta		=> 'unicastPacketsDelta',
	unicast_packets_delta_avg	=> 'unicastPacketsDeltaAvg',

lib/Cisco/UCS/Common/EthernetPort.pm  view on Meta::CPAN

	suspect				=> 'suspect',
	timestamp			=> 'timeCollected',
	align				=> 'align',
	align_delta			=> 'alignDelta',
	align_delta_avg			=> 'alignDeltaAvg',
	align_delta_min			=> 'alignDeltaMin',
	align_delta_max			=> 'alignDeltaMax',
	deferred_tx			=> 'deferredTx',
	deferred_tx_delta		=> 'deferredTxDelta',
	deferred_tx_delta_avg		=> 'deferredTxDeltaAvg',
	deferred_tx_delta_min		=> 'deferredTxDeltaMin',
	deferred_tx_delta_max		=> 'deferredTxDeltaMax',
	fcs				=> 'fcs',
	fcs_delta			=> 'fcsDelta',
	fcs_delta_avg			=> 'fcsDeltaAvg',
	fcs_delta_min			=> 'fcsDeltaMin',
	fcs_delta_max			=> 'fcsDeltaMax',
	int_mac_tx			=> 'intMacTx',
	int_mac_tx_delta		=> 'intMacTxDelta',
	int_mac_tx_delta_avg		=> 'intMacTxDeltaAvg',
	int_mac_tx_delta_min		=> 'intMacTxDeltaMin',
	int_mac_tx_delta_max		=> 'intMacTxDeltaMax',
	int_mac_rx			=> 'intMacRx',
	int_mac_rx_delta		=> 'intMacRxDelta',
	int_mac_rx_delta_avg		=> 'intMacRxDeltaAvg',
	int_mac_rx_delta_min		=> 'intMacRxDeltaMin',
	int_mac_rx_delta_max		=> 'intMacRxDeltaMax',
	out_discard			=> 'outDiscard',
	out_discard_delta		=> 'outDiscardDelta',
	out_discard_delta_avg		=> 'outDiscardDeltaAvg',
	out_discard_delta_min		=> 'outDiscardDeltaMin',
	out_discard_delta_max		=> 'outDiscardDeltaMax',
	rcv				=> 'rcv',
	rcv_delta			=> 'rcvDelta',
	rcv_delta_avg			=> 'rcvDeltaAvg',
	rcv_delta_min			=> 'rcvDeltaMin',
	rcv_delta_max			=> 'rcvDeltaMax',
	undersize			=> 'underSize',
	undersize_delta			=> 'underSizeDelta',
	undersize_delta_avg		=> 'underSizeDeltaAvg',
	undersize_delta_min		=> 'underSizeDeltaMin',
	undersize_delta_max		=> 'underSizeDeltaMax',
	xmit				=> 'xmit',
	xmit_delta			=> 'xmitDelta',
	xmit_delta_avg			=> 'xmitDeltaAvg',
	xmit_delta_min			=> 'xmitDeltaMin',
	xmit_delta_max			=> 'xmitDeltaMax'
);

sub new {
        my ( $class, %args ) = @_; 

        my $self = {}; 
        bless $self, $class;

        defined $args{dn}
		? $self->{dn} = $args{dn}
		: croak 'dn not defined';

        defined $args{ucs}
		? weaken( $self->{ucs} = $args{ucs} )
		: croak 'ucs not defined';

        my %attr = %{ $self->{ucs}->resolve_dn(
				dn => $self->{dn}
			)->{outConfig}->{etherPIo}};

	{
        	no strict 'refs';
		no warnings qw(redefine);

		while ( my ( $pseudo, $attribute ) = each %STATS ) { 
			*{ __PACKAGE__ . '::' . 'get_' . $pseudo . '_stats' } = sub {
				my $self = shift;
				return $self->_get_stats( $pseudo, $attribute )
			}    
		} 
	}
    
        while ( my ( $k, $v ) = each %attr ) { $self->{$k} = $v }
    
        return $self;
}

sub _get_stats {
	my ( $self, $type, $class ) = @_;

	my %stats = %{ ( $self->{ucs}->resolve_dn(
				dn => "$self->{dn}/$type-stats"
			) )->{outConfig}->{$class} };
	
	while ( my ( $k, $v ) = each %stats ) { $self->{$type}->{$k} = $v }

	return %stats
}

{
        no strict 'refs';

        while ( my ( $pseudo, $attribute ) = each %ATTRIBUTES ) {
                *{ __PACKAGE__ . '::' . $pseudo } = sub {
                        my $self = shift;
                        return $self->{$attribute}
                }       
        }               
                
        foreach my $attribute ( @ATTRIBUTES ) {
                *{ __PACKAGE__ . '::' . $attribute } = sub {
                        my $self = shift;
                        return $self->{$attribute} 
                }       
        }               

	foreach my $type ( keys %STATS ) {
		my $type_stats = uc( $type ) . '_STATS';

		while ( my ( $pseudo, $attribute ) = each %{$type_stats} ) {
			*{ __PACKAGE__ . '::' . $type . "_$pseudo" } = sub {
				my $self = shift;

				my $method = "get_$type" . "_$pseudo";



( run in 2.430 seconds using v1.01-cache-2.11-cpan-5735350b133 )