diff --git a/CHANGELOG.md b/CHANGELOG.md index b154e0fb..e8ae3dfa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### New features - Add server import status indicators ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/433)) - Users can now be assigned as manager of other users/roles ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/434)) +- Add variable shutdown timeouts ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/435)) ### Bug fixes - Fix creation quota not refilling after server delete ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/434)) ### Tweaks diff --git a/app/classes/models/servers.py b/app/classes/models/servers.py index db61f2d7..69d05866 100644 --- a/app/classes/models/servers.py +++ b/app/classes/models/servers.py @@ -39,6 +39,7 @@ class Servers(BaseModel): type = CharField(default="minecraft-java") show_status = BooleanField(default=1) created_by = IntegerField(default=-100) + shutdown_timeout = IntegerField(default=60) class Meta: table_name = "servers" diff --git a/app/classes/shared/server.py b/app/classes/shared/server.py index e0e0552f..8a77887e 100644 --- a/app/classes/shared/server.py +++ b/app/classes/shared/server.py @@ -612,21 +612,25 @@ class ServerInstance: # caching the name and pid number server_name = self.name server_pid = self.process.pid + self.shutdown_timeout = self.settings["shutdown_timeout"] while running: i += 1 - logstr = ( - f"Server {server_name} is still running " - f"- waiting 2s to see if it stops ({int(60-(i*2))} " - f"seconds until force close)" - ) - logger.info(logstr) - Console.info(logstr) + ttk = int(self.shutdown_timeout - (i * 2)) + if i <= self.shutdown_timeout / 2: + logstr = ( + f"Server {server_name} is still running " + "- waiting 2s to see if it stops" + f"({ttk} " + f"seconds until force close)" + ) + logger.info(logstr) + Console.info(logstr) running = self.check_running() time.sleep(2) # if we haven't closed in 60 seconds, let's just slam down on the PID - if i >= 30: + if i >= round(self.shutdown_timeout / 2, 0): logger.info( f"Server {server_name} is still running - Forcing the process down" ) diff --git a/app/classes/web/panel_handler.py b/app/classes/web/panel_handler.py index e843ecae..8d0249da 100644 --- a/app/classes/web/panel_handler.py +++ b/app/classes/web/panel_handler.py @@ -1488,6 +1488,7 @@ class PanelHandler(BaseHandler): return server_name = self.get_argument("server_name", None) server_obj = self.controller.servers.get_server_obj(server_id) + shutdown_timeout = self.get_argument("shutdown_timeout", 60) if superuser: server_path = self.get_argument("server_path", None) if Helpers.is_os_windows(): @@ -1568,6 +1569,7 @@ class PanelHandler(BaseHandler): ) server_obj.server_name = server_name + server_obj.shutdown_timeout = shutdown_timeout if superuser: if Helpers.validate_traversal( self.helper.get_servers_root_dir(), server_path diff --git a/app/frontend/templates/panel/server_config.html b/app/frontend/templates/panel/server_config.html index 6c9a8b36..e1c38e1e 100644 --- a/app/frontend/templates/panel/server_config.html +++ b/app/frontend/templates/panel/server_config.html @@ -165,6 +165,18 @@ {% end %} +