Local modifications to ClusterLabs/Anvil by Alteeve
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

291 lines
13 KiB

#!/usr/bin/perl
#
# This is an easier to read list of IPs and optional other details about the local network.
# When called without '--detailed', it shows interfaces with IPs and their MAC addresses. When called with
# '--detailed', it shows all interfaces, including their MTU and TX/RX data.
#
use strict;
use warnings;
use Anvil::Tools;
use Data::Dumper;
$| = 1;
my $THIS_FILE = ($0 =~ /^.*\/(.*)$/)[0];
my $running_directory = ($0 =~ /^(.*?)\/$THIS_FILE$/)[0];
if (($running_directory =~ /^\./) && ($ENV{PWD}))
{
$running_directory =~ s/^\./$ENV{PWD}/;
}
my $anvil = Anvil::Tools->new();
$anvil->data->{switches}{detailed} = 0;
$anvil->Get->switches();
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"switches::detailed" => $anvil->data->{switches}{detailed},
}});
$anvil->Database->connect();
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 1, key => "log_0132"});
if (not $anvil->data->{sys}{database}{connections})
{
# No databases, exit.
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, 'print' => 1, priority => "err", key => "error_0359"});
$anvil->nice_exit({exit_code => 1});
}
$anvil->data->{display}{lines} = [];
collect_data($anvil);
show_data($anvil);
# Show the results
foreach my $line (@{$anvil->data->{display}{lines}})
{
print $line."\n";
}
$anvil->nice_exit({exit_code => 0});
#############################################################################################################
# Functions #
#############################################################################################################
sub collect_data
{
my ($anvil) = @_;
# Call ip
$anvil->Network->get_ips({debug => 2});
my $short_host_name = $anvil->Get->short_host_name();
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { short_host_name => $short_host_name }});
$anvil->data->{longest}{interface} = 0;
$anvil->data->{longest}{ip_address} = 0;
$anvil->data->{longest}{subnet_mask} = 0;
$anvil->data->{longest}{mac_address} = 0;
$anvil->data->{longest}{gateway_string} = 0;
$anvil->data->{longest}{gateway_string} = 0;
$anvil->data->{longest}{tx_string} = 0;
$anvil->data->{longest}{rx_string} = 0;
$anvil->data->{longest}{dns_string} = 0;
foreach my $interface (sort {$a cmp $b} keys %{$anvil->data->{network}{$short_host_name}{interface}})
{
my $ip_address = $anvil->data->{network}{$short_host_name}{interface}{$interface}{ip};
my $subnet_mask = $anvil->data->{network}{$short_host_name}{interface}{$interface}{subnet_mask};
my $mac_address = $anvil->data->{network}{$short_host_name}{interface}{$interface}{mac_address};
my $mtu = $anvil->data->{network}{$short_host_name}{interface}{$interface}{mtu};
my $default_gateway = $anvil->data->{network}{$short_host_name}{interface}{$interface}{default_gateway};
my $gateway = $anvil->data->{network}{$short_host_name}{interface}{$interface}{gateway};
my $dns = $anvil->data->{network}{$short_host_name}{interface}{$interface}{dns};
my $tx_bytes = $anvil->data->{network}{$short_host_name}{interface}{$interface}{tx_bytes};
my $rx_bytes = $anvil->data->{network}{$short_host_name}{interface}{$interface}{rx_bytes};
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"s01:interface" => $interface,
"s02:ip_address" => $ip_address,
"s03:subnet_mask" => $subnet_mask,
"s04:mac_address" => $mac_address,
"s05:mtu" => $mtu,
"s06:default_gateway" => $default_gateway,
"s07:gateway" => $gateway,
"s08:dns" => $dns,
"s09:tx_bytes" => $tx_bytes,
"s10:rx_bytes" => $rx_bytes,
}});
if ((not $ip_address) && not ($anvil->data->{switches}{detailed}))
{
next;
}
my $say_is_dg = $default_gateway ? "*" : " ";
my $say_gateway = $gateway ? $gateway.$say_is_dg : " ".$say_is_dg;
my $say_tx = $anvil->Convert->bytes_to_human_readable({'bytes' => $tx_bytes});
my $say_rx = $anvil->Convert->bytes_to_human_readable({'bytes' => $rx_bytes});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"s1:say_gateway" => $say_gateway,
"s2:say_is_dg" => $say_is_dg,
"s3:tx_bytes" => $say_tx,
"s4:rx_bytes" => $say_rx,
}});
$anvil->data->{interface_data}{$interface}{ip_address} = $ip_address;
$anvil->data->{interface_data}{$interface}{subnet_mask} = $subnet_mask;
$anvil->data->{interface_data}{$interface}{mac_address} = $mac_address;
$anvil->data->{interface_data}{$interface}{gateway_string} = $say_gateway;
$anvil->data->{interface_data}{$interface}{tx_string} = $say_tx;
$anvil->data->{interface_data}{$interface}{rx_string} = $say_rx;
$anvil->data->{interface_data}{$interface}{dns_string} = $dns;
if (length($interface) > $anvil->data->{longest}{interface})
{
$anvil->data->{longest}{interface} = length($interface);
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"longest::interface" => $anvil->data->{longest}{interface},
}});
}
if (length($anvil->data->{interface_data}{$interface}{ip_address}) > $anvil->data->{longest}{ip_address})
{
$anvil->data->{longest}{ip_address} = length($anvil->data->{interface_data}{$interface}{ip_address});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"longest::ip_address" => $anvil->data->{longest}{ip_address},
}});
}
if (length($anvil->data->{interface_data}{$interface}{subnet_mask}) > $anvil->data->{longest}{subnet_mask})
{
$anvil->data->{longest}{subnet_mask} = length($anvil->data->{interface_data}{$interface}{subnet_mask});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"longest::subnet_mask" => $anvil->data->{longest}{subnet_mask},
}});
}
if (length($anvil->data->{interface_data}{$interface}{mac_address}) > $anvil->data->{longest}{mac_address})
{
$anvil->data->{longest}{mac_address} = length($anvil->data->{interface_data}{$interface}{mac_address});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"longest::mac_address" => $anvil->data->{longest}{mac_address},
}});
}
if (length($anvil->data->{interface_data}{$interface}{gateway_string}) > $anvil->data->{longest}{gateway_string})
{
$anvil->data->{longest}{gateway_string} = length($anvil->data->{interface_data}{$interface}{gateway_string});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"longest::gateway_string" => $anvil->data->{longest}{gateway_string},
}});
}
if (length($anvil->data->{interface_data}{$interface}{tx_string}) > $anvil->data->{longest}{tx_string})
{
$anvil->data->{longest}{tx_string} = length($anvil->data->{interface_data}{$interface}{tx_string});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"longest::tx_string" => $anvil->data->{longest}{tx_string},
}});
}
if (length($anvil->data->{interface_data}{$interface}{rx_string}) > $anvil->data->{longest}{rx_string})
{
$anvil->data->{longest}{rx_string} = length($anvil->data->{interface_data}{$interface}{rx_string});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"longest::rx_string" => $anvil->data->{longest}{rx_string},
}});
}
if (length($anvil->data->{interface_data}{$interface}{dns_string}) > $anvil->data->{longest}{dns_string})
{
$anvil->data->{longest}{dns_string} = length($anvil->data->{interface_data}{$interface}{dns_string});
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"longest::dns_string" => $anvil->data->{longest}{dns_string},
}});
}
}
return(0);
}
sub show_data
{
my ($anvil) = @_;
my $interface_header = $anvil->Words->string({key => "header_0082"});
my $longest_interface = length($interface_header) > $anvil->data->{longest}{interface} ? length($interface_header) : $anvil->data->{longest}{interface};
my $ip_address_header = $anvil->Words->string({key => "header_0025"});
my $longest_ip_address = length($ip_address_header) > $anvil->data->{longest}{ip_address} ? length($ip_address_header) : $anvil->data->{longest}{ip_address};
my $subnet_mask_header = $anvil->Words->string({key => "striker_0025"});
my $longest_subnet_mask = length($subnet_mask_header) > $anvil->data->{longest}{subnet_mask} ? length($subnet_mask_header) : $anvil->data->{longest}{subnet_mask};
my $mac_address_header = $anvil->Words->string({key => "header_0002"});
my $longest_mac_address = length($mac_address_header) > $anvil->data->{longest}{mac_address} ? length($mac_address_header) : $anvil->data->{longest}{mac_address};
my $gateway_header = $anvil->Words->string({key => "header_0083"});
my $longest_gateway_string = length($gateway_header) > $anvil->data->{longest}{gateway_string} ? length($gateway_header) : $anvil->data->{longest}{gateway_string};
my $tx_header = $anvil->Words->string({key => "header_0084"});
my $longest_tx_string = length($tx_header) > $anvil->data->{longest}{tx_string} ? length($tx_header) : $anvil->data->{longest}{tx_string};
my $rx_header = $anvil->Words->string({key => "header_0085"});
my $longest_rx_string = length($rx_header) > $anvil->data->{longest}{rx_string} ? length($rx_header) : $anvil->data->{longest}{rx_string};
my $dns_header = $anvil->Words->string({key => "striker_0037"});
my $longest_dns_string = length($dns_header) > $anvil->data->{longest}{dns_string} ? length($dns_header) : $anvil->data->{longest}{dns_string};
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
"s1:longest_interface" => $longest_interface,
"s2:longest_ip_address" => $longest_ip_address,
"s3:longest_subnet_mask" => $longest_subnet_mask,
"s4:longest_mac_address" => $longest_mac_address,
"s5:longest_gateway_string" => $longest_gateway_string,
}});
# Interface
my $break_line = "+-".sprintf("%0${longest_interface}d", 0);
my $header_line = "| ".sprintf("%-${longest_interface}s", $interface_header);
# IP Address
$break_line .= "-+-".sprintf("%0${longest_ip_address}d", 0);
$header_line .= " | ".sprintf("%-${longest_ip_address}s", $ip_address_header);
# Subnet Mask
$break_line .= "-+-".sprintf("%0${longest_subnet_mask}d", 0);
$header_line .= " | ".sprintf("%-${longest_subnet_mask}s", $subnet_mask_header);
# MAC Address
$break_line .= "-+-".sprintf("%0${longest_mac_address}d", 0);
$header_line .= " | ".sprintf("%-${longest_mac_address}s", $mac_address_header);
if ($anvil->data->{switches}{detailed})
{
# (DG) Gateway
$break_line .= "-+-".sprintf("%0${longest_gateway_string}d", 0);
$header_line .= " | ".sprintf("%-${longest_gateway_string}s", $gateway_header);
# Transmitted
$break_line .= "-+-".sprintf("%0${longest_tx_string}d", 0);
$header_line .= " | ".sprintf("%-${longest_tx_string}s", $tx_header);
# Received
$break_line .= "-+-".sprintf("%0${longest_rx_string}d", 0);
$header_line .= " | ".sprintf("%-${longest_rx_string}s", $rx_header);
# DNS
$break_line .= "-+-".sprintf("%0${longest_dns_string}d", 0);
$header_line .= " | ".sprintf("%-${longest_dns_string}s", $dns_header);
}
$break_line .= "-+";
$header_line .= " |";
$break_line =~ s/0/-/g;
push @{$anvil->data->{display}{lines}}, $break_line;
push @{$anvil->data->{display}{lines}}, $header_line;
push @{$anvil->data->{display}{lines}}, $break_line;
foreach my $interface (sort {$a cmp $b} keys %{$anvil->data->{interface_data}})
{
my $ip_address = $anvil->data->{interface_data}{$interface}{ip_address};
my $subnet_mask = $anvil->data->{interface_data}{$interface}{subnet_mask};
my $mac_address = $anvil->data->{interface_data}{$interface}{mac_address};
my $gateway_string = $anvil->data->{interface_data}{$interface}{gateway_string};
my $tx_string = $anvil->data->{interface_data}{$interface}{tx_string};
my $rx_string = $anvil->data->{interface_data}{$interface}{rx_string};
my $dns_string = $anvil->data->{interface_data}{$interface}{dns_string};
my $interface_line = "| ".sprintf("%-${longest_interface}s", $interface);
$interface_line .= " | ".sprintf("%-${longest_ip_address}s", $ip_address);
$interface_line .= " | ".sprintf("%-${longest_subnet_mask}s", $subnet_mask);
$interface_line .= " | ".sprintf("%-${longest_mac_address}s", $mac_address);
if ($anvil->data->{switches}{detailed})
{
$interface_line .= " | ".sprintf("%-${longest_gateway_string}s", $gateway_string);
$interface_line .= " | ".sprintf("%-${longest_tx_string}s", $tx_string);
$interface_line .= " | ".sprintf("%-${longest_rx_string}s", $rx_string);
$interface_line .= " | ".sprintf("%-${longest_dns_string}s", $dns_string);
}
$interface_line .= " |";
push @{$anvil->data->{display}{lines}}, $interface_line;
}
push @{$anvil->data->{display}{lines}}, $break_line;
return(0);
}