diff --git a/jobs/core_sync_job_logs.sql b/jobs/core_sync_job_logs.sql new file mode 100644 index 0000000..e12917e --- /dev/null +++ b/jobs/core_sync_job_logs.sql @@ -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; +/ + diff --git a/packages/app.spec.sql b/packages/app.spec.sql index af28e17..fb17aad 100644 --- a/packages/app.spec.sql +++ b/packages/app.spec.sql @@ -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 ); diff --git a/packages/app.sql b/packages/app.sql index 9cbc6f7..e48f44e 100644 --- a/packages/app.sql +++ b/packages/app.sql @@ -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,