mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2024-08-30 18:23:09 +00:00
Add importing threading to jar servers.
Refactor "downloading" status
This commit is contained in:
parent
f3590ded0f
commit
65c8ca680b
@ -108,19 +108,19 @@ class ServersController(metaclass=Singleton):
|
||||
return ret
|
||||
|
||||
@staticmethod
|
||||
def set_download(server_id):
|
||||
def set_import(server_id):
|
||||
srv = ServersController().get_server_instance_by_id(server_id)
|
||||
return srv.stats_helper.set_download()
|
||||
return srv.stats_helper.set_import()
|
||||
|
||||
@staticmethod
|
||||
def finish_download(server_id):
|
||||
def finish_import(server_id):
|
||||
srv = ServersController().get_server_instance_by_id(server_id)
|
||||
return srv.stats_helper.finish_download()
|
||||
return srv.stats_helper.finish_import()
|
||||
|
||||
@staticmethod
|
||||
def get_download_status(server_id):
|
||||
def get_import_status(server_id):
|
||||
server = ServersController().get_server_instance_by_id(server_id)
|
||||
return server.stats_helper.get_download_status()
|
||||
return server.stats_helper.get_import_status()
|
||||
|
||||
def remove_server(self, server_id):
|
||||
roles_list = PermissionsServers.get_roles_from_server(server_id)
|
||||
|
@ -175,7 +175,7 @@ class ServerJars:
|
||||
# we submit a db update for it's stats.
|
||||
while True:
|
||||
try:
|
||||
ServersController.set_download(server_id)
|
||||
ServersController.set_import(server_id)
|
||||
for user in server_users:
|
||||
self.helper.websocket_helper.broadcast_user(
|
||||
user, "send_start_reload", {}
|
||||
|
@ -53,7 +53,7 @@ class ServerStats(Model):
|
||||
waiting_start = BooleanField(default=False)
|
||||
first_run = BooleanField(default=True)
|
||||
crashed = BooleanField(default=False)
|
||||
downloading = BooleanField(default=False)
|
||||
importing = BooleanField(default=False)
|
||||
|
||||
class Meta:
|
||||
table_name = "server_stats"
|
||||
@ -207,26 +207,26 @@ class HelperServerStats:
|
||||
ServerStats.server_id == self.server_id
|
||||
).execute(self.database)
|
||||
|
||||
def set_download(self):
|
||||
def set_import(self):
|
||||
# self.select_database(self.server_id)
|
||||
ServerStats.update(downloading=True).where(
|
||||
ServerStats.update(importing=True).where(
|
||||
ServerStats.server_id == self.server_id
|
||||
).execute(self.database)
|
||||
|
||||
def finish_download(self):
|
||||
def finish_import(self):
|
||||
# self.select_database(self.server_id)
|
||||
ServerStats.update(downloading=False).where(
|
||||
ServerStats.update(importing=False).where(
|
||||
ServerStats.server_id == self.server_id
|
||||
).execute(self.database)
|
||||
|
||||
def get_download_status(self):
|
||||
def get_import_status(self):
|
||||
# self.select_database(self.server_id)
|
||||
download_status = (
|
||||
import_status = (
|
||||
ServerStats.select()
|
||||
.where(ServerStats.server_id == self.server_id)
|
||||
.get(self.database)
|
||||
)
|
||||
return download_status.downloading
|
||||
return import_status.importing
|
||||
|
||||
def server_crash_reset(self):
|
||||
if self.server_id is None:
|
||||
@ -249,7 +249,6 @@ class HelperServerStats:
|
||||
def set_update(self, value):
|
||||
if self.server_id is None:
|
||||
return
|
||||
|
||||
# self.select_database(self.server_id)
|
||||
try:
|
||||
# Checks if server even exists
|
||||
|
@ -5,6 +5,7 @@ import platform
|
||||
import shutil
|
||||
import time
|
||||
import logging
|
||||
import threading
|
||||
from peewee import DoesNotExist
|
||||
|
||||
# TZLocal is set as a hidden import on win pipeline
|
||||
@ -16,6 +17,7 @@ from app.classes.models.server_permissions import EnumPermissionsServer
|
||||
from app.classes.shared.main_models import DatabaseShortcuts
|
||||
from app.classes.models.users import HelperUsers
|
||||
from app.classes.models.roles import HelperRoles
|
||||
from app.classes.models.server_permissions import PermissionsServers
|
||||
from app.classes.models.management import HelpersManagement
|
||||
from app.classes.models.servers import HelperServers
|
||||
from app.classes.controllers.crafty_perms_controller import CraftyPermsController
|
||||
@ -537,25 +539,6 @@ class Controller:
|
||||
Helpers.ensure_dir_exists(new_server_dir)
|
||||
Helpers.ensure_dir_exists(backup_path)
|
||||
server_path = Helpers.get_os_understandable_path(server_path)
|
||||
try:
|
||||
FileHelpers.copy_dir(server_path, new_server_dir, True)
|
||||
except shutil.Error as ex:
|
||||
logger.error(f"Server import failed with error: {ex}")
|
||||
|
||||
has_properties = False
|
||||
for item in os.listdir(new_server_dir):
|
||||
if str(item) == "server.properties":
|
||||
has_properties = True
|
||||
if not has_properties:
|
||||
logger.info(
|
||||
f"No server.properties found on zip file import. "
|
||||
f"Creating one with port selection of {str(port)}"
|
||||
)
|
||||
with open(
|
||||
os.path.join(new_server_dir, "server.properties"), "w", encoding="utf-8"
|
||||
) as file:
|
||||
file.write(f"server-port={port}")
|
||||
file.close()
|
||||
|
||||
full_jar_path = os.path.join(new_server_dir, server_jar)
|
||||
|
||||
@ -586,8 +569,41 @@ class Controller:
|
||||
port,
|
||||
server_type="minecraft-java",
|
||||
)
|
||||
import_thread = threading.Thread(
|
||||
name=f"server_import-{server_id}",
|
||||
target=self.import_threaded_jar_server,
|
||||
daemon=True,
|
||||
args=(server_path, new_server_dir, port, new_id),
|
||||
)
|
||||
self.servers.set_import(new_id)
|
||||
import_thread.start()
|
||||
return new_id
|
||||
|
||||
def import_threaded_jar_server(self, server_path, new_server_dir, port, new_id):
|
||||
try:
|
||||
FileHelpers.copy_dir(server_path, new_server_dir, True)
|
||||
except shutil.Error as ex:
|
||||
logger.error(f"Server import failed with error: {ex}")
|
||||
|
||||
has_properties = False
|
||||
for item in os.listdir(new_server_dir):
|
||||
if str(item) == "server.properties":
|
||||
has_properties = True
|
||||
if not has_properties:
|
||||
logger.info(
|
||||
f"No server.properties found on zip file import. "
|
||||
f"Creating one with port selection of {str(port)}"
|
||||
)
|
||||
with open(
|
||||
os.path.join(new_server_dir, "server.properties"), "w", encoding="utf-8"
|
||||
) as file:
|
||||
file.write(f"server-port={port}")
|
||||
file.close()
|
||||
self.servers.finish_import(new_id)
|
||||
server_users = PermissionsServers.get_server_user_list(new_id)
|
||||
for user in server_users:
|
||||
self.helper.websocket_helper.broadcast_user(user, "send_start_reload", {})
|
||||
|
||||
def import_zip_server(
|
||||
self,
|
||||
server_name: str,
|
||||
|
@ -293,7 +293,7 @@ class ServerInstance:
|
||||
else:
|
||||
user_lang = HelperUsers.get_user_lang_by_id(user_id)
|
||||
|
||||
if self.stats_helper.get_download_status():
|
||||
if self.stats_helper.get_import_status():
|
||||
if user_id:
|
||||
self.helper.websocket_helper.broadcast_user(
|
||||
user_id,
|
||||
|
@ -453,8 +453,8 @@ class PanelHandler(BaseHandler):
|
||||
for server in un_used_servers[:]:
|
||||
if flag == 0:
|
||||
server["stats"][
|
||||
"downloading"
|
||||
] = self.controller.servers.get_download_status(
|
||||
"importing"
|
||||
] = self.controller.servers.get_import_status(
|
||||
str(server["stats"]["server_id"]["server_id"])
|
||||
)
|
||||
server["stats"]["crashed"] = self.controller.servers.is_crashed(
|
||||
@ -571,11 +571,11 @@ class PanelHandler(BaseHandler):
|
||||
"started": "False",
|
||||
}
|
||||
if not self.failed_server:
|
||||
page_data["downloading"] = self.controller.servers.get_download_status(
|
||||
page_data["importing"] = self.controller.servers.get_import_status(
|
||||
server_id
|
||||
)
|
||||
else:
|
||||
page_data["downloading"] = False
|
||||
page_data["importing"] = False
|
||||
page_data["server_id"] = server_id
|
||||
try:
|
||||
page_data["waiting_start"] = self.controller.servers.get_waiting_start(
|
||||
|
@ -399,12 +399,12 @@
|
||||
data['lang']) }}</i></a>
|
||||
</div>
|
||||
</div>
|
||||
{% elif server['stats']['downloading']%}
|
||||
{% elif server['stats']['importing']%}
|
||||
<div class="row">
|
||||
<div class="col-12 px-0">
|
||||
<a data-id="{{server['server_data']['server_id']}}" class="btn btn-link"><i
|
||||
class="fa fa-spinner fa-spin"></i>
|
||||
{{ translate('serverTerm', 'downloading', data['lang']) }}</a>
|
||||
{{ translate('serverTerm', 'importing', data['lang']) }}</a>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
|
@ -65,9 +65,9 @@
|
||||
<button onclick="" id="restart-btn" style="max-width: 7rem;" class="btn btn-outline-primary m-1 flex-grow-1 disabled">{% raw translate('serverTerm', 'restart', data['lang']) %}</button>
|
||||
<button onclick="" id="stop-btn" style="max-width: 7rem;" class="btn btn-danger m-1 flex-grow-1 disabled">{{ translate('serverTerm', 'stop', data['lang']) }}</button>
|
||||
</div>
|
||||
{% elif data['downloading'] %}
|
||||
{% elif data['importing'] %}
|
||||
<div id="control_buttons" class="mt-4 flex-wrap d-flex justify-content-between justify-content-md-center align-items-center px-5 px-md-0" style="visibility: visible">
|
||||
<button onclick="" id="start-btn" style="max-width: 12rem; white-space: nowrap;" class="btn btn-secondary m-1 flex-grow-1 disabled"><i class="fa fa-spinner fa-spin"></i> {{ translate('serverTerm', 'downloading',
|
||||
<button onclick="" id="start-btn" style="max-width: 12rem; white-space: nowrap;" class="btn btn-secondary m-1 flex-grow-1 disabled"><i class="fa fa-spinner fa-spin"></i> {{ translate('serverTerm', 'importing',
|
||||
data['lang']) }}</button>
|
||||
<button onclick="" id="restart-btn" style="max-width: 7rem;" class="btn btn-outline-primary m-1 flex-grow-1 disabled">{% raw translate('serverTerm', 'restart', data['lang']) %}</button>
|
||||
<button onclick="" id="stop-btn" style="max-width: 7rem;" class="btn btn-danger m-1 flex-grow-1 disabled">{{ translate('serverTerm', 'stop', data['lang']) }}</button>
|
||||
|
17
app/migrations/20220817_schedule_rename_downloading.py
Normal file
17
app/migrations/20220817_schedule_rename_downloading.py
Normal file
@ -0,0 +1,17 @@
|
||||
# Generated by database migrator
|
||||
import peewee
|
||||
|
||||
|
||||
def migrate(migrator, database, **kwargs):
|
||||
migrator.rename_column("server_stats", "downloading", "importing")
|
||||
|
||||
"""
|
||||
Write your migrations here.
|
||||
"""
|
||||
|
||||
|
||||
def rollback(migrator, database, **kwargs):
|
||||
migrator.rename_column("server_stats", "importing", "downloading")
|
||||
"""
|
||||
Write your rollback migrations here.
|
||||
"""
|
@ -463,7 +463,7 @@
|
||||
"serverTerm": {
|
||||
"commandInput": "Enter your command",
|
||||
"delay-explained": "The service/agent has recently started and is delaying the start of the minecraft server instance",
|
||||
"downloading": "Downloading...",
|
||||
"importing": "Importing...",
|
||||
"restart": "Restart",
|
||||
"sendCommand": "Send command",
|
||||
"start": "Start",
|
||||
@ -558,4 +558,4 @@
|
||||
"userSettings": "User Settings",
|
||||
"uses": "Number of uses allowed (-1==No Limit)"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user