|
|
|
@ -323,6 +323,13 @@ def _availability_percent(value: Any) -> float:
|
|
|
|
return availability
|
|
|
|
return availability
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _availability_fraction(value: Any) -> float:
|
|
|
|
|
|
|
|
availability = _as_float(value, 0) or 0
|
|
|
|
|
|
|
|
if abs(availability) > 1:
|
|
|
|
|
|
|
|
availability /= 100
|
|
|
|
|
|
|
|
return availability
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _get_number(data: dict, keys: list[str], default: float = 0) -> float:
|
|
|
|
def _get_number(data: dict, keys: list[str], default: float = 0) -> float:
|
|
|
|
for key in keys:
|
|
|
|
for key in keys:
|
|
|
|
if key in data and data[key] is not None:
|
|
|
|
if key in data and data[key] is not None:
|
|
|
|
@ -332,6 +339,11 @@ def _get_number(data: dict, keys: list[str], default: float = 0) -> float:
|
|
|
|
return default
|
|
|
|
return default
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _result_number(value: Any, default: float = 0) -> float:
|
|
|
|
|
|
|
|
parsed = _as_float(value)
|
|
|
|
|
|
|
|
return default if parsed is None else parsed
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _ramp_model_id_from_sim_data(sim_data: dict) -> str | None:
|
|
|
|
def _ramp_model_id_from_sim_data(sim_data: dict) -> str | None:
|
|
|
|
model_id = (
|
|
|
|
model_id = (
|
|
|
|
sim_data.get("RampModelId")
|
|
|
|
sim_data.get("RampModelId")
|
|
|
|
@ -527,9 +539,11 @@ def _calc_result(
|
|
|
|
total_uptime = _get_number(metrics, ["total_uptime", "system_uptime", "uptime"])
|
|
|
|
total_uptime = _get_number(metrics, ["total_uptime", "system_uptime", "uptime"])
|
|
|
|
total_downtime = _get_number(metrics, ["total_downtime", "system_downtime", "downtime"])
|
|
|
|
total_downtime = _get_number(metrics, ["total_downtime", "system_downtime", "downtime"])
|
|
|
|
period_hours = total_uptime + total_downtime
|
|
|
|
period_hours = total_uptime + total_downtime
|
|
|
|
availability = _availability_percent(_first_present(metrics, "availability", "system_availability", "production_availability"))
|
|
|
|
availability_source = _first_present(metrics, "availability", "system_availability", "production_availability")
|
|
|
|
|
|
|
|
availability = _availability_fraction(availability_source)
|
|
|
|
if not availability and period_hours:
|
|
|
|
if not availability and period_hours:
|
|
|
|
availability = total_uptime / period_hours * 100
|
|
|
|
availability = total_uptime / period_hours
|
|
|
|
|
|
|
|
eaf = _availability_percent(availability)
|
|
|
|
efor = total_downtime / period_hours * 100 if period_hours else 0
|
|
|
|
efor = total_downtime / period_hours * 100 if period_hours else 0
|
|
|
|
|
|
|
|
|
|
|
|
production = _get_number(metrics, ["production", "total_productions", "total_production", "actual_production"])
|
|
|
|
production = _get_number(metrics, ["production", "total_productions", "total_production", "actual_production"])
|
|
|
|
@ -571,16 +585,19 @@ def _calc_result(
|
|
|
|
stg_output=0,
|
|
|
|
stg_output=0,
|
|
|
|
average_level=0,
|
|
|
|
average_level=0,
|
|
|
|
potential_production=ideal_production,
|
|
|
|
potential_production=ideal_production,
|
|
|
|
eaf=availability,
|
|
|
|
eaf=eaf,
|
|
|
|
efor=efor,
|
|
|
|
efor=efor,
|
|
|
|
derating_hours=effective_loss,
|
|
|
|
derating_hours=effective_loss,
|
|
|
|
beta=reliability.get("beta"),
|
|
|
|
beta=_result_number(reliability.get("beta")),
|
|
|
|
eta=reliability.get("eta"),
|
|
|
|
eta=_result_number(reliability.get("eta")),
|
|
|
|
mttr=reliability.get("mttr"),
|
|
|
|
mttr=int(_result_number(reliability.get("mttr"))),
|
|
|
|
parameters=parameters or reliability.get("parameters"),
|
|
|
|
parameters=parameters or reliability.get("parameters") or {},
|
|
|
|
contribution=_get_number(metrics, ["contribution"]),
|
|
|
|
contribution=_get_number(metrics, ["contribution"]),
|
|
|
|
criticality=_get_number(metrics, ["criticality"]),
|
|
|
|
criticality=_get_number(metrics, ["criticality"]),
|
|
|
|
contribution_factor=_get_number(metrics, ["contribution_factor"]),
|
|
|
|
contribution_factor=_get_number(metrics, ["contribution_factor"]),
|
|
|
|
|
|
|
|
total_mo_downtime=_get_number(metrics, ["total_mo_downtime"]),
|
|
|
|
|
|
|
|
total_po_downtime=_get_number(metrics, ["total_po_downtime"]),
|
|
|
|
|
|
|
|
sof=_get_number(metrics, ["sof"]),
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|