Fixed log_progress

This commit is contained in:
Jan Kvetina 2021-12-31 20:39:17 +01:00
parent c8b8288009
commit 0f8f5d7f71
2 changed files with 49 additions and 33 deletions

View File

@ -931,7 +931,9 @@ CREATE OR REPLACE PACKAGE app AS
-- --
PROCEDURE log_progress ( PROCEDURE log_progress (
in_action_name logs.action_name%TYPE := NULL, in_action_name logs.action_name%TYPE := NULL,
in_progress NUMBER := NULL -- in percent (0-1) in_progress NUMBER := NULL, -- percentage (1 = 100%)
in_note VARCHAR2 := NULL,
in_parent_id logs.log_id%TYPE := NULL
); );

View File

@ -1782,65 +1782,79 @@ CREATE OR REPLACE PACKAGE BODY app AS
PROCEDURE log_progress ( PROCEDURE log_progress (
in_action_name logs.action_name%TYPE := NULL, in_action_name logs.action_name%TYPE := NULL,
in_progress NUMBER := NULL -- in percent (0-1) in_progress NUMBER := NULL, -- percentage (1 = 100%)
in_note VARCHAR2 := NULL,
in_parent_id logs.log_id%TYPE := NULL
) )
AS AS
PRAGMA AUTONOMOUS_TRANSACTION; PRAGMA AUTONOMOUS_TRANSACTION;
-- --
slno BINARY_INTEGER; callstack_hash VARCHAR2(40);
callstack_depth PLS_INTEGER := 2;
v_rindex PLS_INTEGER;
v_slno PLS_INTEGER;
rec logs%ROWTYPE; rec logs%ROWTYPE;
BEGIN BEGIN
NULL; rec.log_parent := in_parent_id;
/*
callstack_hash := app.get_hash(); -- find parent from callstack
IF map_tree.EXISTS(callstack_hash) THEN IF rec.log_parent IS NULL THEN
rec.log_parent := map_tree(callstack_hash); callstack_hash := app.get_hash(app.get_call_stack (
in_offset => callstack_depth,
in_skip_others => TRUE,
in_line_numbers => FALSE,
in_splitter => '|'
));
--
IF map_tree.EXISTS(callstack_hash) THEN
rec.log_parent := map_tree(callstack_hash);
END IF;
END IF; END IF;
-- --
IF rec.log_parent IS NULL THEN IF rec.log_parent IS NULL THEN
rec.log_parent := recent_log_id;
END IF; END IF;
-- find parent to get rindex, module and action names
-- find longops record BEGIN
IF NVL(in_progress, 0) = 0 THEN SELECT l.log_id, l.module_name, l.action_name, l.arguments, l.created_at
-- first visit INTO rec.log_id, rec.module_name, rec.action_name, rec.arguments, rec.created_at
SELECT l.* INTO rec
FROM logs l FROM logs l
WHERE l.log_id = rec.log_parent; WHERE l.log_id > rec.log_parent
AND l.log_parent = rec.log_parent
AND l.flag = app.flag_longops;
-- --
rec.log_id := log_id.NEXTVAL; v_rindex := REPLACE(REGEXP_SUBSTR(rec.arguments, '\|[^\|]*$'), '|', '');
rec.log_parent := rec.log_id; -- create fresh child
rec.flag := app.flag_longops;
rec.payload := DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS_NOHINT; -- rindex
--
INSERT INTO logs
VALUES rec;
ELSE
SELECT l.* INTO rec
FROM logs l
WHERE l.log_parent = rec.log_parent
AND l.flag = app.flag_longops;
-- update progress in log -- update progress in log
UPDATE logs l UPDATE logs l
SET l.arguments = ROUND(NVL(in_progress, 0) * 100, 2) || '%', SET l.arguments = ROUND(NVL(in_progress, 0) * 100, 2) || '%|' || in_note || '|' || v_rindex,
l.payload = rec.payload,
l.module_timer = app.get_duration(in_start => rec.created_at) l.module_timer = app.get_duration(in_start => rec.created_at)
WHERE l.log_id = rec.log_id; WHERE l.log_id = rec.log_id;
END IF; EXCEPTION
WHEN NO_DATA_FOUND THEN
v_rindex := DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS_NOHINT;
-- create new longops record
rec.log_id := app.log__ (
in_flag => app.flag_longops,
in_action_name => in_action_name,
in_arguments => ROUND(NVL(in_progress, 0) * 100, 2) || '%|' || in_note || '|' || v_rindex,
in_parent_id => rec.log_parent
);
END;
-- update progress for system views -- update progress for system views
DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS ( DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS (
rindex => rec.payload, rindex => v_rindex,
slno => slno, slno => v_slno,
op_name => rec.module_name, -- 64 chars op_name => rec.module_name, -- 64 chars
target_desc => rec.action_name, -- 32 chars target_desc => rec.action_name, -- 32 chars
context => rec.log_id, context => rec.log_id,
sofar => LEAST(NVL(in_progress, 0), 1) sofar => LEAST(NVL(in_progress, 0), 1),
totalwork => 1, -- 1 = 100% totalwork => 1, -- 1 = 100%
units => '%' units => '%'
); );
*/
-- --
COMMIT; COMMIT;
EXCEPTION EXCEPTION