* Renamed tools/anvil-reboot-needed to tools/anvil-manage-power and started adding support for rebooting and powering off to it.
* Created the Anvil::Tools::Jobs module to handle general job processing task. Moved 'update_progress' from tools/anvil-update-system to it and generalized it. * Added some missing CDATA wrappers to the words XML file strings with '>' in it. Signed-off-by: Digimer <digimer@alteeve.ca>main
parent
962ff89fc5
commit
545f9a9bb5
10 changed files with 563 additions and 207 deletions
@ -0,0 +1,279 @@ |
|||||||
|
package Anvil::Tools::Job; |
||||||
|
# |
||||||
|
# This module contains methods used in job handling |
||||||
|
# |
||||||
|
|
||||||
|
use strict; |
||||||
|
use warnings; |
||||||
|
use Data::Dumper; |
||||||
|
use Scalar::Util qw(weaken isweak); |
||||||
|
|
||||||
|
our $VERSION = "3.0.0"; |
||||||
|
my $THIS_FILE = "Job.pm"; |
||||||
|
|
||||||
|
### Methods; |
||||||
|
# |
||||||
|
|
||||||
|
=pod |
||||||
|
|
||||||
|
=encoding utf8 |
||||||
|
|
||||||
|
=head1 NAME |
||||||
|
|
||||||
|
Anvil::Tools::Job |
||||||
|
|
||||||
|
Provides methods related to (background) job handling. |
||||||
|
|
||||||
|
=head1 SYNOPSIS |
||||||
|
|
||||||
|
use Anvil::Tools; |
||||||
|
|
||||||
|
# Get a common object handle on all Anvil::Tools modules. |
||||||
|
my $anvil = Anvil::Tools->new(); |
||||||
|
|
||||||
|
# ... |
||||||
|
|
||||||
|
=head1 METHODS |
||||||
|
|
||||||
|
Methods in this module; |
||||||
|
|
||||||
|
=cut |
||||||
|
sub new |
||||||
|
{ |
||||||
|
my $class = shift; |
||||||
|
my $self = { |
||||||
|
JOB => { |
||||||
|
LANGUAGE => "", |
||||||
|
}, |
||||||
|
}; |
||||||
|
|
||||||
|
bless $self, $class; |
||||||
|
|
||||||
|
return ($self); |
||||||
|
} |
||||||
|
|
||||||
|
# Get a handle on the Anvil::Tools object. I know that technically that is a sibling module, but it makes more |
||||||
|
# sense in this case to think of it as a parent. |
||||||
|
sub parent |
||||||
|
{ |
||||||
|
my $self = shift; |
||||||
|
my $parent = shift; |
||||||
|
|
||||||
|
$self->{HANDLE}{TOOLS} = $parent if $parent; |
||||||
|
|
||||||
|
# Defend against memory leads. See Scalar::Util'. |
||||||
|
if (not isweak($self->{HANDLE}{TOOLS})) |
||||||
|
{ |
||||||
|
weaken($self->{HANDLE}{TOOLS});; |
||||||
|
} |
||||||
|
|
||||||
|
return ($self->{HANDLE}{TOOLS}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
############################################################################################################# |
||||||
|
# Public methods # |
||||||
|
############################################################################################################# |
||||||
|
|
||||||
|
=head2 update_progress |
||||||
|
|
||||||
|
This updates the progress if we were called with a job UUID. |
||||||
|
|
||||||
|
This also sets C<< sys::last_update >>, allowing you to see how long it's been since the progress was last updated and trigger an update on a time based counter. |
||||||
|
|
||||||
|
Returns C<< 0 >> on success, C<< 1 >> on failure. |
||||||
|
|
||||||
|
B<< Note >>: Some special C<< job_status >> processing is done to support some specific callers. These should not impact generic calls of this method. |
||||||
|
|
||||||
|
Parameters; |
||||||
|
|
||||||
|
=head3 job_uuid (optional, default 'jobs::job_uuid') |
||||||
|
|
||||||
|
This is the UUID of the job to update. If it isn't set, but C<< jobs::job_uuid >> is set, it will be used. If that is also not set, |
||||||
|
|
||||||
|
=head3 message (optional) |
||||||
|
|
||||||
|
If set, this message will be appended to C<< job_status >>. If set to 'C<< clear >>', previous records will be removed. |
||||||
|
|
||||||
|
=head3 progress (required) |
||||||
|
|
||||||
|
This is a number to set the current progress to. |
||||||
|
|
||||||
|
=cut |
||||||
|
sub update_progress |
||||||
|
{ |
||||||
|
my $self = shift; |
||||||
|
my $parameter = shift; |
||||||
|
my $anvil = $self->parent; |
||||||
|
my $debug = defined $parameter->{debug} ? $parameter->{debug} : 3; |
||||||
|
|
||||||
|
my $salt = ""; |
||||||
|
my $job_uuid = defined $parameter->{job_uuid} ? $parameter->{job_uuid} : ""; |
||||||
|
my $message = defined $parameter->{message} ? $parameter->{message} : ""; |
||||||
|
my $progress = defined $parameter->{progress} ? $parameter->{progress} : ""; |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { |
||||||
|
progress => $progress, |
||||||
|
message => $message, |
||||||
|
job_uuid => $job_uuid, |
||||||
|
"jobs::job_uuid" => $anvil->data->{jobs}{job_uuid}, |
||||||
|
}}); |
||||||
|
|
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { job_uuid => $job_uuid }}); |
||||||
|
if ((not $job_uuid) && ($anvil->data->{jobs}{job_uuid})) |
||||||
|
{ |
||||||
|
$job_uuid = $anvil->data->{jobs}{job_uuid}; |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { job_uuid => $job_uuid }}); |
||||||
|
} |
||||||
|
|
||||||
|
# Exit if we still don't have a job_uuid |
||||||
|
if (not $job_uuid) |
||||||
|
{ |
||||||
|
# Nothing we can do. |
||||||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, priority => "alert", key => "log_0207"}); |
||||||
|
return(1); |
||||||
|
} |
||||||
|
|
||||||
|
# Exit if we don't have a progress. |
||||||
|
if ($progress eq "") |
||||||
|
{ |
||||||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, priority => "err", key => "log_0020", variables => { method => "Job->update_progress()", parameter => "progress" }}); |
||||||
|
return(1); |
||||||
|
} |
||||||
|
|
||||||
|
# Is the progress valid? |
||||||
|
if (($progress =~ /\D/) or ($progress < 0) or ($progress > 100)) |
||||||
|
{ |
||||||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, priority => "alert", key => "log_0209", variables => { progress => $progress }}); |
||||||
|
return(1); |
||||||
|
} |
||||||
|
|
||||||
|
# If 'sys::last_update' isn't set, set it now. |
||||||
|
if (not defined $anvil->data->{sys}{last_update}) |
||||||
|
{ |
||||||
|
$anvil->data->{sys}{last_update} = time; |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { "sys::last_update" => $anvil->data->{sys}{last_update} }}); |
||||||
|
} |
||||||
|
|
||||||
|
# Get the current job_status and append this new one. |
||||||
|
my $job_picked_up_by = $$; |
||||||
|
my $job_picked_up_at = 0; |
||||||
|
my $job_status = ""; |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { message => $message, job_picked_up_by => $job_picked_up_by }}); |
||||||
|
if ($message eq "clear") |
||||||
|
{ |
||||||
|
$job_picked_up_by = 0; |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { job_picked_up_by => $job_picked_up_by }}); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
my $query = " |
||||||
|
SELECT |
||||||
|
job_status, |
||||||
|
job_picked_up_at |
||||||
|
FROM |
||||||
|
jobs |
||||||
|
WHERE |
||||||
|
job_uuid = ".$anvil->data->{sys}{database}{use_handle}->quote($job_uuid)." |
||||||
|
;"; |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { query => $query }}); |
||||||
|
|
||||||
|
my $results = $anvil->Database->query({query => $query, source => $THIS_FILE, line => __LINE__}); |
||||||
|
my $count = @{$results}; |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { |
||||||
|
results => $results, |
||||||
|
count => $count, |
||||||
|
}}); |
||||||
|
|
||||||
|
if (not $count) |
||||||
|
{ |
||||||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => $debug, priority => "alert", key => "log_0208", variables => {job_uuid => $job_uuid}}); |
||||||
|
return(1); |
||||||
|
} |
||||||
|
|
||||||
|
$job_status = $results->[0]->[0]; |
||||||
|
$job_picked_up_at = $results->[0]->[1]; |
||||||
|
$job_status = "" if not defined $job_status; |
||||||
|
$job_picked_up_at = 0 if not defined $job_picked_up_at; |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { |
||||||
|
job_status => $job_status, |
||||||
|
job_picked_up_at => $job_picked_up_at, |
||||||
|
}}); |
||||||
|
|
||||||
|
# Set that the job is now picked up if the progress is '1' or it 'job_picked_up_at' |
||||||
|
# is not set yet. |
||||||
|
if ((not $job_picked_up_at) or ($progress eq "1")) |
||||||
|
{ |
||||||
|
$job_picked_up_at = time; |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { job_picked_up_at => $job_picked_up_at }}); |
||||||
|
} |
||||||
|
|
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { message => $message }}); |
||||||
|
if (($message) && ($job_status)) |
||||||
|
{ |
||||||
|
$job_status .= "\n"; |
||||||
|
} |
||||||
|
if ($message) |
||||||
|
{ |
||||||
|
$job_status .= $message; |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { job_status => $job_status }}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
### NOTE: This is used by 'anvil-update-system'. |
||||||
|
# Insert counts |
||||||
|
if ($job_status =~ /message_0058/gs) |
||||||
|
{ |
||||||
|
my $downloaded = $anvil->data->{counts}{downloaded} ? $anvil->Convert->add_commas({number => $anvil->data->{counts}{downloaded}}) : 0; |
||||||
|
my $installed = $anvil->data->{counts}{installed} ? $anvil->Convert->add_commas({number => $anvil->data->{counts}{installed}}) : 0; |
||||||
|
my $verified = $anvil->data->{counts}{verified} ? $anvil->Convert->add_commas({number => $anvil->data->{counts}{verified}}) : 0; |
||||||
|
my $lines = $anvil->data->{counts}{lines} ? $anvil->Convert->add_commas({number => $anvil->data->{counts}{lines}}) : 0; |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { |
||||||
|
"s1:counts::downloaded" => $anvil->data->{counts}{downloaded}, |
||||||
|
"s2:downloaded" => $downloaded, |
||||||
|
"s3:counts::installed" => $anvil->data->{counts}{installed}, |
||||||
|
"s4:installed" => $installed, |
||||||
|
"s5:counts::verified" => $anvil->data->{counts}{verified}, |
||||||
|
"s6:verified" => $verified, |
||||||
|
"s7:counts::lines" => $anvil->data->{counts}{lines}, |
||||||
|
"s8:lines" => $lines, |
||||||
|
}}); |
||||||
|
|
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { ">> job_status" => $job_status }}); |
||||||
|
$job_status =~ s/message_0058,!!downloaded!.*?!!,!!installed!.*?!!,!!verified!.*?!!,!!lines!.*?!!/message_0058,!!downloaded!$downloaded!!,!!installed!$installed!!,!!verified!$verified!!,!!lines!$lines!!/sm; |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { "<< job_status" => $job_status }}); |
||||||
|
} |
||||||
|
|
||||||
|
my $query = " |
||||||
|
UPDATE |
||||||
|
jobs |
||||||
|
SET |
||||||
|
job_picked_up_by = ".$anvil->data->{sys}{database}{use_handle}->quote($job_picked_up_by).", |
||||||
|
job_picked_up_at = ".$anvil->data->{sys}{database}{use_handle}->quote($job_picked_up_at).", |
||||||
|
job_updated = ".$anvil->data->{sys}{database}{use_handle}->quote(time).", |
||||||
|
job_progress = ".$anvil->data->{sys}{database}{use_handle}->quote($progress).", |
||||||
|
job_status = ".$anvil->data->{sys}{database}{use_handle}->quote($job_status).", |
||||||
|
modified_date = ".$anvil->data->{sys}{database}{use_handle}->quote($anvil->data->{sys}{database}{timestamp})." |
||||||
|
WHERE |
||||||
|
job_uuid = ".$anvil->data->{sys}{database}{use_handle}->quote($job_uuid)." |
||||||
|
"; |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => $debug, list => { query => $query }}); |
||||||
|
$anvil->Database->write({query => $query, source => $THIS_FILE, line => __LINE__}); |
||||||
|
|
||||||
|
# Note this update time |
||||||
|
$anvil->data->{sys}{last_update} = time; |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
# =head3 |
||||||
|
# |
||||||
|
# Private Functions; |
||||||
|
# |
||||||
|
# =cut |
||||||
|
|
||||||
|
############################################################################################################# |
||||||
|
# Private functions # |
||||||
|
############################################################################################################# |
||||||
|
|
||||||
|
1; |
Binary file not shown.
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 24 KiB |
@ -0,0 +1,188 @@ |
|||||||
|
#!/usr/bin/perl |
||||||
|
# |
||||||
|
# This manages power on the host. It can set that a reboot is or is no longer required. It can also reboot or |
||||||
|
# power off the machine. |
||||||
|
# |
||||||
|
# Examples; |
||||||
|
# - Mark that a reboot is required - anvil-manage-power --reboot-needed 1 |
||||||
|
# - Clear that a reboot is needed - anvil-manage-power --reboot-needed 0 |
||||||
|
# - Report whether a reboot is needed or not - anvil-manage-power |
||||||
|
# - Reboot the system - anvil-manage-power --reboot [-y] |
||||||
|
# - Power the system off - anvil-manage-power --poweroff [-y] |
||||||
|
# |
||||||
|
# Exit codes; |
||||||
|
# 0 = Normal exit. |
||||||
|
# 1 = No database connections available. |
||||||
|
# |
||||||
|
# TODO: Don't reboot or power off until all external users are done with the database on this system (if |
||||||
|
# applicable) |
||||||
|
# |
||||||
|
|
||||||
|
use strict; |
||||||
|
use warnings; |
||||||
|
use Anvil::Tools; |
||||||
|
|
||||||
|
# Disable buffering |
||||||
|
$| = 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({log_level => 2, log_secure => 1}); |
||||||
|
|
||||||
|
$anvil->Storage->read_config({file => "/etc/anvil/anvil.conf"}); |
||||||
|
|
||||||
|
# Read switches |
||||||
|
$anvil->data->{switches}{'poweroff'} = ""; |
||||||
|
$anvil->data->{switches}{'power-off'} = ""; |
||||||
|
$anvil->data->{switches}{'reboot'} = ""; |
||||||
|
$anvil->data->{switches}{'y'} = ""; |
||||||
|
$anvil->data->{switches}{'yes'} = ""; |
||||||
|
$anvil->data->{switches}{'reboot-needed'} = ""; |
||||||
|
$anvil->Get->switches; |
||||||
|
|
||||||
|
if ($anvil->data->{switches}{'power-off'}) |
||||||
|
{ |
||||||
|
$anvil->data->{switches}{'poweroff'} = 1; |
||||||
|
} |
||||||
|
if ($anvil->data->{switches}{'yes'}) |
||||||
|
{ |
||||||
|
$anvil->data->{switches}{'y'} = 1; |
||||||
|
} |
||||||
|
|
||||||
|
# Connect to DBs. |
||||||
|
$anvil->Database->connect; |
||||||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 3, secure => 0, key => "log_0132"}); |
||||||
|
if (not $anvil->data->{sys}{database}{connections}) |
||||||
|
{ |
||||||
|
# No databases, exit. |
||||||
|
print $anvil->Words->string({key => "error_0003"})."\n"; |
||||||
|
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, secure => 0, key => "error_0003"}); |
||||||
|
$anvil->nice_exit({exit_code => 1}); |
||||||
|
} |
||||||
|
|
||||||
|
# Are we being asked to reboot or power off? |
||||||
|
if ($anvil->data->{switches}{'reboot'}) |
||||||
|
{ |
||||||
|
# Did the user confirm? |
||||||
|
if ($anvil->data->{switches}{'reboot'} =~ /^y/i) |
||||||
|
{ |
||||||
|
do_reboot($anvil); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
# Not yet, ask to confirm. |
||||||
|
print $anvil->Words->string({key => "message_0059"})." "; |
||||||
|
my $answer = <STDIN>; |
||||||
|
chomp($answer); |
||||||
|
if ($answer =~ /^y/i) |
||||||
|
{ |
||||||
|
do_reboot($anvil); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
# Abort and exit. |
||||||
|
print $anvil->Words->string({key => "message_0061"})."\n"; |
||||||
|
$anvil->nice_exit({exit_code => 0}); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
if ($anvil->data->{switches}{'poweroff'}) |
||||||
|
{ |
||||||
|
# Did the user confirm? |
||||||
|
if ($anvil->data->{switches}{'poweroff'} =~ /^y/i) |
||||||
|
{ |
||||||
|
do_poweroff($anvil); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
# Not yet, ask to confirm. |
||||||
|
print $anvil->Words->string({key => "message_0060"})." "; |
||||||
|
my $answer = <STDIN>; |
||||||
|
chomp($answer); |
||||||
|
if ($answer =~ /^y/i) |
||||||
|
{ |
||||||
|
do_poweroff($anvil); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
# Abort and exit. |
||||||
|
print $anvil->Words->string({key => "message_0061"})."\n"; |
||||||
|
$anvil->nice_exit({exit_code => 0}); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
my $reboot_needed = $anvil->System->reboot_needed({debug => 2}); |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { reboot_needed => $reboot_needed }}); |
||||||
|
|
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::reboot-needed" => $anvil->data->{switches}{'reboot-needed'} }}); |
||||||
|
if ($anvil->data->{switches}{'reboot-needed'} eq "1") |
||||||
|
{ |
||||||
|
# Enable |
||||||
|
if (not $reboot_needed) |
||||||
|
{ |
||||||
|
$reboot_needed = $anvil->System->reboot_needed({debug => 2, set => 1}); |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { reboot_needed => $reboot_needed }}); |
||||||
|
print $anvil->Words->string({key => "message_0048"})."\n"; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
# Was already set, do nothing |
||||||
|
print $anvil->Words->string({key => "message_0049"})."\n"; |
||||||
|
} |
||||||
|
} |
||||||
|
elsif ($anvil->data->{switches}{'reboot-needed'} eq "0") |
||||||
|
{ |
||||||
|
# Disabled |
||||||
|
if ($reboot_needed) |
||||||
|
{ |
||||||
|
$reboot_needed = $anvil->System->reboot_needed({debug => 2, set => 0}); |
||||||
|
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { reboot_needed => $reboot_needed }}); |
||||||
|
print $anvil->Words->string({key => "message_0050"})."\n"; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
# Was already disabled, do nothing |
||||||
|
print $anvil->Words->string({key => "message_0051"})."\n"; |
||||||
|
} |
||||||
|
} |
||||||
|
elsif ($anvil->data->{switches}{'reboot-needed'}) |
||||||
|
{ |
||||||
|
# Bad call |
||||||
|
print $anvil->Words->string({key => "message_0052", variables => { program => $THIS_FILE }})."\n"; |
||||||
|
} |
||||||
|
|
||||||
|
# Get the current state |
||||||
|
if ($reboot_needed) |
||||||
|
{ |
||||||
|
# Report that we're in mainteance mode |
||||||
|
print $anvil->Words->string({key => "message_0053"})."\n"; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
# Report that we're not. |
||||||
|
print $anvil->Words->string({key => "message_0054"})."\n"; |
||||||
|
} |
||||||
|
|
||||||
|
# We're done |
||||||
|
$anvil->nice_exit({exit_code => 0}); |
||||||
|
|
||||||
|
|
||||||
|
############################################################################################################# |
||||||
|
# Private functions. # |
||||||
|
############################################################################################################# |
||||||
|
|
||||||
|
# This does a reboot, clearing the flag indicating a reboot is required in the process. |
||||||
|
sub do_reboot |
||||||
|
{ |
||||||
|
my ($anvil) = @_; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$anvil->nice_exit({exit_code => 0}); |
||||||
|
} |
@ -1,101 +0,0 @@ |
|||||||
#!/usr/bin/perl |
|
||||||
# |
|
||||||
# This set, clear and report if the host needs to be rebooted. |
|
||||||
# |
|
||||||
# Examples; |
|
||||||
# - Enable - anvil-reboot-needed --set 1 |
|
||||||
# - Disable - anvil-reboot-needed --set 0 |
|
||||||
# - Report - anvil-reboot-needed |
|
||||||
# |
|
||||||
# Exit codes; |
|
||||||
# 0 = Normal exit. |
|
||||||
# 1 = No database connections available. |
|
||||||
|
|
||||||
use strict; |
|
||||||
use warnings; |
|
||||||
use Anvil::Tools; |
|
||||||
|
|
||||||
# Disable buffering |
|
||||||
$| = 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({log_level => 2, log_secure => 1}); |
|
||||||
|
|
||||||
$anvil->Storage->read_config({file => "/etc/anvil/anvil.conf"}); |
|
||||||
|
|
||||||
# Read switches |
|
||||||
$anvil->data->{switches}{set} = ""; |
|
||||||
$anvil->Get->switches; |
|
||||||
|
|
||||||
# Connect to DBs. |
|
||||||
$anvil->Database->connect; |
|
||||||
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 3, secure => 0, key => "log_0132"}); |
|
||||||
if (not $anvil->data->{sys}{database}{connections}) |
|
||||||
{ |
|
||||||
# No databases, exit. |
|
||||||
print $anvil->Words->string({key => "error_0003"})."\n"; |
|
||||||
$anvil->Log->entry({source => $THIS_FILE, line => __LINE__, level => 0, secure => 0, key => "error_0003"}); |
|
||||||
$anvil->nice_exit({exit_code => 1}); |
|
||||||
} |
|
||||||
|
|
||||||
my $reboot_needed = $anvil->System->reboot_needed({debug => 2}); |
|
||||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { reboot_needed => $reboot_needed }}); |
|
||||||
|
|
||||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { "switches::set" => $anvil->data->{switches}{set} }}); |
|
||||||
if ($anvil->data->{switches}{set} eq "1") |
|
||||||
{ |
|
||||||
# Enable |
|
||||||
if (not $reboot_needed) |
|
||||||
{ |
|
||||||
$reboot_needed = $anvil->System->reboot_needed({debug => 2, set => 1}); |
|
||||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { reboot_needed => $reboot_needed }}); |
|
||||||
print $anvil->Words->string({key => "message_0048"})."\n"; |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
# Was already set, do nothing |
|
||||||
print $anvil->Words->string({key => "message_0049"})."\n"; |
|
||||||
} |
|
||||||
} |
|
||||||
elsif ($anvil->data->{switches}{set} eq "0") |
|
||||||
{ |
|
||||||
# Disabled |
|
||||||
if ($reboot_needed) |
|
||||||
{ |
|
||||||
$reboot_needed = $anvil->System->reboot_needed({debug => 2, set => 0}); |
|
||||||
$anvil->Log->variables({source => $THIS_FILE, line => __LINE__, level => 2, list => { reboot_needed => $reboot_needed }}); |
|
||||||
print $anvil->Words->string({key => "message_0050"})."\n"; |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
# Was already disabled, do nothing |
|
||||||
print $anvil->Words->string({key => "message_0051"})."\n"; |
|
||||||
} |
|
||||||
} |
|
||||||
elsif ($anvil->data->{switches}{set}) |
|
||||||
{ |
|
||||||
# Bad call |
|
||||||
print $anvil->Words->string({key => "message_0052", variables => { program => $THIS_FILE }})."\n"; |
|
||||||
} |
|
||||||
|
|
||||||
# Get the current state |
|
||||||
|
|
||||||
if ($reboot_needed) |
|
||||||
{ |
|
||||||
# Report that we're in mainteance mode |
|
||||||
print $anvil->Words->string({key => "message_0053"})."\n"; |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
# Report that we're not. |
|
||||||
print $anvil->Words->string({key => "message_0054"})."\n"; |
|
||||||
} |
|
||||||
|
|
||||||
# We're done |
|
||||||
$anvil->nice_exit({exit_code => 0}); |
|
Loading…
Reference in new issue