51 lines
1.5 KiB
PL/PgSQL
51 lines
1.5 KiB
PL/PgSQL
-- neúspěšný běh plánovače bez aktivace a bez supersede aktivního plánu
|
|
|
|
create or replace function ems.fn_planning_run_fail(
|
|
p_site_id int,
|
|
p_horizon_start timestamptz,
|
|
p_horizon_end timestamptz,
|
|
p_run_meta jsonb
|
|
)
|
|
returns int
|
|
language plpgsql
|
|
as $fn$
|
|
declare
|
|
v_run_id int;
|
|
begin
|
|
insert into ems.planning_run (
|
|
site_id, horizon_start, horizon_end, status,
|
|
run_type, triggered_by, replan_from,
|
|
soc_at_replan_wh, solver_duration_ms, forecast_correction_factor,
|
|
solver_params, error_text
|
|
) values (
|
|
p_site_id,
|
|
p_horizon_start,
|
|
p_horizon_end,
|
|
'failed',
|
|
nullif(trim(p_run_meta->>'run_type'), ''),
|
|
nullif(trim(p_run_meta->>'triggered_by'), ''),
|
|
case
|
|
when p_run_meta ? 'replan_from' and (p_run_meta->>'replan_from') is not null
|
|
and (p_run_meta->>'replan_from') <> 'null'
|
|
then (p_run_meta->>'replan_from')::timestamptz
|
|
else null::timestamptz
|
|
end,
|
|
(p_run_meta->>'soc_at_replan_wh')::numeric,
|
|
coalesce((p_run_meta->>'solver_duration_ms')::int, 0),
|
|
coalesce((p_run_meta->>'forecast_correction_factor')::numeric, 1.0),
|
|
case
|
|
when p_run_meta ? 'solver_params' and jsonb_typeof(p_run_meta->'solver_params') = 'object'
|
|
then p_run_meta->'solver_params'
|
|
else null::jsonb
|
|
end,
|
|
nullif(trim(p_run_meta->>'error_text'), '')
|
|
)
|
|
returning id into v_run_id;
|
|
|
|
return v_run_id;
|
|
end;
|
|
$fn$;
|
|
|
|
comment on function ems.fn_planning_run_fail is
|
|
'Uloží planning_run se statusem failed; neaktivuje plán a nesupersededuje active.';
|