November 23, 2017
# Retrieve a list of switch port statistics for a server's network interfaces.
# This script makes a single call to the getPortStatistics() method in the
# SoftLayer_Network_Component API service
# for each of a server's network components to query port statistics for that
# interface from SoftLayer's switches. Port statistics are modeled by the
# SoftLayer__Container_Network_Port_Statistic data type
# See below for more details.
# Important manual pages:
# License:
# Author: SoftLayer Technologies, Inc. <>
use lib 'softlayer-api-perl-client-master/';
use SoftLayer::API::SOAP;
use JSON;
use Data::Dumper;
use strict;
# Your SoftLayer API username and key.
my $api_username = 'set me';
my $api_key = 'set me';
# Your server's id. Call the getHardware() method in the SoftLayer_Account API
# service (
# to get a list of your account's hardware records.
my $server_id = 87165;
# Declaring a new API service object for the SoftLayer_Hardware_Server API
# service.
my $client = SoftLayer::API::SOAP->new('SoftLayer_Hardware_Server', $server_id, $api_username, $api_key);
# Switchport statistics are measured off the server's network components. Use
# an object mask to network component records along with our server record.
    'networkComponents' => {},
# Making the call to retrieve our hardware record. Once we have that we can query
# the server's network components.
my $server = $client->getObject();
# If there was an error returned from the SoftLayer API then die out with the
# error message.
if ($server->fault) {
    die "Unable to retrieve server record. " . $server->faultstring;
# Separating our network components for easier processing later.
$server = $server->result;
my $network_components = $server->{networkComponents};
# Printing out a simple report header.
print "\nSwitchport statistics for " . $server->{fullyQualifiedDomainName} . "\n\n";
# Looping through our server's network components. For each NIC make a call to the
# SoftLayer_Network_Component API service method getPortStatics() to get a list
# of switchport statistics retrieved from the switch on the other side of your
# NIC. Print a simple report per NIC.
for my $i (0 .. $#{$network_components}) {
    my $component = $network_components->[$i];
    # Skiping the management network component.
    if ($component->{name} eq 'mgmt') {
    # It's all right to redeclare your API object.
    $client = SoftLayer::API::SOAP->new('SoftLayer_Network_Component', $component->{id}, $api_username, $api_key);
    # Retrieve switchport statistics for the NIC.
    my $stats = $client->getPortStatistics();
    # Make sure we didn't run into an error.
    if ($stats->fault) {
        die "Unable to retrieve switchport statics for " . $component->{name} . $component->{port} . ". " . $stats->faultstring;
    # Make boolean up/down responses easier to read.
    $stats = $stats->result;
    $stats->{administrativeStatus} = ($stats->{administrativeStatus} eq '1') ? 'Up' : 'Down';
    $stats->{operationalStatus} = ($stats->{operationalStatus} eq '1') ? 'Up' : 'Down';
    # Print our port's statistics report.
    print <<EOT;
Statistics for $component->{name}$component->{port} ($component->{primaryIpAddress})
Administrative status:        $stats->{administrativeStatus}
Operational status:           $stats->{operationalStatus}
MTU:                          $stats->{maximumTransmissionUnit}
Inbound octets (from server): $stats->{inOctets}
Outbound octets (to server):  $stats->{outOctets}
Inbound unicast packets:      $stats->{inUnicastPackets}
Outbound unicast packets:     $stats->{outUnicastPackets}
Inbound discarded packets:    $stats->{inDiscardPackets}
Outbound discarded packets:   $stats->{outDiscardPackets}
Inbound error packets:        $stats->{inErrorPackets}
Outbound error packets:       $stats->{outErrorPackets}



If this article contains any error, or leaves any of your questions unanswered, please help us out by opening up a github issue.
Open an issue