/opt/dedrads/__pycache__
NameSizeModeActions
alp.cpython-313.pyc188170644editdlrm
check_prov.cpython-313.pyc63940644editdlrm
clean_exim.cpython-313.pyc89020644editdlrm
cmspass.cpython-313.pyc63780644editdlrm
cms_check.cpython-313.pyc140790644editdlrm
cms_counter.cpython-313.pyc329480644editdlrm
cpanel_postgres_manager.cpython-313.pyc407620644editdlrm
docroot.cpython-313.pyc54920644editdlrm
envinfo.cpython-313.pyc81840644editdlrm
exclude_rbl.cpython-313.pyc66820644editdlrm
first_setup.cpython-313.pyc204930644editdlrm
fixwpcron.cpython-313.pyc72230644editdlrm
innodb_converter.cpython-313.pyc143470644editdlrm
mail_sources.cpython-313.pyc99690644editdlrm
modsec_disable.cpython-313.pyc158380644editdlrm
mysql_selector.cpython-313.pyc867480644editdlrm
show-conns-adv.cpython-313.pyc684140644editdlrm
sparta.cpython-313.pyc4909030644editdlrm
vhost_data.cpython-313.pyc69830644editdlrm
Edit: /opt/dedrads/__pycache__/sparta.cpython-313.pyc (490903B)
}j" SrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK r SSK r SSK r SSK r SSK r SSKrSSKrSSKrSSKrSSKrSSKJr SSKJr SSKJr SSKJr SSKJrJrJrJrJ r SSK!J"r# SS K!J$r$ SSK%r%SSK&r&SS K'J(r( SS K)J*r* \"S S 9r+\RXR[5r.Sr/\R`"S5r1"SS\Rd5r3GSRSjr4"SS5r5"SS5r6"SS5r7\"SS55r8\"SS55r9Sr:Sr;S \S#r?S$r@S%rAS&rBS'rCS(rDS)rES*rFS+rGGSSS,jrHS-rIS.rJS/rK1S0krLS1rMS2rNGSTS3jrOS4rPS5rQS6rRS7rSS8rTS9rUS:rVS;rWS<rXS=rYS>rZS?r[S@r\SAr]SBr^SCr_SDr`GSUSEjraSFrbSGrcGSUSHjrdSIreSJrfSKrgSLrhSMriGSVSNjrjSOrkSPrlSQrmSRrnSSroSTrpSUrqSVrrSWrsSXrtSYruSZrvS[rwS\rxS]ryS^rzS_r{S`r|Sar}Sbr~GSWScjrSdrSerSfrSgrGSXShjrSirSjrSkrSlrSmrSnrSorSprSqrSrrGSYSsjrStrSurSvrSwrSxrSyrSzrS{rS|rS}rS~rSrSrSrSrSrSr\ GRB"S\ GRD5r\ GRB"S5r\ GRB"S5r\ GRB"S5rS\Gr GS?Gr GSTGS@jGrGSAGrGSBGrGSCGrGSDGrGSEGrGSFGrGSGGrGSHGrGSIGrGSJGrGSKGrSGSL.GSM\URRS5 URR5 [TU]U5 g![a Nf=fN )streamwriteflush Exceptionsuperemit)selfrecord __class__s /opt/dedrads/sparta.pyrNewlineStreamHandler.emit1sL  KK  d # KK     V   s5A AA)__name__ __module__ __qualname____firstlineno__r__static_attributes__ __classcell__)r!s@r"rr/s rreturnc[[SSS9 [R"[S5 SSS5 [ R[R5 [ R(ag[R"[5nUR[R5 UR[R"S55 [5nUR[R5 UR[R"S55 [ R!U5 [ R!U5 g!,(df  GN=f![an[ S[SU35UeSnAff=f)Nautf-8encodingz#[FATAL] Failed to prepare log file : z'%(asctime)s [%(levelname)s] %(message)sz%(levelname)s: %(message)s)openLOG_FILEosutimer SystemExitloggersetLevelloggingDEBUGhandlers FileHandler setFormatter FormatterrWARNING addHandler)exc file_handlerconsole_handlers r" setup_loggingrE8s (C' 2 HHXt $3 OOGMM" &&x0L'--(CD+,OW__-  67 l# o&33 2 1(2cU C  s3EEE EEE E<!E77E<cT\rSrSrSrSSSSS.SjrS \S \4S jrS r SSjr Sr Sr g ) ProgressBarWu Simple TTY-friendly progress bar with ANSI coloring. Renders like: Building:
73% |██████████████████████████████░░░░░░░░░░░░| Checking bounces/defers 2z Progress:Complete)widthprefixsuffixdecimalsc[S[U55Ul[U5Ul[ U5Ul[ U5Ul[U5UlSUl[RR5Ul [R"S5UlSUlSUlSUlSUlSUlg)NrKr\x1b\[[0-9;]*mz)maxinttotalrLstrrMrNrO iterationsysstdoutisatty_is_ttyrecompile_ansi_re _color_bold _color_blue _color_reset _bar_width _lines_drawn)rrVrLrMrNrOs r"__init__ProgressBar.__init__`sCJ' Z &k &k H  zz((*  #45 $%%r+valuer,cL[URRSU55$N)lenr_sub)rrgs r" _visible_lenProgressBar._visible_lenrs4==$$R/00r+c UR(dURUlgURbg[R"5R nSSURS3nURSURUSUR3nURU5n[S[UR[SU5U- 55Ulg![ a SnNf=f) NPd.f % )r\rLrcshutilget_terminal_sizecolumnsrrOrMr`rbrmrTmin)r term_colssample_percent sample_outreserveds r"_ensure_bar_widthProgressBar._ensure_bar_widthus||"jjDO  ?? &  002::I $--12{{m1  0$2C2C1D F $$Z0b#djj#b)2Dx2O"PQ I sC C! C!NcUc)[URURS-5UlOy[U[5(a2[URURU(aSOS-5UlO1[ U5n[ S[URU55UlUR(aUR5 URnO URnSUR[UR5- -nUSURS3n[ X0R-UR-5nSU-SX6- --nUR(aIURSUR US UR"3nUR$S US UR"3n OURSUS 3nS US 3n UR&=(d S n UR(d[(R*R-US -5 [(R*R-U S -5 [(R*R-U S -5 [(R*R/5 gUR0(a[(R*R-S UR0S35 [3UR05H"n [(R*R-S5 M$ [(R*R-S UR0S35 [(R*R-US -5 [(R*R-U S -5 [(R*R-U S -5 [(R*R/5 SUlg![[4a, [URURS-5UlGN-f=f![4a [(R*R-US -5 [(R*R-U S -5 [(R*R-U S -5 [(R*R/5 gf=f)NrKrrqrrrsu█u░rtru|rjrz[Fz )r{rVrX isinstanceboolrUrT TypeError ValueErrorr\rrcrLfloatrOrMr`rbrarNrYrZrrrdranger) rrg numeric_value bar_width percent_value percent_str filled_length progress_barline1line2line3_s r"updateProgressBar.updatesQ = T^^a-?@DN EeT**%(T^^EqWX5Y%ZDN$'JM%(C M,J%KDN <<  " " $I It~~djj0AAB &qq&89 I6$**DE },u 8Q/RR <<{{m1T%5%5$6{m1TEVEVDWXE''(,q9J9J8KLE{{m1[M3E ~Q'E !r|| JJ  UT\ * JJ  UT\ * JJ  UT\ * JJ          5):):(;1!=>t001AJJ$$[12   5):):(;1!=> JJ  UT\ * JJ  UT\ * JJ  UT\ * JJ    !D Yz* E!$TZZ!1C!D EZ  JJ  UT\ * JJ  UT\ * JJ  UT\ * JJ     s,AN50N&D1O8OOBQ('Q(cUR(a>[RRS5 [RR 5 gUR UR 5 gr)r\rYrZrrrrVrs r"finishProgressBar.finishs; << JJ  T " JJ    KK #r+) r_rcrar`rbr\rdrOrXrMrNrVrLN) r%r&r'r(__doc__rerWrUrmrrrr)r$r+r"rGrGWs<(*+j[\$1#1#1R*<|$r+rGcF\rSrSrSrS S\S\S\4SjjrS S\4Sjjr S r g ) SectionProgressz Maps one section to 100 virtual ticks on the main ProgressBar. Call tick('label') at each sub-step to advance smoothly and show status. section_positionsteps section_namecUupVXlX@lX`l[S[ U55UlSUl[S[ U55S- S-UlSUR - UlURS-Ul SUl g)NrKrrqrv) progressr_sections_totalrTrUribasedeltamax_pos _mini_width)rrrrr section_indexsections_totals r"reSectionProgress.__init__sz)9%  (-CJ' C ./!3s: 4::% yy3 r+labelcj[URURS-5UlUR(dg[ UR [SURUR -5-5n[ URUR-UR- 5nSU-SURU- --nSUR3URl U=(d SnUSU3R5URl URRU5 g![a N(f=f)NrKrqu■u□z Building: rjrt)r{rrrrUrrrrrMstriprNrr)rrposfilledsubbar suffix_labels r"tickSectionProgress.ticksTZZ!,}} $))c#tvv ':;;<T%%.;<%4+;+;f+D"EE %/0A0A/B#CDMM  ;BL&2^1VH#=#C#C#EDMM  S!   sSUl?SUl@SUlASUlBSUlCSUlDSUlESUlFSUlGSUlHSUlISUlJSUlKSUlLSUlMSUlNSUlOSUlPSUlQSUlRSUlS/UlTSUlUSUlVSUlWSUlXSUlYSUlZSUl[SUl\SUl]SUl^/Ul_SUl`SUlaSUlbSUlcSUld0Ule/UlfSUlgSUlhSUliSUljSUlkSUllSUlmSUlnSUloSUlpSUlqg)Nz z!# System Performance Audit Report)rformat_headingsectionsrrrr server_id server_type panel_typedomainsmanaged_domain os_versionmain_ipmail_ipall_ipsmanaged_domain_ip logical_cores mem_total_gb mem_avail_gb mem_alloc_gb mem_swap_gbmem_buffers_gbdeadweight_future _async_tasks domain_count domain_owner user_list user_countdomain_registrar is_registereddomain_reg_expirydomain_reg_statuswhois_nameserversdig_nameserversdomain_resolvesport_80_service vhost_path web_stackdocrootdocroot_owner_okdocroot_owner_labelcms_type http_statushas_gzip has_cache_hithas_cloudflare cdn_providercdn_cache_status cdn_cache_hithas_ultrastacksystem_php_version php_version php_handler has_php_fpmphp_fpm_max_requestsphp_fpm_max_childrenphp_fpm_max_idle_timeouttotal_fpm_poolstotal_max_childrenmax_fpm_children dbms_versionmysqltuner_opt_inmysqltuner_installkey_buffer_sizeinnodb_buffer_pool_sizemax_connectionscurrent_connectionslargest_databasesquery_cache_typequery_cache_sizetmp_table_sizemax_heap_table_sizetable_open_cachetable_definition_cacheinnodb_log_file_sizejoin_buffer_sizesort_buffer_sizemax_allowed_packetslow_query_logslow_query_log_filelong_query_timeperformance_schema local_emailmail_ptremail_accountsemail_user_countemail_disk_usagespam_protectiontotal_email_disk_usagehighest_disk_mail_accountshighest_disk_email_accounthighest_usage_email_folderemail_bounce_stats has_monarx has_imunifyfirewall_stackhas_ssl ssl_issuer ssl_expires ssl_trustedssl_self_signedinstalled_servicesfailed_services apache_mpmapache_maxworkersapache_maxconnectionsapache_serverlimitapache_threadsperchildapache_startserversapache_minsparethreadsapache_maxsparethreadsapache_minspareserversapache_maxspareserversapache_mpm_conf_pathrs r"reSpartaReport.__init__s t**+NO O$   !"  "   !%!   "!%   $!!%!%!#!## $#'   !"  $!""&$(!$(!(,%#"& $ !%"&#'+$##' !% $ $"#' $&*#$(! $ $"&"#' #"&   $ $#&*#*.'*.'*.'"&  #"$!!%%)""&&*##' &*#&*#&*#&*#$(!r+styletextr,cUcSO [U5n[(dU$US:XaSUS3$[[US5nUcU$U"U5$)Nrj progress_bluerRrS)rW USE_COLORSgetattrr)rr,r-rg style_funcs r" apply_colorSpartaReport.apply_colorysVlD zL O #eWG, ,UE40  L%  r+cJURSU5nURSU5$)Nr/boldr3)rr-coloreds r"rSpartaReport.format_headings'""?D900r+c&URSU5$)Nr/r7rr-s r"format_subheadingSpartaReport.format_subheadings66r+rc[U5RS5S3nUcSO [U5nU(dSnURSU5nURSU5nURSU5nUSU3$)N:rjUnknownwhiter6rtrWrstripr3)rrrg label_text raw_value value_colored label_bold label_coloreds r"format_label_valueSpartaReport.format_label_values|E ))#./q1 -BSZ !I(()< %%fj9 ((*= -11r+ block_textc8URS[U55$)NrAr3rWrrKs r" format_blockSpartaReport.format_blocksZ99r+c8URS[U55$)NdimrMrNs r"format_block_dimSpartaReport.format_block_dimss:77r+c8URS[U55$)NamberrMr;s r" format_amberSpartaReport.format_ambersT33r+c8URS[U55$)NredrMr;s r" format_errorSpartaReport.format_errorss4y11r+c[U5RS5S3nURSU5nURSU5nUcSO [U5nU(dSnURX75nUSU3$Nr?r6rArjr@rtrB rrrg value_stylerDrGrH value_textrFs r"mem_format_label_value#SpartaReport.mem_format_label_valueszE ))#./q1 %%fj9 ((*=  =Rc%j "J((A -11r+c^U4SjnSU4SjjnU"U5nU"U(aSRU5OS5nU"U5n UcSO[U5R5n U (dSn U R5R5S:XaSOS n U"XS 9n U"S 5S US U"S5S US U"S5S U S U"S5S U 3$)Nc>[U5RS5S3nTRSTRSU55$Nr?rAr6rB)r label_cleanrs r"rD3SpartaReport.reg_format_summary..label_texts? Z..s34A6K##GT-=-=fk-RS Sr+ct>UcSO [U5nUR5(dSnTRX5$Nrjr@)rWrr3)rgr,rawrs r"ra3SpartaReport.reg_format_summary..value_texts3 "3u:C99;;##E/ /r+, Nonerjr@activegreenrZ)r, Registrarrtr Nameservers ExpirationStatusrA)joinrWrlower) r registrar nameserversexpirystatusrDraregistrar_valuenameservers_value expiry_value status_raw status_style status_values ` r"reg_format_summarySpartaReport.reg_format_summarys T 0 %Y/&tyy'=RXY!&) !>Rs6{/@/@/B "J","2"2"4":":"<"Hwe !*A +&'q(9-()+<*=R,'(,r(#$Al^ 5 r+c[U5RS5S3nURSU5nURSU5nUcSO [U5nUR5(dSnURX75nUSU3$r^)rWrCr3rr_s r"dns_format_label_value#SpartaReport.dns_format_label_valuesE ))#./q1 %%fj9 ((*=  =Rc%j !!"J((A -11r+ dmarc_summarycU=(d SR5R5nU(dgURS5(agURS5(dURS5(dSU;agg) NrjrZzpresent (policy missingrVmissingnonezdeliverability issuesrA)rrw startswith)rrsummarys r"dns_dmarc_styleSpartaReport.dns_dmarc_stylesi &B--/557   7 8 8   i ( (G,>,>v,F,FKbfmKmr+c[[U5R55nSUs=::aS::ag SUs=::aS::ag gg![a gf=f)NrAi+rpiWrZ)rUrWrr)rr status_ints r"site_stats_http_status_style)SpartaReport.site_stats_http_status_stylesb S.4467J * # # $ * # # $  s"A AAc>[U5nUcgUS:agUS:agg)NrA?rpg@rVrZ)_site_stats_parse_seconds)rttfb_value_text ttfb_secondss r"site_stats_ttfb_style"SpartaReport.site_stats_ttfb_styles.0A   #  # r+c*^SU4Sjjn[TSS5=(d URSS5nURSS5n[[TSS55n[[TSS55nU"SUTRU5S 9U"S URS S55U"S UTR U5S 9U"S URSS55U"SURSS55U"SURSS55U"SURSS55U"SU(aSOSU(aSOSS 9U"SU(aSOSU(aSOSS 9/ nU(dSR U5$STR S5/n U RU5 SR X-5$)Nc>[U5RS5S3nTRSU5nTRSU5nUcSO [U5nU(dSnTRX&5nUSU3$r^rB) rrgr`rDrGrHrarFrs r" label_value;SpartaReport.site_stats_render_summary..label_values{J--c2315J))&*=J ,,WjAM$}#e*J&  ,,[EM#_Am_5 5r+rHTTP Response CodeN/AzTime to First ByterFrr`zTLS Handshake Timez TLS HandshakezTime to First Byte (TTFB)zTotal Load Timez Total TimezRedirects Followedz Download SizezDownload SpeedzGZIP CompressionEnabledDisabledrprZz Cache HITYesNorrjz### Redirects Foundru)r1getrrrrvr<extend) rparsed_metricsredirect_entriesrhttp_status_value ttfb_textrrlinesredirect_sections ` r"site_stats_render_summary&SpartaReport.site_stats_render_summarys 6$D->q.BTBTUikpBq"&&';UC j%89WT?EBC  $! ==>OP  ,n.@.@RW.X Y + 66yA  )>+=+=lE+R S ,n.@.@AUW\.] ^ ););OU)S T (.*<*<=Mu*U V "% :(0We  &D(5W5 + 8 99U# # 6 67L MN 01yy122r+ directiveseffective_values active_pathc [SU5SS9nSU=(d S3/nUH8nURURU5SURUS535 M: SR U5$)Nc38# UHn[U5v M g7fr)rk.0 directives r" 5SpartaReport.phpini_render_summary..4s@Z S^^Zr)defaultzAuthoritative INI File: r r)rTappendljustrrv)rrrrrLrrs r"phpini_render_summary"SpartaReport.phpini_render_summary3ss@Z@!L+K,@5+ABC#I LLIOOE2326F6J6J9V[6\5]^ _$yyr+c[U5RS5S3nURSU5nURSU5$Nr?r6rArB)rrrDrGs r"mail_format_label_only#SpartaReport.mail_format_label_only:sCE ))#./q1 %%fj9 44r+c[U5nSnSnUS:a6U[U5S- :a$US-nUS- nUS:aU[U5S- :aM$USSX43$![[4a gf=f) Nr@)BKBMBGBTBrrK@.2frt)rrrrk)r num_bytesrgunits unit_indexs r"mail_format_bytesSpartaReport.mail_format_bytes?s )$E. tm c%j1n = VOE !OJtm c%j1n =Ae/011:&  s AA*)A* bounce_statsc Sn/n[U=(d 0R5USS9H?upEURUSURSS5SURSS5S 35 MA S R U5$) NchUS=(d 0nURSS5URSS5-$)NrKbouncedrdeferred)r)itemcountss r"sort_key:SpartaReport.email_bounce_format_summary..sort_keyMs0!W]F::i+fjjQ.GG Gr+Tkeyreverser2rrz bounced, rz deferredr)sorteditemsrrrv)rrrr email_addressrs r"email_bounce_format_summary(SpartaReport.email_bounce_format_summaryLs H%+\-?R,F,F,Hh`d%e !M LL /FJJy!$<#=Z S]_`HaGbbkl &fyyr+rDc XURSURS[U555$)NrAr6rMrrDs r" ssh_labelSpartaReport.ssh_labelXs&)9)9&#j/)RSSr+analysisc SRUS5nUSnURS5SURSU53URS5SURUS(aS OSU53URS 5SURUS (aSOS US (aS OS 53/nUS(dSupVOUS(aSupVOSupVURURS5SURXe535 USb USS:aSOSnURURS5SURXqS535 URURS5SURSUS535 US(aSOSnUS(aS OSn URURS5SURX535 SRU5$) Nrmports root_modezPort(s) in use:rtrpz Root Access: root_allowedrZz Public keys:public_key_enabledrrpasswords_effective)rrppasswords_require_key)zKey required with passwordyellow)rrZzPassword login: tries_intrzAuthentication Try Limit:max_auth_trieszSession Limit: max_sessionsempty_passwords_allowedrrzEmpty Passwords Allowed:r)rvrr3r) rr ports_strrrpassword_valuepassword_color tries_colorempty_pw_valueempty_pw_colors r"ssh_render_summarySpartaReport.ssh_render_summary[s3IIhw/0 [) ~~/0143C3CGY3W2X Y~~n-.a0@0@(SaJbhoqz0{/| }~~n-.a0@0@HUiLjpuEMNbEcxAis1t0u v  -.-@ *NN - .-S *NN-= *N ~~/0143C3CN3c2d e $,K#8#DR]I^abIbhip  ~~9:;1T=M=Mkdt[u=v##Hi8 8)*/.9IJ Q ##E<8 8 R ##Hl; ;66r+NcSn[U[[45(a[U5S:aUSnXlU(aSOUSLaSOSUlX0lXPlg)NrrTF)rrlistrkrrrr)rr rrr expires_isos r"ssl_update_report_fields%SpartaReport.ssl_update_report_fieldssW ot} 5 5#o:NRS:S)!,K&'2t+QUBU[_$&r+c[U[5(aU(dg1SknU(aURS5 U(aURS5 SSSSSS .n/nUR5Hupx[U[5(aU(dM#/n UR5HlupU =(d 0n [ U R S S 55n X;aM2UR U S5n UR X5nU RS U S U35 Mn U (dMURURSU355 URU 5 URS5 M U(dgSRU5R5S-$)NzNone detected >rofailed activatinginactiveinactive (disabled)rprZrVrR)ror$r%r&r'stater- r2### rjr) rdictaddrrWrr3rr<rrvrC)rrinclude_inactiveinclude_disabledinclude_states state_styler category_nameservicescategory_lines friendly_namedatar(r, state_texts r"format_installed_services&SpartaReport.format_installed_servicesse ,d33;M$;    z *    4 5!#*  '9'?'?'A #Mh--XN'/~~'7# zrDHHWi89.#u5!--e; %%=/J<&HI(8~ T33d=/4JKL ^, R '(B*$yy&&(4//r+cleaned_historyc/nURS5 U=(d 0R5H@up4URSUSUSS35 USHnURSU35 M MB SRU5$) Nz@Historical service failures seen in the journal (last 24 hours):r) (countz events):rz r)rrrv)rr9 output_linesr4r5entrys r"!svc_format_service_failure_output.SpartaReport.svc_format_service_failure_outputs ^_$3$9r#@#@#B M   "]O2d7m_I N Og##d5'N3'$Cyy&&r+c[RSU5 U"5$![aAnSUS[U53n[R U5 UR U5sSnA$SnAff=f)NzRunning section: %sz[Error] Failed to get r2)r8debugrrWr r[)r descriptionfuncer s r" run_sectionSpartaReport.run_sections` *K8 ,6M ,,[MCF8DE LL $$U+ + ,s A*6A%A*%A*c>URRXU45 gr)rr)rmarkerfuture render_fns r"add_async_insertion SpartaReport.add_async_insertions   &)!<=r+cURH1up#nUR5nU"U5nUR X'S5nM3 U$![a6n[R SU5 SU3nUR U5nSnAN[SnAff=f)NzAsync task failed for marker %r+[Error] Failed to gather deadweight usage: rK)rresultrr8 exceptionr[replace)rr-rIfutrenderbodyrE replacements r"_apply_async_insertions$SpartaReport._apply_async_insertionss#'#4#4 F /zz| !,K<<Q7D$5  /  !BFKDQCH((. /sA B,A??Bcl[RS5 URRSUS35 g)NzAdding new section to report.r)r8rBrr)rcontents r" add_sectionSpartaReport.add_section s* 45 r'"-.r+c[RS5 SRUR5nUR U5nU$)NzStarting report generationr)r8rBrvrrWr;s r"generate_reportSpartaReport.generate_report s6 12yy'++D1 r+)qrrr"r)r'r!r(r&r r*r#r%r$rrrrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrr rr rr rrrrrrrrrrrrrrrrr rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrru)TT),r%r&r'r(rerWr3rr<rIrOrSrWr[rbrrrrrrrr+rrrrrrrrrr rrr!r7r?rFrLrWr[r^r)r$r+r"rrs|)~ ! !C !C !131317c7c7 2 2s 2:s:s:83838444222 23 2 : 23 2 S S  23h S  T `c hk 5C5C5 2c 2      TCTCT$ 4$ C$ LUCUCU0#0 B B B5455 73 7''gk' 10f''#',> C C /r+rc4\rSrSr%\\S'\\S'\\S'Srg)SiteStatsArtifactsitemp_directoryheader_dump_pathtrace_output_pathr$Nr%r&r'r(rW__annotations__r)r$r+r"rarasr+rac4\rSrSr%\\S'\\S'\\S'Srg)SummaryFindingiseveritytitledetailsr$Nrer$r+r"rhrhsM J Lr+rhc t[R"SS9nURSSSS9 SSS S S S S SS.nUR5HQup#URSU3SUS9 SU3/nUS:XaUR S5 UR"USU3SSUS3S.6 MS URSSSS9 URSSSS9 U$)Nz>SPARTA: System Performance Audit & Reporting Tool for Analysts)rCz--full store_truez+Audit the full server environment (default))actionhelpzAudit only system informationz,Audit only site and domain based informationz)Audit only web server traffic informationz&Audit only PHP and handler informationzAudit only database informationzAudit only mail informationzAudit only security informationz Audit only services and versions)systemsitetrafficphpdbmailsecurityr2z--z--no-ruz --no-emailno_z Omit the z section from the report)destrnroz --no-diskz^Skip disk usage checks (df/inodes) and large-file (deadweight) scanning in the System section.z --no-summaryzIDisable post-report summary analysis and do not append a Summary section.)argparseArgumentParser add_argumentrr)parser section_help section_key help_text omit_flagss r"build_arg_parserr!s$  $ $TF  :2>>7/-56 L#/"4"4"6    k]+, &   l + {m$[M)AB  #7$  m   X Mr+c,[U=(d S5R5n[R"SU5nU(a'UR S5UR S5pCUU3$[R "SSU5n[ U5S:aUSS$U$)Nrj ^(\d+)\.(\d+)rKrz\D)rWrr]matchgrouprlrk)version_stringcleanedrmajorminor numeric_onlys r"_cwp_php_short_verrVs.&B'--/G HH%w /E {{1~u{{1~u  66%W-L"<0A5< G<Gr+path_to_removecU(a<[RRU5(a[R"U5 ggg![a [ R SUSS9 gf=f)NzFailed to remove file %sTexc_info)r5pathexistsremoverr8rB)rs r"_remove_file_quietlyr`sTP bggnn^<< IIn %=> P /$ OPsAAA('A(c^ /SQnSSSSSSS.n[R"S/SSS9R5R5n[R S U5 S U;aUR S S S 9S n[R SU5 UHn[R"XT5nU(dM"URS 5n[R"SSU5nXpl URUS5Ul [RSUR5 [R SUR5 g [R S5 O[R SU5 Sn [!U 5R5R5m [#U 4SjU55(aw[R"SST 5nT Ul URUS5Ul [RSUR5 [R SUR5 g[R%S5 M![a n [R SU 5 Sn A NSn A ff=f)N)z ^(dedi\d+)$z ^(ded\d+)$z ^(cc\d+)$z ^(elite\d+)$z^(advanced\d+)$z ^(vps\d+)$ DedicatedVPS)dedidedcceliteadvancedvpshostnameTrr-timeoutzDetected hostname: %sz.inmotionhosting.comrK)maxsplitrzExtracted base hostname: %sz\d+rjr@zAuto-detected server ID: %szDeduced server type: %sz6Hostname detected but did not match known ID patterns.z9Hostname %s is not in standard format for auto-detection.zHostname detection failed: %szHostname is not typical. Enter the server ID below. Accepted formats: dedi###, ded###, cc###, elite###, advanced###, and vps###: >>> c3R># UHn[R"UT5v M g7fr)r]r)rpattern id_entereds r"r get_server_id..sEHrxx,,Hs$'zReceived server ID: %szFInvalid format entered. Double-check the server's ID before entering. ) subprocess check_outputrrwr8rBsplitr]searchrrlrrrinforinputanywarning) reportpatternstypesr shortnamerrr parsed_idrBpromptrs @r" get_server_idrhsH  E;**J,J,J!!H!!H LL*F,=,=>   r+c [RSUR5 URS:XaV[S5nUSSVs/sHo"SPM snUl[RS[ UR55 GOURS:XaS n[ S 5nUR5nURU5 UR5nUVs/sHowSPM snUl[RS [ UR55 SSS5 SSS5 GO@URS :XGa[ 5nUR5nURS 5 UR5nUHn U Sn U Sn URSU SU S35 UR5n U (aIU Sn [R"SSU RS55nURRU5 MM SSS5 SSS5 [RS[ UR55 O,URS:Xa[R#S5 /UlUR(a[+UR[,5(d+[R/S5 [&R("S5 [ UR5Ul[RSUR5 gs snfs snf!,(df  GN=f!,(df  N=f![ a#n[RSXU5 SnAGMSnAff=f!,(df  GN`=f!,(df  GNj=f![ a: [R%SUR5 [&R("S5 GNZf=f)Nz(Gathering domain list for panel type: %srget_domain_infor5rdomainz Retrieved %d domains from cPanelrz SELECT domain FROM user UNION SELECT domain from domains UNION SELECT CONCAT(subdomain, '.', domain) AS domain from subdomains; root_cwpzRetrieved %d domains from CWPrz SELECT table_schema, table_name FROM information_schema.tables WHERE table_name LIKE '%\_options'; table_schema table_namez[ SELECT option_value FROM `z`.`za` WHERE option_name = 'siteurl'; option_valuez ^https?://rj/z&Failed to parse siteurl from %s.%s: %sz(Retrieved %d domains from UltraStack ONErz.Baremetal domain detection is not implemented.z*Fatal error while gathering domains for %srKz*[Fatal] No domains found. Aborting script.zDomains gathered: %s)r8rBrrrrkget_mysql_connectioncursorexecutefetchallrfetchoner]rlrrrrrQrYexitrrcriticalr)rr5dqueryconnrresultsrowoptions_tablesr>rttablerPraw_urlrinner_es r" get_domainsrs LL;V=N=NO<    (,-D37< 3JK3Jak3JKFN LL;S=P Q   "5 5E&j1T[[]fNN5)$oo/G?F%Gw(mw%GFNKK ?V^^ATU #21  "2 2%'4[[]fNN&,__%6N!/">2 %l 3"NN%'')d#eW5!!$&,__%6F%*0*@)+ r7==QTCU)V & 5 5f = &"0#(< LLCSEX Y   + - NNK LFN >>FNND!A!ADE  fnn-F LL'8AL&H#]21D )"LL H"U\3#]('H EvGXGXY  s%NL1NN%L6&L L*1L L#N-NM21M  A6L0M M21N,NNL  L L L-)N-N0 M :M M M M  M/ *M22 N<NAOOcr^ ^ [R"S5m Sm U U 4Sjn[USS5(d+[R S5 [ R "S5 URVs1sHo"R5iM nn[USS5nU(aGT "U5nU"U5(aXS;aXT:waXPl UR$[RSU5 [S 5nT "U5nU"U5(d[RS U5 M:XS;aXPl UR$S U3nURS 5(aUS SOSnXs;aUOU(aX;aUOSn [RSXY=(d S5 Ms snf![a [RS 5 gf=f)Nzo^(?=.{1,253}$)(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])$cU=(d SR5R5RS5nURS5(dURS5(aUR SS5SnUR SS5SnUR S 5R S 5nU$![a U$f=f) Nrjrrhttp://https://://rKrridnaascii)rrwrCrrencodedecoder) domain_texts r"normalize_domain,get_managed_domain..normalize_domains"(b//1779@@E  ! !) , , 0F0Fz0R0R%++E15a8K!''Q/2  %,,V4;;GDK   s B00 B>=B>cD>[TRT"U555$r)rr)r domain_regrs r"is_valid_domain+get_managed_domain..is_valid_domain sJ$$%5k%BCDDr+rz>> z/No input available to determine managed domain.z]Invalid domain format entered: %s. Examples: example.com, example.co.uk, subdomain.example.mxwww.z3Domain '%s' not found in server inventory. Hint: %sr)r]r^r1r8rrYrrrwrrrEOFErrorr r) rrr domains_lowercurrentdomrk variant_www variant_apexhintrrs @@r"get_managed_domainrs 9J E 69d + +VW  (.71WWYM7f.5Gw' 3  C$8~(+%(( (bdkl  RSC s#s## NNz| A   $' !(( (SEl "%.."8"8s12wd ):{Q]bnbFJLcSa[ab+ 8  LLJ K s.F& FF65F6cRSnSnSn[RRU5(a[R S5 [ USS9nUR 5nSSS5 [SW55nURSS 5R5RS 5Ul UR$[RRU5(aL[R S 5 [ USS9nUR5R5Ul SSS5 O[RRU5(aL[R S 5 [ USS9nUR5R5Ul SSS5 O[RS 5 SUl UR$!,(df  GNi=f!,(df  N,=f!,(df  N==f![a* [RS5 SUl UR$f=f)Nz/etc/os-releasez/etc/centos-releasez/etc/redhat-releasez%Detected OS info from /etc/os-releaser/r0c3r# UH-nSU;dM UR5RSS5v M/ g7f)=rKNrrrlines r"r!get_os_version..Bs0W%$3RV;54::<--c155% 7'7 PRETTY_NAMErj"z)Detected OS info from /etc/centos-releasez)Detected OS info from /etc/redhat-releasez6No known OS release file found. Defaulting to unknown.zUnknown Operating Systemz+Failed to retrieve operating system version)r5rrr8rBr3 readlinesr+rrrreadrrrQ)r newer_file older_filesym_older_filersros_infos r"get_os_versionr8s"J&J*N7 77>>* % % LL@ Aj73q 4W%WWG ' M2 > D D F L LS QF &   #WW^^J ' ' LLD Ej73q$%FFHNN$4!43WW^^N + + LLD Enw71$%FFHNN$4!87 NNS T :F    -4343 87 7FG6   7scAG2 F>AG26AG29$GA G2)$G! %G2> G G2 GG2! G/+G22&H&%H&c[R"5n[RSU5 U$![a [R S5 gf=f)NzKernel version detected: %sz!Failed to retrieve kernel versionz$[Error] Failed to get kernel version)platformreleaser8rBrrQ)kernel_versions r" get_kernelrWsK6!))+ 2NC 6<=56s,/AAcvSn[RRU5(a[USS9n[ UR 5R 5S5nSSS5 [WS-5n[US-S-5n[US-S-5nUSUS US 3n[RR5[R"US 9- nURS 5nXh4$[US 35e!,(df  N=f![Ga'n [R!SU 5 ["R$"SS/SS9R'5n [R)SU 5 Sn["R$"SS/SSS9R'5n [*R,"SU 5n U (aU R/S5R'5nO%![a [R)S5 Of=fX4sSn A $![a/n [R1SX5 SU SU 3S4sSn A sSn A $Sn A ff=fSn A ff=f)Nz /proc/uptimer/r0rQ<z days, z hours, z minutes)seconds%Y-%m-%d %H:%M:%Sz not foundz Primary uptime method failed: %suptime-pTr-z.Uptime retrieved from fallback 'uptime -p': %sz+[Error] Failed to retrieve last reboot timewhoz-brzsystem boot\s+(.+)rKz+who -b fallback for last reboot also failedz3Both uptime methods failed: primary=%s, fallback=%sz#[Error] Failed to retrieve uptime: z | Fallback error: )r5rrr3rreadlinerrUdtdatetimenow timedeltastrftimeFileNotFoundErrorrr8rrrrrBr]rrrQ) uptime_filersuptime_secondsdayshoursminutes uptime_str reboot_time reboot_strrEoutput who_outputrsub_errs r" get_uptimer#_s K# 77>>+ & &kG4!&qzz|'9'9';A'>!?5~)45D95$>?E>D0R78G 6xyIJ++//+bll>.RRK$--.ABJ) );-z :;;54 91= ,,h-=DIOOQF LLI6 RFJ L'44eT]WXY__a  "7D!&Q!5!5!7J L JK L% %    RTU _5aS8KG9U=   !s.D+C5B D'D5 D?D H8H3(=G7&A#G  G7 G,)G7+G,,G71H87 H0H+ H0!H3%H8+H00H33H8c[SSSS9nUR5R5nSSS5 [SW5S5n[ SU55Ul[ 5n[ 5nSnUHnURS5(a/[URS S 5S R55nMHURS 5(dM`[URS S 5S R55nUcMURXh45 URU5 M Sn [US S 5=(d S R5R5n U S:XaSn Sn [R R#U 5(aX[U SSS9nUR5R5R5=(d S /Sn SSS5 W S:XaSOSn Oa[R R#U 5(a;[U SSS9nUR5R5S:XaSOSn SSS5 OSn [$R'SU 5 UR+SU5/nU S:XaUR-UR+SUR 55 UR-UR+S[/U555 UR-UR+S[/U555 O~U S:XaxUR-UR+SUR 55 U S:wa!UR-UR+SU 55 U S:Xa UR-UR1S 55 S!R3U5S!-$!,(df  GNg=f![a SnGM8f=f![a GMJf=f!,(df  GN=f!,(df  GN=f![a [$R)S5 Sn GNf=f![a) [$R5S"5 UR7S#5s$f=f)$Nz /proc/cpuinfor/rRr1errorsc3# UH?oRS5(dMURSS5SR5v MA g7f)z model namer?rKN)rrrrs r"r get_cpu_stats..s9 f}tXdHe *TZZQ  " ( ( * *}s A *A r@c3T# UHoRS5(dMSv M g7f) processorrKNrrs r"rr(s"_//R]B^11s( (z physical idr?rKzcore idrrjrz/sys/fs/cgroup/cpu.maxz#/sys/fs/cgroup/cpu/cpu.cfs_quota_usrrTrrz-1 Not detectedzVPS burstable: %sz4Failed to read cgroup quota for burstable detection.z CPU Model dedicatedzLogical Cores (Threads)zPhysical Coresz CPU SocketszVisible Logical Cores (vCPUs)z VPS Burstablez`NOTE: This is a legacy VPS plan. Logical core count may not reflect guaranteed CPU availability.rzFailed to retrieve CPU statsz$[Error] Failed to retrieve CPU stats)r3r splitlinesnextsumrsetrrUrrrr,r1rwr5rrr8rrrIrrkrSrvrQr[)r file_handle cpuinfo_lines cpu_modelphysical_cpu_idsphysical_core_pairscurrent_physical_idrcore_id burstablercgroup_v2_cpu_maxcgroup_v1_quota first_tokenrs r" get_cpu_statsr=sKK /GI F+',,.99;MG f} f  #"_"__5!e"!D}--/*-djja.@.C.I.I.K*L'++!$**S!"4Q"7"="="?@G'2'++-@,JK$(()<="  v}b9?RFFHNNP %  &$<!"G77>>"344/')TXc'2'7'7'9'?'?'A'G'G'I'QbTST&U U)4)=4IWW^^O44o RVa-8-=-=-?-E-E-G4-OEUY SR!/I /; **; BC + % LL223LfNbNbc d LL223CSI\E]^ _ LL22=#FVBWX Y E ! LL223RTZThThi jI% V66 RSE! ++z yy$&&MG F$!/*.'/ ! UTSR  &UV%  &. K78""#IJJKs PN A#P,N<P,N2PA!P*3O(:OAO('O!O(!D*P NP N/*P.N//P2 O<POP OO( O% O((!P  P P  P0QQc^U4SjnU4Sjn[SSSS9nUR5R5R5SSupEnSSS5 U"5nU"S 5TRS W35TRS W35TRS W35/nU=(d SR5R5S:XaTRSU5n OTRU5n U"S5U /n SRU5R5S-SRU 5R5-S-$!,(df  N=f![a [ R S5 S =n=pVGNf=f)Nc>[R"S5(d[RS5 gSn[R R U5(a+[S[R"U555(d[RS5 gSnU"5(a/S QO/S Qn[RS U5 [R"US S 9nSnSn/nUR5HnUR5(a,URS5(dURS5(aMFUR5nUc.[!U5HupU R#5S;dMU n O MUR%U5 M Uc[RS5 gUHLn['U5U::aM[)X5n T R,(dM5U T R,:dMGUS- nMN US:a[R/SU5 US3$g![*a Mf=f![0a [R3S5 gf=f)Nsarz$'sar' not found for historical load.z[Notice] 'sar' not installed /var/log/sac3B# UHoRS5v M g7fsaNr+)rnames r"rHget_load_stats..get_historical_high_load_text..s1gTfD//$2G2GTfzsysstat logging not enabled.z%[Notice] sysstat logging not enabled.cB[R"SS/S[RSS9n[R"SU[R 5nU(a9[ URS55[ URS55p2X#4S :$g ![a g f=f) Nr@z-VTrr-stderrrzsysstat version (\d+)\.(\d+)rKr) rF) rrSTDOUTr]rIrUrr) ver_output ver_matchrrs r"_sar_needs_load_keywordVget_load_stats..get_historical_high_load_text.._sar_needs_load_keywords !+!8!8 D9J9JTU"J!# *I:WYW[W[ \I '*9??1+='>IOOTUDV@Wu %~88! !sB B BB)r@-qLOAD-s00:00:00)r@rRrTrUzUsing sar load command: %sTrrLinuxAverage)zldavg-1zrunq-szz3Could not identify ldavg-1 column in sar -q output.z0[Notice] Could not parse sar load output format.rKz%d high-load events foundz? instance(s) of 1-minute load exceeding logical CPU core count.z2No high load events recorded in the past 24 hours.z.Failed to gather historical load data from sarz.[Error] Unable to gather historical load data.)rxwhichr8rr5risdirrlistdirrBrrr.rrr enumeraterwrrkrrrrrrQ) sa_dirrP sar_q_argsr high_load_event_count ldavg1_index data_linesrparts col_indexcol_name one_min_loadrs r"get_historical_high_load_text5get_load_stats..get_historical_high_load_textsF D<<&&EF5"FGGMM&))c1gTVT^T^_eTf1g.g.g=>> E\D]D]@dCJ LL5z B,,ZdCF$% ! LJ))+zz||tw'?'?4??S\C]C] '/8/?+ #>>+/EE+4L!0@!!%(,#TUI#u:-#()<#=L'''LF[U5RS5S3nTRSU5nTRSU5$rrBrrDrGrs r"_format_label_only*get_load_stats.._format_label_onlyDE ))#./q1 '' ; !!':66r+z /proc/loadavgr/rRr%rz;Failed to retrieve runtime load averages from /proc/loadavgrzRuntime Load Averagesz1 min: z5 min: z15 min: rjz2no high load events recorded in the past 24 hours.rpz24hr High Load Eventsr ) r3rrrrr8rQrSrwr3rvrC) rrerir2 one_value five_value fifteen_valuehistorical_text runtime_lineshistorical_renderedhigh_load_liness ` r"get_load_statsrtsGDR7 7 /GI F+3>3C3C3E3K3K3M3S3S3UVXWX3Y 0I=G 45O 23') 56'* 67(=/ :; M 2$$&,,.2ff$00/J$55oF 23O 99] # * * ,v 5 /8R8Y8Y8[ [^b bb3G F 7VW166 6J7s. E 3D< E < E E E $E54E5cR^Sn[USSS9n[SU55mSSS5 U4Sjn[U"S5S- S 5Ul[U"S 5S- S 5Ul[URUR- S 5Ul[U"S 5S- S 5Ul[S U"S 5U"S5U"S5-U"S5- -5n[US- S 5Ul[URS-S 5n[RSURURUR URUR 5 U$!,(df  GN3=f![a; [RS5 S UlS UlS UlS UlS Ulgf=f)N /proc/meminfor/rRr%c3r# UH-nSU;dM UR5RSS5v M/ g7fr?rKNrrs r"r,_mem_parse_meminfo_values..@s2]+$QTX\Q\54::<--c155+rcx>[TRUS5R5R5S5$)N0 kBr)rUrrr)key_namememinfos r"kb%_mem_parse_meminfo_values..kbBs0w{{8V4::<BBDQGH Hr+MemTotalr MemAvailable SwapTotalrBuffersCached SReclaimableShmemg?z`Memory totals: %s GB total, %s GB available, %s GB allocated, %s GB buff/cache, %s GB swap limitzFailed to parse /proc/meminfog?) r3r+roundrrrrrTrr8rrrQ)r meminfo_filer2r~ buffcache_kbunsafe_available_gbr}s @r"_mem_parse_meminfo_valuesr<s"L% , C{]+]]GD I$BzNW$>GL M !&lW&B n           ! !     #"7D C: 89 !s) E!ED+E! EE!!AF&%F&c/n[US5nURS[R5 UR 5nSnUS:a[ U5U:a[ X%5nXW-nURU5 URU5U-nURS5nUSn[USS5H%n [ U5U:a OURU 5 M' US:a[ U5U:aMU(a [ U5U:aURU5 SSS5 [U5V s/sHoRSS5PM sn $!,(df  N9=fs sn f![a [RSU5 /s$f=f) Nrbrr+ rKr/ignorezFailed to tail log file: %s)r3seekr5SEEK_ENDtellrkr{rrreversedrrrr8rQ) r max_lines block_sizerr2positionbuffer read_sizeraraw_liners r"_mem_tail_linesrdsZ E $    Q ,"'')HFQ,3u: #9 5 %  *$)))4v= U+q (qr 3H5zY.LL*!4Q,3u: #9#e*y0 V$),UHunUR5nSU;aSU;aM!TS- m[R"SU[R5nU(dMUTR UR S55 Mw g)Nzkilled processoomrKzkilled process \d+ \(([^)]+)\))rwr]r IGNORECASErr)rr lower_linerkilled_processes oom_counts r" _scan_lines-_mem_collect_oom_history.._scan_linesseDJz1e:6M NIII?r}}UEu '' A7r+z/var/log/messages*z/var/log/syslog*P)rz+Failed to scan log file for OOM history: %s journalctl-k --no-pager-n50000TrIz0OOM history collected via journalctl kernel log.z-Failed to collect OOM history from journalctlz\No OOM log source found: /var/log/messages, /var/log/syslog, and journalctl all unavailable.)globr5risfilerrr8rQrxrXrrDEVNULLr.rBr) r rhel_paths debian_pathspfile_paths_to_scanrjournalctl_pathr rrs @@r"_mem_collect_oom_historyrsvI 8/0J99/0L%/%>T%>"''..QRBS!%>T&D VODEBC'2 & &&!!,,|4  R#00$dL$H%--  F--/0 OP & && NNy z & &&9U  V  !NPTU V" R  !PQ & &&  Rs1(D),D)D.7AE. EEE:9E:c [R"S5(dgSn[RR U5(a+[ S[R "U555(dg[R"/SQSS9nUR5nSn/n[U5HsupgSUR5;dMUR5R5nURS5URS 5URS 5S .nX6S -Sn O U(dgSn UHnUR5n [U 5[UR!55::aM;[#[%XS5[%XS 5-[%XS 5-S - S5n X:dMU S - n M [(R+SU 5 U $![&a Mf=f![,a [(R/S5 gf=f)Nr@rrAc3B# UHoRS5v M g7frCr+)rfilenames r"r1_mem_collect_low_memory_events..s)gTf*=*=d*C*CTfrG)r@-rrTrUTr kbmemfree kbbufferskbcached)rrrrKrrz(Low memory availability events (24h): %dz2Failed to analyze historical memory usage with sar)rxrXr5rrYrrZrrr.r[rwrindexrkrTvaluesrrUrr8rrrQ) rr\r  sar_linesheader_indexesr` line_indexrheaderlow_memory_event_countraavail_gbs r"_mem_collect_low_memory_eventsrs <<   F GGMM& ! !c)gTVT^T^_eTf)g&g&g.(()HtT%%'  )) 4 Jdjjl*++-!'k!:!'k!: & Z 8" 'A~'78 !5!"DJJLE5zS!6!6!899  E"=>?e;$?@ABe:$>?@A  -&!+&%(  >@VW%%   MNsJ0A GA#G%?G%?G $G+ G GGGGG?>G?c [U5n[5up#[U5n[U5S:waSOSn[U5S:XaSOSnUR SUR S35UR SURS35UR SURS35UR S URS35UR S URS35S URS UUS 9URSUUS 9/nU(axSR[[U555nURSS5n UR!URSU 55 UR!URSU55 O UR!URSSSS 95 SRU5R#5S-$![a SnGNf=f![a SnGNf=f)NrrZrArpTotal GB Available AllocatedzBuffered/Cachez Swap Limitrjz%Total Historical Out-of-Memory Eventsrz$Low Memory Events (24hr, <5% Memory)rmr6'Recent Process Kills Due to OOM Events:z&Recent Process Kills Due to OOM Eventsrnr)rrrrUrrIrrrrrrbrvrr1r3rrC) rrrrroom_value_stylelow_mem_value_styler unique_killedrGs r"get_memory_statsrs 3F;":"<I;Q#6%G&),-C)D)Igu !!'f.A.A-B#+FG!!+&2E2E1Fc/JK!!+&2E2E1Fc/JK!!"2v7L7L6MS4QR!!,63E3E2Fc0JK %% 3 ' & %% 2 "+ &  E& &-=)>"?@ ''0YZ  V''<= V''}=>  ) )8# *   99U  " " $t ++S "!" &%&s"GG GG G('G(>aufsnsfsprocramfssysfstmpfsautofscgroupmqueuepstorevirtfsdebugfsfusectloverlaytracefsconfigfsdevtmpfssquashfs hugetlbfs selinuxfs rpc_pipefs binfmt_misc)/proc/sys/dev/runz/var/lib/dockerz/var/lib/containersz/snapcT[[U5S- S5$![a gf=f)N@r)rrUr) bytes_values r" _disk_to_gbr"s0S%3Q77 s  ''cL[R"US[RUS9$![Ra0n[R SSR U5U5 SnAgSnAf[a0n[R SSR U5U5 SnAgSnAff=f)NTrIzCommand failed: %s -> %srtrjzException running: %s -> %s)rrrLCalledProcessErrorr8rBrvr)commandrrBs r" _disk_runr's && $$    ( ( /'1BCH  2CHHW4EsKs $'B#&A&& B#3&BB#c0nU=(d SR5SSH3nUR5n[U5S:dM$USXSUS4'M5 U$![a [R S5 U$f=f)NrjrKrrzFailed parsing df -PT output)r.rrkrr8rQ) df_types_text fs_type_maprras r" _disk_fstypesr5sK9"(b446qr:DJJLE5zQ5:1X 1XuRy12;  978 9s# UHnTRU5v M g7frr+)rrM mountpoints r"r_disk_skip..Bs!R;Qz$$V,,;Qs!rwr)rfstype exclude_typesexclude_mount_prefixess` r" _disk_skipr?s- ". R;QR RRr+c SSSS.n/nU=(d SR5SSHnUR5n[U5S:aM$USnUSn URX4S5=(d Sn [ XX#5(aM]US==[ US5- ss'US ==[ US 5- ss'US ==[ US 5- ss'UR UU U [US5[US 5[US 5US S.5 M [U5S:H=(a USRS5S:Hn U (aUSSO&US(a[US US- S-S5S3OSn US(a[USS- S 5OSUS (a[US S- S 5OSUS (a[US S- S 5OSU U US.$![a [RS5 Nf=f)Nr)rVusedavailrjrKrr?rVrrrrr)fstypemntsize_gbused_gbrpctzFailed parsing df size outputrrr rqru0%rr)total_gbr rpct_used single_root per_mount) r.rrkrrrUrrrr8rQr) df_sizes_textrrrtotalsr line_textrz filesystemrrrr s r" _disk_mountsrCs!a 0FI:'-299;AB?Ioo'G7|a J J!ooz&>CJsF*mTT 7Os71: .O 6Nc'!*o -N 7Os71: .O   $"%*71:6*71:6 +GAJ 7"1: !@<i.A%H)A,*:*:5*AS*HK  ! UgfVnvg6#=qAB! D  @FgE&/Y7;TW=CF^595q9QT?EgE&/Y7;TW"   :89:sDGG32G3cSnSnU=(d SR5SSH{nUR5n[U5S:aM$USnUSn USn USn URX4S5n [ XX#5(aM^U[ U 5- nU[ U 5- nM} U(a[XT- S-S5S 3OS n XEU S .$![ a Mf=f![a [RS5 NTf=f) NrrjrKrrrzFailed parsing inode usagerqrur )rVrr ) r.rrkrrrUrrr8rQr)df_inodes_textrrr inode_total inode_usedrraritotaliusedrr inode_pcts r" _disk_inodesrysKJ7#)r557;DJJLE5zA~qJ1XF!HErJ __j%=rBF*mTT s6{* c%j( !<,EP5*2c91=>a@UYI Y GG    7567s6A:CCC C CCCC65C6c 0//S.nSn/SQ/SQSS/4H&n[USS9nUR5(dM$Un O U(aUR5Hn[R"S U5VVs0sHupVXVRS 5_M nnnUR S 5S ;dMTUS R SUR SS5SUR SS5SUR SS5SUR S5S:XaSOUR S5S:XaSOS35 M [RRS5(am[SSS9nUR5R5n SSS5 W (a4S U ;a.US R S!5 US R S"U -S#-5 [R "S%5(a][/S&QS'S9n U R5(a<US R S(5 US R S"U R5-S#-5 U$s snnf![a [RS5 GN3f=f!,(df  N=f![a [RS$5 Nf=f))Ndevicesraidrj)lsblk-P-oz+NAME,TYPE,SIZE,FSTYPE,MOUNTPOINT,MODEL,ROTA)r!r"r#z$NAME,TYPE,SIZE,MOUNTPOINT,MODEL,ROTAr!r"rz(\w+)=(".*?"|\S+)rTYPE)diskr mpathrz- /dev/NAMErz (MODEL-z ) Size: SIZEz Media: ROTA0SSD1HDDzFailed parsing lsblk outputz /proc/mdstatr/r0r z**/proc/mdstat:**```  ```zFailed reading /proc/mdstatmdadm)r4z--detail--scanrz**mdadm --detail --scan:**)rrr.r]findallrrrr8rQr5rrr3rrxrX) rP lsblk_rawr output_textrkvrr2 mdstat_text mdadm_scans r" _disk_dedir=shR (FILE $  3     #I  <&113 35::>RT]3^_3^41q''#,3^_776?&??9%,,!#''&#"6!7s3777C;P:QR!!$!5 67",/GGFOs,B5RURYRYZ`RaehRhnq!tv4 ww~~n%% <nw7;)..0668 8v4v%%&9:v%%g &;g&EF||G>J      6N ! !"> ? 6N ! !'J,<,<,>">"H I M5` <   : ; < 87  <   : ; [U5RS5S3nTRSU5nTRSU5nUcSO [U5nU(dSnTRX&5nUSU3$r^rB) rrgr`rDrGrHrarFrs r" _format_label_value_custom_color7get_disk_info.._format_label_value_custom_colors{E ))#./q1 '' ; **7J?  =Rc%j "J**;C -11r+dfz-PT)rBz-B1z,--output=source,size,used,avail,pcent,target)rB-iz#--output=source,itotal,iused,targetrCrrrjr-r rrg?rZzTotal CapacityrUsedr z GB (r )rrInodesrz used / rVz total (r rrz#### Mounted Filesystemsz(``` {:<32} {:<8} {:>8} {:>8} {:>8} {:>6}MountTypeSizeGBUsedGBAvailGBzUse%c US$)Nrr$xs r"get_disk_info..s%r+rz${:<32} {:<8} {:>8} {:>8} {:>8} {:>6}r rr$rrz```z#### Physical Storage Devicesrz,- [Info] Could not enumerate physical disks.r z#### RAID Statusrru)r8rrrrDISK_EXCLUDE_TYPESDISK_EXCLUDE_MOUNT_PREFIXESrr1rwr=rrrrformatrrrvrC) rr@r disk_data inode_text inode_datadedicated_detailsr r avail_pct avail_styler mount_entrys ` r" get_disk_infor]sE KKDE2 4- 89KOP# INOjS\^bdh]iSjJ# J%'3 r*0b779[H&Lz29c:z29c:*2$sI# T(9%wK ))9i >S=TTW;XY(Ii4H3IyYcOdNeef1gh(:9N8Os6Salm( &!"(:g+>*?x SXHYGZZ[ \   Ei &> /0 7 > >8Y  ")K"8>PQK LL6==&s+'+"9-c2"9-c2":.s3&  R  U R r*0b779[H 45 &y1e6d5ef V $ LL  LL+ , LL*62 3 99U  " " $t ++g  s$#K3)#L3 LL LLcUR(aURR5S:wa[RS5 g[R "S5(dY[R S5 [R "S5(aSnO [R "S5(aS nOS nS US 3$[RS 5 [R"SS/SS9nUR5Vs/sH;o3R5RS5(dM(UR5SPM= nnU(d[R S5 g/nUHn[RSU5 [R"SSU/S[RS9n[R"SU[R 5nU(d&[R"SU[R 5nU(aUR#S5R%5OSR'5n UR)SUSU 35 [R+SXi5 M [RS"5 S#R5U5$s snf![R,aAn [R SXjR.5 UR)SUS 35 Sn A GMvSn A f[0a0 [R3S!U5 UR)SUS 35 GMf=f![0a$n [R3S$5 S%U 3sSn A $Sn A ff=f)&Nr-z7Skipping SMART check: server is not a Dedicated server.zScanning for SMART-compatible devices using `smartctl --scan`.r5Trz/dev/rz%No SMART-compatible devices detected.z/[Warning] No SMART-compatible devices detected.z$Checking SMART status for device: %s-Hr-rJz TU --z8.D4P /:/E/E/Gl/Gt:: UF8+GHII J  !H&QF8+GHII J >:;9!==>ss;>L9'I?$I?;LL"C3J)L?LL5K L8L LLL ML=7M=Mcf/SQn[R"U[R[RSSS9nUR=(d SR 5nU(dg/nUH<nUR SS5upVS U;aM UR[U5U45 M> U(dg URS SS 9 USS nSnSn UHupU SU"U 5SSUS3- n M U S- n U $![a Mf=f![a$n [RS5 SU 3sSn A $Sn A ff=f)N)findr-pathr-pruner#rorrpr#rorrpr#rorrpr#roz/var/spool/postfixrpr#-typersz-sizez+500M-printfz%s %p TF)rJrZr-checkrj0No files larger than 500MB found on the system.  rKrz!No significant disk usage found. c US$Nrr$)ts r"rO get_deadweight..qs1Q4r+rc/SQnSn[U5nUS:a6U[U5S- :a$US-nUS- nUS:aU[U5S- :aM$XS;a USX3$USX3$) N)rKMGTPrrrKr)rr|r}.0fr)rrk)nrrs r"humanize get_deadweight..humanizets2EAaAt)CJN 2V Qt)CJN 2,18+FaWUXJ' `qQTgV[V^U_L` `r+r2r)z>7rrz"Failed to gather deadweight usage.rO) rrunrPIPErZr.rrrUrsortr8rQ) find_cmdrPrentriesrsize_strrtoprrsizerEs r"get_deadweightrLsK8A  %%??  $"002FD !%D!!4t#H t45 7  6crl aJD HTN2.bb9 9G7-  0 A=>C??D D0 D+%D0+D0c"^^ ^ ^SmSm U 4Sjm U4SjnU 4SjnU U4Sjn/SQnSnU"UU5upgU"U5upn [RS U5 [RS U5 [RS U 5 S S TRSU5TRSU5TRSU 5/n U(dU (aU RS U"S5S/5 U(a@U R S 5 U R U"S55 U RSU55 U (a@U R S 5 U R U"S55 U RSU 55 SR U 5R 5S-$)NcU=(d SR5Vs/sHAoR5(dMURS5(aM1UR5PMC sn$s snf)Nrj#)r.rr)r-rs r"filter_cron_lines$get_crons..filter_cron_linessH*.*")@)@)Bp)Bjjl [_[j[jkn[o  )BpppsA'A'A'c`^U=(d SR5m[U4SjU55$)Nrjc3,># UH oT;v M g7frr$)rkeywordlowereds r"r=get_crons..contains_backup_keyword..s>X'g%Xr)r-keywordsrs @r"contains_backup_keyword*get_crons..contains_backup_keywords&:2$$&>X>>>r+cR>UVs/sHnT"X!5(dMUPM sn$s snfrr$)rrr>rs r"collect_backup_matches)get_crons..collect_backup_matchess##*W7%.Ee.V7WWWs$$c>[U5RS5S3nTRSU5nTRSU5$rrBrhs r" label_onlyget_crons..label_onlyrkr+ch>Sn/n[RRS5(a[SSSS9nUVs/sHAoUR 5(dMUR S5(aM1UR 5PMC nnSSS5 U[ W5- nT "Xa5nURU5 U(a[RS[ U55 UHn[RRU5(dM)[R"U5V s/sHoR S5(aMU PM n n U[ U 5- nT "X5nURU5 U(dM[RS [ U5U5 M X#4$s snf!,(df  GN =fs sn f) Nrz /etc/crontabr/rRr%rz/Found %d backup-related entries in /etc/crontabrrz*Found %d backup-related cron entries in %s) r5rrr3rrrkrr8rrYrZ) cron_directoriesr system_countsystem_backup_entries crontab_filer crontab_linesbackup_entriescron_directoryr>directory_entriesrs r"&collect_system_cron_counts_and_backups9get_crons..collect_system_cron_counts_and_backupssX " 77>>. ) )nwyI\:F t,$**,_c_n_nor_s, tJ C . .L3MLN ! ( ( 8 MsSaObc.N77==0046JJ~4N l4N5VfVfgjVk4N  l C 12 2L34EPN ! ( ( 8~ H#nJ]_mn/22)!uJI!ms4FFF.FFF/9F/F F,c N>SnSn/nT "[R"SS/S[RS95n[U5nT "X@5nUR U5 U(a[ R S[U55 [R"5HnURnUS;d URS :dURS ;aM7T "[R"SSS U/S[RS95nU(dMoU[U5- nT "X5nUR U5 U(dM[ R S [U5U5 M XU4$![Ra [ RS5 GNf=f![Ra GMf=f) Nrcrontab-lTrcz6Found %d backup-related cron entries in root's crontabz$Root does not have a crontab defined)nobodymysql) /sbin/nologin/usr/sbin/nologin /bin/falsez-uz/Found %d backup-related entries in %s's crontab)rrrrkrr8rrrBpwdgetpwallpw_namepw_uidpw_shell) r root_countruser_backup_entries root_linesr user_entryusername user_linesrrs r"$collect_user_cron_counts_and_backups7get_crons..collect_user_cron_counts_and_backupss    A*''D(9ZM_M_`JZJ3JIN  & &~ 6 TVYZhVij,,.J!))H//$$t+&&*^^ .++"D$9!)11  #j/ )J3JIN  & &~ 6~ MsSaObdlm7):':::A,, A LL? @ A(00  s$A6E .F )FF F$#F$)z /etc/cron.dz/etc/cron.dailyz/etc/cron.hourlyz/etc/cron.monthlyz/etc/cron.weekly)backupzSystem cron job count: %dzRoot cron job count: %dzUser cron job count: %dzPScheduled tasks configured on the server, either system-managed or user-defined.rjz4System Cron Job Count (/etc/crontab and /etc/cron.*)z+Root Cron Job Count (`crontab -l` for root)z,User Cron Job Count (`crontab -l -u `)zBackup-Related Cron JobszzPossibly related to system or user backups. Timing affects system load, therefore backups should run during nightly hours.z8Found in system-level crontab or /etc/cron.* directoriesc3,# UH nSU3v M g7fr)Nr$rr>s r"rget_crons.. sN3M%2eW3Mz(Found in crontab entries (root or users)c3,# UH nSU3v M g7frr$rs r"rrsL3K%2eW3Krr)r8rBrIrrrvrC)rrrrsystem_cron_directoriesbackup_keywordssystem_cron_job_countsystem_backup_cron_entriesroot_cron_job_countuser_cron_job_countuser_backup_cron_entriesrrrrs` @@@r" get_cronsrsq?X7 38.;`"O8^95JnJF.F LL,.CD LL*,?@ LL*,?@ [ !!"XZop!!"OQde!!"PRef  E"%= 56M   & LL  LL$^_ ` LLN3MN N # LL  LL$NO P LLL3KL L 99U  " " $t ++r+c. ^[RS5 [[TSS55n[TR=(a& [ TR5R 5S:H5nS[U5-nU(aUS-n[TRTRTR4UTR5nU4SjnU4Sjn0nURS 5 [T5US 'URS 5 [5US 'URS 5 [!5uUS'US'URS5 [#T5US'URS5 [%T5US'URS5 ['T5US'U(aSUS'OURS5 [)T5US'SnU(aHURS5 [+T5US'TR-S5STR/US5S3nSn U(aTR/S 5n O/[TS!S5c[0R3[45TlU n URS#5 [=T5US$'SR?/TRAS%5PSPTRCS&US 5PSPTRCS US 5PSPTRCS'US5PSPTRCS(US5PSPTR/US5PSPTR-S)5PSPTR/US5PSPTR-S*5PSPTR/US5PSPTR-S+5PSPTR/US5PSPUPTR-S,5PSPU PSPTR-S-5PSPTR/US$5P5n U(dSTR6bTREU TR6US.9 U $TREU [0R3[ S/5US.9 U $![8a [R;S"5 STlGNf=f![8a+ [R;S05 S1n TRGU 5s$f=f)2NzBuilding 'System' section skip_diskFr-r$rKcD>TRTRU55$r)rSr[)rUrs r"render_deadweight_error5system_build_section..render_deadweight_error$s&&v':':4'@AAr+c>UcSO [U5nUR5nUS:XaTRSS5$TRU5$)Nrjz/No files larger than 500MB found on the system.rprt)rWrr3rS)rUr-strippedrs r"render_deadweight/system_build_section..render_deadweight'sK\rs4y::< H H%%g/bc c&&t,,r+z OS versionrKernelrUptime uptime_value last_rebootz CPU stats cpu_summaryz Load averages load_summaryz Memory statsmemory_summaryz2[Skipped] Disk usage checks disabled via --no-disk disk_summaryz Disk storagerjz SMART health smart_summaryz### SMART Statusrrlzz0[Skipped] Large file scan disabled via --no-diskr*Failed to queue deadweight background scanCrons cron_summaryz## System SummaryzOperating Systemz Server Uptimez Last Rebootz### Load Averagesz ### Memory### Disk Usage### Large Files (>500MB)z ### Cron Jobs)rIrJrKz.[Error] Deadweight scan could not be started. z Failed to build 'System' sectionz[Error] Failed to build system section. Please do a manual review for OS version, Kernel version, uptime, CPU, Load, Memory, Disk, Deadweight files, SMART stats, and cron jobs. Please report this as a bug.)$r8rBrr1rrWrwrUrrrrrrrrr#r=rtrr]rlr<rSEXECUTORsubmitrrrrQrrvrrIrLr[) rr is_dedicatedrsection_progressrr summaries smart_blockdeadweight_markerdeadweight_block section_text error_texts ` r"system_build_sectionrs LL,-WV[%89I**]s63E3E/F/L/L/NR]/]^L L! !E  &   v445  B-`/ l+"0"8 ,h'&0l "#h'>Hl; .!9]#;k*#0#8 - o.$26$: .!n-&6v&> "# (\In %  ! !. 1(5f(=In %   ! !. 1)8)@Io &++,>?@**9_+EFGtM  5 %667ij v2D9A4/7~/NF, 1 g&$-f$5 .! D Dv$$%89: D" D(();Y|=TUV DVX D((9=M3NOP DPR D(()N:STU DVX D(( -8PQR  DSU  D &&y'?@A  D BD  D ''(;<=  D >@  D&&y'@AB DCE D'' 56 D79 D&&y1A'BCD DEG D''(89: D;= D&&y'@AB DCE Dm D''(BCD DEG D   D!# D''89 D:< D &&y'@AB! D (''3**,!33/+ **,#??30ab5+ W!4$$%QR/3F,4Z /;< :  "":../s>E&Q5P2F3Q*Q2&QQQQ2RRcSnSnSnSnSnSn[USS5=(d SR5n[US S5=(d SR5n/n S n Sn US :Xa/U"U5n U (d[RS U5 U"5upOuUS ;aPU"5n [ U 5n U"U5n U (a[R SX5 O6[R SU5 OUS:XaSn Sn S/n OUS:Xa U"5upSn U"USU 5 U"USU 5 U"USU 5 [USU 5$![a.n S[U 5S3n [RS5 Sn A N^Sn A ff=f)Ncj[XU5 g![a [RSU5 gf=f)NzFailed to set %s)setattrrr8rQ)obj attr_namergs r" safe_setattr$get_user_stats..safe_setattrs1 < CE * <   / ; .cpanel_domain_ownersT  p/(K1HIH VR06B;;JKQrH!f-5J OQ\i   e'44K(!))  eg  )..0:TFA>J H+b + p   acn o p ! ? LL= > e   VXc d es+A9C8A/D8 DDE#E#"E#cSn/n[S5nURS05=(d 0RSS5n[RSU5 [S5nURS05=(d 0RS /5=(d /nUVs/sH+oURS 5(dMURS 5PM- nn[RS [U55 X4$![a-nS[ U53n[R S5 SnANSnAff=fs snf![a [R S 5 X4$f=f) Nrget_current_users_countr5userszTotal cPanel users: %s[Error] Unexpected exception: z%WHM API call to get user count failed listacctsacctrz$Collected cPanel user list: %d usersz4WHM API call to get full user list failed for cPanel)rrr8rrrWrQrk) users_count users_listrrB account_listr s r" cpanel_users$get_user_stats..cpanel_userss1   F89H#<<39r>>wJK KK0+ >  U{+H$LL4:??KQrL7CX|txxPVGW*$((6*|JX KK>J P&& F:3s8*EK   D E E FY U   S T&& UsCA C,AD+D&3D&!D+, D#6#DD#&D++EEc[R"S/SS[RS9nUR5R 5nUSSVs/sH,o"R5(dMUR 5SPM. sn$s snf![ au [R"/SQSS[RS9nUR 5Vs/sH)o"R5(dMUR5PM+ Os snfsns$f=f)Nz/scripts/list_usersTrvr-rrJrr)rnz$/usr/local/cwpsrv/var/services/usersz -maxdepthr0rqlrrz%f )rrrrr.rr)r rrs r" cwp_user_list%get_user_stats..cwp_user_lists R,,&'!)) F LLN--/E05ab J ZZ\ODJJLO J JJ R,, !))F.4->->-@Q-@TJJLLDJJL-@Q Q! Rs=A B B)BBBAD C<'C<; DDcD[R"SU/SS[RS9R5nU=(d S$![a [ R SU5 Of=fSn[S5nUR5nURX 45 UR5nU(dSSS5 SSS5 g[[UR555sSSS5 sSSS5 $!,(df  O=fSSS5 g!,(df  g=f)NrTrrz2'whoowns' failed for %s, falling back to SQL queryah SELECT owner FROM ( SELECT username AS owner, domain FROM user UNION ALL SELECT user AS owner, domain FROM domains UNION ALL SELECT user AS owner, CONCAT(subdomain, '.', domain) AS domain FROM subdomains ) AS all_owners WHERE domain = %s LIMIT 1; r)rrrrrr8rrrrrr/iterr)rrrrrrPs r"cwp_domain_owner(get_user_stats..cwp_domain_owners ^#00K(!))  eg  % % ^ NNOQ\ ] ^  "* -&un5* . - D12 . -. - -sA?A A%$A%5D+C61D!C6# D6 D D Dc$Sn[SSS9nUHVnUR5RS5(dM)UR5n[ U5S:a[ US5n O SSS5 1S kn[R"5Vs/sH3nURU:dMURU;dM'URPM5 nn[ U5U4$!,(df  Nr=f![ a [RS5 Nf=fs snf) Nrz/etc/login.defsr/r0UID_MINrrKz,Failed to parse UID_MIN from /etc/login.defs>rrr)r3rrrrkrUrr8rrrrrr) minimum_uidlogin_defs_filerrainvalid_shellsr> login_userss r"baremetal_users'get_user_stats..baremetal_users s  K'':o+Dzz|..y99 $ u:?*-eAh-K ,;N '||{* /4~~^/S EMM'  ;,,!;: K NNI J K sE C((C1C+C(D &D 8D  C%!C(%C((D  D rrjrrrzTUnable to determine cPanel domain owner for %s; report.domain_owner will remain None>CWPrz)Domain owner for %s via CWP detection: %sz.No domain owner found for %s via CWP detectionr rzFailed to get CWP user datar wordpressrKrrrr) r1rr8r rkrrrrWrQ) rrrrrrr rrrrrrBs r"get_user_statsr$s< @',R83>-*&,39r@@BJf&6;ArHHJNIJLX*>:  LLf !- I 3 3 <%IYJ+N;L GfOQ_` ' '"   M { " / 1  6i0z2 6< 44# <9#c(2FJ   : ; ; .candidate_ca_filesX s8ZZ^^O4   "GM";=cafilez(Loaded CA bundle for RDAP TLS verify: %sz(Failed loading CA bundle %s for RDAP: %s) sslcreate_default_context get_ca_certsris_fileload_verify_locationsr8rBr)r5contextr4rBs r"_reg_build_ssl_contextr@W s ((*G%' S4=0022--W-= GQ N3w( N S LLCW R R SsA B B;B66B;cp[U=(d /5Vs/sHoR5PM sn$s snfr)r+rf) status_listss r"_reg_normalize_statusesrDs s*$7 8Ir$J K$JqLLN$J KK Ks3cU=(d /Vs1sH3o(dM U=(d SRS5R5iM5 nn[U[RS9$s snf)NrjrrrQ)rCrwrrW)ns_listnsrs r"_reg_normalize_nameserversrHu sP9@BN"2-b  %++-GN 'syy ))Os A",A"cVSU;a#URSS5SR5$g)NrrrK)rrw)rs r"_reg_extract_tldrJx s+ f}||C#A&,,.. r+c[R"USS0S9n[5n[R"X!US9nURS:wa:[ R "XRSUR3URS5e[R"UR5RSSS 95sSSS5 $!,(df  g=f) NAcceptzapplication/json)headers)rr?rzHTTP r/rRr&) r Requestr@urlopenr{urlerror HTTPErrorrMjsonloadsrr)urlrreq ssl_contextresps r"_reg_fetch_jsonrY| s //#2D'E FC(*K { Ct ;;# $$S++t{{m7Ldll\`a azz$))+,,WY,GH D C Cs A M ['5n /n UH,n X;dM U R)U 5 U R%U 5 M. U $!,(df  GNq=f![a SnGNf=f!,(df  GNY=f![a GNif=f![a SnGN|f=f)Nzhttps://rdap.org/domain/z/tmp/iana_rdap_dns.jsonrrr/r0z#https://data.iana.org/rdap/dns.jsonrvr%wr2rrrKc3x># UH/nTR5[U5R5:Hv M1 g7fr)rwrW)rrxtlds r"r&_reg_rdap_endpoints.. s&Kzsyy{c!flln4zs7:rjrz/domain/)rJr5stattimest_mtimer3rSloadrrYdumprr+rrrkrrCrr1r,)rr3 cache_path iana_data cache_stathandler2servicetldsbasesrr*dedupedrUr^s @r"_reg_rdap_endpointsrm s,VH56J 6 "C *JIWWZ( 499;)<)<<Ej#8F IIf- 9  '(MWYZI *cG<IIi0=-7y$,G,Gy}}Z(TH(D!!Ggt,,G q0@!!*gaj%KtzrzKKK" **3/4%%hvh&?@%   5DG ? HHSM NN3  NG98  =<   I s~AH/G0H H8! H',HH'0 G?:H?H HH H$H'$H'' H51H84H55H88 IIc(SnSn[URS/5=(d /5n/nURS/5=(d /HnURS5=(d /n[SU55(dM6URS/5n[U[5(as[ U5S:adUSH[n[U[5(dM[ U5S:dM+US S :XdM6[ US 5R 5=(d Sn O U(dM O URS /5=(d /HCn U RS S5=(d SR5S:XdM2U RS5n O URS/5=(d /H;n URU RS5=(d U RS55 M= U=(d SU(a [U5OS[U5[U5SS.$)Nr{entitiesrolesc3X# UH o=(d SR5S:Hv M" g7f)rjrxNrw)rroles r"r"_reg_parse_rdap.. s I54JB%%';65s(* vcardArrayrrKrrfnrevents eventActionrj expiration eventDateryldhName unicodeNameT)rxrzstatusesry has_object) rrrrrkrWrrwrr'rDrH) rdap_datarx expiry_rawr}ryentityrp vcard_arrayr>eventns_objs r"_reg_parse_rdapr sIJIMM(B/526HK==R06B6 7#)rI5III jjr2 k4 ( (S-=-B$QeT**s5zQ58tCS #E!H 3 3 5 =I( 9 7--"-33 IImR ( .B 5 5 7< G;/J 4 ==39r96::i0MFJJ}4MN:&$5?%j1T+H51+>  r+c [R"U[R[RSUSS9nURUR=(d SUR =(d S4$)NTFrZrJr-rrsrj)rrrrgrZrJ) command_argstimeout_secondsrs r" _reg_run_cmdr sO >>   D ??T[[.B$++2C DDr+cT[U5nU(aU(dg[USSU/SS9up4nUS:wdU(dg[R"SU[R[R -5nU(aUR S5R5$S$![a gf=f)N-hzwhois.iana.orgrvrrz^\s*whois:\s*(\S+)\s*$rK) rJrr]rrMr}rrr)r whois_pathr^rgrZ_stderrrs r"_reg_whois_referral_serverr s 6 "C j&2JFVX[3\np&q# G ?& 3VRTTBDD[I).u{{1~##%8D8 sBABB B'&B'ct[R"S[R5n[R"S[R5n[R"S[R5n[R"S[R5n[R"S[R5nSnSn/n[5n Sn U=(d SR 5GHn U =(d SR 5n U (dM&U(dBUR U 5n U (a*U RS5R 5=(d SnMoU(dBUR U 5n U (a*U RS5R 5=(d SnMUR U 5n U (aNU RU RS 5R 5RS 5R55 GMUR U 5n U (a1URU RS5R 55 GMgU (aGMqUR U 5n U (dGMS n GM U=(d SU(a [U5OS[U5[U [RS 9U S .$)Nz?^\s*(Registrar|Sponsoring Registrar|Registrar Name)\s*:\s*(.+)$z^\s*(Registry Expiry Date|Registrar Registration Expiration Date|Expiry Date|Expiration Time|paid-till|Expiration Date)\s*:\s*(.+)$z(^\s*Name Server\s*:\s*([A-Za-z0-9\.\-]+)zC^\s*(Domain Status|Status)\s*:\s*([^\s].*?)(?:\s+https?://\S+)?\s*$z^\s*Domain Name\s*:\s*(.+)$FrjrrKrrTrQ)rxrzr}rysaw_domain_name)r]r^rMr1r.rrrr,rCrwrr'rDrrW) whois_text registrar_re expiry_re ns_line_re status_redomain_name_rerxrrBryrrrrs r"_reg_parse_whoisr s::`bdbfbfgL  O IGNJ acecgcghIZZ >ENIJK%KO%2113B%%'  &&t,E!KKN002:d OOD)E"[[^113;t   &  OOEKKN00299#>DDF G %    u{{1~335 6 "((.Eu"&=4B&$5?%j1T+K8ksyy9*  r+cd^U=(d SR5mSn[U4SjU55$)Nrj) z no match forz not foundzstatus: availablez status: freez no data foundzno entries foundzquery_status: 220z!domain you requested is not knownz(this domain name has not been registeredzobject does not existzno such domainc3,># UH oT;v M g7frr$)rsiglows r"r'_reg_whois_not_found..3 s-WcczWrr)rsignalsrs @r"_reg_whois_not_foundr$ s0   " " $C G -W- --r+cJSUlSUlSUl/UlSUlgr)rrrrr)rs r"_reg_reset_fieldsr4 s*"F#F#F!FFr+c H [USS5=(d SR5R5n[U5 U(aSU;a[R S5 g[ U5GHn[RSU5 [USS9n[U5nUS Ul US Ul US (aSRUS 5OSUlUSUl[#US5Ul[R'SUR=(d S5 [R'SUR=(d S5 [R'SUR=(d S5 [R'SUR (aSRUR 5OS5 UR)URUR URUR5s $ [R'S5 [*R,"S5nU(d[R/S5 SUlg[1X5nSnU(aUSXq/OSXa/4Hn U (dM [RSSRU 55 [3U SS9upn U =(d SR5n U (aU S :Xd[5U 5S!:aU n O0U (a%[RS"U U =(d SSS#5 MM U(dSUlg&[;U5(a)[R'S'U5 [U5 S(Ulg)UR5nS*U;d S+U;dS,U;a[R/S-5 SUlg.[=U5nUS Ul US Ul US (aSRUS 5OSUlUSUl[?[#UR5[#UR5[#UR 5[#UR5[#URAS/S(55/5(d[R'S0U5 S(Ulg)S1Ul[R'S2UR=(d S5 [R'S3UR=(d S5 [R'S4UR=(d S5 [R'S5UR (aSRUR 5OS5 UR)URUR URUR5$![a"n[RS X$5 SnAGM-SnAff=f![a [RS 5  GMf=f![6R8a [R/S$5 GM[a"n[R/S%U5 SnAGMSnAff=f)6NrrjrrzBget_registration_info called without a valid report.managed_domainz"[Error] Managed domain is not set.zRDAP lookup: %srwr%zRDAP candidate failed: %s -> %sz(RDAP parse error; falling back to WHOIS.rxrzr}rmryr~z[RDAP] Registrar: %sr@z[RDAP] Expiration: %sz[RDAP] Status: %sz[RDAP] Nameservers: %srnzAttempting WHOIS fallback.whoisz9whois binary not found in PATH; cannot do WHOIS fallback.zY[Notice] Unable to determine domain registration: RDAP failed and WHOIS is not installed.rzWHOIS command: %srt#rrrIz'WHOIS attempt returncode %s. stderr: %srz,WHOIS attempt timed out; trying next option.z-WHOIS attempt failed: %s; trying next option.z+[Error] WHOIS failed or returned no output.z%WHOIS indicates %s is not registered.Fz"[Notice] Domain is not registered.zlimit exceededzquota exceededzplease try again laterz'WHOIS rate limit or throttle indicated.z3[Error] WHOIS rate limit exceeded. Try again later.rzPWHOIS parsing produced no registration signals for %s; treating as unregistered.Tz[WHOIS] Registrar: %sz[WHOIS] Expiration: %sz[WHOIS] Status: %sz[WHOIS] Nameservers: %s)!r1rrwrr8r rmrBrYrrrQrrrvrrrrrrrxrXrrrrkrTimeoutExpiredrrrr)rrrUr5rBfieldsrreferral_server whois_outputrrgrZrJr  whois_lowers r"get_registration_infor: sf.39r @ @ B H H JFf S& YZ3"6*  LL*C 0"33D  $T*F #)"5#)(#3 DJ:DV499VJ-?#@\` #)-#8 #F<$89 *F,C,C,PyQ +V-E-E-RS ')A)A)NYO $393K3KDIIf.. /QW ((  # #  $ $  $ $  $ $   9+F KK,-g&J RS#j0DOL9H*dO 4T    Q LL,chh|.D E)5lTV)W &Jl))+F:?c&kB.>%  =\r4C(!6 #<L)) ;VD&!$3$$&K;&*:k*IMeitMt@A#D l +F$[1F%h/F@Fz@Rtyy );&>&K)L KK!/5/G/G &**+V  $ $       c  LL:C E       G H  r(( K NNI J J Q NNJC P P QsO1 U2 V!*A)W *W 2 V<VV!WW )X!6 X!?XX!cS/nU(aURS5 XAU/- n[R"USUS9R5$![a!n[ R SXU5 SnAgSnAff=f)Ndig+shortTrzdig failed for %s %s: %srj)rrrrrr8rB)rErrtypeshortrargsrBs r" _dns_run_digr sk 7D  HTND&&t$PVVXX  /sCs#A A2A--A2c[USSS9nUR5Vs/sH#n[R"SU5(dM!UPM% sn$s snf)Nr.Trz^\d{1,3}(\.\d{1,3}){3}$)rr.r]r)rEr8ips r"_dns_a_recordsr sOtS5K((* *B 88. 3 *  s A A c[USSS9n/nUR5H^nUR5nURS5(aUR S5(aUSSnU(dMMUR U5 M` U$)NtxtTrrrKr)rr.rrendswithr)rEr8 txt_entriesrrs r"_dns_txt_recordsr s{tU$7KK ++- ??$   s # #(9(9#(>(>"~H 8   x ( . r+c/n[USSS9nU=(d SR5HenSU;aM [R"SUR 55n[ US5nUSR S 5nURXV45 Mg U(d[USS S9nUR5Hln[R"S U5nU(dM#UR[ URS 55URS 5R S 545 Mn URSS9 U$![a GMf=f)NmxFrrjz MX \s+rrrTz^\s*(\d+)\s+(\S+)\.?$rKrc US$rwr$rs r"rO!_dns_mx_records.. sT!Wr+rQ) rr.r]rrrUrCrrrrr) r mx_recordsmx_full_outputrraprioritytargetmx_short_outputrs r"_dns_mx_recordsr s J!+t5AN$*668 9 $ !23 59~H2Y%%c*F   x0 19 &{DE(335IHH5yAEu!!3u{{1~#6 A8M8Mc8R"ST6 OO,O-    s4D44 EEc:[S[U55S5$)Nc3p# UH,oR5RS5(dM(Uv M. g7f)zv=spf1Nrwrrrxs r"r"_dns_spf_record.. s&\9qWWY=Q=QRZ=[9'6 6)r/r)rs r"_dns_spf_recordr s \,[9\^b ccr+c0[U5nU(dgUS4$)N/Missing, which can cause deliverability issues.rZrA)r)r spf_records r"_dns_spf_displayr s -J G w r+c[S[SU355S5nU(dg[R"SU[RS9nU(dgUR S5R 5R5nUS:Xag U$) Nc3p# UH,oR5RS5(dM(Uv M. g7f)zv=dmarc1Nrrs r"r,_dns_dmarc_policy_summary.. s&b=qAUAUV`Aa=rz_dmarc.rz(?:^|;)\s*p\s*=\s*([^;\s]+)flagsz'Present (policy missing or unparseable)rKrz,None, which can cause deliverability issues.)r/rr]rrMrrrw)r dmarc_raw policy_match policy_values r"_dns_dmarc_policy_summaryr s|b$w{m%<=b I @99;YbddSL 8%%a(..0668Lv= r+c@[U5nURU5nX#4$r)rr)rrrr,s r"_dns_dmarc_displayr s%-k:M  " "= 1E  r+cSH.nUSU3n[U5n[SU55(dM. g [S[U555(agg)N)r selector1 selector2googlerudkimz ._domainkey.c3x# UH0nSU;=(d SU;=(d SUR5;v M2 g7f)zp=zk=rNrrrs r"r#_dns_dkim_exists.. s0XKq BtqyBf .ABKs8:Tc3H# UHnSUR5;v M g7f)rNrrrs r"rr s F(E16QWWY (E "F)rr)rselectorfqdn txt_recordss r"_dns_dkim_existsr sZS< }5&t, XKX X X T  F(8(E FFF r+c*[U5nU(agg)N)Detectedrpr)r)r dkim_existss r"_dns_dkim_displayr s";/K" Cr+c^[USS5nU(d [U5n[ [USS5=(d /5mU(aTR U5 U(a@T(a"[U4SjU55(aSUlgT(aSUlgSUlg U(dSUlg SUlg ![a [R S5 Nf=f![a [R S 5 SUlg f=f)Nrz>get_mail_ip() failed while trying to determine mail routing IPrc3,># UH oT;v M g7frr$)rr server_ipss r"r+_dns_mail_routing_status..) s!M_r "2_rTLocalFExternalz0Unknown (MX resolves but server IPs are unknown)zNo MX records foundr@z8Failed while determining local_email from MX and mail IPz.Unknown (error while determining mail routing)) r1 get_mail_iprr8rQr1r,rr )rrmx_top_target_arrs @r"_dns_mail_routing_statusr s @&)T2 c%f- #769d#C#IrJ  NN7 # c!M_!MMM%)"%*"!!%F E!%F (!/ c  !ab c0 @ST!?@sLC B8A&C CC!C0C8CCCC&DDc[R"SS[USS5=(d SR5[RS9R SS5SR5R S5R5nU(dg [US S S 9R5Vs/sH+nUR5(dMUR S5PM- nn[U5n[U5Ul [U5nU(a[USS5O/n[XU5n[S U3SS S 9nU(a"UR5SR S5OSn U (d[S U35O/n [U5up[!X5up[#U5unnUR%SU(aSR'U5OS5UR%SU(aSR'U5OS5UR%SU(a-SR'UVVs/sHunnSUSU3PM snn5OS5UR%SU(aSR'U5OS5UR%SU5UR%SU =(d S5/nU (d9UR)UR%SU (aSR'U 5OS55 UR)UR%SU U S95 UR)UR%SU US95 UR)UR%SUUS95 SR'U5$s snfs snnf)N ^\s*https?://rjrrrrKrrrz[Error] managed_domain is emptyrGTrrcnameNSrmz None foundAMXz Priority: z Target: zHighest Priority MX TargetzMail Routing (Based on DNS)z WWW CNAMEzWWW ASPFrz DMARC PolicyDKIMr)r]rlr1rrMrrCrwrr.rrrrrrrrrrvr)r apex_domainr ns_records a_recordsrrmail_routing_statuswww_cname_output www_cname www_a_records spf_display spf_style dmarc_display dmarc_style dkim_display dkim_stylepriotgtrs r" get_dns_infor= s&& )2 . 4";;=dd   eCmA  uwvvc{557  0!d$?JJLLD ::<  CL {+I!)_F -J:DnZ]1%56"O26W#d;-$8'N@P ++-a077.run_command s &&|$R\RdRdeer+c ~>TRSTRS[U5RS5S355$r)r3rWrC)rDrs r" bold_labelget_ip_info..bold_label s<!!'6+=+=fZI_I_`cIdHeefFg+hiir+c>T"/SQ5n[R"SU5nU(aURS5$S$![a n[R SU5 SnAgSnAff=f)N)rrouterz1.1.1.1z\bsrc\s+(\d+\.\d+\.\d+\.\d+)rKrjzmain ip detection failed: %s)r]rrrr8rB)r rerrrs r" get_main_ip get_ip_info..get_main_ip s[  !BCFII=vFE%*5;;q> 2 2  LL7 = s8>> A(A##A(c>[5nT"/SQ5nUR5H]nUR5n[R"SU5nU(dM3UR S5nUS:wdMLUR U5 M_ Sn[XS9$![a n[RSU5 SnAN1SnAff=f)N)r-4addrz!inet\s+(\d+\.\d+\.\d+\.\d+)/\d+\srKz 127.0.0.1zall ipv4 detection failed: %scf[SURS555$![a gf=f)Nc38# UHn[U5v M g7fr)rUrparts r"rIget_ip_info..get_all_ipv4..ip_sort_key.. sF3E4SYY3Errr)r'r'r')rrr)ip_texts r" ip_sort_key6get_ip_info..get_all_ipv4..ip_sort_key s3 ,F7==3EFFF ,+ ,s # 00rQ) r1r.rr]rrr,rr8rBr)ipv4_addressesr rr ip_addressrr)rs r" get_all_ipv4!get_ip_info..get_all_ipv4 s ? !56F))+zz|!EtL5!&QJ![0&**:6 , , n66 ? LL8# > > ?s$A BB3B B>B99B>cU=(d SR5n[R"SSU[RS9n[R"SSU5nUR SS5SR S5R 5nU$) Nrjrrz^.*@rrKrrr)rr]rlrMrrCrw) raw_domain domain_values r"r%get_ip_info..normalize_domain sq"(b//1 vv.LM vvgr<8 #))#q1!4;;C@FFH r+c>U(aSU;agT"SSSU/5nUR5H3nUR5n[R"SU5(dM1Us $ [ R "U5up4nUH#n[R"SU5(dM!Us $ g![a NPf=f![a n[RSX5 SnAgSnAff=f)Nrrrjrrrz^\d+\.\d+\.\d+\.\d+$z&dns resolve fallback failed for %s: %s) r.rr]rrsocketgethostbyname_exr8rB) rr r _hostname_aliases addressesr,rrs r"resolve_domain_ipv4(get_ip_info..resolve_domain_ipv4 sc4  %3 !DEF))+zz|883T::K,  U-3-D-D[-Q *I' 883Z@@%%(     U LLA; T T UsBA B(B("B(%8B8!B8%B8( B54B58 C"CC"rrjzmanaged domainzServer Host IP:rtr@z IPs on ServerzIP Assigned to rnr)r1rrrrkrv) rrrr-rr9rrnormalized_domainrmanaged_domain_display summary_linesrs ` @r" get_ip_infor> sfj7,(mGnG(9I2)NO+,=>FNFN0F$V-=rBVFV ' ( )7+?i*@A o & 'qW7 (>'?@ A B!DUD_Y_C`aM 99] ##r+c([R"SS/SS9nUR5H@nSUS3U;dM[R"SU5nU(dM/UR S5s $ g![ a [RS U5 gf=f) Nssz-ltnpTrr?rtzusers:\(\("([^"]+)",pid=(\d+),rKz Failed to get service on port %s) rrr.r]rrrr8rQ)portr rrs r"get_service_on_portrB s C(($tD%%'D4&{d" "CTJ5 ;;q>) (  C;TB Cs"2A.A.A.+A.. BBc[RSUR5 [S5Ul[R SUR5 UR(d$[R S5 /UlSUlgURR5n[USS5=(d SR5R5nSU;GaURRS5 [U5nU(d.US :Xa([5upEUnU(aS UlX0lXPlU(Gai[U5=(d SR5n[R S U=(d S 5 S U;dSU;aURRS5 [RS5 [%U5n[U5=(d SR5nSU;a2URRS5 SURS3UlGO[R SU=(d S 5 OSU;a1URRS5 SURS3UlO[R SU=(d S 5 ['U5UlO[RS5 ['U5UlOrSU;a1URRS5 SURS3UlO;URRU5 [R SUR5 [RSUR5 [RSUR5 g)a  Determine the front-end service on :80 and the upstream chain. Sets: - report.web_stack (list) - report.vhost_path (path to the *Apache* vhost when Apache is the terminal backend; for standalone NGINX, we set it to the NGINX vhost path.) z8Determining the server's web stack and vhost path for %srpzService on port 80: %szNo service found on port 80.Nrrjnginxcpanel/etc/nginx/conf.d/ea-nginx.confz Backend service behind NGINX: %srdz cache-mainvarnishzKVarnish detected behind NGINX. Checking for backend port in Varnish config.httpdapachez /usr/local/apache/conf.d/vhosts/.confz(Unknown final backend behind Varnish: %sz Unknown backend behind NGINX: %szNGINX is standalone.z Unrecognized port 80 service: %szWeb stack detected: %szVhost path resolved: %s)r8rrrBrrBrrrrwr1rrget_nginx_proxy_pass&get_cpanel_ea_nginx_apache_proxy_portsnginx_matched_vhostcpanel_apache_proxy_portcpanel_apache_proxy_ssl_portget_varnish_backend_portget_nginx_vhost_path) rsvcpanel proxy_port http_port https_portbackend varnish_port final_backends r" get_web_stackrZ s KKJFLaLab04F LL)6+A+AB  ! !56   & & (C V\2 . 4" ; ; = C C EE#~()&1 ex/$J$L !I"J-N*2</6@3 *:6<"CCEG LL;W=Q Rw&)w*>  '' 2 ij7? !4\!B!Hb O O Q m+$$++H5*J6K`K`Jaaf(gF%NN#M}Oi`ijG#  ''1&FvG\G\F]]b$c!A7CWiX$8$@! KK. / 4V v?T?T>UUZ[ $96;Q;QR KK(&*:*:; KK)6+<+<=r+c[SSU05nURS05RS05=(d 0nURS5=(d SR5$![a [R SU5 gf=f)Nrrr5r documentrootrjz$WHM API domainuserdata failed for %s)rrrrr8rQ)r api_responsers r"_cpanel_try_api_docrootr^6 s}/(F1CD ##FB/33JCIr ^,299;; ?HsA A## BBc<SUSU3nX"S-US-4nUHn[RRU5(dM)[USSS9nUR S5(a[ R "U5nO[R"U5nSSS5 [W[5(a5URS5=(d S R5nU(aUs $MM g !,(df  N]=f![a [RS U5 GMf=f) N/var/cpanel/userdata/rz.yamlz.jsonr[r/r0r\rjz'Failed reading cPanel userdata file: %s)r5rrr3rrSrcyaml safe_loadrr+rrrr8rQ)ownerr base_pathcandidate_pathscandidate_path userdata_filer docroot_values r"_cpanel_try_userdata_docrootri> s'wax8I g"5y77JKO)ww~~n--  XncG< !**733#yy7H#~~m[TSS5=(d SR5nU(a:URS5(d$[RR U5(dSTlSTlgU(dSTlSTlg[R"U5Rn[R"U5RnX1:XaSTlUS3TlOSTlUS US 3Tl[RS X1U5 g![aL STlS [R"U5RS US 3Tl[R!SU5 g["a' STlSTl[R%SU5 gf=f)Nrrj[Error]z3[Notice] Ownership check skipped (path unavailable)z7[Notice] Ownership check skipped (domain owner unknown)Tz (correct)Fz (expected: rEz0Docroot ownership: actual=%s expected=%s path=%sz [Notice] UID z! has no matching user (expected: z$Could not resolve UID for docroot %sz)[Error] Failed to check docroot ownershipzOwnership check failed for %s)r1rrr5rrYrrr`st_uidrgetpwuidrr8rKeyErrorrrrQ)rexpected_owner actual_uid actual_ownerrs r"check_docroot_ownership,get_docroot..check_docroot_ownership| si!&."=CJJLty11t9L9L&*F #)^F & &*F #)bF &  D--J<< 3;;L-*.'0<~Z-H**/'0<~\.IYYZ-[* KKJLjn o I&*F #+89M9M8NNop~o@A*BF & NNA4 H D&*F #)TF &   S>SU[UfUfg&,39r@@BJD:X&"2B7=2DDF4:AACFFN LL ( #D )>> !eFN LL ( #D )>> !-f5 (FN KK96>> J #FNN 3>> !1%@ 'FN KK? P #FNN 3>> !SGW%~~((4WVEUWY5Z5`^`aFK6<"  "9$t)L)L!>v?P?P!Q!/!q?!qFq!KK 96>>JNN#^`f`n`no'7~~%)# (A!26!:!|o!|Q| 4fnnE'7~~%,a0aFN NNA9 M #FNN 3>> !%%3 7H/~~5FN NN/1B1BCD! >> ",l0lFN   @ A #FNN 3>> !  "s"B+P&0A+P&AP&&A Q65Q6c<^^^^ [RSUR5 URmT(a$[R R T5(dSUlUR$SNzDetecting CMS for: %sr@c>[RRTU5nUS:Xa[RRU5$US:Xa[RR U5$[RR U5$)Nrsr)r5rrvrrYr)rel_pathmoder document_roots r"rget_cms..exists s^ww||M84 3;77>>$' ' 3;77==& &ww~~d##r+c">[RRTU5n[RRU5(a'[ USSSS9nUR U5sSSS5 $g!,(df  g=f![ a gf=fNr[r/rr%rj)r5rrvrr3rr)r max_bytesrfhrs r" read_fileget_cms..read_file s 77<< x8Dww~~d##$ghG2779-HG$  HG  s0ABA0$ B0 A>:B>B B Bz composer.jsonrjrequirertzWordPress (WooCommerce)cv>T"SS5=(a) T"SS5=(a T"SS5=(a T"SS5$)N wp-config.phprs wp-contentr wp-includeszwp-content/plugins/woocommercer$rsr"rOget_cms.. s_F?C,H-xVT`beMf-xkqrBElF-xKQRrtwKx-xr+ WordPresscV>T"SS5=(a T"SS5=(a T"SS5$)Nrrsrrrr$rsr"rOr s+f_c:wvlTW?Xw]cdqsv]wwr+JoomlacV>T"SS5=(a T"SS5=(a T"SS5$)Nzconfiguration.phprs administratorr componentsr$rsr"rOr s,6"5s;zX[@\zaghtvyazzr+Drupalc6>T"SS5=(a T"SS5$)Ncorersitesr$rsr"rOr s6&#.G6'33GGr+Magentoc6>T"SS5=(a T"SS5$)Nzapp/etc/env.phprsz bin/magentor$rsr"rOr sF#4c:YvmUX?YYr+ PrestaShopc6>T"SS5=(a T"SS5$)Nzconfig/settings.inc.phprsclassesrr$rsr"rOr sv&?E`&QZ\_J``r+OpenCartcV>T"SS5=(a T"SS5=(a T"SS5$)Ncatalogradminrpr$rsr"rOr s*VIs3fw8LfQWX`beQffr+ MediaWikic6>T"SS5=(a T"SS5$)NzLocalSettings.phprsincludesrr$rsr"rOr sf%8#>Z6*VYCZZr+Moodlec6>T"SS5=(a T"SS5$)Nz version.phprszlib/moodlelib.phpr$rsr"rOr s6-5Z&ATVY:ZZr+TYPO3c6>T"SS5=(a T"SS5$)Ntypo3rz typo3conf/LocalConfiguration.phprsr$rsr"rOr s&#.b6:\^a3bbr+z Concrete CMSc6>T"SS5=(a T"SS5$)Nconcreter applicationr$rsr"rOr s C!8!WVMSV=W!Wr+MODXcV>T"SS5=(a T"SS5=(a T"SS5$)Nrrmanager connectorsr$rsr"rOr s),e 31GeFS_adLeer+ OctoberCMSc6>T"SS5=(a T"SS5$)Nzmodules/systemrzconfig/cms.phprsr$rsr"rOr sv&6<^HXZ]A^^r+z Craft CMSc.>T"SS5=(d ST;$)Ncraftrz craftcms/cmsr$ composer_blobrsr"rOr sfWc2Un 6UUr+ SilverStripecN>ST;=(d T"SS5=(d T"SS5$)Nzsilverstripe/frameworkz app/_configrzmysite/_configr$rsr"rOr s@!9]!J"JfUbdgNh"JlrtDFImJ"Jr+ExpressionEnginec>T"SS5$)Nz system/eerr$rsr"rOr s VK%=r+phpBBc6>T"SS5=(a T"SS5$)Nz config.phprszstyles/prosilverrr$rsr"rOr s&s3W?QSV8WWr+XenForoc6>T"SS5=(a T"SS5$)Nzsrc/XFr internal_datar$rsr"rOr sF8S1Rf_c6RRr+MyBBc6>T"SS5=(a T"SS5$)Nzinc/config.phprszinc/settings.phpr$rsr"rOr s 0#6Z6BTVY;ZZr+Gravcv>T"SS5=(a) T"SS5=(a ST"S5R5;$)Nrprz user/configgravzsystem/defines.phprrrrsr"rOr sO#.D6-3MDRX\efz\{]B]B]DSDDr+DokuWikic6>T"SS5=(a T"SS5$)Nzdoku.phprszconf/dokuwiki.phpr$rsr"rOr sVJ4Y@SUX9YYr+Kirbyc6>T"SS5=(a T"SS5$)Nkirbyrz site/configr$rsr"rOr s&#.M6-3MMr+Shopwarec>ST;$)Nshopwarer$rsr"rOr s Z=8r+Syliusc>ST;$)Nsyliusr$rsr"rOr! s 8}4r+GhostcV>T"SS5=(a ST"S5R5;$)NrZrghostz package.jsonrrrsr"rOr" s'&C0aW .@Y@_@_@a5aar+zUnhandled CMS detection errorr)i@ )r8rrrr5rrYrrSrTrrvkeysrwrrQ) r composer_rawrequiredrulescms_namersrrrrs @@@@r"get_cmsr s% KK')>)>?NNM  m < <#$_-LM 1zz,/33IrBHbH XXhmmo6<|KRRTM #%x y wx z{ GH YZ `a fg Z[ Z[ bc WX ef ^_ UV J K => WX RS Z[ D E YZ MN 89 45 ab3 E8 $OHww"* % $M 1(..0M 1P 89#s1A"G)G2> G2 G2G/.G/2&HHc[U[RRUS5[RRUS5S9n[R"UR SS9 U$)Nzcurl_headers.txtzcurl_trace.txt)rbrcrdTexist_ok)rar5rrvmakedirsrb)rb artifactss r"_site_stats_prepare_tempr2 sQ"%n6HI'',,~7GHI KK ((48 r+cg)Na. --- Performance Metrics --- URL: %{url_effective} HTTP Response Code: %{http_code} Redirects Followed: %{num_redirects} TLS Handshake: %{time_appconnect}s Time to First Byte: %{time_starttransfer}s Total Time: %{time_total}s Download Size: %{size_download} bytes Download Speed: %{speed_download} B/s r$r$r+r"_site_stats_curl_format_stringr: s  2 r+c4SSSSSSSSS S [5S US U/$) NcurlrTr#z /dev/null-AIMHrbzAccept-Encoding: gzip-Lz-wz --dump-header-v)r)rUrcs r"_site_stats_build_curl_commandrF s<       &(   r+cUcg[U[5(aU$[U[5(aURSSS9$[U[[ 45(aSR SU55$[U5$)Nrjr/rRrNrc38# UHn[U5v M g7fr)_site_stats_coerce_textrrs r"r*_site_stats_coerce_text..` sI540665r)rrWbytesrrrrvrgs r"rrX sl }% %||GI|66%$''yyI5III u:r+c[U5n[USSSS9nURU=(d S5 SSS5 g!,(df  g=f![a [R SUSS9 g f=f) Nr\r/rRr%rjTzFailed to write %srF)rr3rrr8rB)rrZ content_textr2s r"_site_stats_write_text_filerb sn.w7 $gi @K   l0b 1AA @  )4$ ?s+A=A A A AA0/A0c [R"U[R[RSSSUSS9$![Ran[ [ USS5=(d [ USS5=(d S5n[ X%5 [RS [ US S 5U5 U(aIUR5n[RS S R[U5S:aUSSOU55 S[ US S 5S3sSnA$SnAf[a [RS5 g[a n[RSU5 SnAgSnAff=f)NTr/rRF)rZrJr-r1r&rrsrJr rjzcurl timed out after %ss for %srrzcurl stderr tail (timeout): %sr(z[Error] curl timed out after rCz1curl executable not found when attempting to run.z"[Error] curl executable not found.z%Unexpected exception running curl: %sz[Error] Failed to execute curl.)rrrrrr1rr8r r.rBrvrkrrQr) curl_commandrUrdr timeout_error stderr_text stderr_linesrBs r"_site_stats_run_curlrk s@'1~~ ????#    $ $_- M8T 2 }h5  $$5C - M9i 8  &113L LL1 L0AB0F,st,LY  /w}iQZ/[.\\]^^ 4LM3 1@#F01s.69E  CD E "E 7 E EE c0nU=(d SR5H?nSU;aM URSS5up4UR5XR5'MA U$)Nrjr2rK)r.rr) stdout_textrrrrgs r"_site_stats_parse_metricsr sXN"..0 t  ZZa( &+kkmyy{# 1 r+c /nSnSnU=(d SR5HnURS5(a,UR5n[U5S:a USUSp#MCMEURS5(dM]URS S5SR 5nUR US US US 35 M U$) Nz???zHTTP/1.1rjz< HTTPrrKrz < Location:r2rtr;rE)r.rrrkrr)rr http_code http_protocolrralocations r"_site_stats_parse_redirectsr  sIM"..0 ??8 $ $JJLE5zQ+08U1Xy __] + +zz$*1-335H  # #yk8*B}oQ$O P1 r+c0nSn[USSSS9nUHYnUR5RS5(a US- n/X'US:dM8XRUR 55 M[ SSS5 URU/5$!,(df  N =f![ a [ RS 5 /s$f=f) Nrr[r/rRr%http/rKrz7Failed to read/parse dumped headers for final response.) r3rwrrrrr8rr)rcheaders_by_request header_index header_filers r"#_site_stats_final_headers_from_dumpr sL  "C') LP[#::<**733 A%L79&41$&4;;DJJLI $M  ! !, 33M L PQ s4 B7B  %B 2B BBB!CCc&[SU55$)Nc3Z# UH!nSU=(d SR5;v M# g7f)zcontent-encoding: gziprjNrr)rrs r"r'_site_stats_has_gzip.. s%^P]f'FLb+?+?+AAP])+r) final_headerss r"_site_stats_has_gzipr s ^P]^ ^^r+cUH@nU=(d SR5nSU;aM$SU;aM,SU;dSU;dSU;dM@ g g) Nrjcachemisshitzhit fromz cache hitTFrr)rr header_lowers r"_site_stats_has_cache_hitr sS "++- , &  \ !  L J,$>+Q]B]  r+cUHInU(a>[RRU5(a[R"U5 MGMIMK g![a [ R SU5 Mqf=f)NzFailed to remove %s)r5rrrrr8r)pathsrs r"_site_stats_cleanupr sX 8t,, $-t 8 NN0$ 7 8sAA A54A5cUcg[U5R5nURS5(aUSSn[U5$![a gf=f)NrCr)rWrrrr)raraw_texts r"rr sZ:$$&HCR=X s A AAc4[RSUR5 [R"S5nU(d[R S5 g[ 5n[USS5=(d Sn[X2R5n[RSU5 [RS S RU55 [RS URUR5 [XCURS S 9n[!U["5(a#[%URUR/5 U$Un['URUR(=(d S5 UR*S:wa[R SUR*U5 UR(=(d SR-5SSn[RSSRU55 [%URUR/5 SSRU5-$[/UR05nUR3S5Ul[7UR(5n [9UR5n [;U 5Ul[?U 5Ul [RSUR45 [RSUR<5 [RSUR@5 URCX5n [%URUR/5 U $![a [RS5 gf=f![aEn [RS5 [%URUR/5 SU 3sSn A $Sn A ff=f)Nz(Gathering site performance stats for: %srz8curl binary not found in PATH. Cannot gather site stats.z&[Error] curl not found on this system.z7[Error] Failed to create temp directory for site stats.rrjzUsing curl at: %szcurl command: %srtz&Dump headers -> %s ; verbose/err -> %srzrrz*curl exited with non-zero status %s for %srzcurl stderr tail: %srzBUnable to retrieve performance metrics at this time due to error: rzHTTP Response Code: %szGZIP Compression: %szCache Hit Detected: %sz*Failed to parse curl output for site statsz$[Error] Failed to parse site stats: )"r8rrrxrXr rrrQr1rrcrBrvrdrrrWrrrJrgr.rrZrrr rrrrrr) r curl_pathrrUrprocess_or_errorprocess stderr_tailrrrr8 parse_errors r"get_site_statsr' s KK:F>B+//0DE6w~~F;IrrrWlstriprr3rrrQrrZrrrr1rr'rrr rvrrIrrrr<rOrrS)rrsection_outputsrs r"account_build_sectionr2s LL78&   v445  W5:;*62=>(3F(; %<=2G2O./ o&<=s C CXnHoHvHvHxIDIDEOIPIP6<6H6HP_`vPw6xO2 345 +-9&-AOM * 34f56Fo.!&/FGv0%884:4F4F(()*EE5O0 1  8Fv8N 45$ P Pv$$%NOP PPR P(()96;P;PQR PRT P(('&.Z^:_`a Pac P((&2C2CDE PFH P(()BGFT`bkDlmn  Poq  P (()Q>QRS  P TV  P (();]c]m]mdiiHXHX>YtBDE  P EG  P(('&)U^:_`a Pbd P((&:L:LX_`fhz}AYBFJYJWY`agi{}AYBFKYKPUQXZabhjAEZFZSJS;TUV PVX P((UY9Z9d^def Pgk P''(EFG PHJ P""?#6#67KR#PQR PSW P''(BCD PEG P""?#6#67Mr#RST PUY P'' 34 P57 P""?#6#6}b#IJK PLP P ''(>?@! P AC! P"&&':':<'LMN# P W +   7 8-3-?-?E.OM *&+F "  +6,,  ?AVAVW8>8J8JJ9 45    !?@8>8J8JH9 45 : 5FG H !!%44 5sjC T$Q'BT$RJT$;RT$RT$A T!'T$*3T!T$ T!!T$$3UUc tSS/SS/SS/SS/SS/SS//nUGHnUSn[RRU5(aQ[RRU5(a*[R"U[R 5(dM}O[ R"U5cM[R"U[R[RS S S S 9nUR=(d UR =(d SR#5nU(dGM [$R&"SU[$R(5nU(d[RSU5 GMSUR+S5nSU3Ul[R/SUR,U5 UR,s $ [R1S5 SUlUR,$![Ra [RS U5 GM[a"n[RSX55 SnAGMSnAff=f)N apachectlrz/usr/local/apache/bin/apachectlrHz/usr/local/apache/bin/httpd apache2ctlapache2rTrFrz%Apache version probe timed out for %sz&Apache version probe failed for %s: %srjzApache/?(\d+\.\d+(?:\.\d+)?)z0No Apache version string found in output from %srKzApache z%Detected Apache version '%s' using %sz?Apache version could not be determined from available binaries.#Unable to detect, do this manually.)r5risabsraccessX_OKrxrXrrrrr8rBrrZrJrr]rrrapache_versionrr) rapache_commandsr binary_namerPrBcommand_output version_matchrs r"get_apache_versionr@ws d *D1 $ &- t D O#aj 77== % %GGNN;//BIIk2774S4S5T||K(0 ^^!! F!-->6==>BEEG  +  MM  LLK[ Y &,,Q/").)9 : ;V=R=RT_`$$$U#X NNTUAF   7((  LL@+ N   LLA; T  s/5G*H7 H7H22H7cn[R"US[RUS9$![a gf=f)NTrIrj)rrrr)rrs r"_apache_run_commandrBs@&& %%   s $' 44cUHWn[RRU5(dM)[USSSS9nUR 5nSSS5 X lWs $ g!,(df  N=f![ a Mzf=fr)r5rrr3rr*r)rrerf config_file config_texts r"_apache_read_first_existingrFsw) 77>>. ) ) .#QU`"-"2"2"4KR.<+"" *  RQ  s( A0A A0 A- )A00 A>=A>c[R"S[R"U5S3U=(d S5nU(dg[UR S55$![ a gf=f)Nz (?mi)^\s*z\s+(\d+)rjrK)r]rescaperUrr)directive_name source_textdirective_matchs r"_apache_extract_intrLscii RYY~./x8rO ?((+,, sA A)(A)cU=(d SR5HPn[R"SUR55nU(dM1UR S5R 5s $ g)Nrjz^mpm_(\w+)_module\brK)r.r]rrrrw)modules_output output_line module_matchs r"_apache_detect_mpm_from_modulesrQsX&,"88: xx 6 8I8I8KL <%%a(..0 0; r+cSH?n[R"SUS3U=(d S[R5(dM=Us $ g)N)rworkerpreforkzLoadModule\s+mpm__modulerj)r]rrM)rE candidate_mpms r"_apache_detect_mpm_from_configrWsA7 99)-@+BSQSUWUYUY Z Z 8 r+cU(aU(dg[R"S[R"U5S3U[R[R-5nU(aUR S5$S$)Nrjz(.*?)rK)r]rrHrMSr)rEmpm_name block_matchs r"_apache_extract_mpm_blockr\s[ h)) BIIh/00HI rtt K $/;  Q 6B6r+c\^U4Sjn[TS/5=(d /n[U[5(aU/n[TSS5=(d SR5n[ SU55=(d US;nU(d[ R S5 g[TS S5=(d SR5R5n[S S /5=(d [S S /5n[U5Tl US :XaSO US;aSOSn[TU5nU(a!TR(d[U5Tl [UTR5=(d Un [SU 5TlTRc[SU 5Tl[SU 5TlTR c[SU 5Tl[SU 5Tl[SU 5Tl[SU 5Tl[SU 5Tl[SU 5Tl[SU 5Tl[SU 5TlU"STR(aTRR15OS5U"STR5U"STR 5/n TR"b"U R3U"STR"55 TR$b"U R3U"STR$55 TR&b"U R3U"STR&55 TR(b"U R3U"STR(55 TR*b"U R3U"STR*55 TR,b"U R3U"STR,55 TR.b"U R3U"STR.55 [TSS5(a"U R3U"STR455 [ R S 5 S!R7U 5$)"Nc>[U5RS5S3nTRSU5nTRSU5nUcSO [U5nU(dSnTRSU5nUSU3$r^rBrrgrDrGrHrarFrs r"_format_label_value_bold_label7get_apache_conf.._format_label_value_bold_label}E ))#./q1 '' ; **7J?  =Rc%j "J**7J? -11r+rrrjc3N^# UHm[U4SjS55v M g7f)c3Z># UH o[T5R5;v M" g7frrWrwrtermrs r"r,get_apache_conf...! F2E$CIOO% %2E(+rIrHNrrs @r"r"get_apache_conf..'D F2E FFF"%rkzApache not in web stackz!Apache not detected in web stack.rr4z-MrHrE)z+/usr/local/apache/conf/extra/httpd-mpm.confz!/usr/local/apache/conf/httpd.confcwpcontrol web panel)z%/etc/httpd/conf.modules.d/00-mpm.confz/etc/httpd/conf/httpd.confz(/etc/apache2/mods-enabled/mpm_event.confz)/etc/apache2/mods-enabled/mpm_worker.confz*/etc/apache2/mods-enabled/mpm_prefork.confz/etc/apache2/apache2.confMaxRequestWorkers MaxClientsMaxConnectionsPerChildMaxRequestsPerChild ServerLimitThreadsPerChild StartServersMinSpareThreadsMaxSpareThreadsMinSpareServersMaxSpareServersz Apache MPMr@r*z Config SourcezApache config summary builtr)r1rrWrwrr8rrrBrQr rFrWr\rLr!r"r#r$r%r&r'r(r)rfrr*rv) rr`rr has_apacherapache_modules_output config_pathsrErJr=s ` r"get_apache_confrs 2 R06BI)S!!K v'8"=CJJLO0 / /  -.2&,39r@@BHHJJ/d0CDlH[]dfj\kHl78MNF  !   5 5   2.flCK6,,:;G+K9J9JKZ{K23F TF '#6|[#Q #67OQ\#]F  ##+':;PR]'^$ 3M; OF$78I;$WF!!4^[!QF$78I;$WF!$78I;$WF!$78I;$WF!$78I;$WF! '|W]WhWhV5F5F5Q5Q5Snwx&':F.ss==s  zRaw NGINX version output: %szznginx[^0-9]*([\d.]+\d)rjz*Could not parse NGINX version from output.zDUnable to detect NGINX version (unparseable output, check manually).rKzDetected NGINX version: %szNGINX )r1rBrrWrwr8r nginx_versionrxrXr5rrr9r:rrrrrrQrvrZrJrrBr]rr) rr nginx_binary candidate completedrB raw_outputr?rs r"get_nginx_versionrNsf&7>O -b1!0 gS-A-G-G-II RS#D<<(L WIww~~i((RYYy"''-J-J( X LM#S SNN 4 ????  #**I,<,<= eg LL/1HyIII79IrJM CD#U"((+N) KK,n= N# $$' S6 J#RSs7H H?H::H?c P[USS5=(d SR5R5nURSS5n[USS5=(d SR5nUS:XGa[USS5=(d SR5nU(a/SUS US 3n[R R U5(aU$S n/S QnUHn[R RU5(dM)[[R"[R RUS 555Hn U"X5(dMU s s $ M [R"SUS 35n U (aU S$SU=(d SS US 3$US:XaSUS 3$US:XaSUS 3$g)Nrrjrrrrrrz/etc/nginx/vhosts/__rJc [USS9nUHnSU;aM [R"SSURSS55R S5nUR 5Vs/sHoUR 5PM nnUH5nXQ:Xd$USU3:XdURS U35(dM, SSS5 g M SSS5 g s snf!,(df  g =f![a [RS U5 g f=f) Nr/r0 server_namerrtrj ; rrrTzError scanning NGINX vhost %sF) r3r]rlrRrrrwrrr8rQ)rrrsrrrxtokenss r" match_domain*get_nginx_vhost_path..match_domains H$1Q !(4$"$&&dll=RT6U"V"\"\]c"d5<]]_!E_'')_!E!'A ! #$$vh#7#$::&l#;#;'+21 "( !"2"F 21 H  !@$G HsS CAC #C<,C ,C .C7C =CC  CCC C?>C?z/etc/nginx/vhostsz/etc/nginx/conf.d/vhostsz/etc/nginx/conf.d*.confz/etc/nginx/vhosts/*__rrdrz/etc/nginx/conf.d/vhosts/rz/etc/nginx/conf.d/) r1rrwrRr5rrrYrrrv) rrdomain_underscoredrSrcrr search_dirsrrfallbacks r"rQrQsf.39r @ @ B H H JFS1 V\2 . 4" ; ; =E 4:AAC $UG2.@-AGAww~~a   & A77==##tyya)BCD--KE9945G4HNO A; #E$6Y#7r:L9MUSS ##*6(%88   #F8511 r+c^ Sm SnSnSnSnU 4Sjn[USS5=(d SR5R5nSnU"U5HQn[US S 9n U R 5n SSS5 U"W 5Hn U"X5(dMX4n O U(dMQ O U(dgUS Ul[ RS US 5 U"US5n U (dgU"X 5$!,(df  N=f![ a [ RS U5 Mf=f![ a# [ RSUR5 gf=f)NcS/nUR[[R"S555 [R"S[R "U5S3[R 5n[R"S[R5nUHn[RRU5(dM)[USS9nUR5nSSS5 URW5nU(dMgURS5nURU5n U (dMU RS5R5n U R!S 5(a g[R"S U 5n U (aU RS5s $M g!,(df  N=f!["a [$R'S X5 GM4f=f) Nz/etc/nginx/conf.d/upstream.confz/etc/nginx/conf.d/*.confz upstream\s+z \s*\{(.*?)\}z^\s*server\s+([^;#]+);r/r0rKzunix:z:(\d+)$zError reading upstream %s in %s)rrrr]r^rHrYr}r5rrr3rrrrrrr8rQ) upstream_name search_pathsupstream_block_re server_re config_pathrr-r[ block_body server_matchr port_matchs r"resolve_upstream_port3get_nginx_proxy_pass..resolve_upstream_portsr9: F499-G#HIJJJ299]34N C DD JJ8"$$? 'K77>>+.. `+8B779D9/66t< "(..q1 (// ; #%++A.446$$W--YYz6: %++A..#(*#98 `  !BM__ `s< F& F F&=)F&(5F&.F& F# F&& G  G c VUR5nUHnSU;aM [R"SSURSS55R S5nUR 5H=nUR5nXR:Xd$USU3:XdUR SU35(dM< g M g ) NrrrtrjrrrrTF)rwr]rlrRrrr) block_linesrrrkrtokens r" block_matches+get_nginx_proxy_pass..block_matchess##%CC'ffVS#++mR*HIOOPVWG  $$wi 00~~'m44) r+c 3(# [5n[U5nU(a9[RR U5(aUR U5 Uv /SQnUHn[RR U5(dM)[[R"[RRUS555HEnXQ;dM [RR U5(dM0UR U5 Uv MG M g7f)Nrr) r1rQr5rrr,rYrrrv)rr*initialdirs directoryrs r" iter_vhosts)get_nginx_proxy_pass..iter_vhostssu&v. rww~~g.. HHW M  I77==++DIIbggll9h&GHI=RWW^^A%6%6HHQKGJsCD"D4Dc/n/nSnSnUHnUR5nU(d@URS5(a*SnU/nURS5URS5- nMZU(dMcURU5 X5RS5URS5- - nUS::dMURU5 Sn/nM U$)NrFserverT{})rrr<r)rblockscurdepth in_serverrkrs r"extract_server_blocks3get_nginx_proxy_pass..extract_server_blockss Cyy{H!4!4X!>!> e #37y 33#))C.88A:MM#& %IC r+cnSnSn/nUHnUR5nU(dF[R"SU5(a*SnU/nURS5URS5- nM`U(dMiUR U5 X$RS5URS5- - nUS::dM U$ U$)NFrzlocation\s+/\s*\{?Trr)rr]rr<r)rin_locr collectedrkrs r"extract_location_block4get_nginx_proxy_pass..extract_location_blocks Cyy{Hbhh'UHnUR5nSU;aM[R"SU5nU(aURS5s $[R"SU5=(d [R"SU5nU(dMURS5n[ USS5=(d SR 5nSU;a T"U5s $ g g) N proxy_passz(proxy_pass\s+https?://[^\s:;]+:(\d+)\s*;rKz+proxy_pass\s+https?://([A-Za-z0-9_.-]+)\s*;z)proxy_pass\s+http://([A-Za-z0-9_.-]+)\s*;rrj ultrastack)rr]rrr1rw) rlocation_linesrkrliteralupstreamrrSrs r"parse_proxy_pass.get_nginx_proxy_pass..parse_proxy_pass-s!Cyy{H8+ii KXVG}}Q'' H(SU99I8T x (q 1  r:@bGGI5(0??%"&r+rrjr/r0zCannot read vhost %srKzNGINX vhost match found in %srzNGINX parsing error for %s) r1rrwr3rrr8rQrMrBr)rrrrrrr matched_info conf_pathrrblockrrs @r"rKrKsPB *.(,f.39r @ @ B H H JF! $V,I )g6"LLNE7 /u5 //$)#5L6 |- %1!_" 4l1oF),q/:11176   !7C 0 5v7L7LMsr D' D"C/3D;D' D'% D'15D''D'/ C= 9D<D'=D D$ D'#D$$D''*EEc\^Sn[RRU5(dg[USS9nUR 5mSSS5 U4SjnU"S5nU"S5nU(dU(aX44$[R"S T[R5n[R"S T[R5nU(aURS 5OSnU(aURS 5OSnX44$!,(df  N=f![ a [ RSU5 gf=f) NrFNNr/r0zFailed to read %sc>[R"S[R"U5S3[R5nUR T5nU(aUR S5$S$)Nzmap\s+\$host\s+z \s*\{.*?default\s+(\d+)\s*;.*?\}rK)r]r^rHrYrr) map_var_namerrrZs r"_extract_map_default_portIget_cpanel_ea_nginx_apache_proxy_ports.._extract_map_default_portssT**ryy677Y Z DD w'!&u{{1~0D0r+z$CPANEL_APACHE_PROXY_PORTz$CPANEL_APACHE_PROXY_SSL_PORTzMupstream\s+apache_backend_http_[A-Za-z0-9_]+\s*\{.*?server\s+[^;:]+:(\d+)\s*;zNupstream\s+apache_backend_https_[A-Za-z0-9_]+\s*\{.*?server\s+[^;:]+:(\d+)\s*;rK) r5rrr3rrr8rQr]rrYr)ea_nginx_conf_pathr2rrUrVupstream_http_matchupstream_https_matchrZs @r"rLrLgs : 77>>, - - $w 7;!&&(G8 1**EFI*+JKJJ&&))X  99Y  1D#))!,I2F%++A.DJ  ""C8 7 ,.@As. DC7D7 DDD D+*D+c[U5n[RRU5(dg[ USS9nUR 5nSSS5 [ USS5n[R"S[R"U5S[R"U5S3W5(dg[R"SU[R5nU(a][R"S URS 55nU(a0URS 5R5Ul UR$[R"S U5nU(aPURS 5R5Ul [RS X@R5 UR$g!,(df  GNb=f![ a# [R#S UR$5 gf=f)Nr/r0rrjz\bserver_name\b[^\n;]*\b(z|www\.z)\bz&location\s+/\s*\{([^{}]|\{[^{}]*\})*\}zroot\s+([^\s;]+);rrKzFound NGINX docroot for %s: %sz$Failed to parse NGINX docroot for %s)rQr5rrr3rr1r]rrHrYrrrr8rrrQr)rrrsrZr loc_blockrks r"r{r{sr  'D 77>>$  X $ )QffhG*f.3yy5biin5EVBIIVYNK[[^_ahiiIIGRTRVRVW  . 0BCA!"!1!1!3~~% II*G 4 WWQZ--/FN KK8#~~ N>> !  /* )( X?AVAVW Xs7 F:F( A F:.B F:8A-F:( F72F::*G'&G'cSURS3n[RRU5(d[R SU5 g[ USS9nUR5nSSS5 [R"SW5nU(a)URS5n[RSXQ5 U$[R S U5 g!,(df  Nl=f![a# [RS UR5 gf=f) Nz/etc/varnish/conf.d/vhosts/rJzVarnish vhost not found: %sr/r0z\.port\s*=\s*"(\d+)"rKz#Found Varnish backend port %s in %sz*No backend port found in Varnish vhost: %sz$Failed to parse Varnish vhost for %s)rr5rrr8rr3rr]rrrBrrQ)rrrsrZrrAs r"rPrPs ()>)>(?u ED 77>>$  4d; $ )QffhG* 17; ;;q>D LL> KKCTJ* ) ?AVAVWs1 CC(AC7C CC*D  D cB[USS5=(d SnUR5R5nU(d([R S5 SUlUR $SU;a([R S5 SUlUR $SU;dUS :Xa([R S 5 SUlUR $S U;GaSn[ R"S 5(aF[R"/S Q[R[RSSS9nURS:HnO[ R"S5(a_[R"/SQ[R[RSSS9nUR=(d SR5nSU;nO[R S5 X0lUR $[R SU5 SUlUR $![a [RS5 N\f=f)z - panel_type contains "Ultrastack ONE" -> True - panel_type is Control Web Panel (CWP) -> False (not installable) - panel_type is cPanel -> True if imh-ultrastack-ded is installed - anything else -> False rrjzIPanel type unknown while checking for UltraStack; assuming not installed.Fultrastack onezCPanel type indicates UltraStack ONE, marking UltraStack as present.Trqrpz?Panel type is Control Web Panel; UltraStack is not installable.rErpm)rrRimh-ultrastack-ded)rZrJr-rsr dpkg-query)rz-Wz -f=${Status}rzinstall ok installedz=No known package manager found while checking for UltraStack.z?Failed to detect UltraStack package via system package manager.zCUnrecognized panel_type '%s'; assuming UltraStack is not installed.)r1rrwr8rrrxrXrrrrgrrZrrQ)rpanel_type_rawpanel_type_normhas_ultrastack_pkgrr s r"check_for_ultrastackrsV\26<"N$**,224O  _` %$$$?* YZ $$$$o-E1I UV %$$$?"" `||E""!~~7%--%-- &*__%9"l++!~~N%??%-- +++224%;v%E" [\!3$$$ KKUWef!F    `   ^ _ `s A G<1A9G<+G<<HHc$^^ ^ ^ Sm [5[5[5S.m [RR5R S5m SU U U 4SjjnU4SjnU"5n[ TSS5=(d /n[ TSS5=(d SR 5nS RS U55nS U;=(d S U;=(d US ;nSU;=(d US:HnU(a"URS5(a U"USS 5 U(aWURS5(aA[RRUS5(aU"USSURS5S9 T S(dgU 4Sjn U "S 5U "S5-$)N)Nbotcrawlcrawlerspiderslurp bingpreviewbingbot googlebotzgoogle-inspectiontool googleother duckduckbot yandexbot yandeximages baiduspidersogou seznambot semrushbotmj12botahrefs ahrefsbotapplebot amazonbotpetalbot bytedance tiktokbot claudebotopensiteexplorerblexbot uptimerobotpingdomsite24x7netcraftdotbot linkchecker integritybotfacebookexternalhitfacebot twitterbot discordbot linkedinbotslackbotwhatsapp telegrambot redditbot ia_archiverzarchive.org_botwaybackzpython-requestsaiohttprwgetz libwww-perlzgo-http-clientokhttpgptbotz chatgpt-userchatgptbardzgoogle-extendedz anthropic-aiz cohere-ai perplexitybot perplexityaiopenaiz openai-sharedzmeta-externalagent facebookbotmiuibotzoominfomajestic majestic12monitisnewrelicpingerdatadogcloudflarehealthcheckszcloudflare-verifiedbot cloudflarebot statuscake)r{rbotsz %d/%b/%Y:cv>U(a$[RRU5(dg[USSSS9n[ USS9HupVU(aXS:a OT (aT U;aM"U(aX&;aM0[ R "SU5nU(a2URS5nT SX4==S- ss'T S U==S- ss'UR5n T Hn X;dM T S X4==S- ss'M M SSS5 g!,(df  g=f![a [RS U5 gf=f) Nrtr/rRr%rKstartz"\s+([0-9]{3})\s+r{rrzFailed processing %s log) r5rrr3r[r]rrrwrr8rB)r source_name domain_filterrrh line_numberr status_match status_coderbot_name bot_names date_patternr(s r"process_log_file'get_web_stats..process_log_files277>>$//  BdD79E)26)C%K [%<# D(@ $)B #%99-A4#HL#&2&8&8&; h(BCqHCh 494!%J$-#1!&M;*ABaGB%.!*DFEE( B LL3[ A Bs5 DB#D"D;D DDD D87D8cn>[T SS5=(d SR5n[T SS5=(d SR5nSnSnSnUS:XaU(aSUS3nUnGOJUS:XadU(aXSUS 3nSU3n[RR U5(aUnO&[RR U5(aUnS nUnOUS :XaeU(aYS US 3nSUS 3n[RR U5(aUnO&[RR U5(aUnS nUnOu[RR S5(aSnO&[RR S5(aSn[RR S 5(aS nUnUUUS.$)Nrrjrrz/usr/local/apache/domlogs/z.logrz/usr/local/apache/logs/domlogs/z-ssl_logz/var/log/nginx/access.logrz/var/log/httpd/ssl-z -access.logz/var/log/httpd/z/var/log/httpd/access_logz/var/log/apache2/access.log) apache_log nginx_lognginx_domain_filter)r1rr5rr) rrapache_log_pathnginx_log_pathr1primaryaltssl_log non_ssl_logrs r"resolve_log_plan'get_web_stats..resolve_log_plan3sflB7=2DDF !&*:B?E2LLN" , ,$>~>Nd"S!0 8 #;N;K8T77GH77>>'**&-OWW^^C((&)O8N"0  + +//?{K //?{K 77>>'**&-OWW^^K00&1O8N"0 ww~~9::"= =>>"?ww~~9::!<&4#*'#6  r+rrrjrtc3T# UHn[U5R5v M g7frrers r"r get_web_stats..jsB #d)//++ s&(rIrHrkrDr/r0r1)r%rz2No recent access log entries detected for today. c $>T SRUS5nU(dg/nURSUR5S35 [T SR 5VVs1sHup4X0:XdM UiM snn[ S9nUH'nURSUS -S S T SX4S S 35 M) URSSS S US S35 URS5 T SR 5Vs/sHofSU:XdM UPM nnU(d"URS5 SR U5$[USS9H)upURSU S -SS T SX 4S S 35 M+ URS5 SR U5$s snnfs snf)Nrrrjr*z" Access Log Summary Status Codes: r{rQrr?z<6rt7drzTotal:rlzBot Activity by User-Agent: rz (none) c US$NrKr$rs r"rO>get_web_stats..render_source_summary..sT!Wr+z<22)rrrerrrUrv) r$rVrsrccodecodesrbot_keysrr)r(s r"render_source_summary,get_web_stats..render_source_summary|sh##K3 tK--/00TUV%*8_%9%9%; R%;kss?QT%; R D LL2dSj_AeHo{>Q.RSU-VVXY Z  r(2abz67 45#(=#5#5#7Q#7Cq6[;PC#7Q LL) *775> !!(0DEKA LL2hnS15=+AX3YZ\2]]_` aF  Vwwu~% SRs F .F , F <F )Ni) rrrrrr1rwrvrr5rr) rr,r8log_planrr stack_textr} has_nginxrEr*r+r(s ` @@@r" get_web_statsrJscI$))  E ;;??$--k:LBB81 f !H T28bIv'8"=CJJLOB BBJj(kGz,Ak_XkEkJJ&D/W*DIhll<00,/:X\\+..277>>(;BW3X3X [ ! ",,'<= ?E: ! *-B7-K KKr+c^^S[4U4SjjmS+UU4SjjnS[S[4SjnS[4Sjn[TS S 5=(d S R5nU(dg [R"S 5(dg SUS3SUS3SU3SU3/nSnS nS nS n UHIn U"U 5n U nU R =(d S nU R =(d S n U"U5nU(a OMK U(dgURS:wa@U(d9U =(d S R5SSn U (aSSRU 5-$S$U=(d U=(d S R5n SU ;=(d SU ;=(d SU ;=(d SU ;nSU ;=(d SU ;=(d SU ;n[U5Tl U(aSO U(aSOSTlSTlSTlU=(d S R5HnUR5nUR#S5(a8UR%SS 5S R5R'5Tl ORUR#S5(dMyUR%SS 5S R5R'5Tl O TR(dS!U ;aS"TlSTlO%TR(aS#TR;TlTR=(d S$nTR=(d S$nTR (aS%OTR S&LaS'OS$nU"S(U5SU"S)U5SU"S*U5S3$![a GMf=f),Nr-cN>UHnTRX 5nX0:wdMUs $ U$rr7)r-stylesr,r8rs r"_apply_first_style)get_cdn_stats.._apply_first_styles.E((5G r+cN>[U5RS5S3nT RSU5nT RSU5nUcSO[U5R5nU(dSnUR 5U:HnU(a T "US5nOT RSU5nUSU3$) Nr?r6rArj None detected)rVrrprt)rWrCr3rrw) rrg none_tokenrDrGrHrEis_nonerFrNrs r"r`5get_cdn_stats.._format_label_value_bold_labelsE ))#./q1 '' ; **7J? -BSZ-=-=-? 'I//#z1 .y:MNM"..w BM-11r+raw_header_textr,c|/n/nU=(d SR5HnU=(d SRS5nUR5RS5(aU/nMFU(dMOUR 5(d U(aUn/nMqUR U5 M U(aUnSR U5$)Nrj r r)r.rCrwrrrrv)rU current_block final_blockrrs r"_extract_final_header_block2get_cdn_stats.._extract_final_header_blocks  (.B::._curl_headsQ        .   ~~ ????   r+rrjz[Error] No managed_domain setrz[Error] curl not foundrz /robots.txtrz[Error] CDN check failedrizCDN check failed: rzserver: cloudflarezcf-ray:zcf-cache-status:z cf-mitigated:zserver: bunnycdnzx-bunnycdn-request-id:z cdn-cache: CloudflareBunnyCDNr?rKzcf-mitigated: challenge CHALLENGEHITrQHitFzNot hitProviderz Cache Statusz Cache Hit) none detected)rWr1rrxrXrZrJrrgr.rvrwrrrrrrrre)rr`rZr`r urls_to_try last_procfinal_headers_block raw_headersrrUrr% headers_lower is_cloudflareis_bunnyrr provider_str status_strhit_strrNs` @r" get_cdn_statsrssu22"&S&S&6  *f.39r @ @ BF . <<  ' 6(+& &% 6( & KIKK c?DI+++K+++K"=k"J "# )q )<"(b446st< AL$tyy'==lRll(=K=2DDFM  - ,  % ,  . , m +  m+ ) #} 4 ) = ( !/F*7,HjZ^F"FF$*668ZZ\  !3 4 4&0&6&6sA&>q&A&G&G&I&O&O&QF #    . .&0&6&6sA&>q&A&G&G&I&O&O&QF # 9  " "'@M'Q"-#  $(?(??&&9/L((;OJ++ev?S?SW\?\)bqG **l C DB ).* E Fb )+w ? @ De   s AM'' M65M6cSn[US/5=(d /n[U[5(aU/n[SU55nU(d[R S5 SnU$[USS5=(d SR 5R5nSnUS:XaSnOUS ;aS nOUS ;aY[RRS 5(aS nOcS H+n[RRU5(dM)Un O4 O1SH+n[RRU5(dM)Un O U(a$[RRU5(d[RSU5 SnU$Sn/n[R"U5Hn U R5(dMU RR5n U RS5(d SU ;dSU ;aMXU R!5R"n UR'XR45 M U(dSU3nU$UR-SSS9 USSn U V V s/sHupSU"U 5SU 3PM nn n XlXPlSUS3S R3U5-nU$![$a GM f=f![(a'n [R+SU5 SU 3nUsSn A $Sn A ff=fs sn n f)!Nrjrc3N^# UHm[U4SjS55v M g7f)c3Z># UH o[T5R5;v M" g7frrerfs r"r0get_largest_traffic...@rirjrkNrrs @r"r&get_largest_traffic..?rmrnz Apache not detected in web stackz@Apache not detected in web stack. Skipping traffic log analysis.rrE/usr/local/apache/logs/domlogsro/usr/local/apache/domlogs)rr/var/log/httpd)ryrz)ryrzr{z,Domlog directory not found for panel_type=%sz"Apache domlog directory not found.ct/SQn[U5nUHnUS:dX1S:Xa USU3s $US-nM! US3$)N)rr|r}r~rrrrrr)r) size_bytesrrunits r" format_size(get_largest_traffic..format_sizebsT)Z Dd{dBi/sD6** FNDQr+.gzrr zFailed scanning domlogs in %sz([Error] Failed scanning Apache domlogs: z"No usable Apache domlogs found in c US$rwr$rs r"rO%get_largest_traffic..s$q'r+Trrvr)rtz%Top Apache traffic logs (by size) in z: r)r1rrWrr8rrrwr5rrYrscandirr=rErr`st_sizeOSErrorrrrQrlargest_traffic_resultslargest_traffic_log_dirrv)rresult_messagerr}rlog_dirrrrr>rEr}rB top_entriesrs r"get_largest_trafficr8sN R06BI)S!!K J  67[&,39r@@BHHJJGX2 3 3- 7 7 77==) * *&G\ 77==++'G] kIww}}Y''#k "''--00EzR= GZZ(E==??::##%D}}U##w$'T/ "ZZ\11  NNJ 3 4) =gYG LL)4L8#2,KKV W;7Gzr+j)*!D6 2;E W%0"%,"5SURGSS5S:TR-S?5SURGS/S5S:TR-S@5STREURGS4S553$![a [RS 5 GNf=f![a [RS"5 GNf=f![a [RS$5 GNf=f![a+ [RSA5 SBn TRIU 5s$f=f)CNc>[U5RS5S3nTRSU5nTRSU5nUcSO [U5nU(dSnTRSU5nUSU3$r^rBr_s r"r`=traffic_build_section.._format_label_value_bold_labelrbr+zBuilding 'Traffic' sectionrr-rrrjz/traffic: web_stack empty, calling get_web_stackz3get_web_stack failed while building Traffic sectionzAggregating status codesz$traffic: about to call get_web_statsweb_stats_summaryztraffic: finished get_web_statszDetecting web server versionsz*traffic: determining Apache/NGINX versionsc3N^# UHm[U4SjS55v M g7f)c3Z># UH o[T5R5;v M" g7frrerfs r"r2traffic_build_section...s!J6IdD ))6IrjrkNrrs @r"r(traffic_build_section..s' ) J6IJ J J)rnrkc3Z# UH!nS[U5R5;v M# g7f)rDNrers r"rrs"SAR3t9??#44ARrrDweb_version_blockApacheNGINXz### Web Server Versionsrz)Collecting Apache configuration variablesz&traffic: about to call get_apache_confapache_conf_summaryz!traffic: finished get_apache_confzChecking for UltraStackz+traffic: about to call check_for_ultrastackz&traffic: finished check_for_ultrastackzDetecting CDN/proxyrz'traffic: get_registration_info() failedrztraffic: get_dns_info() failedTzJSkipping CDN/proxy detection for %s (is_registered=%r, domain_resolves=%r)rFz does not resolve to an IP.z" DNS resolution status is unknown.zADomain registration check indicates the domain is not registered.z=Domain registration check indicates the domain is registered.z&Domain registration status is unknown.z CDN/proxy detection skipped.cdn_status_summaryz$traffic: about to call get_cdn_statsztraffic: finished get_cdn_statszFinding highest traffic logsz*traffic: about to call get_largest_trafficlargest_traffic_summaryz%traffic: finished get_largest_traffichas_ultrastack_flagrrz## Traffic & Web Server Summaryrlz1### Web Server Status Codes and Bot Traffic Statsz4 Based on 100,000 most-recent lines in access log. zHas UltraStackz$### Apache Web Server Configuration:z### CDN/Proxy Detectionz### Highest Traffic Apache Logsz!Failed to build 'Traffic' sectionz[Error] Failed to build traffic section. Please perform a manual review of web server status codes, traffic legitimacy, Apache configuration, CDN/proxy configuration, and Apache traffic logs. Please report this as a bug.)%r8rBrrrrrrr1rZrrQrJrrWrwrr@apache_version_strrnginx_version_strrr<rvrrrrrrrrsrrrSrr[) rr`rr1current_web_stackrr}rI version_linesultrastack_valuers ` r"traffic_build_sectionrs 2 LL-.&   v445  B/34 R00BQbdfAgAgkm X NOf% 89 ; AB#FK<B ' - -!2 3 "6+RV!@I#4V#1@1H-. 8978 BC%9&%A" =>34 6?D 1 9 L%f- 6,d 3 ; CV$ 6,d 34 ? KK\ 0"56 148  v'8$?5H,,--HI"1122TU v=FX#6?DATIXE33 0 1& LL? @4A&4IO0 1 LL: ;<= AB5H5P12 <=$+F4I5$Q$Q5W[$$%FGH''([\]^D&&':':;NPR'STUUW""#6;<-.>@PQRRV''(NOPPR""#8"=>d''(ABC2""#7<=T''(IJK2&&':':;TVX'YZ[ ] I X  !VW Xl L  !JK L  C  !AB Cn /<= S  "":../s?X  V6JX  V?X . W%9HX V<8X ;V<<X ?W"X !W""X %XX XX 2Y?Yz-reached\s+max_children\s+setting|max_childrenz1\[(\d{2}-[A-Za-z]{3}-\d{4})\s+\d{2}:\d{2}:\d{2}\]z+\[(\d{4}-\d{2}-\d{2})\s+\d{2}:\d{2}:\d{2}\]z*^(\d{4}-\d{2}-\d{2})\s+\d{2}:\d{2}:\d{2}\btwo_digit_versioncn[U5n[R"SU5(a USSUS3$U$)Nz\d{2}rrrrK)rWr] fullmatch)rs r"_php_short_to_semverr,sD-. ||H/00#A&'q):1)=(>?? r+c SHwn[R"U5(dM [R"USS/SS[RS9R 5n[ R"SU5(aUs $My g![a Mf=f) Nrsz /usr/bin/phpz/usr/local/bin/phprzecho PHP_VERSION;Trr^\d+\.\d+\.\d+ [Unknown]) rxrXrrrLrr]rr)php_binary_pathsystem_version_outputs r"_php_try_cli_versionr1sH||O,,  $.$;$; $(;<!(( % eg " xx)+@AA,,BI    sAA?? B  B  probe_pathc[USSS9nURS5 SSS5 g!,(df  g=f![a n[R SX5 SnAgSnAff=f)Nr\r/r0zTz$Failed writing PHP probe file %s: %sF)r3rrr8rQ)rr2rBs r"_php_write_probe_filerAs[ *cG 4   : ;55 4 ?Qs) 9(9 699 A#AA#rrcvU(a+U(a$[RRU5(dgS[R"5S3n[RR X5n[ U5(dgSSSSSSS US 3S US U3/ SSSSSSS SU3SU3/ SSSSSSSS US3SUS U3/ /nUHan[ R"US[ RS9R5n[R"SU5(aUs [U5 $Mc [U5 g![ Ra1n[RSSR U5U5 SnAMSnAf[ a1n[RSSR U5U5 SnAMSnAff=f![U5 f=f)N.spar_phpdetect_.phprr r]z-m4z--failz --resolvez :80:127.0.0.1rrrbzHost: zhttp://127.0.0.1/rz:443:127.0.0.1rTrcrzHTTP probe failed: %s -> %srtzHTTP probe exception: %s -> %s)r5rrYgetpidrvrrrrLrr]rrrr8rBr) rr temp_filename temp_filepathhttp_probe_commands probe_command probe_outputcperBs r"_php_cwp_http_proberIs bggmmM6R6R&ryy{m48MGGLL>M  / /8,!"-0.)=/: ()#M?3 !".1>*!M?; /# J1M )66!%,, %'  88-|<<'' ]+=1$ ]+ 00  1388M3JC  4chh}6Ms  ]+sO>>F+=AD* F+F+*F(>&E*$F+* F(7&F#F+#F((F++ F8c6[US/5=(d /nSU;dSU;ag[USS5=(d [U5nU(a$[RR U5(dg[ USSSS 9nUR 5nSSS5 [R"S W[R5nU(dg[URS 55$!,(df  NV=f![a n[RS U5 SnAgSnAff=f) NrrDrIrrjr[r/rr%zRfastcgi_pass\s+unix:/opt/(?:alt/)?php-fpm(\d{2})/usr/var/sockets/[^\s;]+\.sock\s*;rKz.Failed parsing NGINX vhost for PHP version: %s)r1rQr5rrr3rr]rrMrrrr8rQrrrr2 vhost_textr?rBs r"_php_cwp_nginx_vhost_probers R06BIi8y#8r2R6J66RJ RWW^^J77  *cGH E$))+JF a  DD #M$7$7$:;;F E I3Os60 C.<C 5C.C. C+'C.. D8DDc&[US/5=(d /nSU;ag[USS5=(d SnU(a$[RRU5(dg[ USSSS9nUR 5nSSS5 [ R"S W[ R5=(d [ R"S U[ R5=(dS [ R"S U[ R5=(d& [ R"S U[ R5nU(dg[URS 55$!,(df  N=f![a n[RSU5 SnAgSnAff=f)NrrIrrjr[r/rr%zbSetHandler\s+"?proxy:unix:/opt/alt/php-fpm(\d{2})/usr/var/sockets/[^"|]+\.sock\|fcgi://localhost"?z1/opt/alt/php-fpm(\d{2})/usr/var/sockets/\S+\.sockz#/opt/alt/php(\d{2})/usr/bin/php-cgizapplication/x-httpd-php(\d{2})rKz/Failed parsing Apache vhost for PHP version: %s)r1r5rrr3rr]rrMrrrr8rQrs r"_php_cwp_apache_vhost_probers= R06BIy r28bJ RWW^^J77 *cGH E$))+JF IIu  N yyDjRTRVRV Nyy?RTTR Nyy:JM #M$7$7$:;;#F E$ JCPs7! E&-E>B26<"L .% IIB<.PUV W $$'E &v|R@ DXE !BR ((+>XZO-  y(A(A)S78LP[!,!1!1!3JM[[QDDE $'' A7  - "6 "=~N5U[[^>+F #7 )!,FYY'BFK!#$6$<$26<"LV%5r:@bN ~\N*<^>- ( (  -wx HKyy-HI%\\-8!#C(:$;<< I H 9=Ns6+ C7C C/C C C C>C99C> docroot_pathcU(a$[RRU5(dgS[R"5S3n[RR X5n[ U5(dgSHn[ R"U5(dM [R"USU/SS[RS9R5n[R"SU5(aUs [U5 $M [U5 g![Ra!n[ R#S X55 SnAMSnAf[$a!n[ R#S X65 SnAMSnAff=f![U5 f=f) Nrrrz-fTrrrz %s failed: %sz%s exception: %s)r5rrYrrvrrxrXrrrLrr]rrrr8rBr)rrrr cli_outputcli_cpe cli_exceptions r"_php_cli_docroot_prober s3 rww}}\::&ryy{m48MGGLL=M  / /,LO<<00 Q'44$dM:%,,  %'  88-z::%% ]+; M" ]+ 00 H _oGG Q /PP Q ]+sO7"E,AD -E,;E, E)D;5E,; E)E$E,$E))E,, E9c[RSUR5 [5Ul[RSUR5 UR S:XGaq[ USS5=(d SR5n[ USS5=(d Sn[X5nU(a(X0l [RSU5 UR$[U5nU(a(X0l [RSU5 UR$[U5nU(a(X0l [RS U5 UR$[U5nU(a(X0l [RS U5 UR$[U5nU(a(X0l [RS U5 UR$[RS 5 [ USS5=(d SnU(a$[R R#U5(dS n[R%U5 XPl U$['U5nU(a^X0l URS:Xa&X0l[RSUR5 [RSU5 UR$SUl [R)UR5 UR$)NzDetecting PHP version for: %szSystem PHP Version (CLI): %srrrjrz&Detected PHP version %s via HTTP probez-Detected PHP %s from NGINX vhost fastcgi_passz!Detected PHP %s from Apache vhostz"Detected PHP %s from CWP pool filez(Detected PHP %s from CWP JSON (advisory)z+CWP detection fell through; using CLI probez8[Error] Docroot is invalid or not set. Do this manually.rz%Detected PHP version %s via CLI probez0[Error] CLI detection failed, try manual method.)r8rrrrrr1rrrrrrrrBr5rrYr rr)rrrdetectedr error_messages r"get_php_versionr)s+ KK/1F1FG 4 6F KK.0I0IJ //!&*:B?E2LLN 26<" &~E !)  KK@( K%% %-f5 !)  KKG R%% %.v6 !)  KK;X F%% %&v. !)  KKa< S>UlSUl [R#UR5 URs$[8R@a< S?UlSUl [R#UR5 URs$f=f)INzDetecting PHP handler for: %srrrrJphp-fpmTz+Detected PHP-FPM in use via config file: %sFzMPHP-FPM config not found. Checking active web service to determine handler...z[Error] Web stack not detectedrDzBNGINX configuration on CWP. Only php-fpm can be used in this case.rIz#[Error] Apache vhost file not foundr[r/rRr%z mod_suphp.csuPHP_UserGroupsuPHPz)Detected suPHP handler from Apache vhost. SetHandlerzapplication/x-httpd-phpdsoz'Detected DSO handler from Apache vhost. AddHandlercgiz'Detected CGI handler from Apache vhost.z-[Unknown] Handler not matched in Apache vhostz#[Error] Failed to read Apache vhostz[Unknown] Web service 'rjz ' not handledz*[Error] Exception during handler detectionrz(Retrieving PHP handler for cPanel systemzFPHP version not set before handler detection, find this info manually.z\PHP version not set before handler detection, unable to continue with PHP Handler detection.r`r .php-fpm.yamlz1Detected PHP-FPM in use based on existence of: %szPHP-FPM not detected.z (\d+)\.(\d+)ea-phprKrzMInvalid PHP version format detected. You must find this information manually.z$Invalid PHP version format detected.z,Converted PHP version string to EA format %s)rphp_get_handlersz --output=jsonrrIr5version_handlersversioncurrent_handlerzDetected PHP handler for %s: %sz+[Error] Handler not found for PHP version: z.[Error] Failed to run whmapi1 php_get_handlersz0[Error] Failed to parse JSON output from whmapi1rz0Detected PHP handler for UltraStack ONE: php-fpmrrz8Panel type is Baremetal - PHP handler detection skipped.rzMHandler is php-fpm but has_php_fpm=False; correcting boolean for consistency.zUnknown PHP HandlerzUnhandled panel type: %s)$r8rrrrr5rrrrrr rrr3rrrQrrwrBrr]rrrrrLrSrTrrJSONDecodeErrorrr1rW) rrrmrnfpm_config_pathr? ea_version whmapi_output whmapi_datar handler_entryrs r"get_php_handlerrfs KK/1F1FG //v2233EfF[F[E\\ab 77>>+ & &!*F !%F  KKE{ S%% %" cd= &##%E" V//0)))&***%."%)" `a)))6+++((v?P?P0Q0Q)NF&).F&NN6#5#56!---.f//wyY]g(2(9 Z% 59Jm9[-4*-2* $OP%111#}49RVc9c-2*-2* $MN%111#}49RVc9c-2*-2* $MN%111)XF&).F&NN6#5#56!---$;FQ>QRS>T=UV %t"%)" CD))) LLG T&33@!(( M **]3K*vr:>>?QSUV !1  $$Y/:=&3&7&78I&JO&-<*-<-B-B-D -Q* $EzSeSef%111"2$Ozl![F !%F  NN6-- .%% %,,&! FG!!! K'(!QR!!!'&-6<<ASASAYAYA[_hAhqwrDrDfg!.F LL+V->->?   ZY4!.)NF&).F&$$V%7%78!--- . &!MF !&F    V// 0%% %  &z,, &!QF !%F    V// 0%% %## &!SF !%F    V// 0%% %  &sA] >] B] \"\3A\6:\1:\,8\%A] *A0^)B^)4B ^)A#^))?^) \\A]] ]] A^&%^&)A a8A aac:U(a$[RRU5(d0$[USSSS9n[R "U5=(d 0sSSS5 $!,(df  g=f![ a [RSU5 0s$f=f)Nr[r/rr%zFailed reading YAML: %s) r5rrr3rarbrr8rQ) path_to_yamlr2s r"_phpfpm_read_yamlrss277>>,#?#?I ,gh G;>>+.4"H G G 2LA s3,A5 A5A$ A5$ A2.A52A55"BBcU(a$[RRU5(dg[USSSS9nUR 5sSSS5 $!,(df  g=f![ a [ RSU5 gf=f)Nrjr[r/rr%zFailed reading file: %s)r5rrr3rrr8rQ) path_to_filer2s r"_phpfpm_read_textrsj277>>,#?#? ,gh G;##%H G G 2LAs3+A% A%A A% A"A%"A%% BBctUH2n[U[5(dMX ;dM!URU5s $ gr)rr+r)mappingrr|s r"_phpfpm_get_anyrs2 gt $ $)<;;x( ( r+c[R"X=(d S5nU(a[URS55$S$![a gf=f)NrjrK)r]rrUrr)r text_valuers r"_phpfpm_extract_intrsF '#34&+s5;;q>"55 s?AA AAcSnSn[USS5(a[USS5(d[RS5 SX4$[[US55nSUSURS3n[ U5nU(d[RSU5 S U3X4$[ S U5Ul[ S U5Ul[ S U5Ul S URSURSUR3n[US/5=(d /nU(d[RS5 XaU4$SnSn UH^n SU S3n [R"U 5H;n [ U 5n U (dM[ S U 5nUcM(U[U5- nU S- n M= M` U S:aUnU n[RSX5 O[RS5 XaU4$)NrrzGPHP version or domain owner not set - cannot locate CWP PHP-FPM config.z+PHP version or domain's user owner not set./opt/alt/php-fpmz/usr/etc/php-fpm.d/users/rJz.CWP PHP-FPM config not found or unreadable: %s!PHP-FPM config file not found at pm\.max_children\s*=\s*(\d+)pm\.max_requests\s*=\s*(\d+)$pm\.process_idle_timeout\s*=\s*(\d+)Max Children:  Max Requests:  Process Idle Timeout: rzCCWP user_list is empty on report; PHP-FPM totals may be incomplete.rrrKz6CWP PHP-FPM totals: pools=%d, total pm.max_children=%dz5No CWP PHP-FPM pools detected while computing totals.)r1r8r rrrrrrrrrrUr)rrr short_verrrZrrtotal_children pool_countrr pool_path pool_textmax_children_values r"_phpfpm_cwp_effectiver %sO 6=$ / /wv~W[7\7\ ^_<>Paa"76=#ABI"9+-FvGZGZF[[`aI *G  EyQ29+>@Rcc"56UW^"_F"56UW^"_F&9:acj&kF# 44564456!!'!@!@ A C  R06BI \]O;;NJ>xjN7+I))4I!45TV_!` !) c"45 5N !OJ,A~+$ LjiNO  77r+cZ^^^SUUU4SjjnU"SS5nU"SS5nU"SS5nXEU4$) Ncv>U(dU4OX4n[T/UQ76nUc [T/UQ76nUc [T/UQ76nU$r)r)key_underscore key_dottedrrgdomain_mapping global_yaml pool_yamls r"r(_phpfpm_cpanel_resolve..fallbackZsN(2 8T66 =#I55E =#K7$7E r+pm_max_childrenzpm.max_childrenpm_max_requestszpm.max_requestspm_process_idle_timeoutzpm.process_idle_timeoutrr$)r r r rmc_valmr_valit_vals``` r"_phpfpm_cpanel_resolver YsD'): ;F '): ;F /1J KF 6 !!r+c[USS5n[USS5nU(aU(dS[USS5[USS54$SUSUS3Ul[UR5Ul[S 5Ul[S 5UlUR(d_UR(dNUR (d=[ RS 5 S UR3[USS5[USS54$[UR=(d 0URUR 5uUl Ul Ul S Ul S Ul [R"S5Hn[U5Ul[UR=(d 0URUR 5uUl nUR cM_U=R[#UR 5- sl U=RS- sl M URS :aNURUlURUl[ R+SURUR5 O[ R-S5 SURSURSUR3nXPR&UR(4$![$a GMcf=f)NrrzDDomain owner or domain not set; cannot locate cPanel PHP-FPM config.rrr`rrz2/var/cpanel/ApachePHPFPM/system_pool_defaults.yamlz$/var/cpanel/ApachePHPFPM/system.yamlzANo PHP-FPM YAML sources found (domain, pool defaults, or system).r rz%/var/cpanel/userdata/*/*.php-fpm.yamlrKz9cPanel PHP-FPM totals: pools=%d, total pm.max_children=%dz8No cPanel PHP-FPM pools detected while computing totals.r r r )r1phpfpm_domain_yaml_pathrphpfpm_domain_yamlphpfpm_pool_defaults_yamlphpfpm_globals_yamlr8r r rrrphpfpm_total_children_sumphpfpm_pool_countrphpfpm_pool_domain_yamlphpfpm_pool_max_childrenrUrrrrr)rrrr rrs r"_phpfpm_cpanel_effectiver' gs6>48LV%5t] ()F$ FYYFG ):9)E&0F  * * 0b  , ,  & &1 -'A  * * 2    , ,F4S4S0T T ,  $ $ ) $H!#$*$D$D!!'!9!9 G  $ $  , , QR 44564456!!'!@!@ A C --v/E/E EE)   s=J<< K  K cSnSnSURS3n[U5nU(d[RSU5 SU3X4$[ SU5Ul[ SU5Ul[ SU5UlSUR S UR S UR3nUR b[UR 5nS nXQU4$) Nz/etc/php-fpm.d/rJz'UltraStack PHP-FPM config not found: %sz)[Error] PHP-FPM config file not found at r r r r r r rK) rrr8r rrrrrU)rrrrrZrs r"_phpfpm_ultrastack_effectiver) sO!&"7"7!8>I *G  > J:9+FHZkk"56UW^"_F"56UW^"_F&9:acj&kF# 44564456!!'!@!@ A C "". !8 EG %$6!"!0 N NDEGuMNs0*E(0E(E(E(8E(( F2FFlog_linec[[[4H7nURU=(d S5nU(dM&UR S5s $ g)NrjrK unknown-date)_PHPFPM_TIMESTAMP_BRACKETED_PHPFPM_TIMESTAMP_ISO_BRACKETED_PHPFPM_TIMESTAMP_ISOrr)r, r match_objs r""_phpfpm_extract_date_from_log_liner3 sA/1PRghNN8>r2 9??1% %i r+rc`U=(d SR5nU(dgURS5(aU$[R"SU5nU(a%SUR S5UR S53$[R"SU5nU(aSUR S53$g)Nrjrz (\d)\.(\d)rKrz ^(\d{2})$)rrr]rr)rmatch_mmmatch_dds r"#_phpfpm_cpanel_package_from_versionr7 s$*113N   **xx ~6Hq)*8>>!+<*=>>xx n5Hq)*++ r+c [U=(d /VVs1sHan[R"U5HCn[RR U5(dM)UR S5(aMAUiME Mc snn5$s snnf)Nr)rrr5rrr) glob_patternsrrs r"_phpfpm_list_log_filesr: sr */R/ / '*ww~~d# -1MM%,@ * /   sAB B 2 B cSnU=(d /GHn[RSU5 [USSSS9nUHn[R U5(dMU(aUR U5(dUR U5(dMT[ U5n UbRU (aKU S:waESn SH1n [ RRX5R5n O U bX:aMURU S5S -X9'US - nM SSS5 GM U$![a M|f=f![a NLf=f!,(df  GM>=f![a [RS U5 GMef=f) NrzScanning file: %sr[r/rr%r. )z%d-%b-%Yz%Y-%m-%drKzFailed reading %s)r8rr3_PHPFPM_MAX_CHILDREN_REGEXrr3 rrstrptimedaterrrrQ) log_file_paths pool_regex domain_regexdate_to_hit_count cutoff_datetotal_event_count log_file_pathr2rr& line_datefmts r"_phpfpm_scan_error_logsrH s(.B.  A KK+] ;mS78LP['D5<->t-D-DS_SfSfgkSlSl A$GH".8N@Z !(,I'?!-02 0D0DX0S0X0X0ZI$)(@ )0I4K (5L 3D2G2GRS2TWX2X%/%*%/(ML/> (2!-$,!- )! !)ML2 A   0- @ @ Asw"EA2D<(D,0-D D,)#D< E D) %D,(D) )D,, D9 6D<8D9 9D<< E E E E43E4c [USS5(dg[USS5=(d SR5nU(dg[USS5=(d SR5n[USS5=(d Sn[USS5=(d SR5nURS S 5nXES U34Vs1sH of(dM UiM nnU(aO[R"S S R [ [RU55-[R5OSn[R"[R"U5[R5n 0n /n [RR5[R"SS9- R5n US:XaG[U5UlSURS3SURS3/n [ R#SU 5 O\US:XaSS/n [ R#SU 5 O;US:XaSS/n [ R#SU 5 O/SQn [ R#SU 5 [%U 5Ul[ R#S[)UR&5U5 UR&(dS US 3$[+UR&UU U U S!9Ul[ R#S"UUR,5 UR,S#:XaS$US%3$[/U R15S&S'9UlS(S)UR,3S*/n U R5S+UR255 S,R U 5$s snf![6a [ R9S-5 g.f=f)/NrFrrjz[Error] managed_domain not set.rrrrrrwww_z\[pool\s+(?:%s)\]rrrr /opt/cpanel/z#/root/usr/var/log/php-fpm/error.logz$/root/usr/var/log/php-fpm/error.log*z'PHP-FPM error log patterns (cPanel): %sr)/opt/alt/php-fpm*/usr/var/log/php-fpm.log*/opt/alt/php-fpm*/usr/var/log/php-fpm.log*z2PHP-FPM error log patterns (Control Web Panel): %sr/var/log/php-fpm/error.log/var/log/php-fpm/error.log*z/PHP-FPM error log patterns (UltraStack ONE): %s)z6/opt/cpanel/ea-php*/root/usr/var/log/php-fpm/error.logz7/opt/cpanel/ea-php*/root/usr/var/log/php-fpm/error.log*rM rN rO rP z)PHP-FPM error log patterns (fallback): %sz,Scanning %d PHP-FPM error log file(s) for %sz No PHP-FPM error logs found for )rC z>Total PHP-FPM pm.max_children events for %s in last 7 days: %drz#No PHP-FPM Max Children events for z in the last 7 days.cUS*US4$)NrKrr$)kvs r"rO$get_php_fpm_errors..s^`ab^c]ceghiej\kr+rQ### PHP-FPM Max Children EventszTotal hits (last 7 days): zBy date:c36# UHupSUSU3v M g7f)r)r2Nr$)r date_string count_values r"r%get_php_fpm_errors..s' ,L(  R } -,Lsrz+Unhandled exception in get_php_fpm_errors()zJUnable to evaluate PHP-FPM errors from error logs; please review manually.)r1rrRr]r^rvmaprHrMrrrrr> r7 phpfpm_package_stemr8rr: phpfpm_error_log_filesrkrH phpfpm_total_max_children_eventsrrphpfpm_sorted_date_countsrrrQ)rrrrSrc underscoredrpool_candidatesr@ rA rB log_patternsrC r=s r"get_php_fpm_errorsra 3sOf\v}e44!&*:B?E2LLN4v}b9?RFFH  b17R4:AAC$,,S#6 7|(L% : -- .  ,,5n5EQG G2I  ) )   # 3 /  L   3 3  2 2a 788HH\] ]+12C2I2I2KQk+l( .()P)P(Q R   ,2,L,L  yy&&kon \FG[\sDM+MA9M: MMGM AM3A"MMM=<M=ct[RS5 Sn[USS5(a[UR5S-nUcXSn[ USS9n[ SU55nSSS5 WRSS 5R5S n[U5S- nUS -n/S Qn/nS SSSSSRU5/n [R"U S[RSS9n U R5H4n U R5(dMUR[U 55 M6 U(a[)U5[+U5- S- n OSn U S :a[Xl- 5UlOSUlUR,b[/UR,5OSn SUSS3SUSS3SU SS3SU 3/nSRU5$!,(df  GNa=f![R ["[R$4a [R'S5 Nf=f![0a [R3S 5 g!f=f)"Nz9Estimating safe PHP-FPM pm.max_children from memory usagerrrvr/r0c3r# UH-nSU;dM UR5RSS5v M/ g7frxrrs r"r"get_php_fpm_max..s6 ,d{/DJJL&&sA.. ,rrr{rg333333?)rz php-fpm80z php-fpm81z php-fpm82z php-fpm83z php-fpm84psz --no-headersr#rssz-C,TrrIzPps command failed or no PHP-FPM processes found while estimating pm.max_childrenrrz Total RAM: r MBz!Budget for PHP-FPM (60 percent): z Average PHP-FPM process memory: z0Recommended pm.max_children (single busy site): rz(Failed to calculate PHP-FPM max childrenz8[Error] Exception while estimating safe pm.max_children.)r8rr1rrr3r+rrrUrvrrrLisdigitrrrrrBr0rkrrWrrQ)rtotal_memory_mb meminfo_pathrr}mem_total_kb_strsixty_percent_memory_mbphp_fpm_process_names rss_kb_values ps_command ps_outputrgavg_process_memory_mbrecommended_strr=s r"get_php_fpm_maxrt sd KKKLTJ 6>4 0 0#F$7$786AO  "*LlW5 ,6 '{{:v>DDFqI !"23f>O P  yy''Q65P--/@*B[B[\  LL-  D JCDIJsV;HF?%AHA GG.BH? G H>HHHHH76H7 command_textrc 4[R"USSSUSS9$)NTF)shellr-capture_outputrrs)rr)ru rs r"_phpini_run_shellry s% >>   r+c[USS5nU(aU$[SSS9RR5nU=(d S$![a [ R SSS9 gf=f)N server_ipzGip route get 1.1.1.1 | awk -F'src ' 'NR==1{split($2,a," ");print a[1]}'rr%z)get_php_ini(): failed to detect server IPTr)r1ry rZrrr8rB)rserver_ip_valuer8s r"_phpini_detect_server_ipr} snfk48O' W  & "d"  @4 Ps,AA&%A& tsv_contentrc00p2U=(d SR5H6nSU;aM URSS5upVUS;aXcU'M+XQ;dM2XbU'M8 X#4$)NrjrurKphp_ini_loaded_fileuser_ini.filenamesapi)r.r)r~ rrmetarrrgs r"_phpini_parse_tsvr sgd!'R335 y __T1-  F FI  $)S !6  !!r+ start_dirc [RRU5n[RRUS5n[RR U5(aU$[RR U5nX1:XagUnMo)Nz .user.ini)r5rabspathrvrdirname)r current_dirrf parent_dirs r"_phpini_nearest_user_inir si''//),K k;? 77>>. ) )! !WW__[1  $  r+cfSRSU55n[R"SUS35$)Nrmc3.# UH nSUS3v M g7f)rNr$rs r"r+_phpini_build_probe_body..sF:i1YKq):sa M*7 ##A&TI#XYY#TUUTYY)KI;V['\]]#899#<==#4 Q >$>r+r c U(a[R"S5cg[RR 5nUR SUSU-S.5 [ R"SSSU/SSS US S 9nUR=(d SnS U;aURS S 5S nOSU;aURSS 5S nUR5$![a [RSSS9 gf=f)Ncgi-fcgirjGETr)REQUEST_METHODSCRIPT_FILENAME SCRIPT_NAMEz-bindz-connectTr$F)r-rx renvrsz rKrlz"get_php_ini(): FastCGI probe threwr)rxrXr5r1copyrrrrZrrrr8rB)rr r r fcgi_resultrUs r"_phpini_fetch_over_fcgir {s fll:6>jjoo "'#-"Z/  !nn *o >  !!'R  ::j!,Q/D t^::fa(+Dzz|  9D IsB.CC10C1r clURS5=(d SR5R5nURSS5nURS5S;nU(a [U5OSn[R R US5nUS:Xa[Xr5(aU$U$U=(d U$) Nr rjr rr )Nrjrr. .htaccessapache2handler)rrrwr r5rrv_phpini_parse_htaccess_file)rr rr master_iniuser_ini_enabled user_ini_path htaccess_paths r"_phpini_determine_active_pathr s HHV  " ) ) + 1 1 3D/7Jxx 34N,\:TXMGGLL{;M  ;M V V}f\ff  &J&r+racUcg[U5R5RS5RS5nUS:XagUR5nUS;agUS;agU$) Nrr'rj)r0ontrueyesOn)r.offfalsenoOff)rWrrw)rars r"_phpini_normalize_valuer sjZ&&(..s399#>JR G,,-- r+ file_pathc0nU(a$[RRU5(dU$[U=(d /5n[ USSSS9nUHnUR 5nU(a,UR S5(dUR S5(aMHSU;aMPURSS5upxUR 5nXs;aM{UR 5nSU;a#URSS5S R 5n[U5X''M SSS5 U$!,(df  U$=f![a [RS US S 9 U$f=f) Nr[r/rr%;rrrKrz)get_php_ini(): failed parsing ini file %sTr) r5rrr1r3rrrr rr8rB) r rr directive_setr2rrrrgs r"_phpini_parse_simple_ini_filer s3G BGGNN955 (b)M\ )S78 D '~~'ts33ts7K7Kd?!ZZQ/ iik+ %<!KKQ/288:E6u= !(E* N+E D* N \ @)VZ [ N\s1 D5CD#D5# D2-D52D55EEc0nU(a$[RRU5(dU$[U=(d /5n[ USSSS9nUGH1nUR 5nU(aUR S5(aM3[R"SU[R5nU(aRURS5R 5nURS5R 5n X;a [U 5X('M[R"S U[R5n U (dMU RS5R 5nU RS5R 5n X;a [U 5X('GM4 SSS5 U$!,(df  U$=f![a [RS US S 9 U$f=f) Nr[r/rr%rz!^\s*php_value\s+(\S+)\s+(.+?)\s*$rKrz ^\s*php_flag\s+(\S+)\s+(\S+)\s*$z*get_php_ini(): failed parsing .htaccess %sTr)r5rrr1r3rrr]rrMrr rr8rB) r rrr r2rr value_matchrrg flag_matchs r"r r sG BGGNN955 (b)M] )S78 D '~~'ts33 hh'KTSUSWSWX %++A.446C'--a0668E+'>u'E XX&I4QSQUQUV :$**1-335C&,,Q/557E+'>u'E '(E0 N1E D0 N ] A9W[ \ N]s8 F&C F5AF F& F#F&#F&&G G cU(a$[RRU5(dSSSS.$[U5n[RR US5n[RR US5nU(a&[RR U5(aUOS[RR U5(aUOS[RR U5(aUS.$SS.$)N)user_iniphp_inihtaccesszphp.inir )r5rrYr rvr)rr php_ini_pathr s r"!_phpini_find_local_override_filesr s rww}}\:: TtDD,\:M77<< i8LGGLL{;M&3rww~~m7T7TMZ^#%77>>,#?#?,?@Jzl*;>@FFHG3LAKKLz"".{:/F S   # #F +%j1K   "4[M B Cy!!.{9/EzR   # #F +))4   "=k)>T=U V W++  0K0K,[-DjQ   # #F +)*5   "G T^H_G` a bO ?G !&*>),,&/O, ,.GGNN>,J,J.PT.KC**sf}(.s  % 5o5FGH)KopFR499\#:#@#@#BXZF 2U 33r+c J^ [USS5nU(a$[RRU5(d[R SU5 g[USS5=(d [USS5n[R SUU5 /SQnS[R"5S 3n[RRX5n[U[U55nU(a[RS 5 S U3$[R S U5 S nSn[UU[USS5[U55upxU(Ga[Xs5un m [U 5=(d [!U 4SjS55n U (a[R#S[%U 5T R'SS5T R'SS55 [)UT U5n [R ST R'S5=(d S R+5R-5=(d SU =(d S5 UR/X9U 5[1U5 $[R3SU5 [5X5n U (a[6R8"S5b[R SU 5 [;XTU 5nU(a[Xs5un m [U 5=(d [!U 4SjS55n U (a?[R S5 [)UT U5n UR/X9U 5[1U5 $[R3S5 O[R S5 [1U5 [R3SUU5 [=X5upUR/X9U 5$![1U5 f=f) Nrz(get_php_ini(): invalid report.docroot=%rz-[Error] get_php_ini(): invalid report.docrootrrz,get_php_ini(): start (docroot=%s, domain=%s)) memory_limit post_max_sizeupload_max_filesizemax_execution_timemax_input_timemax_input_varsdisplay_errorszzlib.output_compressionallow_url_fopen spar_iniget_rz!get_php_ini(): cannot write probez+[Error] get_php_ini(): cannot write probe: z"get_php_ini(): wrote probe file %srjhttp_user_agentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36c3,># UH oT;v M g7frr$rrr s r"rget_php_ini..s8'[t '[rr z9get_php_ini(): got %d directives (sapi=%s, master_ini=%s)r rr z!get_php_ini(): SAPI=%s; active=%srzMget_php_ini(): HTTP probe returned non-TSV content (code=%s). Trying FastCGI.r z/get_php_ini(): trying FastCGI probe (socket=%s)c3,># UH oT;v M g7frr$r s r"rr s<+_C4K+_rz3get_php_ini(): FastCGI probe succeeded (parsed TSV)zMget_php_ini(): FastCGI probe returned non-TSV content; falling back to files.zCget_php_ini(): skipping FastCGI (no socket or cgi-fcgi not present)z\get_php_ini(): probe blocked/failed. Falling back to file inspection. http_code=%s domain=%s)r1r5rrYr8r rBrrvr r rQr r} r rrrrkrr rrwrrrr rxrXr r )rrrrr r write_errorr rr looks_validrr r s @r" get_php_inir Rs"69d3L rww}}\:: ?N>&"2D9\WVXW[=\K LL6 J  }D1Jl7J%j2J:2VWK<=<[MJJ LL5zBKI?)!8   !1  %V , "   %6{%O " d/0C8'[85K O()HHVU+HH2E: 5s$f=f)@NzBuilding 'PHP' sectionrFrrrDr,c>[U5RS5S3nTRSTRSU55$rfrB)rDrrs r"ri-php_build_section.._format_label_onlys?z?))#./q1!!'6+=+=fe+LMMr+r`cX>UcSO [U5nU(dSnTRX5$rj)rWr3)rgr`rars r" _format_value(php_build_section.._format_values+ =Rc%j "J!!+::r+rArc >Ucg[U5RS5nUR5(dU$[R"SU5nU(aUR S5OSnU[ U5SnSU;aQURSS5upgUR5(a(T "U5nT "UR5U5n UUSU 3$[R"SU5n U (a`T RST RS U R S555nT "U R S 5R5U5n UUS U 3$T RX5$) Nrjrz^(\s*(?:[-*]\s+)?)rKr?rtz^(\S+)\s{2,}(.+)$rAr6rr) rWrCrr]rrrkrr3)rr`original prefix_matchrM remainderleftrightrHrF spaced_matchrir rs r"_format_kv_line*php_build_section.._format_kv_linesC  y>((.~~Oxx 5x@ *6##A&BS[\* ) #//#q1KD{{}} 24 8 -ekkm[ I  --AAxx 4i@ "..w8J8J6S_SeSefgSh8ijM),*<* >!!+88r+rKcz>^UcSO [U5nSRUU4SjUR555$)Nrjrc32># UH nT"UTS9v M g7f)rNr$)rrr r`s r"r>php_build_section.._format_kv_block..sfTeD;GTes)rWrvr.)rKr`r-r s ` r"_format_kv_block+php_build_section.._format_kv_blocks2'rS_yyfTXTcTcTefffr+rzCphp_build_section: docroot not set or invalid, attempting discoveryrrjrrzGphp_build_section: failed to gather user stats before docroot detectionz.s";D"%s  rzTotal PHP-FPM pools on server: rzTotal Max Children: rzTotal system users: rT rKrlz### PHP-FPM Configurationphp_fpm_configrz"### PHP-FPM Estimated Max Childrenphp_fpm_max_summaryphp_fpm_server_summary_textz### PHP-FPM Server-wide SummaryrRphp_fpm_errorsz## PHP SummaryzSystem PHP Versionrr r@zSite PHP Versionz PHP Handlerr### PHP INI Valuesphp_ini_summaryzFailed to build PHP sectionz[Error] Failed to build PHP section. Please review PHP version, handler, PHP-FPM configuration, and php.ini values manually. Please report this as a bug.ru))r8rBrrrrr1rrWr5rrYrr$rrQrZrrrr rrr r r+ r rt r rvrr ra r r0rr.r<rrIr[)rrr r1r rir s` @@@r"php_build_sectionr s LL)*&   v445 V]E 2 2 NsNsN;#;#; 939S9s996gSgsgggv vy$//rww}}WVU^E_7`7` KK] ^ l6<4@QWYgikIlIl"6* af% _F# 56"1&"956,V4AB!,V!4*B/ 6=% 0 0  ! !"; <$6v$>F !  ! !"C D)8)@F &15; #6+J/wv|T/R.ST;2(eg)  .,%7v$>$D"F !%%+335@@Abcc(, &2G2G2R2R2TUVUW2X(Y(`(`(b%**+FGH#763CR#HV]^_  **+OP Q  #763H"#M[bcdv'DbII ../PQR'wv7TVX'Yglmn *v'7<< ../PQR'wv7G'LZ_`a - O ,8 II))*:;--,(lm--*(:IF--% yA,,-AB$WV5F%KY`a! (o.) / g l  !jk l a  !_` a _  !]^ _F  67"" _   st AT(.R6 S T%MT(6ST(ST(S?;T(>S??T(T%!T($T%%T((0UUcSnSSjnSnU"SS5nU(aiU"U"US/55nU(a<UupgUSU3Ul[RSX@R5 UR$[RS U5 U"S S 5nU(aiU"U"US/55nU(a<UupgUSU3Ul[RS XR5 UR$[RS U5 U"S S5n U (aiU"U"U S/55nU(a<UupgUSU3Ul[RSXR5 UR$[RS U 5 [R S5 g)NcUH:n[R"U5nU(dM"[RSX5 Us $ g)NzFound database binary: %s (%s))rxrXr8rB)candidate_binariesr= binary_paths r"find_first_binary+get_dbms_version..find_first_binaryos9-K ,,{3K{ ={X"" . r+c j[RSSRU55 [R"U[R [R SUSS9nUR =(d UR=(d SR5n[RSUR[U55 U$![Ra( [RSSRU55 g[a0n[RS SRU5U5 SnAgSnAff=f) NzRunning command: %srtTFrrjzCommand exit=%s, bytes=%szCommand timed out: %szCommand failed: %s (%s))r8rBrvrrrrZrJrrgrkrrrrQ)rrrPr>rBs r"execute_command)get_dbms_version..execute_commandws  LL.0A B^^!! F%mmBv}}BIIKN LL4f6G6G^I\ ]! !((  NN2CHHW4E F    68I3 O sB;B>>9D29 D2&D--D2cFU(dg[R"SU[R5(aSOSn[R"SU5nU(d[R S5 gUR S5nSR URS5SS5nX4$) NmariadbMariaDBMySQLz(\d+\.\d+\.\d+|\d+\.\d+)z"No version string found in output.rKrrr)r]rrMr8rBrrvr)r> dbms_familyr?rmajor_minor_versions r"extract_version_info.get_dbms_version..extract_version_infos#%99Z#N#NiT[  "=~N  LL= >&,,Q/!hh~';';C'@!'DE//r+mariadbdmysqldz --versionrtz)Detected DBMS from server binary '%s': %sz%No parsable version from '%s' output.r rz)Detected DBMS from client binary '%s': %sz mariadb-admin mysqladminrz&Detected DBMS from admin tool '%s': %sz0Database server version could not be determined.r7)r$)rr8rrBr) rr r r# server_binary version_infor! r client_binary admin_binarys r"get_dbms_versionr, nsv* 0&j(;M+O]K>. ) )bii.P.P! ! r+c^ [R"S5m [R"S5nU=(d SR5n/nSnU[U5:aX$nT R SU5nUR U5(aUS-n/nU[U5:aTT R SX'5n UR U 5(aO)UR X'5 US- nU[U5:aMT[U 4SjU55n U (a"UR U5 URU5 UnMUR U5 US- nU[U5:aM/n Sn UHZnT R SU5R5S:Xa U S- n U S::aU R U5 MEMGSn U R U5 M\ SRU 5R5$)NrQz^-{4,}\s*.+?\s*-{4,}\s*$rjrrKc3d># UH%nTRSU5R5v M' g7f)rjN)rlr)rbansi_res r"r3_mysqltuner_strip_empty_sections..s(H%Qgkk"a06688%s-0r) r]r^r.rkrlrrrrrrv)r- header_rerkeptrrplain next_indexr next_plain has_contentr blank_runrC s @r" _mysqltuner_strip_empty_sectionsrL sjj*+G 67I ZR # # %E D E #e* | B% ??5 ! !JEs5z)$[[U->? ??:.. U./a s5z)H%HHK D! E"E  D  / #e* 2GI ;;r4 & & (B . NIA~t$I NN4  99W  # # %%r+c^[USS5n[USS5nU(dU(dg[5nSnU(dP[RR U5(a,[R "U[R 5(aUnU(GaXU(GdP[R"S5=(d3 [R"S5=(d [R"S5mU4S jnU"5(dg S n[R"S S USU/SSSS9nURS:waIUR=(d SUR=(d S-nUR5nU(aSU3$S$[R"SSU/SSSS9n U RS:waIU R=(d SU R=(d S-nUR5nU(aSU3$S$UnU(d [5nU(dP[RR U5(a,[R "U[R 5(aUnU(dgU(dSUS3$[ R#S5 [%S['[)[+[USS5=(d S5S-555n [%S['[)[+[US S5=(d S5S-555n [R"US![-U 5S"[-U 5S#S$S%/SSS&SS'9n U R=(d SU R=(d S-nU RS:waS(U RS&U3n[/U5$![an SU 3sSn A $Sn A ff=f![a Sn Nf=f![a Sn Nf=f))NrFrz'MySQLTuner was skipped at user request.r> apt-getrayumc>[R"S5(agT(dg[RR T5S:XaM[ [R SS9n[R"SS/SSUSS9 [R"/S QSSUSS9 O[R"TS S S/SSSS 9 [[R"S55$![a [RS 5 N@f=f)NrTFrN noninteractive)DEBIAN_FRONTENDr)r-rx r rs)rN install-yrrS rT r-rx rsz'Failed while attempting to install curl) rxrXr5rbasenamer+r1rrrr8rQr)apt_envpkg_manager_paths r"install_curl_if_missing0get_mysql_tuner..install_curl_if_missing/s||F### L77##$45B"2::?OPGNN"H-!'+## NN<!'+## NN)9dFC!'+#  V,- - L  !JK LsA/CCC43C4zEcurl not found and could not be installed; cannot install mysqltuner.zLhttps://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.plrz-fsSLr#TrU rrjz2Failed to download mysqltuner script from GitHub. z1Failed to download mysqltuner script from GitHub.r 755z#Failed to chmod mysqltuner to 755. z"Failed to chmod mysqltuner to 755.z&Error during mysqltuner installation: z"MySQLTuner could not be installed.zMySQLTuner is installed at z, but user chose not to run it.zRunning mysqltunerrrrz --forcememz --forceswapz--nogoodz--noinfoz--colorr)r-rx rrszMySQLTuner exited with rc=)r1r7 r5rrr9r:rxrXrrrgrZrJrrr8rrTrUrrrWrL )rinstall_requested run_requestedr? sparta_tuner_pathrY rUr combined chmod_resultrBmem_mbswap_mb run_resultcombined_outputrX s @r"get_mysql_tunerre sj(?# K %%*'..4"9K9K9QrR#>>+[cLXJW]j]]%>>%!23# L &&!+(//52,:M:M:SQST#>>+LT=hZH~Z~~*J )+ "''..):;; J[]_]d]d@e@e& 3 ,ZL8WXX KK$%QE%(J(Oa"PSW"WXYZaU5)J)Oa#PSW#WXYZ   K  L    J""((.B:3D3D3JKO!6z7L7L6MRP_O`a +O <<] B;C5A A B"  s\A4N7N9A0N*N,N>N$>N6 N!NN!N!$ N32N36 OOc R/Ul[RRS5(d[R SS5 g/Ul[R"S5nUGHSnURSS9(dMURRS5(dURS;a"[RSUR5 Ml[RS UR5 S Ul [R"URSS 9H_up4nUHSnU=R[RR[RRX655- sl MU Ma UR R#UR[%URS - S545 GMV SSS5 UR R'SSS9 UR SSUlUR(dgSRSUR55$![ a8 [RS [RRX655 GMJf=f!,(df  N=f![(a [R+S5 /Ulgf=f)Nz/var/lib/mysqlz"MySQL data directory not found: %sz[data dir missing]Ffollow_symlinksrr>rYrinformation_schemar  #innodb_tempz-Skipping system/hidden database directory: %sz Measuring database directory: %sr) followlinkszUnreadable file skipped: %srrc US$r?r$rs r"rO'get_largest_databases..stAwr+Trrvz[none detected]rc38# UHupSUSUS3v M g7f)rr;z MB)Nr$)r database_namesize_mbs r"r(get_largest_databases..s) *B& r'$ /*Brz%Failed while scanning database sizes.z[error])rr5rrYr8rdatabase_sizes_mbris_dirrErrBdatabase_total_byteswalkgetsizervrrrrrrQ)rrr> root_pathr file_names file_names r"get_largest_databasesrz s#!F 77==) * *;=MN#.#% ZZ( )->*||E|:::((--@2LL!PRWR\R\] ?L./+02 PU0V,I*%/ l"77277??277<%M#)#;#;CR#@ ''$yy *0*B*B    'l"LL)F U^Hjkkl-* )P @A#% sXI=!CI,"AH'1A I,.parse_sizes5z!'') <<>>t9  ==  J9D ]]3  $J9D ]]3  +J9D)-s4y:%ATAr+c>U(a[US- S- S5S3$S$)Nrrrh r)rrs r"to_mbget_dbms_config..to_mbs'8=% t+Q/04H5Hr+cr[U5$![[4a [R SX5 gf=f)NzUnable to parse %s value: %s)rUrrr8r)rgrs r"safe_int!get_dbms_config..safe_ints7 u: :&  NN95 H s &66zDatabase connection failed: %sz.[Error] Unable to connect to MySQL or MariaDB.a~ SHOW GLOBAL VARIABLES WHERE Variable_name IN ( 'key_buffer_size', 'innodb_buffer_pool_size', 'max_connections', 'query_cache_type', 'query_cache_size', 'tmp_table_size', 'max_heap_table_size', 'table_open_cache', 'table_definition_cache', 'innodb_log_file_size', 'join_buffer_size', 'sort_buffer_size', 'max_allowed_packet', 'slow_query_log', 'slow_query_log_file', 'long_query_time', 'performance_schema' ); Variable_namerjValuerrrrrrrrrrrrrrrr r z,SHOW GLOBAL STATUS LIKE 'Threads_connected';Threads_connectedz%Failed to retrieve DBMS variables: %sz*[Error] Failed to retrieve DBMS variables.zMax Key Buffer Size: z Max InnoDB Buffer Pool Size: z Max Connections: rz Current Connection Threads: rz# Query Cache: query_cache_type: z query_cache_size: z& Temporary Tables: tmp_table_size: z max_heap_table_size: z# Table Cache: table_open_cache: z table_definition_cache: z& InnoDB Log: innodb_log_file_size: z Buffers: join_buffer_size: z sort_buffer_size: z Limits: max_allowed_packet: z$ Slow Query Log: slow_query_log: z slow_query_log_file: z long_query_time: z) Instrumentation: performance_schema: r)rrr8r rrrrrwrrrrrrrrrrrrrrrr r rrrvr1) rr~ r r connectionrBrrowsrvariablergrs r"get_dbms_configr sB*I@)+ Y< ""$ ,(.BC # 8 >BEEGHGGG,E#441;E1B.!%>>9CE9J6!%6619%AR1S.!%7727/!%772u4E1!%5505-!%::5:2!%6616.!%99491k nMNoo'19#''':JL_1`F.g%v Z Z  Zgf6G&N OP ZQ( Z(-gf>WY].^(_'` Za Z#F,=tDMN ZO' Z(/v7Ld'S'\W\&] Z^ Z 'v/A4HQER  Z S  Z %WV5G%NOP  Z Q  Z#763CT#JKL ZM" Z#(8Mt(T"U!V ZW Z 'v/A4HQER ZS% Z&-V5Mt%T%]X]$^ Z_# Z$)9OQU)V#W"X ZY Z %WV5G%NOP! Z Q! Z" %WV5G%NOP# Z"Q!# Z&"'wv7KT'R!S T' Z&U' Z*%V-=tDMN+ Z*O"+ Z,#*&2G"N"WRW!X- Z,Y- Z.&f.?FO%P/ Z.Q!/ Z2")1Et!L!UPU V3 Z2WY3 Z : Ny @ 5s;?@ %$Zl < -f523+F33426:017 /06  2359 $$%:;>, ' ' LM ,gh G<(224MH KM d? !%C!3 #))+113 >>#8  3 "K &.l#%!0  > Y .is_service_headers7I{ (<(<[(I$I{PVZcPc{jmqzjz{r+cSnSnUHgnSU;a%URSS5SR5nM.SU;dM6URSS5SR5R5nMi X4$)Nzsmtp_bind_address=rKzsmtp_helo_name=)rrrw)rblock_helo_domain block_bind_ip block_lines r"extract_block_settings;_mail_ip_from_cwp_master_cf..extract_block_settingss  %J#z1 * 0 01Eq I! L R R T  J.$.$4$45F$J1$M$S$S$U$[$[$]! &!//r+c8>T"U5upU(aUT:XaU$grr$)rr r r r s r"block_matches_domain9_mail_ip_from_cwp_master_cf..block_matches_domains%+A++N( .-? r+z.Found CWP Postfix smtp_bind_address for %s: %szENo per-domain smtp_bind_address found in CWP master.cf; using main IP) r5rrr8rBr3rrrQrr) master_cf_pathr r master_cf_filemaster_cf_linesr r current_block_linesr matched_ipr s ` @r"_mail_ip_from_cwp_master_cfr s< 77>>. ) ) CD .# I^,668OJ | 0  T " "FY-.AB_cJ Lm]gh!!#'&      & &t , ?R%&9:W[J DmU_` KKWX aJ I DnUs/ D4 D#D4# D1-D41D44"EEc[USS5(d[RS5 g[USS5=(d SR5n[USS5=(d SR5R 5nUR nUS:Xa[ SX#5nX@lU$US:Xa[S X#5nX@lU$X0lU$![a [RS 5 X0lUs$f=f) Nrz8main_ip is missing on report; defaulting mail IP to Nonerrjrrz /etc/mailipsr/etc/postfix/master.cfz=^G$NN , ,12JMgG$NN$ WX$s C&CC'C21C2c[USS5SLa[RS5 g[USS5nU(d[RS5 g[R "SSSU/S S S 9nSnUR 5H-nUR5nU(dMURS 5n O U(d[RS U5 gX0l U$![a n[RSX5 SnAgSnAff=f)Nr FzClocal_email is False; skipping PTR lookup for external mail routingrz7mail_ip is not set on report; cannot perform PTR lookuprrz-xTrrrrzNo PTR record found for %szPTR lookup failed for %s: %s) r1r8rBrrrr.rrCr r)rrr  ptr_valuerrEs r"get_ptrr "sv}d+u4 Z[fi.G PQ(( HdG ,   %%'D:: mailbox_userrs r"get_email_accountsr Ds1&,39r@@BJf.39r @ @ B H H JF  "5 ) )$&F !&'F #  $ KKW X$&F !  !V^R8>BEEGEXY(*% vfX6I . .%fX.I NNUWa b$&F !ww}}Y'' KK=v Q$&F !&'F # ZZ "g ||E|:$zz **3//#/.& : %%m4!#  ."%n"5 @&BYBY[an&&&# " => "sL'I <"I A I -2I AI )I AH8AI 8 II &I21I2directory_pathc Sn[R"U5HOup#nUHCnU[RR[RR X%55- nME MQ U$![ a MZf=frw)r5ru rrv rvr)r total_bytesrootrfilesry s r"_mail_dir_size_bytesr smK''.1I rwwrww||D/LMM 2 %  s?A.. A<;A<rdc0nU=(d /Hn[U5RSS5S=(d SR5nU(dMA[RR X5n[RR U5(d[RSU5 M[U5U[U5'M U$)Nr rKrrjz!Mailbox directory missing for: %s) rWrrr5rrvrYr8rBr )rdrusagerr mailbox_paths r"_mail_collect_usage_mapr s E%++  &,,S!4Q7=2DDF ww||I8 ww}}\** LL.stAwr+Trrrr rK)rnewtmpsentarchivedraftstrashzTotal email disk usagerjz Top email accounts by disk usagec3V># UHupSUSTRU53v M g7frr2Nr)rr usage_bytesrs r"r'get_email_disk_usage..s4 .7* r&":":;"G!H I.7&)z Folder usage for highest accountr;z):c3V># UHupSUSTRU53v M g7fr r )r folder_name folder_bytesrs r"rr s41I-K[MF$<$<\$J#KL1Ir rz#Failed calculating email disk usage)email_disk_summaryr1r8rr r rrr0rr5rrvrrYr rrrrrIrrrrrrQ) rr rd usage_map top_three total_usage highest_emailhighest_mailbox_pathr folder_breakdownrs ` r"get_email_disk_usager s0 ?FV%5tLM _K-bggll;O.]^ ^Z  )4%,5),9),<)  % %&>@X@XYd@e f   ) )*L M    .7   LL  LLF99:\]^^`an`ooqr s LL1A1G1G1I  %)IIe$4!(((= @ >?s8H>H>A4H>AH9-H9C4H>9H>>I I mta_type current_yearc U=(d SR5nUS:Xaf[U5S:agUSSUS3nSUS;a [RR US5$[RR US 5$[U5S :ag[RR USUSSUSSUS3S 5$![ a gf=f) NrjeximrrrtrKrrz%Y-%m-%d %H:%M:%S.%fr rz%Y %b %d %H:%M:%S)rrkrrr= r)r, r r raraw_tss r"_email_bounce_parse_timestampr sR&&( v 5zA~az58*-FeAh{{++F4JKK;;''0CD D u:>{{##nAeAhZqq !E!H: >    s(.C 5C 'C C 3C CCrcUS:XaSU=(d SnU=(d SnSU;nSU;=(d) SU;=(d SU;=(d SU;=(d SU;nXV4$S U=(d S;nS U=(d S;nXV4$) Nr rjz ** z defer (z defer -z defer z temporarily deferredz max defers and failureszstatus=bouncedzstatus=deferredr$)r, rr text_lowerr is_bounceis_defers r"_email_bounce_detect_statusr s6%2 >rh&  * $ 8Z' 8J& 8'*4 8*Z7 "" Z%526I Z%526H  r+cUS:XaU=(d SnU=(d Sn[R"SU5nU(a&SURS5;aURS5$[R"SU[RS9nU(a&SURS5;aURS5$[R"SU5nU(a&SURS5;aURS5$US :XaU=(d SR S 5nUS :XaU=(d SR S 5nUS :waoUS -n U [ U5:a X S:XaU S- n UR SU 5n U S :XaUR SU 5n U S :waX U OX SR 5n SU ;aU $[RU=(d S5n U (aU RS5$S$)Nr rjz\(([^()\s]+@[^()\s]+)\)r rKzmail from:<([^<>\s]+@[^<>\s]+)>rz<([^<>\s]+@[^<>\s]+)>postfixz to=rtr)r]rrrMrnrkr_EMAIL_BOUNCE_ADDR_REGEX) r, rr r-r parenthetical mail_fromangledto_index start_index end_indexrr2 s r"_email_bounce_extract_addressr s6~2%2  ""(b..v6H r>"Q,KS]*x/D/Kq  c;7IB$MM#{; ?Q2OL/ / :a?:8 / ;q@;3%D C C6 HDD D('D(cU=(d 0R5VVs0sH7upURSS5(dURSS5(dM5X_M9 snn$s snnf)Nrrr)rr)raddressrs r"_email_bounce_filter_statsr \s[!- 299; ;OG ::i # #vzz*a'@ ;  s 4AAc [USS5=(d SR5n[USS5=(d SR5R5nSUlU(d[R S5 gUS:XaSnSnOS nS n[ RRU5(d[RS U5 g[RR5nU[R"S S 9- n0n[US/5=(d /H"nSSS.U[U5R5'M$ [UUUUUR US9 [#U5=(d SUlUR$(dSUl[RSU5 gUR'UR$5Ul[R)S[+UR$5U5 UR$$)Nrrjr"No bounce or defer data collected.z3managed_domain is not set; cannot analyze mail logsrz/var/log/exim_mainlogr z/var/log/maillogr zMail log not found at %srKrK r rr )r r rr r rz:No bounce/defer stats found for domain %s in last 24 hoursz?Collected bounce/defer stats for %d email accounts on domain %s)r1rrwemail_bounce_summaryr8rr5rrrrrrrrWr yearr rrrBrk) rrrr r current_timer rrs r"get_email_bounce_statsr bs&,39r@@BJf&6;ArHHJPPRN"FF LMX*% 77>>( # # .9;;??$L1!55KL!&*:B?E2E ?@a3P S'--/0F %!&&! !;< H PDF  $ $&J# PR`a"("D"DVE^E^"_F LLI F % %&  $ $$r+cf[USS5=(d SR5n[USS5=(d SR5nSUlUS:XaU(d/[R S5 SUlSUlUR $SUS 3n[ RRU5(aS UlS UlUR $SUlSUlUR $US :XaS n[ RRU5(d/[R S5 SUlSUlUR $[USSSS9nUR5R5nSSS5 SW;aSUlSUlUR $SU;aS UlS UlUR $SUlSUlUR $US;aSUlSUlUR $[R SU5 SUlSUlUR $!,(df  N=f![a2 [RS5 SUlSUlUR s$f=f![a2 [RS5 SUlSUlUR s$f=f)NrrjrNo spam protection detected.rz/domain_owner missing for SpamAssassin detectionrnrz/.spamassassinenable SpamAssassinzDetected SpamAssassinrr z:Postfix master.cf not found; cannot detect spam protectionr[r/rr%zcontent_filter=smtp-amavisAmavisdzDetected Amavisd spamassassinz?Failed to parse Postfix master.cf for spam protection detectionr z+Unknown panel type '%s', defaulting to Nonez'Error determining spam protection setup)r1rspam_protection_summaryr8rrr5rrr3rrwrrQ)rrr sa_flag_path master_cfrsrZs r"get_spam_protectionr s&,39r@@BJFNB7=2DDFL%CF"B&  !PQ)/&1O.---#L>1EFLww~~l++)7&1H.---%+F "-KF *)) ) , ,0I77>>),,[\)/&1O.--- .)S78LPQffhnn.GM07:-6F*5GF2!111!W,-;F*5LF2!111)/&1O.--- 8 8%+F "-KF *)) )DjQ!')G&%%%?ML" .  !bc)/&1O.---  . &BC!')G&%%% &st;I4 AI4I4+AI4 H5H$2'H5H5:H5I44/I4$ H2.H559I1.I40I11I449J0/J0c[RS5 [USS5nUc|[U5=(d SR 5nSU;a?[ UR 5=(a UR R 5U;UlOSUlURn[URURUR4USLaSOSUR5nUSLaDURS 5 URS 5S UR!UR S 35S 3$URS5 [#U5 [USS5=(d SnURS5 [%U5=(d SnURS5 ['U5 [USS5nURS5 [)U5 URS5 [+U5 [USS5=(d Sn[-U5R/5R 5S:XaUR1SS5nOUR3U5nURS5 [5U5 [USS5=(d Sn[USS5=(d SR/5R 5S;aUR1SU5nOUR1S U5nURS 5S UR7S!U5S UR7S"U5S UR7S#Ub [-U5OS5S$UR9S%5S [US&S5=(d S'S$UR9S(5S US$UR9S)5S U3$![a SUlGNf=f![a) [R;S*5 UR=S+5s$f=f),NzBuilding 'Email' sectionr rjrTFrKrzExternal email configuredz## Email Summaryrz( does not utilize this server for email.zZ MX records route mail delivery to an external provider, so local mail checks are skipped.zDetermining outbound mail IPrr@z PTR lookupz No PTR foundzCounting accountsrzMeasuring disk usagezChecking bounces/defersr r z"no bounce or defer data collected.rpzDetecting spam protectionr r r)rjrrZzOutbound Mail IPzReverse DNS (PTR)zNumber of Email Accountsrlz%### Highest Email Account Disk Usage:r r #### Bounce Back and Deferral Count:z### Spam Protection:zFailed to build 'Email' sectionz[Error] Failed to build email section. Check email accounts, disk usage, bounces and defers, and spam protection manually. Please report this as a bug.)r8rBr1rrwrrr rrrrrrrrrWrr r r r rWrr3rSr rIr<rQr[) rlocal_email_flag dns_lowerrr ptr_displayemail_account_countbounces_summary spam_summarys r"mail_build_sectionr# s LL+,v}d; &%f-3::(();<=R&&&*?*?)@@h'ijklll  <=F&)T2?il+fo7 126"%f.@$G45V$78v&!&*@$GoKo   % % ' - - /3W W$00:^_O$55oFO9:F#v'@$GiKi F-t 4 : A A C I I KS_ _!--g|DL!--e\BL$$%789(();WEFb(()]^^b''(MNOrt''(>?@n  g &!%F  &@  :;"" +   s2A&NN"AN+INNN0O  O c.[R"/SQSS9nURS:XaSUl[R S5 gSUl[R S5 g![ a'nSUl[RSU5 SnAgSnAff=f) N) systemctl is-active--quietzmonarx-agent.serviceFrsrTz Monarx agent service is running.z$Monarx agent service is NOT running.z(Failed to check Monarx agent service: %s)rrrgrr8rrr )rrPrEs r" get_monarxr) 1s D I     ! $F  KK: ; %F  KK> ? D! ?CCDsAA#A## B-BBcJ/SQnSnUH\n[R"SSSU/SS9nURS:Xa[R SU5 S nMF[R S U5 M^ X lg![a'nSUl[RS U5 SnAgSnAff=f) N)zimunify360-webshield.servicezimunify360-pam.servicez!imunify-auditd-log-reader.serviceFr% r& r' r( rzImunify service %s is running.Tz"Imunify service %s is not running.z'Failed to check Imunify360 services: %s) rrrgr8rrBrrr )rr2 any_runningrirPrEs r" get_imunifyr, @sC   G^^k9g>F  A% BBCsA.A11 B";BB"c X^S[S[4SjmS/S/S/S/S/S S //S QS /S .n/nUR5H2up4[U4SjU55(dM!UR U5 M4 X l[ RSU(aSRU55 U$S5 U$)zo - Controllers: csf, apf, ufw, firewalld - Backends: nftables, iptables - Related: imunify360, fail2ban unit_namer,c[R"SSSU/SS9RS:H$![a [R SUSS 9 gf=f) Nr% r& r' Fr( rz"systemctl check failed for unit %sTr)rrrgrr8rB)r. s r"systemd_is_active'get_firewall..systemd_is_active^s] >>k9i@jA   LL=ySWL X s%(A  A csfapfufw firewalldnftablesiptables ip6tables)zimunify360-webshieldzimunify360-pamzimunify-auditd-log-reader imunify360z imunify-agentimunify360-agentfail2ban)r2 r3 r4 r5 r6 r7 r9 r; c34># UH nT"U5v M g7frr$)rur0 s r"rget_firewall..vs3U ##Usz+Security layers detected (systemd only): %srmr) rWrrrrrr8rrv)r layer_unitsrlayerrr0 s @r" get_firewallrA Xs STggg"m!l!;/J!l KH#))+  3U3 3 3 OOE ",% KK=V^tyy?Rk Oekk Or+Fc[U[5(aU(aUSOSnU=(d SR5R5nUS;agUS;agU$)Nrrj)r r r0r T)r r r.r F)rrrrw)rgr string_values r"_ssh_parse_boolrD |sT%"b KR&&(..0L1122 Nr+c[R"S5=(d Sn[R"US/S[RSS9n1Skn0nU=(d SR 5HnUR 5(aS U;aM URSS 5upVUR 5R5nUR 5nXR;a#URU/5RU5 MXcU'M U$) Nsshdz/usr/sbin/sshdz-TTrvrI>rA denyusers allowusers denygroups allowgroups listenaddressauthenticationmethodsrjrtrK) rxrXrrrLr.rrrw setdefaultr) sshd_pathr  multi_keysconfigrrrgs r"_ssh_get_effective_configrQ s V$8(8I  $ $ D    FJF2))+zz||s$ ZZa( iik!      c2 & - -e 43K, Mr+c >URS5n[U[5(aSRU5O U=(d SnUR 5(d/$UR 5Vs/sH$n[ SUR S555PM& sn$s snf)NrL rtrjc3n# UH+oR5(dMUR5v M- g7fr)rr$s r"r0_ssh_auth_method_alternatives..s H::<  s55rg )rrrrvrrr1)rP auth_value auth_stringr5s r"_ssh_auth_method_alternativesrW s}34J*4Z*F*F#((:&ZM][]K      T_TeTeTg hTgSCH3H HTg hh hs,+BctU(dgUH*nSU;=(d [SU55nU(dM* g g)NTpasswordc3B# UHoRS5v M g7fzkeyboard-interactiveNr+rmethods r"r9_ssh_passwords_allowed_by_auth_methods..W;$$%;<<;rGFr) alternatives alternative has_passwords r"&_ssh_passwords_allowed_by_auth_methodsrc sB # + % XW;WW  < $ r+cU(dgSnSnUH6nSU;=(d [SU55nU(dM*SnSU;dM4SnM8 U=(a U$)NFTrY c3B# UHoRS5v M g7fr[ r+r\ s r"r-_ssh_passwords_require_key..r_ rG publickeyr)r` saw_passwordrequires_key_everywherera rb s r"_ssh_passwords_require_keyrj sf L"# + % XW;WW  <L+-*/'$  333r+cURS5=(d SR5nSSSSSS.nURXR55nX3S:g4$)Npermitrootloginprohibit-passwordrrzKey-onlyzKey-only (forced commands))r r zwithout-passwordrm zforced-commands-only)rrwrf)rP prl_rawprl_maprs r"_ssh_root_access_moderp s]zz+,C0CJJLG&' < G G%7%7%9:I J. //r+cZ[URS5S5n[URS5=(d URS5S5n[URS5S5nU=(a Un[U5n[U5n[ U5nU=(d U=(a UnX4$)NpasswordauthenticationTkbdinteractiveauthenticationchallengeresponseauthenticationFusepam)rD rrW rc rj ) rP password_auth_enabledkeyboard_interactive_enableduse_pampassword_via_keyboardr` passwords_allowed_by_amrrs r"_ssh_password_login_stater{ s+FJJ7O,PRVW#2 12cfjjAb6c $ fjj2D9G8DW08LD\R6|D0I4IfOf  55r+c[URS5=(d S5n[URS5=(d S5n[U5nXU4$![a SnNf=f)N maxauthtries6 maxsessions10)rWrrUr)rP rrrs r" _ssh_limitsr sdN3:s;Nvzz-08D9L'  l 22  s A A&%A&c TURS5=(d S/n[U[5(aU/O [U5n[ U5up4[ URS5S5n[ U5upg[U5upn [ URS5S5n UUUUUUUU U U S. $)NrA22pubkeyauthenticationTpermitemptypasswordsF) rrrrrrrrrr)rrrWrrp rD r{ r ) rP ports_valuerrrrrrrrrrs r"_ssh_analyze_configr s**V$.K' S99[MtK?PE3F;I(4J)KTR1J61R..9&.A+N|-fjj9O.PRWX$02!6($#:  r+c*[5n[ U5nUR U5$![a) [RS5 UR S5s$f=f![a) [RS5 UR S5s$f=f)Nz1Failed to read effective SSH config via `sshd -T`z*Unable to read effective SSH configurationz Failed to summarize SSH settingsz Unable to summarize SSH settings)rQ rr8rQr[r r)reffective_configrs r"get_ssh_settingsr s G U8:  ''78((22  U   P Q&&'ST T U G;<""#EFFGs, )A0AAAA0BBc[R"SSU=(d SR5[RS9R S5SR5nUnSnUR S5(aJUR S5nUS :wa2US UnXS -SnUR S 5(a[US S5nOROQS U;aKURS 5S :Xa6URS S 5upgUR5(a Un[U5nURS 5RS 5nX4$![a SnN2f=f![a UnX4$f=f)Nrrjrrri[]rrKr?rr)r]rlrrMrrrnrUrr<r ri rrr) rrhostrA bracket_endr host_part port_part host_idnas r"_ssl_parse_host_portr sZff%rFLb+?+?+ANTTUXYZ[\bbdG D D#ll3' " 1[)Da 12I##C((y}-D '>gmmC0A5#*>>#q#9 I  "" 9~KK'..w7  ?"D  ?s$1D6 E6 EE EEr rAverifyc N^S[S[4SjnSmS[RSS4U4SjjnU(aO[R"5nSUl[R UlUR5(dU"U5 O@[R"[R5nSUl[RUlU"U5(aSOUn[R"X4S S 9nURXvS 9nUR5n U (aU sSSS5 sSSS5 $URSS 9n U (d0sSSS5 sSSS5 $[R"U 5n [ R"R%S S5n [ R&"U SS9 [ R(R+U SUSUS35n [-U SSS9nUR/U 5 SSS5 [R0R3U 5nU=(d 0sSSS5 sSSS5 $!,(df  NK=f![4a5n[6R9SXU5 0sSnAsSSS5 sSSS5 $SnAff=f!,(df  O=fSSS5 g!,(df  g=f)N host_textr,cR[R"U5 g![a gf=f)NTF) ipaddressr,r)r s r" is_ip_address&_ssl_fetch_cert..is_ip_address*s*    +  s  &&c3~# [RRS5nU(aUv SnUHnUv M g7fr.r0)r2r3rs r"r5+_ssl_fetch_cert..candidate_ca_files1s8ZZ^^O4   DJr7r?c>T"5HRnU(aG[U5R5(a'URUS9 [R SU5 gMRMT g![ a!n[R SX5 SnAM}SnAff=f)Nr8z#Loaded CA bundle for TLS verify: %szFailed loading CA bundle %s: %s)rr=r>r8rBr)r?r9rBr5s r"load_system_cas(_ssl_fetch_cert..load_system_cas>s{(*F Md6l2244111@LL!FO56+  M >LL MsA A  B *BB TFr$r%)server_hostname) binary_formSPARTA_TMP_DIRz/root/SPARTA_tmprsparta_peer_cert_rz.pemr\r/r0z'Failed decoding peer cert for %s:%s: %s)rWrr: SSLContextr;check_hostname CERT_REQUIRED verify_moder<PROTOCOL_TLS_CLIENT CERT_NONEr4create_connection wrap_socket getpeercertDER_cert_to_PEM_certr5r1rrrrvr3r_ssl_test_decode_certrr8rB)r rAr r r r?r sock secure_socket cert_dictcert_derpem_texttemp_dir temp_pathrhdecodedrBr5s @r"_ssl_fetch_certr )s9 MMDM,,.!%!//##%% G $..!8!89!&!mm+I66dIO  ! !9"3Q ?4   G=%113I H G @ ? %00T0BHH G @ ? 33H=::>>*:PgPgPiii   5s; sCC"" D ,DD cj[USS5=(d SR5nU(dSUlURS5$[ U5up#[ X#5upEnSUl[U=(d [U55n[U5n [U5n URXXX5 UR!S5SUR#XX53UR!S 5SUR%X53UR!S 5SUR'U 53/n S R)U 5$![ a?n[RSX#U5 SUlSUl UR5sSnA$SnAff=f![ a0 [R+S 5 SUlURS 5s$f=f)Nrrjzstatus: no domain providedz/TLS handshake failed (unverified) for %s:%s: %sFTr{rtr expiresrz Failed to summarize SSL settingsz Unable to summarize SSL settings)r1rrr[r r rr8r rrrr r r r!rr rrrvrQ) rrr rAr r self_signed_hintunverified_excrrrrs r"get_sslr s#G&"2B7=2DDF!FN&&'CD D.v6  57I)7Z 4I$4+M/B9/MN (3 / :'' *^)*!F,B,B;,\+] ^)*!F,B,B;,[+\ ] *+1V-D-D_-U,V W  yy' 5 LLJI]k l"FN!&F 224 4  5* G;<""#EFFGsIAE8 E8D,!C E8, E564E0*E5+E80E55E887F21F2c^[RS5 Sn[TRTRTR 4UTR 5nSU4SjjnU4SjnURS5 [T5 URS5 [T5 URS5 [T5 URS5 [T5nURS 5 [T5nU"S [[TS S 555nU"S [[TSS 555nU"[TSS5=(d /5n TRS5STR!S5SUSUSU STR!S5STR#U5STR!S5STR#U53$![$a+ [R'S5 Sn TR)U 5s$f=f)NzBuilding 'Security' sectionrc>TRSTRSUS355nU(aTRSU5OTRSU5nUSU3$)NrAr6r?rprZrtr7)rDr detected_text missing_textrrgrs r"_colored_status_line4security_build_section.._colored_status_lines`""7F,>,>v*UVGW,XY>F""7M:FL^L^_dfrLs%!!r+c>TRSTRSS55nU(a&USTRSSRU553$USTRSS53$) NrAr6z Firewall:rtrprmrZzNo firewall detected)r3rv)firewall_itemsrrs r"_colored_firewall_line6security_build_section.._colored_firewall_linesm""7F,>,>v{,ST WAf00$))N:STUV V&,,U4JKLMMr+zChecking Monarx agentzChecking Imunify agentzDetecting firewall stackzReading SSH configzSummarizing SSLMonarxrFImunifyrrz## Security Summaryrl### Anti-Malwarer### SSH### SSLz+Failed to build 'Security Insights' sectionz[Error] Failed to build security section. Check for Monarx, Imunify, Firewall, SSH, and SSL settings manually. Please report this as a bug.)rz Not Detected)r8rBrrrrrrr) r, rA r r rr1rr<rSrrQr[) rrrr r ssh_settings_summary ssl_summary monarx_line imunify_line firewall_liners ` r"security_build_sectionr s LL./ E&   v445  " N &/56667F89V23/7/0fo *8T'&,X]:^5_` +ItGFM[`badmaskedstaticinvalidrindirect generated transientror$r%) deactivatingr&r'r&)rrrrr.rrr) r. r show_output key_valuesrrrg load_state active_stateunit_file_state disabled_likes r"_systemd_state_forrH U s# --@  #%%  J ++- i  __S!, "'++- 99; .  R0J>>-4L nn_b9O[  Mxx|#33  +(  $9$M s*C// C<;C<cz[5nUHnURS5(aX0;aURU5 M1URSS5n[R "SUS35nUH,nURU5(dMURU5 M. M [U5$![ a Mf=f)Nr0 r z.*^$) r1rr,rRr]r^rrr) all_unitsr matched_unitsr sanitized regex_patternr. s r"_systemd_find_units_by_patternsrP sEM   J ' 'G,@   g & OOC.  JJ!I;a'89M#I""9--!!),# -     sB,, B:9B:cT/nUHnUR[U5U45 M! U$r)rrH )units_to_prober}r. s r"_systemd_probe_unitsrS s-H# +I6 BC$ Or+c[n[SS9n0nUR5GHupE[R SU5 0nUR5Hupx[ X(5n [ U =(d U5n [SU 55(aSn O[SU 55(aSn Oj[SU 55(aS n OP[S U 55(aS n O6[S U 55(aS n O[SU 55(aSn OSn U U =(d US.Xg'M XcU'GM X0lUR$)NrvrzChecking category: %sc30# UH oSS:Hv M g7f)rroNr$rr{s r"r)get_installed_services.. s@xV!9(xroc30# UH oSS:Hv M g7f)rr$Nr$rV s r"rrW sBvAY(*rX r$c30# UH oSS:Hv M g7f)rr%Nr$rV s r"rrW sFX6AY,.XrX r%c30# UH oSS:Hv M g7f)rr&Nr$rV s r"rrW sD8AY*,8rX r&c30# UH oSS:Hv M g7f)rr'Nr$rV s r"rrW sOhFAY"77hrX r'c30# UH oSS:Hv M g7f)rr9 Nr$rV s r"rrW sIfAY/1rX r9 r)r(r) SERVICE_CATEGORIESr3 rr8rBrP rS rr) r categoriesrL rcategoryr2category_resultsr4rrM r}r(s r"get_installed_servicesrb s-#J+B?IG(..0 ,h7'/~~'7 #M;IPM+M,EXFH@x@@@ BBBB FXFFF$D8DDD"OhOOO-IIII'!&2(/  +'(80-91<!(  $ $$r+c0n[R"/SQSS[RS9n/nUR5HJnUR 5nU(dMUSnUR S5(dM9UR U5 ML 0n[R5HEnUR5H.upURU [55RU 5 M0 MG UR5H}up/n UHBnUR S5(aUSSOUn U Hn X;dM U R U5 M@ MD U (dMXSR[[U 555X'M U(aUO/UlU(dgS RS UR555$![a"n[ R#S U5 0nSnANeSnAff=f) Nr% z--failedr/ rTrrrr0 irmz#Failed to query failed services: %src38# UHupSUSUS3v M g7f)r)r;rENr$)rfriendlyrs r"r$get_service_stats.. s(<:OH XJbq!:r)rrrr.rrrr^ rrrM r1rrvrrr8rBr)rfailed_services_mapsystemctl_outputfailed_service_unitsrrzr. friendly_to_patternsr2r4rrM base_unit_namerrBs r"get_service_statsrm s"!%22 B%%   "$//1DjjlGw#AJ %%j11(// : 2 "*113H+3>>+;' $// suELLXV,<4(<'A'A'C #MM1 3<3E3Ej3Q3Q3BW`'G0%,,Y7 (2 }59YYvc-FX?Y5Z#2(D5H0RF  99<288:< << ! :C@ !s1AF9F96B5F9/F9)F99 G%G  G%cL[R"USU[RS9$)NTrr)rrs r" _svc_run_textro s'  " " !!  r+c[/SQSS9nUR5HmnUR5nU(aURS5(aM2URS5(dMJUR SS5SR5s $ [ RRS5(ag g ![ a N2f=f) N)zsystemd-analyzez cat-configzsystemd/journald.confrr)rr zStorage=rrKz/var/log/journalzpersistent (inferred)zvolatile (inferred)) ro r.rrrrr5rrY) journald_confrrs r"_svc_get_journald_storage_moderr s  % F ",,.Dzz|Hx22:>>"":..~~c1-a06688 / ww}}'((&    sA"B5($B5 B55 CCc[USS/SS9R5nUR5Vs/sHo"R5(dMUPM nn[U5$s snf![a gf=f)Nz --list-bootsrrrr)ro rr.rkr)r boots_textrbootss r"_svc_get_boot_countrv !sk"O^\#Rdeflln ","7"7"9J"9$ZZ\"9J5zK s(-A#A A A#A## A0/A0c[/SQSS9nUR5H<nUR5nU(dMUSRS5(dM7USs $ g![a gf=f)Nrd rrrr0 )ro r.rrr) failed_outputrrzs r"_svc_get_any_failed_unit_namery !sv  % B ",,.DjjlGw71:..z::qz!/     s"4AAAA A,+A,cU(dg[SSUSS/SS9nUR5nSU;=(d S U;$![a gf=f) NFr% r{rrrrzjournal has been rotatedzlog output is incomplete)ro rwr)r. status_text lower_statuss r"%_svc_unit_status_has_rotation_warningr} !!sa # (It\ B #((* *l:k@Z^j@jk s/: AAcL^ST;aST;agSn[U4SjU55$)Nzsystemd[zsystemd:F)zfailed to startzmain process exitedzentered failed statezfailed with resultz"start request repeated too quicklyzservice hold-off time overzunit entered failed statezstart operation timed outc3,># UH oT;v M g7frr$)rrIrs r"r/_svc_is_systemd_failure_line..;!sB/#/rr)rfailure_markerss` r"_svc_is_systemd_failure_liner -!s/# *(D O B/B BBr+cU=(d SR5R5nSU;aSnOSn/nU=(d SR5R5nURS5(aURS5 [ U5nUbUS::aURS5 U(aURS 5 U(aUS S R U5S 3$U$![ a SnN`f=f) Nrjzno journal entries returnedz2No journal entries returned for the last 24 hours.z:No historical service failures found in the last 24 hours.volatilezjournald storage is volatilerKzlimited boot historyzjournal rotation detectedz (Note: rmrE)rrwrrrUrrv) journald_storageboots_availablerotation_warning reason_line reason_lowerrnotes storage_text boots_ints r"_svc_build_no_history_messager 9>c0n[R5HEnUR5H.up#URU[ 55R U5 M0 MG U$r)r^ rrrM r1r)friendly_patternsr2r4rs r"_svc_collect_friendly_patternsr b!sT&--/'/~~'7 #M  ( ( > E Eh O(80 r+c ^ [5nUR5VVVs0sH%up#X#Vs/sHoDR5PM sn_M' nnnnUVs0sHo"S/S._M nnU=(d SR5HnUR5m [ T 5(dM%UR5Hgup#[ U 4SjU55(dM!XbnUS==S- ss'[ US5S:a"USRUR55 M M UR5VV s0sHup)U SS:dMX)_M sn n$s snfs snnnfs snfs sn nf) Nr)r<rrjc3,># UH oT;v M g7frr$)rrrs r"r._svc_parse_service_failures..w!sAWj(rr<rKrr) r rrwr.r rrkrr) logs_textr r4rrpatterns_lowerservice_historyrbucketr5rs @r"_svc_parse_service_failuresr h!s_68(9'>'>'@'@ #M x@xG x@@'@ VggUfMB&??UfOgb,,.ZZ\ +J77 '5';';'= #MAAAA(7w1$vg'!+7O**4::<8 (> /@A^A`a*?; -/F *0  <  6i@)8&0  5  77HH  H#N)+&s)$B-AB-6%B-B-- C7CCc [RS5 Sn[URURUR 4UUR 5nURS5 [U5nURU5nURS5 [U5nU(dSnUS:waSOSnURXe5nURS5 [U5nU(dSnURS 5 URS 5S US URS 5S USURS5S URU5S 3 $![ a+ [R#S5 Sn UR%U 5s$f=f)NzBuilding 'Services' sectionrzEnumerating installed servicesz Checking current failed servicesrQrZrRz$Checking historical service failureszFinalizing services section## Software Services Summaryz Below is a categorized summary of key services detected on the system and their current status. If a service is missing from the list, it means it was not detected on the server. r-Current Failed Services (systemctl --failed):rlz*Historical Service Failures (recent logs):z/Failed to build 'Services and Versions' sectionz[Error] Failed to build services section. Manually check for installed services and whether they are active, failed, or enabled but not running. Please report this as a bug.)r8rBrrrrrrrb r7rm r3r rr<rSrrQr[) rrrrinstalled_summary_textcurrent_failed_summarycurrent_failed_stylecurrent_failed_blockhistory_summaryrs r"services_build_sectionr !s LL./ E&   v445  $/>?3F;!'!A!ABT!U@A!26!:%%4 "(>/(QuW\%112F_DE5f=-O;<$$%CDEFe&&b''(WXYY[#$D''(TUVVX&&78 <  /JK l "":.. /sC2E2E98E9skip_swap_checks report_textr c  ^T^U^V^W^X^Y^Z^[^\^]^^^_^`^a/m[S[S[S[SS4U[4SjjnS[S[S[[4SjmXS[S[S[[4S jmWS[S[S[[4S jmYS [S[S[4S jmVS [S[4Sjm\S[[S[[4SjmTS[S[[4UY4SjjnS[S[ [ [44SjnS[S[[4UY4SjjnS[S[[4UX4SjjnS[S[[4UVUW4SjjnS[S[[4UVUX4SjjnS[S[[4UW4Sjjn S[S[ [[[[[[44UVUX4Sjjn S[S[[4UVUX4Sjjn S[S[ 4UV4Sjjn S[S[[4UTUV4Sjjn S[S[[4Sjm_SS .S[S![S[[4UVU_4S"jjjnS[S[[4UY4S#jjnS$[S[[[44S%jm`S[S[[ [[[[444UVU`4S&jjm^S'S(S).S[S*[S+[S[[4U^4S,jjjnS[S[[ 4UY4S-jjnS[S[ 4UVUY4S.jjnS[S[ [[[[44UX4S/jjnS[S[[4UVUX4S0jjnS[S[[4UY4S1jjnS2[S[ 4S3jnS[S[ 4UVUY4S4jjnS[S[4UV4S5jjmZS[S[[4UZ4S6jjnS[S[[ [[[44UV4S7jjnS[S[[4UY4S8jjnS[S[[4UY4S9jjnS[S[ [[ [[44UVUY4S:jjnS[S[ 4UVUY4S;jjnS[S[ 4UY4S<jjnS[S[[ 4UVUY4S=jjnS[S[ 4UVUY4S>jjn S[S[[4UVU\4S?jjm]S[S[ 4UYU\U]4S@jjn!U"U5n"U"(a#U"U"5un#n$U#(aU$(a U"SASBU$5 U"U5n%U%(a U"SCSDU%5 U "U5un&n'n(U"U5un)n*U(aSOU "U5n+/n,Sn-U&(a"U&SE:aU,RSF5 U-=(d SAn-U'bU'SE:aU,RSG5 SAn-U((a>SHRU(SSI5[U(5SI:aSJOSK-n.U,RSLU.35 SAn-U)b%U*b"U)U*:aU,RSM5 U-=(d SNn-U+b"U+SO::aU,RSP5 U-=(d SCn-U,(a%U"U-=(d SNSQSRRU,5SS-5 U"U5n/U"U5n0U"U5n1/n2Sn3U0b&U/b#U0U/ST-:aU2RSUU0SVU/SW35 SAn3U1b-U1S':a'U2RU1SX35 U1SY:aSAO U3=(d SNn3U2(a%U"U3=(d SNSZSRRU25S[-5 U "U5n4U "U5n5U4b8U4S\:a U"SAS]S^5 OU4S_:a U"SNS`Sa5 U4S_:aU5(a U"SCSbSc5 U"USS 9n6U6(a6SHRU6SSd5[U65Sd:aSJOSK-n7U"SCSeSfU7Sg35 U "U5n8U8(aU"SNShSiSRRU85-Sj-5 U"U5n9U9(a U"SNSkU95 U"US'S(S)9n:U:(a U"SASlU:Sm-5 U"U5n;U"U5nU"U>SrSsU=St35 U"U5n?U?(aU"U?5(a U"SASuSv5 U"U5(a U"SASwSx5 U"U5n@U@(aV[SyW@55(a U"SASzS{SRRW@5-Sg-5 OU"SNS|S}SRRW@5-Sg-5 U"U5nAU"U5nBS'nCS'nDUAVEVFVGs/sHunEnFnGUFWC:dWGWD:dMWEWFWG4PM nHnFnEnGUH(a [WHS~SS9SEnIU"SNSSUISES35 WB(a3WBR5R5S:XaWH(a U"SCSS5 U"U5mUTU(a?[UU4SjS55nJUJ(aSNOSCn>U"U>SSSHRTU5-Sg-5 U"U5unKnLUKSnLa U"SASS5 WKSLaWLbWLS::a U"SASS5 WKSLaU"U5(a U"SNSS5 U"U5(a U"SCSS5 U"U5nMUMSLa U"SNSS5 U "U5(a U"SCSS5 T]"U5nN[U\4SjUN55nOUN(a6SHRWNSSI5[UN5SI:aSJOSK-nPU"SASSUPSg35 WO(a U"SCSS5 U!"U5(a U"SNSS5 T[(dgSESSSdS.ma[T[Ua4SjS9nQS/nRUQH;nSWRRSUSRSUSR SUSR"35 M= SRWR5R%5S-$s snGnFnEf)Nrirjrkr,cj>U=(d SR5nTR[XUS95 g)Nrj)rirjrk)rrrh)rirjrk details_cleanfindingss r" add_finding*summary_build_section..add_finding!s( B--/ }]^r+rr-c[R"X[R[R-S9nU(dg[ UR S55$![ a gf=fNrrK)r]rrMr}rUrrrr-rs r"extract_first_int0summary_build_section..extract_first_int!sN 'rttbdd{; u{{1~& &  A A%$A%c[R"X[R[R-S9nU(dg[ UR S55$![ a gf=fr )r]rrMr}rrrr s r"extract_first_float2summary_build_section..extract_first_float!sN 'rttbdd{; Q( (  r c[R"X[R[R-S9nU(dgUR S5=(d SR 5$)NrrKrj)r]rrMr}rrr s r"extract_first_str0summary_build_section..extract_first_str!s@ 'rttbdd{; A$"++--r+ heading_linec>S[R"U5S3n[R"X!5nU(dgUR5n[R"SXS5nU(dXSR 5$XER 5-nXUR 5$)Nz(?m)^\s*z\s*$rjz(?m)^\s{0,3}#{2,6}\s+.+$)r]rHrendrr#)r r-heading_pattern start_matchr next_heading_matchr s r"extract_block_after_heading:summary_build_section..extract_block_after_heading!s%bii &=%>dCii6 !oo' YY'BDDVW! %++- -":":"<<  *0022r+ricU=(d SR5R5nURSS5RSS5n[R"SSU5nU$)Nrj(rErrt)rrwrRr]rl)rirgs r"normalize_service_name5summary_build_section..normalize_service_name"sQB%%'--/ c2&..sB7vsE* r+rc/n[5nUHZnU=(d SR5R5nU(aXB;aM8URU5 UR U5 M\ U$ri)r1rrwr,r)rrlr*rrs r" dedupe_list*summary_build_section..dedupe_list "s[ED:2$$&,,.C#+ HHSM NN4  r+c>T"SU5$)NzOperating System:\s*(.+)r$r-r s r"parse_os_version/summary_build_section..parse_os_version"s !.detect_os_eol"s!r((*002 u 8U!;!;L 5 RYYx%?%?P u II5u=EEKKN+#un "]B;_ %er+c>T"SU5nU(aHUR5RS5(d$UR5RS5(ag[RR UR5S5n[RR 5U- R 5S- nUS::a S[U5SUR5S 3$g![a gf=f) NzLast Reboot:\s*(.+)rrr+r rzServer was rebooted z hour(s) ago (zN). Confirm the reboot was intentional and that all services recovered cleanly.) rrrrr= r total_secondsrUr)r-rgr hours_agor s r"detect_recent_reboot3summary_build_section..detect_recent_reboot0"s!"8$? 00;;u{{}?W?WXb?c?c ++..u{{}>QRK*[8GGIDPIB-c)n-=^EKKM?[ijj   sBC$$ C10C1c>T"SU5$)NzLogical Cores.*?:\s*(\d+)r$)r-r s r"parse_logical_cores2summary_build_section..parse_logical_cores="s !=tDDr+c8>T"SU5nU(dgT"SU5$)NzRuntime Load Averages:z!15\s*min:\s*([0-9]+(?:\.[0-9]+)?)r$)r-rr r s r"parse_runtime_load_averages:summary_build_section..parse_runtime_load_averages@"s$+,DdK"#GOOr+c8>T"SU5nU(dgT"SU5$)Nz24hr High Load Events:z,(\d+)\s+instance\(s\)\s+of\s+1-minute\s+loadr$r-rr r s r"parse_high_load_event_count:summary_build_section..parse_high_load_event_countF"s%+,DdK !PRWXXr+c>T"SU5$)NzSwap Limit:\s*([0-9.]+)\s*GBr$)r-r s r"parse_swap_limit_gb2summary_build_section..parse_swap_limit_gbL"s"#BDIIr+c>T"SU5nT"SU5n/nT"SU5nU(aURSS5R5n[R"SSU5nU(amSUR 5;aYSUR 5;aEUR S 5Vs/sH)ofR5(dMUR5PM+ nnXU4$s snf) Nz.Total Historical Out-of-Memory Events:\s*(\d+)z8Low Memory Events\s*\(24hr,\s*<\s*5%\s*Memory\):\s*(\d+)rrrtrzno rrg )rRrr]rlrwr) r-historical_oom_countlow_memory_24h_countkilled_services killed_block normalizedr%r r s r" parse_oom(summary_build_section..parse_oomO"s01bdhi01lnrs%'23\^bc %--dC8>>@JZ8Je:+;+;+==&PZP`P`PbBbT"SU5nU(dgSUR5;agT"SU5$)Nrskippedz!Used:\s*[0-9.]+\s*GB\s*\((\d+)%\)rr)r- disk_blockr r s r"parse_disk_used_percent6summary_build_section..parse_disk_used_percent["s801A4H   ((* * !EzRRr+c>T"SU5nU(dg[[R"SU[RS95$)NrFz/cpmove-[^/\s]+\.tar\.gzr)rr]rrM)r-large_files_blockr s r"$detect_cpmove_backups_in_large_filesCsummary_build_section..detect_cpmove_backups_in_large_filesc"s978RTXY BII9;LTVTXTXYZZr+c>T"SU5nU(d/$/nUR5HgnUR5nURS5(dM+[R"SU[R S9(dMVUR S5 O SH@upV[R"XQ[R S9(dM/UR U5 MB T"U5$)Nrr+z(/softaculous_backups/.*\.(tar\.gz|zip)\brz.Softaculous backups consuming large disk space))z&/wp-content/.*updraft/backup_.*\.zip\bz*Updraft backups consuming large disk space)z/wp-staging/backups/.*\bz-WP Staging backups consuming large disk space)r.rrr]rrMr) r-r hitsr line_strippedrrr r s r"detect_large_backups3summary_build_section..detect_large_backupsi"s78RTXY I%002D JJLM ++C00yyDm[][_[_`` LM 3 NGyy244@@ E"  4  r+ size_textcU=(d SR5n[R"SU[RS9nU(dg[ UR S55nUR S5R5R 5nUS;aUS- $US;aUS - $US ;aU$US ;aUS -$US ;aUS -S -$US ;a US -S -S -$g)Nrjz.^([0-9]+(?:\.[0-9]+)?)\s*([KMGTP]?B?|[KMGTP])$rrKr)rg0A)r|rr)r}r)r~r)rr)rPB)rr]rrMrrre)r rkrrgr~s r"parse_size_to_mb/summary_build_section..parse_size_to_mb}"sB%%'JCWYW[W[\ekk!n%{{1~##%++- 6>O, , ; 6> ! ; L ; 6> ! ; 6>F* * ; 6>F*V3 3r+g@) threshold_mbr c8>T "SU5nU(d/$/nUR5HnUR5nURS5(dM+[R"SU[R S9nU(dMXUR S5R5nUR S5R5nT "U5n U bX:aMUR5n SU ;dU RS5(dS U ;dMURU5 M USS $) Nrr+z0^-+\s*([0-9.]+[KMGTP]?B?|[0-9.]+[KMGTP])\s+(.+)$rrKrz /var/log/z debug.logz /debug.logr) r.rrr]rrMrrwrr) r-r r log_hitsrr rr path_textrp path_lowerr r s r"detect_large_logs0summary_build_section..detect_large_logs"s78RTXY I %002D JJLM ++C00IIQS`hjhlhlmE A,,.I A,,.I&y1G'"8"*Jj(J,?,? ,L,LP\`jPj *3|r+c>T"SU5nU(dgUR5nURS5(dSUR5;agSUS3$)NzDocroot Owner:\s*(.+)r correctzDocroot is owned by z\. Incorrect ownership can cause permission errors and security exposure. Correct with chown.)rrrw)r-rgcleanr s r"detect_docroot_owner_mismatch.detect_docroot_owner_mismatch"s[!":DA    C I$>%eW-IJ Jr+ text_blockc0nU=(d SR5H[n[R"SU5nU(dM#[UR S55n[UR S55nXQU'M] U$)Nrjz^\s*(\d{3})\s*:\s*(\d+)\s*$rKr)r.r]rrUr)r rrrrBr<s r"parse_status_code_block6summary_build_section..parse_status_code_block"sh!#%2113DII/nT"SU5nU(a)T"SU5nU(aURST"U545 T"SU5nU(a)T"SU5nU(aURST"U545 U$)Nz### APACHE Access Log Summaryz Status Codes:rz### NGINX Access Log Summaryr)r)r-r apache_block status_part nginx_blockr r s r"parse_http_status_summaries:summary_build_section..parse_http_status_summaries"s{4623RTXY 5o|TK*A+*NOP12PRVW 5o{SK)@)MNOr+rIg{Gz?)min_5xxratio_thresholdr r cR>T "U5nU(dg/nUHsupVU(a[UR55OSnUS::aM/[SUR555nX- n X:dX:dM_URUS35 Mu U(dgSR U5S-$)Nrc3P# UHupSUs=::aS::dMO MUv M g7f)irNr$)rrBr<s r"rGsummary_build_section..detect_http_5xx_spike.."s$X>KDSDEWTWEW%EW%>s && &z shows elevated 5xx responses; z' (users may be seeing errors/timeouts).)r0rrrrv) r-r r ra triggeredr$rrVfive_xxratior s r"detect_http_5xx_spike4summary_build_section..detect_http_5xx_spike"s+D1! #( K,2C (EzX6<<>XXGOE!U%=  K=0M!NO$)yy#&OOOr+ch>T"SU5nU(dgUR5R5S:H$)Nz&GZIP Compression:\s*(Enabled|Disabled)r rrw)r-rgr s r"detect_gzip_enabled2summary_build_section..detect_gzip_enabled"s0!"KTR{{}""$ 11r+c>T"SU5nU(dgT"SU5n[U=(a SUR5;5$)Nz### CDNFzProvider:\s*(.+)rh)rrw)r- cdn_blockprovider_valuer r s r" detect_no_cdn,summary_build_section..detect_no_cdn"s@/ 4@ *+> JNP.:N:N:P'PQQr+c.>T"SU5nT"SU5nX4$)NzTotal Max Children:\s*(\d+)z.parse_php_fpm_children"s,./MtT#4 KT$  ";;r+c8>T"SU5nU(dgT"SU5$)NrT zTotal hits:\s*(\d+)r$r s r"parse_php_fpm_max_children_hits>summary_build_section..parse_php_fpm_max_children_hits"s$+,MtT !7??r+c>T"SU5$)Nz-Site PHP Version:\s*([0-9]+(?:\.[0-9]+){0,2})r$r s r"parse_php_site_version5summary_build_section..parse_php_site_version"s !QSWXXr+r c[R"SU=(d SR55nU(dg[UR S55n[UR S55nUS:agUS:XaUS;agg) Nz^\s*(\d+)\.(\d+)rjFrKrr$T)rrK)r]rrrUr)r r?rrs r"php_version_is_eol1summary_build_section..php_version_is_eol"so!47G7M26T6T6VW M''*+M''*+ 19 A:%6/r+c>T"SU5nU(dgT"SU5nU(dgUR5R5S;$)Nr Fzdisplay_errors\s+(\S+))r r0r r( )r- php_ini_blockrgr r s r"detect_php_display_errors8summary_build_section..detect_php_display_errors#sD34H$O !";]K{{}""$(;;;r+c>T"SU5$)Nr r$)r-r s r"extract_mysqltuner_block7summary_build_section..extract_mysqltuner_block#s*+T "U5nU(d/$/SQn/nUH@upE[R"XA[RS9(dM/URU5 MB /n[ 5nUH<nUR 5n X;dMUR U 5 URU5 M> U$)N))z\bEOL\bzDBMS appears EOL)z Highest connection usage:\s*100%z MySQL max connections hit (100%))z\.err contains\s+\d+\s+errorzMySQL error log has errorsr)r]rrMrr1rwr,) r-rrr rrrlr*rrrB s r"detect_mysqltuner_critical9summary_build_section..detect_mysqltuner_critical#s(.I  &NGyyrtt44 E"' ED**,C t$  r+c>/nT "SU5nUR5HnUR5nU(dM[R"SU[RS9nU(dMIUR S5R5n[ UR S55n[ UR S55nURXgU45 M U$)Nr z/^([^:]+):\s*(\d+)\s*bounced,\s*(\d+)\s*deferredrrKrr)r.rr]rrMrrUr) r-r bounce_blockrr rr bounced_countdeferred_countr s r"parse_bounce_defers2summary_build_section..parse_bounce_defers+#s.023XZ^_  ++-D JJLM IIPR_gigkgklE!KKN002M A/M Q0N NNM.I J.r+c>T"SU5$)Nz.Mail Routing\s*\(Based on DNS\):\s*([A-Za-z]+)r$r s r"parse_mail_routing1summary_build_section..parse_mail_routing;#s !RTXYYr+c.>^/mT "SU5nT "SU5nT "SU5nU(a"UR5R5S;aTRS5 U=(d SR5R5nU(a,URS5(dURS5(aTRS 5 OUS ;aTRS U35 U=(d SR5R5nU(a S U;aS U;aTRS5 OUS;aOSU;aTRS5 [ U4SjS55nU(d*TVs/sHowRS5(aMUPM snmT$s snf)Nz SPF:\s*(.+)zDMARC Policy:\s*(.+)z DKIM:\s*(.+)) none foundrzn/a SPF missingrjrrDMARC missing/none) quarantinerejectzDMARC policy: notr DKIM missing)rpresentc3,># UH oT;v M g7frr$)rrNissuess r"rJsummary_build_section..detect_email_auth_issues..R#sh2gQ&[2grrR rS rW z DMARC policy:)rrwrrr) r- spf_value dmarc_value dkim_value dmarc_clean dkim_cleanhas_hard_issuerNrZ r s @r"detect_email_auth_issues7summary_build_section..detect_email_auth_issues>#sR%nd; '(?F &= IOO-3359YY MM- ("(b//1779 k44Y??;CYCYZ`CaCa MM. / 4 4 MMN;-8 9 &B--/557 ez1jJ6N MM. ) 2 2 J& n-h2ghh!'MA||O/LaMF Ns *FFc>T"SU5nU(dgT"SU5nSn[R"SU[RS9nU(a[UR S55nU(aUR 5S:XaSU4$S U4$SU4$) Nr rz)status:\s*(enabled|disabled|missing|none)zdays left:\s*(\d+)rrKr TF)r]rrMrUrrw)r- ssl_blockrdays_left_valuedays_left_matchr r s r"parse_ssl_status/summary_build_section..parse_ssl_statusX#s/ 4@ ()UW`a )-))$99BDDQ !/"7"7":;O !!#y0_,,/) )_$$r+c>T"SU5nU(dgT"SU5nU(dgSUR5;=(a SUR5;$)Nr Fzissuer:\s*(.+)rsignrr)r-rf issuer_valuer r s r"detect_ssl_self_signed5summary_build_section..detect_ssl_self_signedg#sO/ 4@ ():IF ++--P&LT"SU5nT"SU5nU(+=(d! UR5R5S;nU(+=(d! UR5R5S;nU=(a U$)Nz ^A:\s*(.+)z ^NS:\s*(.+))rQ rrjr( )r-a_valuens_value a_missing ns_missingr s r"detect_domain_not_resolving:summary_build_section..detect_domain_not_resolvingp#si#M48$^T:KX7==?#8#8#:>X#X !\[X^^%5%;%;%=A[%[ 'Z'r+c>T"SU5nU(dgT"SU5nSnU(a!SUR5R5;nU$)Nr zPassword login:\s*(.+)r r( )r- ssh_blockpassword_login_valuepassword_enabledr r s r"detect_ssh_posture1summary_build_section..detect_ssh_posturew#sP/ 4@ 01JIV (,@,F,F,H,N,N,PP r+c>T"SU5nU(dgT"SU5nT"SU5nU(+=(d SUR5;nU(+=(d SUR5;nU=(a U$)Nr FzMonarx:\s*(.+)zImunify:\s*(.+)z not detectedrr)r-security_block monarx_value imunify_value monarx_absentimunify_absentr r s r"detect_no_antimalware4summary_build_section..detect_no_antimalware#sq45GN():NK )*P>P>R,R **Un @S@S@U.U//r+c>/nT "SU5nUR5HYnUR5nURS5(dM+URUR S5R55 M[ T "SU5nUR5HnUR5nURS5(dM+[ R "SU[ RS9nU(dMXURURS5R55 M /n[5nUH=n T "U 5n U (dMX;dMURU 5 URU 5 M? U$)Nr r+r z^-+\s*([^:]+):\s*(failed)\s*$rrK) r.rrrr0r]rrMrr1r,) r-r failed_blockrr services_blockrfinalr*rrr r s r"parse_failed_services4summary_build_section..parse_failed_services#s0%'23bdhi  ++-D JJLM'',,&&}';';C'@'F'F'HI.55SUYZ"--/D JJLM ++C00II> UWUYUYZEu&&u{{1~';';'=> 0E#D(.Css  T" $  r+c>T"SU5n[U=(a! UR5R5S:H5nU(dgT"U5nUHnT"U5nSU;dM g g)NzHas UltraStack:\s*(Yes|No)r FrDT)rrrw) r-has_ultrastack_valuerrrRsvc_normr r r s r" detect_ultrastack_nginx_mismatch?summary_build_section..detect_ultrastack_nginx_mismatch#so01NPTU2d7K7Q7Q7S7Y7Y7[_d7de/5"C-c2H("#r+Highz OS lifecycleInfozRecent reboot detectedrzOOM history presentzlow-memory events in last 24hrmrz ...rjz OOM-killed: z"PHP-FPM pools likely overcommittedMediumrz Swap disabledzMemory pressure riskr! z. Next: reduce concurrency and investigate high-memory workloads. High memory pressure causes swapping, which slows down response times significantly.rz15-min load is high (z vs z logical cores)z; high-load events in last 24h (1-min load >= logical cores)rqzSustained CPU/load pressurezS. Investigate traffic spikes, slow requests, PHP-FPM saturation, and DB contention.ZzDisk space criticalziFree space now (old backups/logs). Low disk space causes cascading failures and possible data corruption.rpzDisk space highz)Trim backups/logs and keep safe headroom.zCleanup: old cpmove backupszKLarge cpmove-*.tar.gz files found. Archive/remove old cP migration backups.rzLarge logs detectedz)Consider rotation and root-cause review: rrzLarge backups consuming diskz Detected: z;. Review retention settings and archive/remove old backups.zDocroot ownership mismatchz HTTP errorszN Check web server access/error logs and consider upstream timeouts as a cause.Fz#Performance improvement opportunityzaNo CDN detected and compression is off. Enable gzip (or brotli) for HTML/CSS/JS to speed up site.rzzPHP-FPM saturationz#PHP-FPM hit pm.max_children limits zh times. Users may see 503/504 errors and slow page loads. Tune the PHP FPM pools and reduce concurrency.z PHP lifecyclezJSite's PHP version appears end-of-life. Plan an upgrade path for the code.zPHP display_errors enabledzdisplay_errors is On in the site's PHP config. Disable in production to prevent leaking stack traces and file paths to visitors.c3H# UHnSUR5;v M g7f)z no passwordNrr)rrs r"r(summary_build_section...$sG} +rzMySQLTuner criticalzSecurity/performance issues: zMySQLTuner warningszKey findings: cUSUS-$)NrKrr$rMs r"rO'summary_build_section..<$s1Q4!A$;r+TrzMail delivery healthzHigh bounces/defers on zm. Check dominant bounce reason in Exim logs and address mailing list hygiene or email reputation will suffer.localzLocal mail routing + bounceszMail is routed locally and bounces are elevated. Confirm outbound source of bounced emails and review SPF/DKIM/DMARC alignment.c3,># UH oT;v M g7frr$)rrNemail_auth_issuess r"rr L$si3ha))3hrr\ zEmail authenticationzReview: zSSL missing or disabledz"Provision a valid SSL certificate.zSSL expiring soonzACheck to ensure DCV checks will pass when it comes time to renew.zSSL self-signed certificatezpCertificate is self-signed and untrusted by browsers. Replace with a CA-issued certificate (e.g. Let's Encrypt).zDomain not resolvingzcNo A or NS records found. If the site should be live, check DNS propagation and zone configuration.z SSH posturezBPassword login is enabled. Key-only authentication is more secure.zNo anti-malware detectedzuNeither Monarx nor Imunify was detected. Consider installing a malware scanner to assist with early threat detection.c3^># UH"nST"U5;=(d ST"U5;v M$ g7f)r bindNr$)rrCr s r"rr d$s5_nZ[*1- - T;QRS;T1T T_ns*-zFailed serviceszFix or disable: zDNS service (named) is failedzUIf this server is not meant to host DNS, disable named. If it is, fix it immediately.zNGINX service failedzUltraStack is detected on this server, but NGINX is currently in a failed state. Investigate and restart NGINX if it should be functioning.z=## Summary No major issues detected by post-report analysis. rKr)r r Lowr c<>TRURS5$)Nc)rri)rseverity_orders r"rOr y$s8J8J4==Z\8]r+rQz ## Summaryz- **z**: z. r)rWr rUrrr rrrrvrkrrrrwrirjrkrC)br r r r r r r r r r r r r r r r r% r) r. r2 r5 r8 r; r? rE rK rN rc ri rn ru r{ r r r os_is_eol os_messagerecent_reboot_messager r r rr1 swap_limit_gb memory_flagsmemory_severity killed_shortr fifteen_minr^ load_flags load_severitydisk_used_percentcpmove_presentlarge_log_pathsrbackup_bloat_hitsdocroot_mismatch_messagehttp_5xx_message gzip_enabledno_cdn_detectedmax_children_hitsrir mysqltuner_hits bounce_defers mail_routingbounce_threshold_mediumdefer_threshold_mediumr!rB rnoisy_accountsrhard ssl_enabled ssl_days_leftrz r named_failed short_listfindings_sortedr=findingr r r r r r rB r r r r r r r sb @@@@@@@@@@@@@@r"summary_build_sectionr !s %'H_c_#___ 3chsmS.3.c.hsm. 3# 3S 3S 3 49 c DsDx}D#%c *:, 3 8C= E#E(3-EP#P(5/PP Y#Y(3-YY J#J(5/J K KhsmXc]DI&M N K KScShsmSS[3[4[ !3!49!!(CHUO*?DeS .JCJHSMJ C DcN  # $uS$sCx.=P7Q2R  <>X\PCPSPPUPaijmanPP"2#2(4.2 RCRDRRMaP  "%c!fX.[ \  **,224?N  * N 1=i3hii#8H4j499M^C_6_be6ef!1+!>KeF57[\d}8 B   35x yd5kBBH;>p q";//F25Z [)+64Hm-qr[))F69p q+K8O_nLYYr23_AUXYAYv_ab F-1A*Q/OPF;>U V' 44  " Z P1QBNX+]^O ,~M"tG$4$4#5T'--7??J[\]# 99] # * * ,t 33Os m?+ m?c^^SnSnSmU4SjnSnSnS[S[4S jmS [S[4U4S jjn[5 [RS 5 [ 5R 5nU"5nU"Xg5upn [R S USRU 55 [5n [[USS55U l [U 5 [U 5 U"X5 SU ;a [U 5 SU ;a&U R(d[RS5 U"X5 U"X5 U R!5n [USS5(dwT"U 5n [[U SS5=(d SR#5R%5S:H5n['XS9R)5S-nU R)5S-U-n U"U 5n[.R0R3U S-5 [.R0R3SUS35 [.R0R55 [6R9SS9 [RS5 g![*a6n[R-SU5 U R)5S-S-n SnANSnAff=f![*a [R-S 5 gf=f)!Nc SS[4SS[4SS[4SS[4S S [4S S [ 4S S[ 4SS[44$)NrpzSystem SectionrqzAccount and Website SectionrrzTraffic Sectionrsz PHP SectionrtzDatabase Sectionruz Mail SectionrvzSecurity Sectionr2zSoftware Services Section)rr2rr r r# r r r$r+r"collect_section_specs#main..collect_section_specs$sj ')= > 24I J )+@ A M#4 5 %'= > ^%7 8 +-C D 46L M  r+c^ UVs/sHo"SPM nnUVs1sHn[XS5(dMUiM nnUVs1sHn[USU3S5(dMUiM nnUR=(d U(+nU(a [U5OUnUVs/sHoDU;dM XF;dMUPM snm [U 4SjU55n UT U 4$s snfs snfs snfs snf)NrFrwc3<># UHoST;dM Uv M g7f)rNr$)rspec chosen_keyss r"r8main..resolve_chosen_sections..$sYq'[BXs  )r1fullr1r) parsed_args section_specsr section_keysr include_keys exclude_keys run_full_mode base_keyschosen_sectionsr s @r"resolve_chosen_sections%main..resolve_chosen_sections$s,9:MDQM :'3X|w{QV7W| X'3`|w{cRUQVKY^7_| `#((< ,< )6C %L &2clsY6Fs3Kbslc YYYk?::;X`ds,C CCCC C#C*Cc2^Sn[U4SjU55$)N)rqrrrsrurvc3,># UH oT;v M g7frr$)rr~r s r"r5main..needs_domain_context..$sUAT++-ATrr)r domain_context_keyss` r"needs_domain_context"main..needs_domain_context$sLUATUUUr+c>^T"T5(dg[U5 [U5 [U4SjS55nU(a4[USS5=(d SR 5(d [ U5 [U4SjS55nU(a6[USS5=(d SR 5(d [ U5 ggg)Nc3,># UH oT;v M g7frr$rrr s r"r7main..prepare_domain_context..$s [?Z !3?Zr)rsrurvrrjc3,># UH oT;v M g7frr$r s r"rr $se=dck1=dr)rurrrvrqr)rrrr1rr$r>)rr needs_user_contextneeds_ip_contextr s ` r"prepare_domain_context$main..prepare_domain_context$s#K00 F6" [?Z [[ wv~t'L'RPR&Y&Y&[&[ 6 "e=dee WVY%E%K$R$R$T$T  %U r+c(SU;ag[USS5bg[[USS55(ag[R[5Ul[ RS5 g![a [ RS5 SUlgf=f)NrprrFz#[deadweight] background scan queuedr) r1rrrrrr8rrrQ)rr s r"queue_deadweight_scan_if_needed-main..queue_deadweight_scan_if_needed$s ; &  6. 5 A   U3 4 4  ,'/~'FF $ KK= > ,   I J'+F $ ,s3A((&BBc^[U5Tl[TRS-SSSS9Tl[ USS9H[unup4nUTlUTl[RSU5 TRUS 3U4U4S jj5nTRU5 M] TRR5 g![[4a!n[RS U5 SnAMSnAff=f) Nrqz Building:rjr)rMrNrOrKr"zBuilding section: %s_build_sectionc>U"T5$rr$) section_funcrs r"rO,main..run_sections..$s l66Jr+z1Fatal error occurred in SPARTA main execution: %s)rkrrGrr[rrr8rrFr[ RuntimeErrorrrQr)rr rr~ section_labelr rZrs` r" run_sectionsmain..run_sections$s #O 4%  ! !C '  BK?bcAd =E=K #(F "/F  KK. > [ ,,"m>2(4J""7+Be  !'* [  !TVYZZ [s(-B44C%C  C%r-r,cbU(dg[R"S5nURSU5$)Nrjz\x1B\[[0-?]*[ -/]*[@-~])r]r^rl)r- ansi_escapes r" strip_ansimain..strip_ansi$s(jj!;< r4((r+r cl>[RR5RS5nSUS3nUS-nT"U5n[R "SSS9 [ USS S 9nURUR5S -5 SSS5 [R"X25 U$!,(df  N&=f) Nz%Y_%m_%d_%H%M%Sz/root/server_audit_report.z.mdz.tmpz/rootTrr\r/r0r) rrrrr5rr3rrCrR)r timestamp report_pathr file_textrhr s r"write_report_to_file"main..write_report_to_file$sKKOO%../@A 29+SA &( {+  Gd+ )S7 3v LL))+d2 34 9* 4 3s "#B%% B3z === SPARTA Execution Started ===zRun mode: full=%s sections=%srg no_diskFrtrpzServers with larger than normal disk usage may delay report generation. Please be patient. Use --no-disk to skip disk usage checks. no_summaryrrjrr rrlz)Post-report summary generation failed: %szS## Summary [Error] Summary generation failed. Please review the sections manually. z Report saved to: )waitz)=== SPARTA Report Generation Complete ===z.Fatal error occurred in SPARTA main execution.)rWrEr8rr parse_argsrBrvrrr1rrrr; rr^rrwr rCrrQrYrZrrrshutdown)r r r r r r rr r r r rr analysis_textr summary_textrBreport_file_pathr r s @@r"mainr$s   ;V   ,!2))) # # O KK23   ( ( *D)+M2I$2^/M LL0-+AVW0Ki ?@fvv3 ;  !& ) { "6+;+; NN;  (<V-,,. t\511  *; 7 #')K)Qr(X(X(Z(`(`(bfk(k#l 4]fmmorvv )002V;lJ 0 < t+, ./?.@CD u% ?@   !LcR&&(mn " KIJKs?-B2J- A6I*BJ-* J*4,J% J-%J**J--KK__main__)r,N)ri )rv)r)Tr)z/root/SPARTA_tmp/)rz)rr)r)F)r(rryrrrr rSr:r5rrr]rxr4r:rrYr ra collectionsrconcurrent.futuresr dataclassesrpathlibrtypingrrr r r urllibr rQr r1 racpapisrradsrrrZr[r0r4 getLoggerr8 StreamHandlerrrErGrrrarhrrrWrrrrrrrr#r=rtrrrrrrSrTrrrrrrr=r]rlrrrr$r'r+r@rDrHrJrYrmrrrrrrrrrrrrrrrrrrrr>rBrZr^rirkrorrrrrrrrrr rrrrrr'r2r@rBrFrLrQrWr\rrrQrKrLr{rPrrJrsrrr^rMr< r/ r0 r1 rrrrrrrrrrrrrrrrr r r' r) r+ r3 r7 r: rH ra rt rUCompletedProcessry r} r r r r r r r r+r r r r r r r r r r, rr; r7 rL re rz r r r r r rr r r r r r r r r r r r r r# r) r, rA rD rQ rW rc rj rp r{ r r r r r r r r r r r r^ r3 rH rP rS rb rm ro rr rv ry r} r r r r r r r r rr%r$r+r"rs         1!33$  ! , ZZ    !   8 $700'>v$v$n("("VXXv      4j HPPP9bt&F9N9cx>6%LLKZicT'P:0'b6n0,b   S5lH:+XV,n2>f9AtL,Z}/@w5p  8L*I/`"F E 6n.  BF  0d    D !@DPbR$fE>L.* n^KX $ (1R4"_ 8 9Dta5H8!r     7i$T3%h8rkX'#P<,9!t\Lz]|RfW/t ZZ4DD!jj)]^"$**-["\ #PQCC c cdCCCCHSMCH(3-.8C=>38C=3h8C=(#<<zaD  38h "AFD82.^  "Fg\PWJpC#j>Y>Y   "3 "DI " ! ! !cs.CSXc],"C,"S,"c,"V^_bVc,"Z?3?8C=?"sWZ< ' '4 'TRUY '[^ '   Sd3iD:3DI$@ C D  E(R6n6!D=| s ,9tC3c,#3#(!5C!5S!5C!5D&H&H&H &H  &H&HNT 1%dG&PR jDC0#H>i 4 0630 G:CsC#CtCHK#KSK  $GJ</BI&5;;;*+L%**:#]3i(#n)*!]L ! #)(-.  Lu~!]LL!?3(M#%78!#67* **#n;; ]4j:4%j!$ $%J-<\!$  C: i.%L//dINh 4sh 4h 4RUh 4V_KB zFr+