JFIF$        dd7 

Viewing File: /usr/local/cpanel/scripts/check_unmonitored_enabled_services

#!/usr/local/cpanel/3rdparty/bin/perl

# cpanel - scripts/check_unmonitored_enabled_services
#                                                  Copyright 2022 cPanel, L.L.C.
#                                                           All rights reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited

#

package scripts::check_unmonitored_enabled_services;

use strict;
use Cpanel::Usage                      ();
use Cpanel::Services::Installed::State ();

# This now only runs when we update to a new version
# unless it is run manually.  The interval has been
# lowered as a result of this change.
my $ONE_WEEK_IN_SECONDS = ( 86400 * 7 );
our $NOTIFICATION_INTERVAL = $ONE_WEEK_IN_SECONDS;

sub script {
    my ( $class, $argv ) = @_;

    my %opts = (
        notify => 0,
        quiet  => 0,
    );
    my $self = bless {}, $class;
    Cpanel::Usage::wrap_options(
        $argv,
        sub { my (@args) = @_; $self->usage(@args); },
        { 'notify' => \$opts{'notify'}, 'quiet' => \$opts{'quiet'} },
    );
    $self->{'notify'} = $opts{'notify'};
    $self->{'quiet'}  = $opts{'quiet'};

    require Cpanel::Locale;
    my $old = $self->_locale()->set_context_plain();

    my $installed_services_state = Cpanel::Services::Installed::State::get_installed_services_state();
    my @unmonitored_enabled_services =
      grep { $_->{'type'} eq 'services' && $_->{'enabled'} && !$_->{'monitored'} && $_->{'name'} ne 'apache_php_fpm' } sort { $a->{'name'} cmp $b->{'name'} } @{$installed_services_state};

    if (@unmonitored_enabled_services) {
        $self->send_notification( \@unmonitored_enabled_services );
    }
    else {
        print $self->_locale()->maketext(q{OK}), "\n" unless $self->{'quiet'};
    }
    $self->_locale()->set_context($old);
    return 0;
}

sub usage {
    my ($self) = @_;

    print $self->_locale()->maketext(q{This tool verifies the services are being monitored.}),  "\n\n";
    print $self->_locale()->maketext( q{Usage: [_1][comment,a program name] ~[options~]}, $0 ), "\n\n";
    print $self->_locale()->maketext(q{Options:}),                                              "\n";
    print "\t--help     ",                                                                      $self->_locale()->maketext(q{Display this help message.}),                                               "\n";
    print "\t--notify   ",                                                                      $self->_locale()->maketext(q{Send a failure notification to the system administrator.}),                 "\n";
    print "\t--quiet    ",                                                                      $self->_locale()->maketext(q{Do not display output, and instead set the [output,asis,UNIX] exit code.}), "\n\n";

    exit 0;
}

sub send_notification {
    my ( $self, $unmonitored_enabled_services_ref ) = @_;
    require Cpanel::Notify;
    my $status = join( ",", sort map { $_->{'name'} } @{$unmonitored_enabled_services_ref} );
    my $ic_obj = Cpanel::Notify::notification_class(
        'class'            => 'Check::UnmonitoredEnabledServices',
        'application'      => 'Check::UnmonitoredEnabledServices',
        'status'           => $status,
        'interval'         => $NOTIFICATION_INTERVAL,
        'constructor_args' => [
            'origin'    => 'check_unmonitored_enabled_services',
            'services'  => $unmonitored_enabled_services_ref,
            'skip_send' => 1,
        ]
    );

    unless ( $self->{'quiet'} ) {
        print $ic_obj->render_template_include_as_text( 'template' => 'subject', 'type' => 'text' ) . "\n\n" . $ic_obj->render_template_include_as_text( 'template' => 'body', 'type' => 'html' );
    }

    if ( $self->{'notify'} ) {
        my %notify_check_args = (
            app      => 'Check::UnmonitoredEnabledServices',
            status   => $status,
            interval => $NOTIFICATION_INTERVAL,

        );
        return 0 if Cpanel::Notify::notify_blocked(%notify_check_args);
        Cpanel::Notify::update_notification_time_if_interval_reached(%notify_check_args);
        $ic_obj->send();
    }

    return 1;
}

sub _locale {
    my ($self) = @_;
    require Cpanel::Locale;
    return ( $self->{'_locale'} ||= Cpanel::Locale->get_handle() );
}

exit( __PACKAGE__->script( \@ARGV ) ) unless caller;

__END__

=head1 NAME

check_unmonitored_enabled_services - Checks for services that are enabled to run but not enabled in chkservd

=head1 DESCRIPTION

This script checks the state of services and can notify when one or more is
unmonitored
Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg