-- LegacyWorlds Beta 6 -- PostgreSQL database scripts -- -- System status functions -- -- Copyright(C) 2004-2010, DeepClone Development -- -------------------------------------------------------- -- -- Enter maintenance mode -- -- Parameters: -- a_id Administrator identifier -- reason_txt Maintenance reason -- duration Expected duration (minutes) -- -- Returns: -- success TRUE on success, FALSE if the system was already in maintenance mode -- CREATE OR REPLACE FUNCTION sys.enter_maintenance_mode( IN a_id INT , IN reason_txt TEXT , IN duration INT , OUT success BOOLEAN ) STRICT VOLATILE SECURITY DEFINER AS $$ BEGIN UPDATE sys.status SET maintenance_start = NOW( ) , maintenance_end = NOW( ) + ( duration || 'm' )::INTERVAL , maintenance_text = reason_txt WHERE maintenance_start IS NULL; success := FOUND; IF success THEN PERFORM admin.write_log( a_id , 'WARNING'::log_level , 'enabled maintenance mode for ' || duration || ' minutes; reason: ' || reason_txt ); END IF; END; $$ LANGUAGE plpgsql; GRANT EXECUTE ON FUNCTION sys.enter_maintenance_mode( INT , TEXT , INT ) TO :dbuser; -- -- Extend maintenance mode duration -- -- Parameters: -- a_id Administrator identifier -- ext_duration Expected extended duration (minutes) -- -- Returns: -- success TRUE on success, FALSE if the system was not in maintenance mode -- CREATE OR REPLACE FUNCTION sys.extend_maintenance_mode( IN a_id INT , IN ext_duration INT , OUT success BOOLEAN ) STRICT VOLATILE SECURITY DEFINER AS $$ BEGIN UPDATE sys.status SET maintenance_end = NOW( ) + ( ext_duration || 'm' )::INTERVAL WHERE maintenance_start IS NOT NULL; success := FOUND; IF success THEN PERFORM admin.write_log( a_id , 'WARNING'::log_level , 'extended maintenance mode duration by ' || ext_duration || ' minutes' ); END IF; END; $$ LANGUAGE plpgsql; GRANT EXECUTE ON FUNCTION sys.extend_maintenance_mode( INT , INT ) TO :dbuser; -- -- Exit maintenance mode -- -- Parameters: -- a_id Administrator identifier -- -- Returns: -- success TRUE on success, FALSE if the system was not in maintenance mode -- CREATE OR REPLACE FUNCTION sys.exit_maintenance_mode( IN a_id INT , OUT success BOOLEAN ) STRICT VOLATILE SECURITY DEFINER AS $$ BEGIN UPDATE sys.status SET maintenance_start = NULL , maintenance_end = NULL , maintenance_text = NULL WHERE maintenance_start IS NOT NULL; success := FOUND; IF success THEN PERFORM admin.write_log( a_id , 'INFO'::log_level , 'terminated maintenance mode' ); END IF; END; $$ LANGUAGE plpgsql; GRANT EXECUTE ON FUNCTION sys.exit_maintenance_mode( INT ) TO :dbuser;