Commit cbd13339 authored by Sonia Zorba's avatar Sonia Zorba
Browse files

Improved job phase triggers

parent e2f766db
Loading
Loading
Loading
Loading
+22 −6
Original line number Diff line number Diff line
@@ -73,25 +73,41 @@ $func$ LANGUAGE sql;
-- Trigger function that automatically updates start time and end time of jobs at phase update.
-- This could be performed by business logic of each application that handles jobs but relying directly on the database ensures a better uniformity.

CREATE OR REPLACE FUNCTION job_phase_inserted() RETURNS TRIGGER 
AS 
$func$
BEGIN
    IF new.phase = 'EXECUTING' THEN
        new.start_time := NOW();
    ELSIF new.phase = 'COMPLETED' OR new.phase = 'ERROR' THEN
        new.start_time := NOW();
        new.end_time := NOW();
    END IF;
    RETURN new;
END;
$func$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION job_phase_updated() RETURNS TRIGGER 
AS 
$func$
BEGIN
    IF new.phase != old.phase THEN
        IF new.phase = 'EXECUTING' THEN
            new.start_time := NOW();
        ELSIF new.phase = 'COMPLETED' OR new.phase = 'ERROR' OR new.phase = 'ABORTED' THEN
            new.end_time := NOW();
        END IF;
    END IF;
    RETURN new;
END;
$func$ LANGUAGE plpgsql;

CREATE TRIGGER job_update
    BEFORE UPDATE OF phase ON job
    FOR EACH ROW
    EXECUTE PROCEDURE job_phase_updated();

CREATE TRIGGER job_insert
    BEFORE INSERT ON job
    FOR EACH ROW
    EXECUTE PROCEDURE job_phase_inserted();

CREATE TRIGGER job_update
    BEFORE UPDATE OF phase ON job
    FOR EACH ROW
    EXECUTE PROCEDURE job_phase_updated();