Skip to content

packages tree.update_timer

Jan Kvetina edited this page Oct 10, 2020 · 5 revisions

tree.update_timer

Repository spec: tree.update_timer, body: tree.update_timer

This procedure allow you to easily track time spend on log_module/log_action or any passed log_id.

It also stops profiler (DBMS_PROFILER, DBMS_HPROF) and code coverage (DBMS_PLSQL_CODE_COVERAGE)
initiated in tree.log_module based on settings in logs_setup table.


Signature

PROCEDURE update_timer (
    in_log_id           logs.log_id%TYPE    := NULL
);
Show code (33 lines)

PROCEDURE update_timer (
    in_log_id           logs.log_id%TYPE        := NULL
) AS
    PRAGMA AUTONOMOUS_TRANSACTION;
    --
    rec                 logs%ROWTYPE;
BEGIN
    IF in_log_id IS NULL THEN
        tree.get_caller__ (
            in_parent_id        => in_log_id,
            out_module_name     => rec.module_name,
            out_module_line     => rec.module_line,
            out_parent_id       => rec.log_parent
        );
    END IF;

    -- update timer
    UPDATE logs e
    SET e.timer =
        LPAD(EXTRACT(HOUR   FROM LOCALTIMESTAMP - e.created_at), 2, '0') || ':' ||
        LPAD(EXTRACT(MINUTE FROM LOCALTIMESTAMP - e.created_at), 2, '0') || ':' ||
        RPAD(REGEXP_REPLACE(
            REGEXP_REPLACE(EXTRACT(SECOND FROM LOCALTIMESTAMP - e.created_at), '^[\.,]', '00,'),
            '^(\d)[\.,]', '0\1,'
        ), 9, '0')
    WHERE e.log_id = COALESCE(in_log_id, rec.log_parent);
    --
    COMMIT;
EXCEPTION
WHEN OTHERS THEN
    ROLLBACK;
    RAISE;
END;

Minimal example

PROCEDURE your_procedure AS
BEGIN
    tree.log_module();

    -- your code
    NULL;

    -- update logs.timer for this module
    tree.update_timer();
END;

Track time for specific log record

PROCEDURE your_procedure AS
    log_id logs.log_id%TYPE;
BEGIN
    tree.log_module();

    -- get log_id before your code (log_module, log_action, log_detree...)
    log_id := tree.log_debug('STARTING_SOMETHING_LONG');  -- any log_[flag] function

    -- run your code
    NULL;

    -- update logs.timer for specific log_id
    tree.update_timer(log_id);
END;

Clone this wiki locally