From 75bec015ea5782166c62c14f1bc664cd07556589 Mon Sep 17 00:00:00 2001 From: MrWaradana Date: Tue, 10 Feb 2026 18:25:36 +0700 Subject: [PATCH] feat: Add token parameter to simulation endpoints and remove sign-in retry logic from Prediksi module. --- .../__pycache__/router.cpython-311.pyc | Bin 16530 -> 16625 bytes src/equipment/router.py | 8 ++++---- src/modules/equipment/Prediksi.py | 12 +++--------- .../__pycache__/Prediksi.cpython-311.pyc | Bin 50439 -> 50257 bytes 4 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/equipment/__pycache__/router.cpython-311.pyc b/src/equipment/__pycache__/router.cpython-311.pyc index 7b7a0fbe53092d282b9f001928848baa2e3781e5..e3329aa1a3dd2c6a9f9ab90279bfac8db1799779 100644 GIT binary patch delta 1538 zcmZvcT})I*6oBX4pJjnAps>sGv#`4?;Bprbz7aBEC zmTDB#2zW%Aimg_IDNvhwAJp_g8&KOOO(6B5?n58?&@?7C8k@#6edwIsifz-`Ip3Z+ zGiQFznYpJ2;mIIau2?K_jFF&@1ZQ}D~`F{+T!(5)WavWpF;Fz$10h?e$ zFvNz0c2R{R=6+EX_)kRH-6V*=|Fr?~$NmuOLiK55oG#aEhHTFppI zC+ zC8nwA!=`gg%{VXi$!aF2sq1XB< zY(?EVSrZ!uP2bALg+=W^o8CkoJE>`I>+agKFQBQ>SxO^QaRg&IoRJd3dYc~(8l$#f zz;U~N!Qo$Y`0qRX3#tFD2HMXGg{id)n^WTIeBxZWuP$Gl&zHG=r`prtVs~9}jc)O- z;%jt>_Z)Jg8@FfNbIN*T-RL=J2knIYv<;b~6)Q8d65iq3Ml$tsJi|Sig*cqqjFT3R z$diV1mMyr$5j2(ZxQ`3QqGL0_x9G|qm4;(ym-A?+<9FFrj^uw|K;Riv;}2OF>laTR z#vErQPsA=~HdralaXXpH`r$n|Ifs{=-eo*DeIn0QEFwh^}DMVANO#JjGth88mHA~X};;s}eK zS|A*&1$w(QeRq$h=Tc8AA)l~^!y6Zl-5m^SJ$z75Z^O0j5>F((FH%XbGMY-KGZfO- zkZU`RxU1l%@r`>BoHv>lY_*HF+WWTJg{1$f#$Hb)*i!2hVP1)=Un$R*m((lr9Yy9k z-paKWchHobgaCmS^h(i?_{s1hpZpc@d_K)}C4{(kic64Oo}nu*&sdk&0dNFA%l{SL z$H^6Aa1@KYKXct$FaSe1UT_(X<7&kXC$L3%MQ9VyyJ7=AR*Jxn*}e^&9li!QWnA+O z0*n}CMOjcZ!e@_${WNJc1SFgxj1$fhCI}y3s5l)y#B;?>aKU&|JOQSQWcTB#lJ)Ts z^^<7(r;?R$#YipNuVsnLY{n-+rI3S`C-+;i|l(e|S^>6gtcDVA^ObdjRqD z0SSv;!MF7>R4U#uQJaq#s>p$>I9u^M?7~ZxkDwLDUY;4Co1w2K(38+Zgd>EbgdxHS z0tHvUz!8@AcL#g)E7YDQTqPVQtR>Ke_`_V?)vfk+YHRdcya`-_znK_&ECRp}%(t*q YjW4Sn3c}a9_;K}G;YP3Vp!%lx7sq*lTmS$7 delta 1480 zcmZvbdrVtZ9LLY^K1u-#<N?)iQ4J-_oi z_uTvYowGayr-nfHhE5kpXuG#_tg~uTmky5EH5HuDE=XzU<2t3%VZ-q3Yqvjmj_myroOCy`D|ztJYdH|92gNqXQE!Xy#bAczK^{g4Zn8A0&V)kHTonj;kyBd|uYmSaLiCf+zRsZLB{c&i z;0wufkb+eyEn=!wDl)dCG@H00to!=tbr(J)o24TG#~r~e=3<>wA4JE&52v7z=rplg4p zUzU`O%vVGa)Kb_Y4SmLK@T@v#T!PF6OU0t4;+Cai!Svs*zLR#E%QaTH$u)OewTHh} z?5%e4^G=cK>ksE_v5_0LxEecu!|kmx^Eb_6jU5LvZ)OOQ{h~WdYQyV+_A zP*Kl3%)PR*M3%@Pxs!}{bl2_}O zim|pb%l+|ROM!%VDZW=nNFRTE7+YRYa$ZqgMK*vK7MU;#nOU@ zcv@ByCfPmuv<4SMQ&UIZs5D}o-TuH%Dtm=yf3shy$LH-k^bKq-Qnf0k9>?4E9N3L9 zj$-{D=4fJgilGH-9qE?6Os-+rN8ySM$F>E7a<{*yE2y;LkfYEVITn#45KAMXN5Ezq zR4Umb2|sa^!JMkk9s=uvv1HL$a?4n-DVdb&A{L1f>wd-v)LkF6E+4ryLxXAGv7}yrk+)px9!Eg#^^Ue5Cz6oB& z@AIF8bLxhIGoU%o=Em{M!maTU`D%1rSX2Ph>i(iZFi$W~HHGW`g}A^R=NZQFk9Fnn z8kQA1^$|yOHJiGCfnq0IR8JRw4)JeNPnhotb|@3rTe3^T#x&y7l5Dt)_ey?&CcInv zBkaX*9-0|wVUt@K*bR%MOc`csgyAT|7{dvMa};6WP$1Z?u$?I{k58^tuF@g9S;22Lgxui);4|V~Sna4QPf*j!zu@q<_2p`1h06a4%TaqF diff --git a/src/equipment/router.py b/src/equipment/router.py index 6c5583f..258b0fb 100644 --- a/src/equipment/router.py +++ b/src/equipment/router.py @@ -75,7 +75,7 @@ async def get_maximo_record_by_assetnum(db_session: CollectorDbSession, assetnum ) @router.get("/simulate/{assetnum}") -async def simulate_equipment(db_session: DbSession, assetnum: str): +async def simulate_equipment(db_session: DbSession, assetnum: str, token: Token): """Stream progress events while running the simulation (prediksi + EAC). This endpoint returns Server-Sent Events (SSE). Each event's `data` is @@ -98,7 +98,7 @@ async def simulate_equipment(db_session: DbSession, assetnum: str): yield f"data: {json.dumps({'status':'started','step':'prediksi','message':'Menghitung prediksi'})}\n\n" try: - prediksi = await prediksi_main(assetnum=assetnum) + prediksi = await prediksi_main(assetnum=assetnum, token=token) except Exception as exc: # send error event and stop yield f"data: {json.dumps({'status':'error','step':'prediksi','message':str(exc)})}\n\n" @@ -140,7 +140,7 @@ async def simulate_equipment(db_session: DbSession, assetnum: str): @router.get("/simulate-all") -async def simulate_all_equipment(db_session: DbSession): +async def simulate_all_equipment(db_session: DbSession, token: Token): """Run simulation (prediksi + EAC) for ALL equipment. Returns SSE stream of progress. """ @@ -167,7 +167,7 @@ async def simulate_all_equipment(db_session: DbSession): await update_initial_simulation_data(db_session=db_session, assetnum=assetnum) # Prediksi - await prediksi_main(assetnum=assetnum) + await prediksi_main(assetnum=assetnum, token=token) # EAC eac = Eac() eac.hitung_eac_equipment(assetnum=assetnum) diff --git a/src/modules/equipment/Prediksi.py b/src/modules/equipment/Prediksi.py index 8ccf4c9..564325c 100644 --- a/src/modules/equipment/Prediksi.py +++ b/src/modules/equipment/Prediksi.py @@ -587,7 +587,7 @@ class Prediksi: self.refresh_token = d.get("refresh_token") return data except httpx.HTTPError as e: - print(f"Sign-in failed: {e}") + print(f"Sign-in failed for URL {self.AUTH_APP_URL}/sign-in: {type(e).__name__} - {e}") # Try to sign out if sign-in failed try: signout_url = f"{self.AUTH_APP_URL}/sign-out" @@ -595,14 +595,8 @@ class Prediksi: await client.get(signout_url, timeout=10.0) print("Signed out due to sign-in failure.") except Exception as signout_exc: - print(f"Sign-out failed: {signout_exc}") - # Try to sign in again - try: - signin_res = await self.sign_in() - if self.access_token: - return signin_res - except Exception as signin_exc: - print(f"Sign-in failed after sign-out: {signin_exc}") + print(f"Sign-out failed for URL {self.AUTH_APP_URL}/sign-out: {type(signout_exc).__name__} - {signout_exc}") + return None async def refresh_access_token(self) -> str: diff --git a/src/modules/equipment/__pycache__/Prediksi.cpython-311.pyc b/src/modules/equipment/__pycache__/Prediksi.cpython-311.pyc index 6f1e6d78f5d416ec868ae3baf9485838f504cc8d..c8d25eb97c8b7b24c9656b5d0c914eb70e304388 100644 GIT binary patch delta 1072 zcmZuwZAep57(QorSKZy5Q>HU3TWICdxk*9HK26)~0}8Dl6?L2Ks@IRJ-OV4`%s#0M zDmYMxMj>T^7S(}_hF~^lMadoP*GTB6{ac?zL3HlDEmC{Wd*1hXpZ7iA_nz;iq8BLR z-Sl(@5Gl#N#P^LpGQRWa<@gNgpEX+4lbwV0+z(hIe(g>TERri#@#%t~iAqNOz{dm@ zCnErYsY4KeVbWD;GA0qJ)CW`h!HpEOtYJAcpo)fCDt*L=t~a!KGUkqgKyVj;Kz?#8 z0EIwwb?fHr!!&OnnSsTKd7NjSx1>&4vZ8S{%H)^AEbQPREV9({4T7B)to2^Lh4WeK z+eGWWnqAf|#^F~p<<>6BYDZg|DvENI;!f@-~5O;Y7nn+ZK>Vl8oPptGHer?ITy zZRJ>2EGCDrF=$0|RfS)^VC!EImy$4^Dlf?LLYHZe$ocqYKVSNXacKbX50a~%CG8|g zFnM^qc?f#+y4(avni)f;l;yow6)V|DJkhu2m)=*FHpY1)Wr;SlA$i4 zO-b*D_)4o2_H@GpfFx4wj44~nIsVWbE89vu(YFCEuql@HFGF}8_oTu<5kkm))jK@hw);T=I^wdh4FjK`eVWymvj9s*66Xx2(+LTFh z)nWuWIu64F_;QC<2VWy}!UiYN*a-o4;*y@}Gf6pVS`3qk(CHCB8UJl$#<7ehZ$Zqhqlz1^RGf5>Rs4Lj6>A=x(!mYr?C3Sk zFA6VtdQL+o8hqAkh%@r5^8zb!epD7(58bFWRH&~cf09@wn{8+yR1Bx_%MeW$iZ7H; z$H&!sJ6Zy9Z6nvxZi8Z!u(mZ~u6)>P{AqkA)Pw=rJkbgTe1BpGbRILp(ggUw{iyI? M{>?U`RpIx)0j@JkfB*mh delta 1193 zcmZuvZ)jUp6u;-ayd>}C&)!SgtXr2ZG}&q_tJ&10&ANi-&*B8Pu@5o^rlEOD)7nH| zQZ`4@C^$9?Lgj)WIIMqggKdI5(XQKvmZWL?vc0k}OIe`|rhYR8!J!}Y-pokbdG6tN z&i&nUe(!MaTe`$voMf$6EEWL~JNocK>iL;(tq&6Tc7|sT>Tt2up_=4B!7&AjwP48Y zpk+@i!RHP5#9#|fCM8a|%oL3H?}Q(JmuzEA*Uk8DG6NPI?`++@v)O@=2PwM>{3aDE zJ~rsUrQw}=9_7)r6~`T&_^fOR3VAfbH(M1$UKnCdp#&5R6NZy0?RBHvR$wEGoEX*uJgM$ z*SX?naW@aCx`k4@Y96(oN=FF;G61N_)+i9Syy{BG7#*9aH4&f4O{aC~GFg zt_`L*389n-oEMKPaw0XFP4)b%)yE)|U1t&cm8^GBU2v(FM!yEH#J8;@0(A zGkt;p@g=jjX7*}kZ(XOi^r_=xJ}CCp5m=tUs@SSI{8zgP5ML5|YhthVls_g`XGsr@ zdd?DoWp~$={xAAJANXoObMD{bQ^K-+d(G}4pON-1x9`zfHhGckiJG+c@gw^#I!XjK zVq>JxjG#F}#FxZyO$=*Kd2^%)kZjGqed>kgYMi*qMUW(WlicI`JAwgp`DK5wi!HU- zf&qLm(_R##ZERVvMeS_a>5fRu0_q6+xP=ZI&3!^Rz%K+?njZ$54^X}$0;#V^Ld4Hi z+HH{oTxB0enFAbU{4C86bsq6Bi%uZ=i*8!K=nQ6Zx4<-Dd;Ds{QPo$x!j!)b%!ZkH?abAM^s{WH_Sy)r| ze_CVUH&y@Hqz>lQkG}L7g%x8gmX43fu^6sg%My{m_0{M0aOC$OFg?@=bHPT?PRAN? zE4-#gZoJ3CVO;(GV@9V_2Y*8#7n{d2DZ(+l{6`7y|-f6N~R-&rg4)Y1RrdV~Lc<7p1RU0VAG D&oFP?