This repository has been archived on 2024-07-18. You can view files and clone it, but cannot push or open issues or pull requests.
lwb6/legacyworlds-server/legacyworlds-server-data/db-structure/parts/functions/100-status-functions.sql

108 lines
2.6 KiB
MySQL
Raw Normal View History

2018-10-23 09:38:02 +02:00
-- 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;