DO $check14$
DECLARE
v_base varchar(255);
v_cookies text;
v_step record;
v_metadata text[];
v_params json;
v_response bytea;
v_text text;
v_json json;
v_stack json[];
v_sid text := uuid_generate_v4()::text;
BEGIN
SELECT web_base INTO v_base
FROM tools.settings
LIMIT 1;
v_cookies := robot.login_ex2(v_base, 'bb_robot');
IF coalesce(v_cookies, '') = '' THEN
RAISE EXCEPTION 'Не удалось авторизовать bb_robot';
END IF;
BEGIN
FOR v_step IN
SELECT id_process, load_post_process, load_id_var
FROM smev.smev_report_create_register_processes
WHERE id_etl = 14
AND operation_type = 0
AND active_task = true
AND id_process IN (1, 2, 3)
ORDER BY id_process
LOOP
v_metadata := NULL;
v_params := '{}'::json;
IF v_step.load_id_var IS NOT NULL THEN
v_metadata := smev.f_smev_data_json_build2(
v_step.load_id_var, v_stack, 0, v_sid
);
IF cardinality(v_metadata) > 0 THEN
v_params := json_object(v_metadata);
END IF;
END IF;
RAISE NOTICE 'DIAG14: начинаем шаг %, модель %',
v_step.id_process, v_step.load_post_process;
v_response := robot.get_page_data(
v_base,
'queryModel?queryModelCode='
|| v_step.load_post_process,
v_cookies,
v_params
);
v_text := convert_from(v_response, 'UTF8');
RAISE NOTICE 'DIAG14: ответ шага %: %',
v_step.id_process, left(v_text, 1000);
BEGIN
v_json := v_text::json;
EXCEPTION WHEN invalid_text_representation THEN
RAISE NOTICE 'DIAG14: шаг % вернул некорректный JSON',
v_step.id_process;
EXIT;
END;
v_stack[v_step.id_process] := v_json;
IF v_step.id_process = 1
AND v_json->>'status' <> 'true' THEN
RAISE NOTICE 'DIAG14: проверка первого шага не пройдена';
EXIT;
END IF;
END LOOP;
EXCEPTION WHEN OTHERS THEN
PERFORM robot.logout_ex(v_base, v_cookies);
RAISE;
END;
PERFORM robot.logout_ex(v_base, v_cookies);
END;
$check14$;