feat: Stream real-time status updates during equipment processing, enhance prediction robustness by validating asset data, and remove `await` from EAC calculation calls.

rest-api
MrWaradana 1 month ago
parent 9e9b526d46
commit 151489a642

@ -82,12 +82,17 @@ async def simulate_equipment(db_session: DbSession, assetnum: str):
""" """
async def event_generator(): async def event_generator():
# notify start of checking
yield f"data: {json.dumps({'status':'started','step':'checking update','message':'Checking and updating initial data'})}\n\n"
try: try:
await update_initial_simulation_data(db_session=db_session, assetnum=assetnum) await update_initial_simulation_data(db_session=db_session, assetnum=assetnum)
yield f"data: {json.dumps({'status':'completed','step':'checking update','message':'Initial data check completed'})}\n\n"
except Exception as e: except Exception as e:
# Log error but proceed? Or maybe yield an error? # Log error but proceed? Or maybe yield an error?
# For now, we proceed as this is an enhancement check. # For now, we proceed as this is an enhancement check.
print(f"Update simulation data failed: {e}") print(f"Update simulation data failed: {e}")
yield f"data: {json.dumps({'status':'error','step':'checking update','message':f'Update simulation data failed: {str(e)}'})}\n\n"
# notify start of prediksi # notify start of prediksi
yield f"data: {json.dumps({'status':'started','step':'prediksi','message':'Starting prediksi'})}\n\n" yield f"data: {json.dumps({'status':'started','step':'prediksi','message':'Starting prediksi'})}\n\n"
@ -106,7 +111,7 @@ async def simulate_equipment(db_session: DbSession, assetnum: str):
yield f"data: {json.dumps({'status':'started','step':'eac','message':'Starting EAC calculation'})}\n\n" yield f"data: {json.dumps({'status':'started','step':'eac','message':'Starting EAC calculation'})}\n\n"
try: try:
eac = Eac() eac = Eac()
hasil_eac = await eac.hitung_eac_equipment(assetnum=assetnum) hasil_eac = eac.hitung_eac_equipment(assetnum=assetnum)
except Exception as exc: except Exception as exc:
yield f"data: {json.dumps({'status':'error','step':'eac','message':str(exc)})}\n\n" yield f"data: {json.dumps({'status':'error','step':'eac','message':str(exc)})}\n\n"
return return
@ -157,7 +162,7 @@ async def simulate_all_equipment(db_session: DbSession):
await prediksi_main(assetnum=assetnum) await prediksi_main(assetnum=assetnum)
# EAC # EAC
eac = Eac() eac = Eac()
await eac.hitung_eac_equipment(assetnum=assetnum) eac.hitung_eac_equipment(assetnum=assetnum)
success_count += 1 success_count += 1
except Exception as e: except Exception as e:
error_count += 1 error_count += 1

@ -711,9 +711,13 @@ class Prediksi:
return return
# Mendapatkan tahun proyeksi dari DB # Mendapatkan tahun proyeksi dari DB
par_tahun_target = self.__get_param(assetnum) par_tahun_target = self.__get_param(assetnum)
if par_tahun_target is None:
raise ValueError(f"Asset {assetnum} not found in master data (lcc_ms_equipment_data).")
# Tahun proyeksi # Tahun proyeksi
future_years = list(range(df["year"].max() + 1, par_tahun_target + 1)) current_max_year = int(df["year"].max()) if not df.empty and not pd.isna(df["year"].max()) else 2024
future_years = list(range(current_max_year + 1, int(par_tahun_target) + 1))
print("future_years", future_years) print("future_years", future_years)
# Hasil prediksi # Hasil prediksi
predictions = {"year": future_years} predictions = {"year": future_years}

Loading…
Cancel
Save