Sync scheduler results into Logs table

This commit is contained in:
Jan Kvetina 2022-01-24 21:13:43 +01:00
parent 8d915d8862
commit 8680a80b84
3 changed files with 89 additions and 1 deletions

View File

@ -0,0 +1,35 @@
DECLARE
in_job_name CONSTANT VARCHAR2(30) := 'CORE_SYNC_JOB_LOGS';
in_run_immediatelly CONSTANT BOOLEAN := FALSE;
BEGIN
BEGIN
DBMS_SCHEDULER.DROP_JOB(in_job_name, TRUE);
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
--
DBMS_SCHEDULER.CREATE_JOB (
job_name => in_job_name,
job_type => 'STORED_PROCEDURE',
job_action => 'app.sync_job_logs',
number_of_arguments => 1,
start_date => SYSDATE,
repeat_interval => 'FREQ=MINUTELY;INTERVAL=1', -- every minute
enabled => FALSE,
comments => 'Sync SCHEDULER results to LOGS table'
);
--
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(in_job_name, argument_position => 1, argument_value => SYSDATE - 1/24);
--
DBMS_SCHEDULER.SET_ATTRIBUTE(in_job_name, 'JOB_PRIORITY', 5); -- lower priority
DBMS_SCHEDULER.ENABLE(in_job_name);
COMMIT;
--
IF in_run_immediatelly THEN
DBMS_SCHEDULER.RUN_JOB(in_job_name);
COMMIT;
END IF;
END;
/

View File

@ -1055,6 +1055,14 @@ CREATE OR REPLACE PACKAGE app AS
in_autodrop BOOLEAN := TRUE,
in_comments VARCHAR2 := NULL
);
--
-- Sync scheduler results to Logs
--
PROCEDURE sync_job_logs (
in_interval DATE
);

View File

@ -2154,7 +2154,7 @@ CREATE OR REPLACE PACKAGE BODY app AS
BEGIN
curr_id := app.log__ (
in_flag => app.flag_scheduler,
in_arguments => in_job_name,
in_arguments => REPLACE(in_job_name, '"', ''),
in_parent_id => in_log_id
);
END;
@ -2237,6 +2237,51 @@ CREATE OR REPLACE PACKAGE BODY app AS
PROCEDURE sync_job_logs (
in_interval DATE
)
AS
BEGIN
FOR d IN (
SELECT
l.log_id,
d.log_id AS job_log_id,
d.job_name,
d.status,
app.get_duration(d.run_duration) AS duration,
d.cpu_used,
d.errors,
d.output
FROM user_scheduler_job_run_details d
JOIN user_scheduler_job_log j
ON j.log_id = d.log_id
AND j.log_date >= in_interval
JOIN logs l
ON l.created_at >= in_interval
AND l.flag = app.flag_scheduler
AND l.action_name IS NULL
AND l.arguments = d.job_name
) LOOP
UPDATE logs l
SET l.action_name = d.status,
l.module_timer = d.duration
WHERE l.log_id = d.log_id;
--
/*
l.payload = d.run_duration || CHR(10) || '--' || CHR(10) ||
d.cpu_used || CHR(10) || '--' || CHR(10) ||
d.errors || CHR(10) || '--' || CHR(10) ||
d.output
*/
--app.log_error();
--
-- PYTHON might fail
--
END LOOP;
END;
FUNCTION log__ (
in_flag logs.flag%TYPE,
in_module_name logs.module_name%TYPE := NULL,