107 lines
2.6 KiB
PL/PgSQL
107 lines
2.6 KiB
PL/PgSQL
-- 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;
|
|
|