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.
635 lines
28 KiB
635 lines
28 KiB
2 years ago
|
#!/usr/bin/perl
|
||
|
|
||
|
use strict;
|
||
|
use warnings;
|
||
|
use Anvil::Tools;
|
||
|
use Data::Dumper;
|
||
|
use Text::Diff;
|
||
|
|
||
|
$| = 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();
|
||
|
|
||
|
# Get a list of all interfaces with IP addresses.
|
||
|
$anvil->Get->switches({list => [
|
||
|
"add",
|
||
|
"edit",
|
||
|
"delete",
|
||
|
"mail-servers",
|
||
|
"mail-server-uuid",
|
||
|
"mail-server-address",
|
||
|
"mail-server-port",
|
||
|
"mail-server-username",
|
||
|
"mail-server-password",
|
||
|
"mail-server-security",
|
||
|
"mail-server-authentication",
|
||
|
"mail-server-helo-domain",
|
||
|
"notifications",
|
||
|
"notification-uuid",
|
||
|
"notification-recipient-uuid",
|
||
|
"notification-host-uuid",
|
||
|
"notification-alert-level",
|
||
|
"recipients",
|
||
|
"recipient-uuid",
|
||
|
"recipient-name",
|
||
|
"recipient-email",
|
||
|
"recipient-language",
|
||
|
"recipient-level",
|
||
|
]});
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => $anvil->data->{switches}});
|
||
|
|
||
|
$anvil->Database->connect();
|
||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, secure => 0, 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_0003" });
|
||
|
$anvil->nice_exit({ exit_code => 1 });
|
||
|
}
|
||
|
|
||
|
check_switches($anvil);
|
||
|
|
||
|
if ($anvil->data->{switches}{"mail-servers"})
|
||
|
{
|
||
|
handle_mail_servers($anvil);
|
||
|
}
|
||
|
elsif ($anvil->data->{switches}{"notifications"})
|
||
|
{
|
||
|
handle_notifications($anvil);
|
||
|
}
|
||
|
elsif ($anvil->data->{switches}{"recipients"})
|
||
|
{
|
||
|
handle_recipients($anvil);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
show_existing($anvil);
|
||
|
}
|
||
|
|
||
|
$anvil->nice_exit({exit_code => 0});
|
||
|
|
||
|
|
||
|
#############################################################################################################
|
||
|
# Functions #
|
||
|
#############################################################################################################
|
||
|
|
||
|
sub recipients
|
||
|
{
|
||
|
my ($anvil) = @_;
|
||
|
|
||
|
|
||
|
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
sub handle_mail_servers
|
||
|
{
|
||
|
my ($anvil) = @_;
|
||
|
|
||
|
|
||
|
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
sub handle_notifications
|
||
|
{
|
||
|
my ($anvil) = @_;
|
||
|
|
||
|
|
||
|
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
# Show existing mail servers.
|
||
|
sub show_existing
|
||
|
{
|
||
|
my ($anvil) = @_;
|
||
|
|
||
|
# Show mail servers
|
||
|
$anvil->data->{longest}{mail_server_address} = 0;
|
||
|
$anvil->data->{longest}{mail_server_port} = 0;
|
||
|
$anvil->data->{longest}{mail_server_username} = 0;
|
||
|
$anvil->data->{longest}{mail_server_password} = 0;
|
||
|
$anvil->data->{longest}{mail_server_security} = 0;
|
||
|
$anvil->data->{longest}{mail_server_authentication} = 0;
|
||
|
$anvil->data->{longest}{mail_server_helo_domain} = 0;
|
||
|
$anvil->data->{longest}{notification_recipient_name} = 0;
|
||
|
$anvil->data->{longest}{notification_host_name} = 0;
|
||
|
$anvil->data->{longest}{notification_anvil_name} = 0;
|
||
|
$anvil->data->{longest}{notification_alert_level} = 0;
|
||
|
$anvil->data->{longest}{recipient_name} = 0;
|
||
|
$anvil->data->{longest}{recipient_email} = 0;
|
||
|
$anvil->data->{longest}{recipient_language} = 0;
|
||
|
$anvil->data->{longest}{recipient_alert_level} = 0;
|
||
|
|
||
|
$anvil->data->{say_alert}{1} = "1 (".$anvil->Words->string({key => "unit_0024"}).")";
|
||
|
$anvil->data->{say_alert}{2} = "2 (".$anvil->Words->string({key => "unit_0025"}).")";
|
||
|
$anvil->data->{say_alert}{3} = "3 (".$anvil->Words->string({key => "unit_0026"}).")";
|
||
|
$anvil->data->{say_alert}{4} = "4 (".$anvil->Words->string({key => "unit_0027"}).")";
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'say_alert::1' => $anvil->data->{say_alert}{1},
|
||
|
'say_alert::2' => $anvil->data->{say_alert}{2},
|
||
|
'say_alert::3' => $anvil->data->{say_alert}{3},
|
||
|
'say_alert::4' => $anvil->data->{say_alert}{4},
|
||
|
}});
|
||
|
|
||
|
# Get longest counts.
|
||
|
foreach my $mail_server_address (sort {$a cmp $b} keys %{$anvil->data->{mail_servers}{address_to_uuid}})
|
||
|
{
|
||
|
my $mail_server_uuid = $anvil->data->{mail_servers}{address_to_uuid}{$mail_server_address};
|
||
|
my $mail_server_port = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_port};
|
||
|
my $mail_server_username = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_username};
|
||
|
my $mail_server_password = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_password};
|
||
|
my $mail_server_security = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_security};
|
||
|
my $mail_server_authentication = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_authentication};
|
||
|
my $mail_server_helo_domain = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_helo_domain};
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
's1:mail_server_address' => $mail_server_address,
|
||
|
's2:mail_server_uuid' => $mail_server_uuid,
|
||
|
's3:mail_server_port' => $mail_server_port,
|
||
|
's4:mail_server_username' => $mail_server_username,
|
||
|
's5:mail_server_password' => $anvil->Log->is_secure($mail_server_password),
|
||
|
's6:mail_server_security' => $mail_server_security,
|
||
|
's7:mail_server_authentication' => $mail_server_authentication,
|
||
|
's8:mail_server_helo_domain' => $mail_server_helo_domain,
|
||
|
}});
|
||
|
|
||
|
if (length($mail_server_address) > $anvil->data->{longest}{mail_server_address})
|
||
|
{
|
||
|
$anvil->data->{longest}{mail_server_address} = length($mail_server_address);
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::mail_server_address' => $anvil->data->{longest}{mail_server_address},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
if (length($mail_server_port) > $anvil->data->{longest}{mail_server_port})
|
||
|
{
|
||
|
$anvil->data->{longest}{mail_server_port} = length($mail_server_port);
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::mail_server_port' => $anvil->data->{longest}{mail_server_port},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
if (length($mail_server_username) > $anvil->data->{longest}{mail_server_username})
|
||
|
{
|
||
|
$anvil->data->{longest}{mail_server_username} = length($mail_server_username);
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::mail_server_username' => $anvil->data->{longest}{mail_server_username},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
if (length($mail_server_password) > $anvil->data->{longest}{mail_server_password})
|
||
|
{
|
||
|
$anvil->data->{longest}{mail_server_password} = length($mail_server_password);
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::mail_server_password' => $anvil->data->{longest}{mail_server_password},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
if (length($mail_server_security) > $anvil->data->{longest}{mail_server_security})
|
||
|
{
|
||
|
$anvil->data->{longest}{mail_server_security} = length($mail_server_security);
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::mail_server_security' => $anvil->data->{longest}{mail_server_security},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
if (length($mail_server_authentication) > $anvil->data->{longest}{mail_server_authentication})
|
||
|
{
|
||
|
$anvil->data->{longest}{mail_server_authentication} = length($mail_server_authentication);
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::mail_server_authentication' => $anvil->data->{longest}{mail_server_authentication},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
if (length($mail_server_helo_domain) > $anvil->data->{longest}{mail_server_helo_domain})
|
||
|
{
|
||
|
$anvil->data->{longest}{mail_server_helo_domain} = length($mail_server_helo_domain);
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::mail_server_helo_domain' => $anvil->data->{longest}{mail_server_helo_domain},
|
||
|
}});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
foreach my $notification_uuid (sort {$a cmp $b} keys %{$anvil->data->{notifications}{notification_uuid}})
|
||
|
{
|
||
|
my $notification_recipient_uuid = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{notification_recipient_uuid};
|
||
|
my $notification_recipient_name = $anvil->data->{recipients}{recipient_uuid}{$notification_recipient_uuid}{recipient_name};
|
||
|
my $notification_recipient_email = $anvil->data->{recipients}{recipient_uuid}{$notification_recipient_uuid}{recipient_email};
|
||
|
my $say_recipient = $notification_recipient_name." <".$notification_recipient_email.">";
|
||
|
my $notification_host_uuid = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{notification_host_uuid};
|
||
|
my $notification_short_host_name = $anvil->data->{hosts}{host_uuid}{$notification_host_uuid}{short_host_name};
|
||
|
my $say_anvil_name = $anvil->data->{hosts}{host_uuid}{$notification_host_uuid}{anvil_name} ? $anvil->data->{hosts}{host_uuid}{$notification_host_uuid}{anvil_name} : "--";
|
||
|
my $notification_alert_level = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{notification_alert_level};
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
's1:notification_uuid' => $notification_uuid,
|
||
|
's2:notification_recipient_uuid' => $notification_recipient_uuid,
|
||
|
's3:notification_recipient_name' => $notification_recipient_name,
|
||
|
's4:notification_recipient_email' => $notification_recipient_email,
|
||
|
's5:say_recipient' => $say_recipient,
|
||
|
's6:notification_host_uuid' => $notification_host_uuid,
|
||
|
's7:notification_short_host_name' => $notification_short_host_name,
|
||
|
's8:say_anvil_name' => $say_anvil_name,
|
||
|
's9:notification_alert_level' => $notification_alert_level,
|
||
|
}});
|
||
|
|
||
|
if (length($say_recipient) > $anvil->data->{longest}{notification_recipient_name})
|
||
|
{
|
||
|
$anvil->data->{longest}{notification_recipient_name} = length($say_recipient);
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::notification_recipient_name' => $anvil->data->{longest}{notification_recipient_name},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
if (length($notification_short_host_name) > $anvil->data->{longest}{notification_host_name})
|
||
|
{
|
||
|
$anvil->data->{longest}{notification_host_name} = length($notification_short_host_name);
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::notification_host_name' => $anvil->data->{longest}{notification_host_name},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
if (length($say_anvil_name) > $anvil->data->{longest}{notification_anvil_name})
|
||
|
{
|
||
|
$anvil->data->{longest}{notification_anvil_name} = length($say_anvil_name);
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::notification_anvil_name' => $anvil->data->{longest}{notification_anvil_name},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
if (length($anvil->data->{say_alert}{$notification_alert_level}) > $anvil->data->{longest}{notification_alert_level})
|
||
|
{
|
||
|
$anvil->data->{longest}{notification_alert_level} = length($anvil->data->{say_alert}{$notification_alert_level});
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::notification_alert_level' => $anvil->data->{longest}{notification_alert_level},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
# This will let us display over-rides by user in order.
|
||
|
$anvil->data->{notifications}{name_to_uuid}{$notification_recipient_name} = $notification_uuid;
|
||
|
$anvil->data->{notifications}{notification_uuid}{$notification_uuid}{recipient_name} = $say_recipient;
|
||
|
$anvil->data->{notifications}{notification_uuid}{$notification_uuid}{anvil_name} = $say_anvil_name;
|
||
|
$anvil->data->{notifications}{notification_uuid}{$notification_uuid}{host_uuid} = $notification_host_uuid;
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
"s1:notifications::name_to_uuid::${notification_recipient_name}" => $anvil->data->{notifications}{name_to_uuid}{$notification_recipient_name},
|
||
|
"s2:notifications::notification_uuid::${notification_uuid}::recipient_name" => $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{recipient_name},
|
||
|
"s3:notifications::notification_uuid::${notification_uuid}::anvil_name" => $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{anvil_name},
|
||
|
"s4:notifications::notification_uuid::${notification_uuid}::host_uuid" => $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{host_uuid},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
foreach my $recipient_name (sort {$a cmp $b} keys %{$anvil->data->{recipients}{name_to_uuid}})
|
||
|
{
|
||
|
my $recipient_uuid = $anvil->data->{recipients}{name_to_uuid}{$recipient_name};
|
||
|
my $recipient_email = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_email};
|
||
|
my $recipient_language = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_language};
|
||
|
my $say_language = $anvil->data->{sys}{languages}{$recipient_language};
|
||
|
my $recipient_level = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_level};
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
"s1:recipient_name" => $recipient_name,
|
||
|
"s2:recipient_uuid" => $recipient_uuid,
|
||
|
"s3:recipient_email" => $recipient_email,
|
||
|
"s4:recipient_language" => $recipient_language,
|
||
|
"s5:say_language" => $say_language,
|
||
|
"s6:recipient_level" => $recipient_level,
|
||
|
}});
|
||
|
|
||
|
if (length($recipient_name) > $anvil->data->{longest}{recipient_name})
|
||
|
{
|
||
|
$anvil->data->{longest}{recipient_name} = length($recipient_name);
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::recipient_name' => $anvil->data->{longest}{recipient_name},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
if (length($recipient_email) > $anvil->data->{longest}{recipient_email})
|
||
|
{
|
||
|
$anvil->data->{longest}{recipient_email} = length($recipient_email);
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::recipient_email' => $anvil->data->{longest}{recipient_email},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
if (length($say_language) > $anvil->data->{longest}{recipient_language})
|
||
|
{
|
||
|
$anvil->data->{longest}{recipient_language} = length($say_language);
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::recipient_language' => $anvil->data->{longest}{recipient_language},
|
||
|
}});
|
||
|
}
|
||
|
|
||
|
if (length($anvil->data->{say_alert}{$recipient_level}) > $anvil->data->{longest}{recipient_alert_level})
|
||
|
{
|
||
|
$anvil->data->{longest}{recipient_alert_level} = length($anvil->data->{say_alert}{$recipient_level});
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
'longest::recipient_alert_level' => $anvil->data->{longest}{recipient_alert_level},
|
||
|
}});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Now show the data.
|
||
|
# my $break_line = "+-".sprintf("%0${longest_anvil_name}d", 0);
|
||
|
# my $header_line = "| ".sprintf("%-${longest_anvil_name}s", $anvil_header)." ";
|
||
|
# my $blank_lead = "| ".sprintf("%-${longest_anvil_name}s", $anvil_header)." ";
|
||
|
print "-=] Mail Servers;\n";
|
||
|
print "Address, Port, Login User, Password, Security, Authentication, HELO Domaon, Mail Server UUID\n";
|
||
|
my $mail_servers = 0;
|
||
|
foreach my $mail_server_address (sort {$a cmp $b} keys %{$anvil->data->{mail_servers}{address_to_uuid}})
|
||
|
{
|
||
|
my $mail_server_uuid = $anvil->data->{mail_servers}{address_to_uuid}{$mail_server_address};
|
||
|
my $mail_server_port = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_port};
|
||
|
my $mail_server_username = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_username};
|
||
|
my $mail_server_password = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_password};
|
||
|
my $mail_server_security = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_security};
|
||
|
my $mail_server_authentication = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_authentication};
|
||
|
my $mail_server_helo_domain = $anvil->data->{mail_servers}{mail_server}{$mail_server_uuid}{mail_server_helo_domain};
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
's1:mail_server_address' => $mail_server_address,
|
||
|
's2:mail_server_uuid' => $mail_server_uuid,
|
||
|
's3:mail_server_port' => $mail_server_port,
|
||
|
's4:mail_server_username' => $mail_server_username,
|
||
|
's5:mail_server_password' => $anvil->Log->is_secure($mail_server_password),
|
||
|
's6:mail_server_security' => $mail_server_security,
|
||
|
's7:mail_server_authentication' => $mail_server_authentication,
|
||
|
's8:mail_server_helo_domain' => $mail_server_helo_domain,
|
||
|
}});
|
||
|
|
||
|
print $mail_server_address.", ".$mail_server_port.", ".$mail_server_username.", ".$mail_server_password.", ".$mail_server_security.", ".$mail_server_authentication.", ".$mail_server_helo_domain.", ".$mail_server_uuid."\n";
|
||
|
$mail_servers++;
|
||
|
}
|
||
|
if (not $mail_servers)
|
||
|
{
|
||
|
print "No mail servers configured yet!\n";
|
||
|
}
|
||
|
print "\n";
|
||
|
print "-=] Recipients;\n";
|
||
|
print "Name, Email, Alert Level, Language, Recipient UUID\n";
|
||
|
my $recipients = 0;
|
||
|
foreach my $recipient_name (sort {$a cmp $b} keys %{$anvil->data->{recipients}{name_to_uuid}})
|
||
|
{
|
||
|
my $recipient_uuid = $anvil->data->{recipients}{name_to_uuid}{$recipient_name};
|
||
|
my $recipient_email = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_email};
|
||
|
my $recipient_language = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_language};
|
||
|
my $say_language = $anvil->data->{sys}{languages}{$recipient_language};
|
||
|
my $recipient_level = $anvil->data->{recipients}{recipient_uuid}{$recipient_uuid}{recipient_level};
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
"s1:recipient_name" => $recipient_name,
|
||
|
"s2:recipient_uuid" => $recipient_uuid,
|
||
|
"s3:recipient_email" => $recipient_email,
|
||
|
"s4:recipient_language" => $recipient_language,
|
||
|
"s5:say_language" => $say_language,
|
||
|
"s6:recipient_level" => $recipient_level,
|
||
|
}});
|
||
|
|
||
|
print $recipient_name.", ".$recipient_email.", ".$anvil->data->{say_alert}{$recipient_level}.", ".$say_language.", ".$recipient_uuid."\n";
|
||
|
$recipients++;
|
||
|
}
|
||
|
if (not $recipients)
|
||
|
{
|
||
|
print "No alert recipients added yet!\n";
|
||
|
}
|
||
|
|
||
|
print "\n";
|
||
|
print "-=] Notification Over-rides;\n";
|
||
|
print "Recipient, Host, Anvil!, Alert Level, Notification UUID\n";
|
||
|
my $notifications = 0;
|
||
|
foreach my $recipient_name (sort {$a cmp $b} keys %{$anvil->data->{notifications}{name_to_uuid}})
|
||
|
{
|
||
|
my $notification_uuid = $anvil->data->{notifications}{name_to_uuid}{$recipient_name};
|
||
|
my $say_recipient = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{recipient_name};
|
||
|
my $say_anvil_name = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{anvil_name};
|
||
|
my $host_uuid = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{notification_host_uuid};
|
||
|
my $short_host_name = $anvil->data->{hosts}{host_uuid}{$host_uuid}{short_host_name};
|
||
|
my $alert_level = $anvil->data->{notifications}{notification_uuid}{$notification_uuid}{notification_alert_level};
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
's1:notification_uuid' => $notification_uuid,
|
||
|
's2:say_recipient' => $say_recipient,
|
||
|
's3:say_anvil_name' => $say_anvil_name,
|
||
|
's4:alert_level' => $alert_level,
|
||
|
}});
|
||
|
|
||
|
print $say_recipient.", ".$short_host_name.", ".$say_anvil_name.", ".$anvil->data->{say_alert}{$alert_level}.", ".$notification_uuid."\n";
|
||
|
$notifications++;
|
||
|
}
|
||
|
if (not $notifications)
|
||
|
{
|
||
|
print "No notification over-rides found.\n";
|
||
|
}
|
||
|
|
||
|
# Lastly, show machines.
|
||
|
print "\n";
|
||
|
print "-=] Striker Dashboards;\n";
|
||
|
foreach my $host_name (sort {$a cmp $b} keys %{$anvil->data->{sys}{hosts}{by_name}})
|
||
|
{
|
||
|
my $host_uuid = $anvil->data->{sys}{hosts}{by_name}{$host_name};
|
||
|
my $host_type = $anvil->data->{hosts}{host_uuid}{$host_uuid}{host_type};
|
||
|
next if $host_type ne "striker";
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => {
|
||
|
's1:host_name' => $host_name,
|
||
|
's2:host_uuid' => $host_uuid,
|
||
|
}});
|
||
|
|
||
|
print "- ".$host_name.", UUID: [".$host_uuid."]\n";
|
||
|
}
|
||
|
print "\n";
|
||
|
print "-=] Anvil! Nodes;\n";
|
||
|
foreach my $anvil_name (sort {$a cmp $b} keys %{$anvil->data->{anvils}{anvil_name}})
|
||
|
{
|
||
|
my $anvil_uuid = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_uuid};
|
||
|
my $anvil_description = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_description};
|
||
|
my $anvil_node1_host_uuid = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_node1_host_uuid};
|
||
|
my $anvil_node2_host_uuid = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_node2_host_uuid};
|
||
|
my $anvil_dr1_host_uuid = $anvil->data->{anvils}{anvil_name}{$anvil_name}{anvil_dr1_host_uuid};
|
||
|
my $say_dr1_name = $anvil_dr1_host_uuid ? $anvil->data->{hosts}{host_uuid}{$anvil_dr1_host_uuid}{short_host_name} : "--";
|
||
|
my $say_dr1_uuid = $anvil_dr1_host_uuid ? $anvil_dr1_host_uuid : "--";
|
||
|
print "- Name: [".$anvil_name."], UUID: [".$anvil_uuid."], Description: [".$anvil_uuid."]\n";
|
||
|
print " - Node 1: .. [".$anvil->data->{hosts}{host_uuid}{$anvil_node1_host_uuid}{short_host_name}."], UUID: [".$anvil_node1_host_uuid."]\n";
|
||
|
print " - Node 2: .. [".$anvil->data->{hosts}{host_uuid}{$anvil_node2_host_uuid}{short_host_name}."], UUID: [".$anvil_node2_host_uuid."]\n";
|
||
|
print " - DR Host 1: [".$say_dr1_name."], UUID: [".$say_dr1_uuid."]\n";
|
||
|
}
|
||
|
|
||
|
return(0);
|
||
|
}
|
||
|
|
||
|
# This sanity checks input switches. By necessity, this also loads data from the database.
|
||
|
sub check_switches
|
||
|
{
|
||
|
my ($anvil) = @_;
|
||
|
|
||
|
# Load data
|
||
|
$anvil->Database->get_hosts();
|
||
|
$anvil->Database->get_anvils();
|
||
|
$anvil->Database->get_mail_servers();
|
||
|
$anvil->Database->get_recipients();
|
||
|
$anvil->Database->get_notifications();
|
||
|
$anvil->Words->language_list();
|
||
|
|
||
|
### Now sanity check
|
||
|
my $problem = 0;
|
||
|
|
||
|
# Validate UUIDs.
|
||
|
foreach my $switch ("mail-server-uuid", "notification-uuid", "recipient-uuid", "notification-recipient-uuid", "notification-host-uuid")
|
||
|
{
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { switch => $switch }});
|
||
|
if (($anvil->data->{switches}{$switch}) && (not $anvil->Validate->uuid({uuid => $anvil->data->{switches}{$switch}})))
|
||
|
{
|
||
|
# Invalid UUID.
|
||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0380", variables => {
|
||
|
uuid => $anvil->data->{switches}{$switch},
|
||
|
switch => "--".$switch,
|
||
|
}});
|
||
|
|
||
|
$problem = 1;
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Validate domain or IP data.
|
||
|
foreach my $switch ("mail-server-address", "mail-server-helo-domain")
|
||
|
{
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { switch => $switch }});
|
||
|
if ($anvil->data->{switches}{$switch})
|
||
|
{
|
||
|
# Make sure it's a domain or IP address.
|
||
|
if ((not $anvil->Validate->domain_name({name => $anvil->data->{switches}{$switch}})) && (not $anvil->Validate->ip({ip => $anvil->data->{switches}{$switch}})))
|
||
|
{
|
||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0381", variables => {
|
||
|
name => $anvil->data->{switches}{$switch},
|
||
|
switch => "--".$switch,
|
||
|
}});
|
||
|
|
||
|
$problem = 1;
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }});
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Check log levels.
|
||
|
foreach my $switch ("notification-alert-level", "recipient-level")
|
||
|
{
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { switch => $switch }});
|
||
|
if ($anvil->data->{switches}{$switch})
|
||
|
{
|
||
|
# If they used a level name, convert it to a number.
|
||
|
# 1 = "critical" alerts only
|
||
|
# 2 = "warning" and critical alerts
|
||
|
# 3 = "notice", warning and critical alerts
|
||
|
# 4 = "info"; All alerts. This generates almost constant alerts!
|
||
|
if ($anvil->data->{switches}{$switch} eq "critical")
|
||
|
{
|
||
|
$anvil->data->{switches}{$switch} = 1;
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::".$switch => $anvil->data->{switches}{$switch} }});
|
||
|
}
|
||
|
elsif ($anvil->data->{switches}{$switch} eq "warning")
|
||
|
{
|
||
|
$anvil->data->{switches}{$switch} = 2;
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::".$switch => $anvil->data->{switches}{$switch} }});
|
||
|
}
|
||
|
elsif ($anvil->data->{switches}{$switch} eq "notice")
|
||
|
{
|
||
|
$anvil->data->{switches}{$switch} = 3;
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::".$switch => $anvil->data->{switches}{$switch} }});
|
||
|
}
|
||
|
elsif ($anvil->data->{switches}{$switch} eq "info")
|
||
|
{
|
||
|
$anvil->data->{switches}{$switch} = 4;
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::".$switch => $anvil->data->{switches}{$switch} }});
|
||
|
}
|
||
|
|
||
|
if (($anvil->data->{switches}{$switch} =~ /\D/) or
|
||
|
($anvil->data->{switches}{$switch} < 1) or
|
||
|
($anvil->data->{switches}{$switch} > 4))
|
||
|
{
|
||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0382", variables => {
|
||
|
level => $anvil->data->{switches}{$switch},
|
||
|
switch => "--".$switch,
|
||
|
}});
|
||
|
|
||
|
$problem = 1;
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }});
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Ports (there's only one)
|
||
|
if ($anvil->data->{switches}{"mail-server-port"})
|
||
|
{
|
||
|
# Make sure it's a valid port.
|
||
|
if (($anvil->data->{switches}{"mail-server-port"} =~ /\D/) or
|
||
|
($anvil->data->{switches}{"mail-server-port"} < 1) or
|
||
|
($anvil->data->{switches}{"mail-server-port"} > 65535))
|
||
|
{
|
||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0383", variables => {
|
||
|
port => $anvil->data->{switches}{"mail-server-port"},
|
||
|
switch => "--mail-server-port",
|
||
|
}});
|
||
|
|
||
|
$problem = 1;
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Make sure mail server security is correct.
|
||
|
if ($anvil->data->{switches}{"mail-server-security"})
|
||
|
{
|
||
|
$anvil->data->{switches}{"mail-server-security"} = lc($anvil->data->{switches}{"mail-server-security"});
|
||
|
if (($anvil->data->{switches}{"mail-server-security"} ne "none") &&
|
||
|
($anvil->data->{switches}{"mail-server-security"} ne "starttls") &&
|
||
|
($anvil->data->{switches}{"mail-server-security"} ne "tls-ssl"))
|
||
|
{
|
||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0384", variables => {
|
||
|
security => $anvil->data->{switches}{"mail-server-security"},
|
||
|
}});
|
||
|
|
||
|
$problem = 1;
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($anvil->data->{switches}{"mail-server-authentication"})
|
||
|
{
|
||
|
$anvil->data->{switches}{"mail-server-authentication"} = lc($anvil->data->{switches}{"mail-server-authentication"});
|
||
|
if (($anvil->data->{switches}{"mail-server-authentication"} ne "none") &&
|
||
|
($anvil->data->{switches}{"mail-server-authentication"} ne "plain-text") &&
|
||
|
($anvil->data->{switches}{"mail-server-authentication"} ne "encrypted"))
|
||
|
{
|
||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0385", variables => {
|
||
|
auth => $anvil->data->{switches}{"mail-server-authentication"},
|
||
|
}});
|
||
|
|
||
|
$problem = 1;
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }});
|
||
|
}
|
||
|
}
|
||
|
if ($anvil->data->{switches}{"recipient-email"})
|
||
|
{
|
||
|
if (not $anvil->Validate->email({email => $anvil->data->{switches}{"recipient-email"}}))
|
||
|
{
|
||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 2, key => "error_0386", variables => {
|
||
|
email => $anvil->data->{switches}{"recipient-email"},
|
||
|
}});
|
||
|
|
||
|
$problem = 1;
|
||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { problem => $problem }});
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Later, we'll need to parse the language file, for now, we always force 'en_CA'.
|
||
|
$anvil->data->{switches}{"recipient-language"} = "en_CA";
|
||
|
|
||
|
# If there's a problem, exit now.
|
||
|
if ($problem)
|
||
|
{
|
||
|
$anvil->nice_exit({exit_code => 1});
|
||
|
}
|
||
|
|
||
|
return(0);
|
||
|
}
|