+
    ޏDjy                     J    ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt ! R R4      tR# )    Nc                   X   a  ] tR t^t o RtRR ltR tR tR tR t	R t
R tR	 tR
tV tR# )ServerControllerz_Mengelola pemantauan detail metrik hardware & trafik server (Lokal maupun SSH) dengan paramiko.c                    Wn         W n        W0n        W@n        VP	                  4       V n        R V n        RRR^ R^ /V n        RRR^ R^ /V n        R# )Ftime        rxtxtotalidleN)	server_typeipusernamepasswordloweros_typeis_connectedprev_trafficprev_cpu)selfr   r   r   r   r   s   &&&&&&LC:\Users\sesar\.gemini\antigravity\scratch\lan-guardian\server_controller.py__init__ServerController.__init__
   sW    &  }}! $S$4;gq&!<    c                X   V P                   R8X  d
   RV n        R# V P                   R8X  d
   RV n        R# V P                  '       g   R# V P                   R8X  d    ^ RIpVP	                  4       pVP                  VP                  4       4       VP                  V P                  V P                  V P                  RR7       VP                  4        RV n        RR	V P                   R
23#  RRRRRV P                  .p\        P                  ! V\        P                  \        P                  R7      pVP                  ^ 8X  d   RV n        RRV P                   R23# RRV P                   R23#   \         d   pRRT 23u Rp?# Rp?ii ; i  \         d   pRRT 23u Rp?# Rp?ii ; i)z1Uji ping atau SSH ke server menggunakan paramiko.	simulatedTlocalFsshNg      @hostnamer   r   timeoutzKoneksi SSH ke z berhasil terjalin.zGagal login SSH: ping-n1z-w1000)stdoutstderrzServer (z) merespons Ping.z) tidak merespons Ping.Error: )Tz!Koneksi Simulasi Server Berhasil.)Tz(Berhasil terhubung ke Host Server Lokal.)FzIP Server tidak ditentukan.)r   r   r   paramiko	SSHClientset_missing_host_key_policyAutoAddPolicyconnectr   r   close	Exception
subprocessrunDEVNULL
returncode)r   r(   clientecmdress   &     r   test_connection ServerController.test_connection   s   {* $D<<w& $DCCwww77 u$6!++-2283I3I3KL!WW!]]!]]	   $(!twwi7JKKK
	(4dFDGG<C..Z-?-?
HZHZ[C~~"$(!xy0ABBB	1HIII  6 1!5556  	(GA3-''	(sD   BE. +A0F F .F
9F?F
F
F)F$F)$F)c                b   V P                   R8w  d   R
#  ^ RIpVP                  4       pVP                  VP	                  4       4       VP                  V P                  V P                  V P                  RR7       VP                  VRR7      w  rEpVP                  4       P                  RRR	7      P                  4       pVP                  4       P                  RRR	7      P                  4       pVP                  4        Yx;'       g    R3#   \         d   p	R\        T	4      3u Rp	?	# Rp	?	ii ; i)z6Menjalankan perintah SSH menggunakan library paramiko.r   N      @r   g      @)r    zutf-8ignore)errors)NzBukan koneksi SSH.)r   r(   r)   r*   r+   r,   r   r   r   exec_commandreaddecodestripr-   r.   str)
r   cmd_strr(   r3   stdinr%   r&   out_strerr_strr4   s
   &&        r   run_ssh_command ServerController.run_ssh_commandA   s   u$--	 '')F..x/E/E/GHNN	   %+$7$7$7$M!E6kkm**78*DJJLGkkm**78*DJJLGLLNOOt++ 	 Q<	 s$   C2D D D.D)#D.)D.c                   \        V R4      '       d   V P                  Ef   RRR^R^RRR	. R
RRRRR/V n         Rp\        P                  R8X  d=   \        P
                  ! 4       pV;P                  \        P                  ,          un        \        P                  P                  \        P                  P                  \        P                  P                  \        4      4      R4      pRRRRRV.p\        P                  ! VRVRR7      pVP                  4       '       Ed   \        P                   ! V4      pVP#                  R/ 4      pVP#                  RR4      P                  4       V P                  R&   \%        VP#                  R^4      4      V P                  R&   \%        VP#                  R^4      4      V P                  R&   \'        VP#                  RR4      4      p\)        VRS,          ^4      V P                  R&   VP#                  R . 4      p\+        V\,        4      '       g   V.p. p	\/        ^4       EF  p
R!V
^,            2pV
\1        V4      8  d   W,          '       d   W,          p\%        \'        VP#                  R"^ 4      4      RT,          4      pVP#                  R#R$4      pVP#                  R%R&4      pVP#                  R'R&4      pT	P3                  R(TR)V R*V R+2R,V'       d   VP                  4       MR&R-V'       d   VP                  4       MR&/4       K  V	P3                  R(VR)R.R,R.R-R./4       EK  	  WP                  R	&   \'        VP#                  R/R04      4      p\)        VRT,          ^4      V P                  R
&   VP#                  R1R4      P                  4       V P                  R&   VP#                  R2R4      P                  4       V P                  R&   / R4^ bR5^ bR6^ bRV P                  R,          bRV P                  R,          bRV P                  R,          bR7R8bRV P                  R,          bR	V P                  R	,          bR9R8bR
V P                  R
,          bRV P                  P#                  RR4      bRV P                  P#                  RR4      bR:R;bR<R;bR=. bp Rp\        P                  R8X  d=   \        P
                  ! 4       pV;P                  \        P                  ,          un        \        P                  P                  \        P                  P                  \        P                  P                  \        4      4      R4      pRRRRRVR>.p\        P                  ! VRVR?R7      pVP                  4       '       Ed   \        P                   ! V4      pVP#                  R@/ 4      p\%        VP#                  RA^ 4      4      VR4&   \'        VP#                  RB^ 4      4      pVR,          R,          R,          pVV,
          p\)        VRS,          ^4      VR7&   \%        VV,          ^d,          4      VR5&   \'        VP#                  RC^ 4      4      pVR
,          RT,          pVV,
          p\)        VRT,          ^4      VR9&   \%        VV,          ^d,          4      VR6&   \'        VP#                  RD^ 4      4      p\'        VP#                  RE^ 4      4      p\8        P8                  ! 4       pV P:                  RF,          pVR88  d   VV,
          pV^ 8  dy   VV P:                  RG,          ,
          V,          pVV P:                  RH,          ,
          V,          p V^ 8  d0   V ^ 8  d)   V P=                  V4      VR:&   V P=                  V 4      VR<&   VV P:                  RF&   VV P:                  RG&   VV P:                  RH&   VP#                  RI. 4      p!\+        V!\,        4      '       g   V!.p!V! F  p"V"'       g   K  \%        V"P#                  RJ^ 4      4      RS,          p#V"P#                  RKR84      p$V$f   R8p$VR=,          P3                  RLV"P#                  RM^ 4      R(V"P#                  RNRO4      R4\)        V$^4      RPV# RQ2/4       K  	  V#   \4         d   p\7        R3T 24        Rp?ELRp?ii ; i  \4         d*   p\7        RRT 24       T P?                  4       p Rp?T# Rp?ii ; i)UzfMengambil metrik detail sistem lokal Windows menggunakan script get_metrics.ps1 dengan static caching.static_specsN	cpu_modelzIntel Core CPU	cpu_corescpu_threadsram_total_gbg      0@	ram_slotsdisk_total_gbg     m@disk_part_numberN/Adisk_serial_numberntzget_metrics.ps1
powershellz
-NoProfilez-ExecutionPolicyBypassz-FileT       @)universal_newlinesstartupinfor    Static	CPU_Model	CPU_CoresCPU_Threads	RAM_Totalg      pA   SlotsSlot CapacitySpeedi  
PartNumberNot SpecifiedSerialNumbernamedetailz GB DDR4 @ MHzpart_numberserial_numberKosong
Disk_Totalg    eMB
Disk_ModelDisk_Serialz#Error fetching local static specs: cpuramdiskram_used_gbr   disk_used_gb
traffic_in0 B/straffic_out	processesz-DynamicOnlyr:   DynamicCPU_LoadFree_Mem	Free_DiskRx_BytesTx_Bytesr   r   r	   Procs
WorkingSetCPUpidIdProcessNameUnknownmemz MBz&Error fetching local dynamic metrics:    i   @) hasattrrI   osrf   r/   STARTUPINFOdwFlagsSTARTF_USESHOWWINDOWpathjoindirnameabspath__file__check_outputr@   jsonloadsgetintfloatround
isinstancelistrangelenappendr.   printr   r   format_speed_bytesget_simulated_metrics)%r   rX   script_pathr5   outputdatastatic_datatotal_kbslots	slot_listi	slot_namescapspeedpnsn	disk_sizer4   metricsdyn_datafree_kbused_kb
free_bytestotal_bytes
used_bytesr   r	   cur_time	prev_timeintervalrx_speedtx_speedprocspmem_mbcpu_vals%   &                                    r   get_local_metrics"ServerController.get_local_metricsY   s-   t^,,0A0A0I-QqR"E$e	!D3A"77d?","8"8":K'':+J+JJ' ggll277??277??8;T+UWhi#\3ExQXZef#00[fpst<<>>::f-D"&((8R"8K5@__[Rb5c5i5i5kD%%k258VW9X5YD%%k27:;??=Z[;\7]D%%m4$[__[*%MNH8=h+>VXY8ZD%%n5 (OOGR8E%eT22UGE "I"1X&+AaC5M	s5z>ehh %A"%eAEE*a,@&AW&M"NC$%EE'4$8E!"|_!EB!"~!GB%,, &	 (SEUG3*G -Rrxxz_ /r	.  &,, &	 (( -x /	.  &* 6?%%k2 %koolN&S TI9>yG?TVW9XD%%o6<GOOLZ_<`<f<f<hD%%&89>Ioom]b>c>i>i>kD%%&:;

1
Q
 &
**;7
 **;7
 4,,];	

 3
 D--n=
 **;7
 C
 T..?
  1 1 5 56H% P
 !$"3"3"7"78Le"T
 '
 7
 
"B	3Kww$(446##z'F'FF#'',,rwwrwwx7P'QSdeK/A8WVacqrC,,STWblopF||~~zz&)88Ir2 "%X\\*a%@!A  Z ;<">2T9D@"W,).w+/F)J&!$g&8C%?!@ #8<<Q#?@
%o6'B(:5
*/
g0F*J'"%zK'?3&F"G 8<<
A678<<
A6799; --f5	s?')3H!|$&):):4)@$@H#L$&):):4)@$@H#L#q=X]484K4KH4UGL1595L5LX5VGM2,4!!&)*,!!$'*,!!$' !Wb1!%..Aq!$QUU<%;!<!M"#%%s"3"?cG,33!155q>"AEE-$C!5!#4!fXS>	5   s  A;A3?@@Aj  	3:1#>?002G		3sM   C)b $G&b Cb 2C*b> I(b> 
Bb> b;"b66b;>c2	c--c2c                ^    VR8  d   VR R2# VR8  d   VR,          R R2# VR,          R R2# )	z@Memformat kecepatan transfer byte menjadi string KB/s atau MB/s.r^   z.0fz B/sz.1fz KB/sz.2fz MB/sr    )r   bytes_per_secs   &&r   r   #ServerController.format_speed_bytes   sL    4#C(--[(#d*3/u55#{3C8>>r   c                   \        ^-^\        P                  ! 4       ^
,          ^
,          ,          ,           \        P                  ! RC^4      ,           4      p\        ^>\        P                  ! RD^4      ,           4      pRp\	        W2R,          ,          ^4      pRpRp\        We,          ^d,          4      p\        P                  ! 4       R8  d   \        P
                  ! RR4      M\        P
                  ! RR	4      p\        P
                  ! R
R4      p	V P                  V4      p
V P                  V	4      pRp^p^pRRRR/RRRR/RRRR/RRRR/.pRRRRR\	        \        P
                  ! RR4      ^4      RR/RRRRR\	        \        P
                  ! RR 4      ^4      RR!/RR"RR#R\	        \        P
                  ! R$R%4      ^4      RR&/RR'RR(R\	        \        P
                  ! R)R*4      ^4      RR+/RR,RR-R\	        \        P
                  ! R*R.4      ^4      RR//RR0RR1RR)RR2/.pVP                  R3 R4R57       RVR6VR7VR8VR9VR:VR;VR<VR=VR>VR?VR@V
RAVRBV/# )Ez>Menyediakan data mock server dinamis yang lengkap dan dinamis.g      @@g      Y@g      @gffffff@g333333?iP  i i@B ig5 i:  i$ z#AMD Ryzen 9 5900X 12-Core Processorrf   Slot 1rg   z16 GB DDR4 @ 3200MHzSlot 2rk   Slot 3Slot 4r   i  znginx: worker processro   g      ?@r   z142 MBi4#  zpostgres: db-writerg @g      !@z512 MBiP  znode /app/server.jsg      $@g      6@z384 MBi  zredis-serverg?g333333?z64 MBir[  zpython app.pyg      @z98 MBi~  zsystemd-journaldz18 MBc                     V R ,          # )ro   r   )xs   &r   <lambda>8ServerController.get_simulated_metrics.<locals>.<lambda>"  s    QuXr   T)keyreverserp   rq   rJ   rK   rL   rM   rr   rN   rO   rs   rt   rv   rw   )r   r   randomrandintr   uniformr   sort)r   ro   ram_pct	ram_totalram_used
disk_total	disk_useddisk_pctraw_rxraw_txrt   rv   rJ   rK   rL   rN   rw   s   &                r   r   &ServerController.get_simulated_metrics   s~   "rTYY[2-233fnnR6KKLb6>>"a001	o6:
		.#5628--/C2Gv.V^^\celMmu-,,V4
--f59		 Xx)?@Xx2Xx)?@Xx2	
	 D&"95%WZ\_H`bcBdfkmuvD&"7fnnUXZ]F^`a@bdikstD&"7fnnUY[_F`bc@dfkmuvCfnnSRU>VXY8Z\acjkE6?E5PSUXAY[\;]_dfmnC!3UCP
	 	-t< 3wKM;I}hYZ*m[
 	
r   c                l   V P                   R8X  d   V P                  4       # V P                   R8X  d   V P                  4       # V P                  R8w  d   V P                  4       # / R^ bR^ bR^ bRRbR	^bR
^bRRbRRbR. bRRbRRbRRbRRbRRbRRbR. bpRpV P	                  V4      w  r4V'       g
   RV n        V# RV n         / pRp. pVP                  R4       F~  pVP                  4       pVP                  R4      '       d:   VP                  R4      '       d#   V'       d   WuV&   VP                  RR 4      p. pKc  V'       g   Km  VP                  V4       K  	  V'       d   WuV&   R!V9   d1   VR!,          '       d"   VR!,          ^ ,          P                  4       VR&   R"V9   dp   \        VR",          4      ^8  dY   \        VR",          ^ ,          4      VR
&   \        VR",          4      ^8  d   \        VR",          ^,          4      MVR
,          VR	&   R#V9   d   VR#,          '       d   VR#,          ^ ,          p	V	P                  4       p
\        V
4      ^8  dl   \        V
^,          4      p\        V
^,          4      p\        VRf,          ^4      VR&   \        VRf,          ^4      VR&   \        W,          ^d,          4      VR&   R$V9   Ed   VR$,          '       Ed   / pVR$,           Fi  pVP                  R%4      p
\        V
4      ^8  g   K&  V
^ ,          P                  4       p\        \         P"                  ! R&R V
^,          4      4      pVW&   Kk  	  VP%                  R'R(4      pVP%                  R)VP%                  R*R4      VP%                  R+R4      ,           VP%                  R,R4      ,           4      pVV,
          p\        VRf,          ^4      VR&   \        VRf,          ^4      VR&   \        W,          ^d,          4      VR&   . pV P&                  '       Ed    R-V P&                   R.2pV P	                  V4      w  ppV'       Ed   R/V9   Ed   VP                  R/4      p^pVR0,           EFd  pVP                  R4      p/ pV FB  pR%V9   g   K  VP                  R%^4      w  ppVP                  4       VVP                  4       &   KD  	  VP%                  R1R 4      pV'       g   K{  VR28w  g   K  R1V9  g   K  VP%                  R3R4V 24      pVP%                  R5R64      pVP%                  R7R 4      pV'       d   VR88w  d   V R9V R:V 2p MV R9V 2p VP%                  R;R<4      p!VP%                  R=R<4      p"TP                  R>R4V R?V R@2RAT RBV!'       d   V!P                  4       MR<RCV"'       d   V"P                  4       MR</4       V^,          pEKg  	  V'       g   VR,          p$V$RE8:  d   R>RFRARGRBRRCR/R>RHRARIRBRIRCRI/.pM^V$RJ8:  d   R>RFRARKRBRRCR/R>RHRARIRBRIRCRI/.pMBV$RL8:  d   R>RFRARMRBRRCR/R>RHRARMRBRRCR/.pM&R>RFRARNRBRRCR/R>RHRARIRBRIRCRI/R>RORARNRBRRCR/R>RPRARIRBRIRCRI/.pVVR&    V P	                  RQ4      w  p%pV%'       d   V%P                  R4       Uu. uF*  qP                  4       '       g   K  VP                  4       NK,  	  pp\        V4      ^8  d   VR0,           F  pRRV9   d   K  VP                  4       p&\        V&4      ^8  dB   V&Rg,          P                  4       VR&   R9P-                  V&RRg 4      P                  4       VR&    M0\        V&4      ^8X  g   K  V&^ ,          P                  4       VR&    M	  RTV9   d   VRT,          '       d   VRT,           F  pVP                  R^4      p
\        V
4      ^8  g   K'  V
^ ,          P                  4       P/                  4       '       g   KT   VR,          P                  RUV
^ ,          R>V
^,          R\        V
^,          4      RVV
^,          RW,           /4       K  	  RXV9   Ed}    VRX,           Uu. uF  qP                  RY4      '       g   K  VNK  	  up^ ,          p'V'P                  4       R0,           U(u. uF  p(\        V(4      NK  	  p)p(\3        V)RZ,          4      p*V)^,          V)^,          ,           p+\4        P4                  ! 4       p,V P6                  R[,          p-\9        V R\4      '       dw   V P:                  R[,          R8  d_   V*V P:                  R],          ,
          p.V+V P:                  R^,          ,
          p/V.^ 8  d$   \        ^dR_V/V.,          ,
          ,          4      VR&   R[V,R]V*R^V+/V n         VRX,           Uu. uF&  qP                  RY4      '       d   K  R%V9   g   K$  VNK(  	  p0pRa p1V1! V04      w  p2p3\4        P4                  ! 4       p,V P6                  R[,          p-V-R8  d   V,V-,
          p4V4^ 8  dy   V2V P6                  Rb,          ,
          V4,          p5V3V P6                  Rc,          ,
          V4,          p6V5^ 8  d0   V6^ 8  d)   V P=                  V54      VR&   V P=                  V64      VR&   V,V P6                  R[&   V2V P6                  Rb&   V3V P6                  Rc&   V#  V#   \(         d   p#\+        RDT# 24        Rp#?#ELRp#?#ii ; iu upi   \(         d   p#\+        RST# 24        Rp#?#ELRp#?#ii ; i  \0         d     EK  i ; iu upi u up(i   \(         d   p#\+        R`T# 24        Rp#?#ELRp#?#ii ; iu upi   \(         d   p#\+        RdT# 24        Rp#?#T# Rp#?#ii ; i  \(         d   p#\+        ReT# 24        Rp#?#T# Rp#?#ii ; i)hzQMengambil info lengkap metrik server Linux/Windows via SSH dengan query gabungan.r   r   linuxro   rp   rq   rJ   zRemote Linux CPUrK   rL   rr   r   rM   rV   rN   rs   rO   g      T@rP   rQ   rR   rt   ru   rv   rw   a  echo '===CPU_MODEL==='; cat /proc/cpuinfo | grep -m 1 'model name' | cut -d: -f2-;echo '===CORES==='; grep -c '^processor' /proc/cpuinfo; grep -m 1 'cpu cores' /proc/cpuinfo | cut -d: -f2-;echo '===DISK==='; df -P / | tail -n 1;echo '===MEM==='; cat /proc/meminfo | grep -E 'MemTotal|MemAvailable|MemFree|Buffers|Cached';echo '===PROC==='; ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 7;echo '===TRAFFIC==='; cat /proc/stat | grep '^cpu '; cat /proc/net/dev;echo '===END==='FTN
z=== 	CPU_MODELCORESDISKMEM:z[^0-9]MemTotalg      PAMemAvailableMemFreeBuffersCachedzecho 'z+' | sudo -S dmidecode -t memory 2>/dev/nullzMemory Device:   NNSizezNo Module InstalledLocatorr`   TypeDDR4rb   r    z @ zPart Numberrd   zSerial Numberrf   z ()rg   ri   rj   z Error parsing dmidecode memory: r   r   z	4 GB DDR4r   rk   gffffff @z	8 GB DDR4g3333330@z8 GB DDR4 @ 2666MHzz
16 GB DDR4r   r   zlsblk -d -o MODEL,SERIALMODELz"Error parsing lsblk disk details: PROCr   r   z %TRAFFICzcpu :N   Nr   r   r
   r   g      ?zError parsing CPU Linux: c                    ^ ^ r!V  F  pVP                  R^4      p\        V4      ^8  g   K'  V^ ,          P                  4       pVR8w  g   KG  \        P                  ! RV4      '       d   Kf  V^,          P                  4       p\        V4      ^	8  g   K  V\        V^ ,          4      ,          pV\        V^,          4      ,          pK  	  W3# )r   r   loz.docker|veth|br-|virbr|vmnet|vboxnet|vfb|tunnel)splitr   r@   researchr   )linessum_rxsum_txlpartsifnamefieldss   &      r   sum_net_bytes9ServerController.get_server_status.<locals>.sum_net_bytes  s    )*A!&A$%GGCOE"5zQ).q)9#)T>"))Duw}:~:~-21X^^-=F'*6{a'7(.#fQi.(@(.#fQi.(@ "'  &~-r   r   r	   zError parsing network traffic: z Error parsing SSH metrics core: r   r   )r   r   r   r   rF   r   r   r@   
startswithendswithreplacer   r   r   r   r   r   subr   r   r.   r   r   isdigit
ValueErrorsumr   r   r   r   r   )7r   r   compound_cmdraw_out_sectionscurrent_sectioncurrent_linesline	disk_liner  r   r   mem_mapr  rf   valavailable_kbrN   cmd_dmidecodedmi_outdevices_raw
slot_index	dev_blockr   dev_infokvsizelocatorm_typer   rg   r   r   r4   r_totdisk_outwordscpu_liner   c_partsr
   r   r   r   
diff_total	diff_idle	dev_linesr  r   r	   r   r   r   s7   &                                                      r   get_server_status"ServerController.get_server_status-  s   {*--//())++<<7"--//	
1	
Q	
 &	
+	
-8!	
=JA	
 3	
 !/	
 6A"	
 C		
 "1$		

 	
 !%	
 '	
 $1'	
 	
 	 )),7
 %DN _	:H"OMd+zz|??5))dmmE.B.B&4A1&*ll5"&=O$&Mt%,,T2 , ,9) h&8K+@+@'/'<Q'?'E'E'G$ ("s8G+<'='B),Xg->q-A)B&DGQXHYDZ^_D_s8G+<Q+?'@elmze{$ !hv&6&6$V,Q/	!)u:?$U1XH#E!HoG/4X5KQ/OGO,.3Gy4I1.MGN+&)7+=*D&EGFO  Xe__!%AGGCLE5zQ$Qx~~/#BFF9b%($CD(+ ) #;;z9=&{{>7;;yRU;VY`YdYdenpsYt;tw~  xC  xC  DL  NQ  xR  <R   S"\1*/I0F*J').w)/Da)H&!$g&8C%?!@ 	===#F*0?j(k%)%9%9-%H
"7''A*1--*HK)*J-8__	(1(=+-,1D'*d{/3zz#q/A1>?ggi(; -2
 (0||FB'?#'4D4I,If\`N`.6ll9j\FZ.[G-5\\&&-IF,4LL",EE',)1C4866(#eW1M4866(1C)1m_)UB)1o)WB$-$4$4(.%
|2gYa0P(0&(5Rrxxz_(7r	6& %' %/!OJ7 .=> !#N3E|#XxmUZ\kmrs#Xx=RZ\kmuv%	 ##XxmUZ\kmrs#Xx=RZ\kmuv%	 $#Xx9NP]_dfuw|}#Xx9NP]_dfuw|}%	 $Xx}V[]lnst#Xx=RZ\kmuv#Xx}V[]lnst#Xx=RZ\kmuv	%	 (1$D"&"6"67Q"RKHa4<NN44H V4HqGGI4H Vu:?(-b		#*d?$,(,

#&u:?DI"IOODUG,@$ABE((5QTRT:BVB\B\B^G,>$?$)%(Z1_BG(..BRG,>$?$) )2 !hv&6&6$V,,D JJtQ/E5zQ$Qx~~/7799$%#K077 %uQx &a %uU1X %uQx$	9  -" H$;+3I+>W+>a,,vBV+>WXYZH191A"1EF1EAuQx1EGF,E"1:
2D#yy{H $ 1 1& 9I tZ00T]]65JS5P%*T]]7-C%C
$(4==+@$@	%>-0y:?U8V1W-XGEN%+Xwvt$TDM"A,4Y,? i,?q||TZG[`cgh`h,?I i. +95FB#yy{H $ 1 1& 9I 3#+i#7#a<(*T->->t-D(D'PH(*T->->t-D(D'PH'1}Q8<8O8OPX8Y 59=9P9PQY9Z 608D%%f-.0D%%d+.0D%%d+ { %z E % F @DEEFD !W ! D>qcBCCD$  * %$%  XF  ! ;5aS9::;
 !j> ! A;A3?@@
 A  	:4QC899	:s  An n $n n %n ?B,n ,B2n ,n Dn ,k Ak Ak +k 4k =A k >Ak k 4%k n !Bn *k8 k8 k35k3	Bk8 n k8 #k8 >n ?k8 n +n *n 2n 5Aln l< l26l2<#l< l73C(l< m( 'm#m#m#C4m( k0k+%n +k00n 3k8 8lln ln l/*n .l//n 2
l< <m mn m  n #m( (n3nn nn n3n..n3c           
        . R#OpVP                  4       P                  4       pV'       d   VP                  4       ^ ,          MRpWB9  d   RV RR	P                  V4       R
2# VR8X  dn   V P                  R8H  ;'       g'    V P                  R8H  ;'       d    V P
                  R8H  pV'       d   RV9  d
   VR,          pMRV9  d   RV9  d
   VR,          pV P                  R8X  da   RV9   d4   RVP                  4       R$,           RVP                  4       R$,           R2# RV9   g   RV9   g   RV9   d   R# RV9   d   R# RV R2# V P                  R8X  d    Rp\        P                  R8X  d=   \        P                  ! 4       pV;P                  \        P                  ,          un
        \        P                  ! VR\        P                  \        P                  RVRR7      pVP                  ;'       g    VP                  ;'       g    R # V P#                  V4      w  rT	;'       g    T
;'       g    R"#   \          d   pR!T 2u Rp?# Rp?ii ; i)%z=Menjalankan perintah terminal kustom secara aman pada server.r!   dfuptimedirlsr   zError: Perintah 'z<' diblokir demi keamanan. Anda hanya diizinkan menggunakan: z, .r   r   r   z-cz -c 4r"   z-tz -n 4zPinging z# dengan 32 byte data:
Balasan dari z: bytes=32 waktu=5ms TTL=64zFilesystem     Size  Used Avail Use% Mounted on
/dev/sda1       960G  748G  212G  78% /
tmpfs          16G     0   16G   0% /dev/shmzF 08:29:12 up 14 days,  2:04,  2 users,  load average: 0.15, 0.12, 0.08zSimulasi Terminal: Perintah 'z+' berhasil dieksekusi dengan kode keluar 0.r   NrS   Tr:   )shellr%   r&   rW   rX   r    z+Perintah selesai dijalankan tanpa keluaran.r'   z#Gagal mengeksekusi perintah remote.)r!   r/  freer0  uname
systeminfor1  r2  netstatipconfigifconfigr   )r@   r   r   r   r   r   r   rf   r/   r   r   r   r0   PIPEr%   r&   r.   rF   )r   rB   allowed_keywords	clean_cmdbase_cmdis_linuxrX   r6   r4   r%   r&   s   &&         r   execute_command ServerController.execute_command:  sO    CMMO))+	+49??$Q'"+&xj0lmqmvmv  xH  nI  mJ  JK  L  L v((K7ssT=M=MQV=V=r=r[_[g[gkr[rHy(w&Gy(T-Bw&G{*"!'--/""5!66Z[b[h[h[jkm[nZo  pK  L  L"ey&8DI<M `Y&_6wi?jkkw&%"77d?","8"8":K'':+J+JJ' nn%??%??'+ + zz``SZZ``3``
 --g6HHHH#HH  % }$%s+   BH8 8H8 H8 8IIII)	r   r   r   r   r   r   r   rI   r   N)r   r   r   r   r   )__name__
__module____qualname____firstlineno____doc__r   r7   rF   r   r   r   r,  r@  __static_attributes____classdictcell__)__classdict__s   @r   r   r      s=     i
=)(V 0Yv?.
`KZ4I 4Ir   r   )r   r   r/   r   r   r   r   r   r   r   <module>rJ     s%    	 	    f	I f	Ir   