mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2025-01-31 12:56:11 +01:00
Fix broken unloaded servers
This commit is contained in:
parent
b039eec857
commit
5cbb8f7018
@ -102,6 +102,11 @@ class ServersController(metaclass=Singleton):
|
||||
server_instance.update_server_instance()
|
||||
return ret
|
||||
|
||||
@staticmethod
|
||||
def update_unloaded_server(server_obj):
|
||||
ret = HelperServers.update_server(server_obj)
|
||||
return ret
|
||||
|
||||
@staticmethod
|
||||
def set_download(server_id):
|
||||
srv = ServersController().get_server_instance_by_id(server_id)
|
||||
|
@ -934,6 +934,14 @@ class Controller:
|
||||
|
||||
counter += 1
|
||||
|
||||
def remove_unloaded_server(self, server_id):
|
||||
try:
|
||||
HelpersManagement.delete_scheduled_task_by_server(server_id)
|
||||
except DoesNotExist:
|
||||
logger.info("No scheduled jobs exist. Continuing.")
|
||||
# remove the server from the DB
|
||||
self.servers.remove_server(server_id)
|
||||
|
||||
@staticmethod
|
||||
def clear_unexecuted_commands():
|
||||
HelpersManagement.clear_unexecuted_commands()
|
||||
|
@ -573,9 +573,39 @@ class AjaxHandler(BaseHandler):
|
||||
self.get_remote_ip(),
|
||||
)
|
||||
|
||||
for server in self.controller.servers.failed_servers:
|
||||
if server["server_id"] == int(server_id):
|
||||
return
|
||||
self.tasks_manager.remove_all_server_tasks(server_id)
|
||||
self.controller.remove_server(server_id, True)
|
||||
|
||||
elif page == "delete_unloaded_server":
|
||||
if not permissions["Config"] in user_perms:
|
||||
if not superuser:
|
||||
self.redirect("/panel/error?error=Unauthorized access to Config")
|
||||
return
|
||||
server_id = self.get_argument("id", None)
|
||||
logger.info(
|
||||
f"Removing server and all associated files for server: "
|
||||
f"{self.controller.servers.get_server_friendly_name(server_id)}"
|
||||
)
|
||||
|
||||
server_data = self.controller.servers.get_server_data_by_id(server_id)
|
||||
server_name = server_data["server_name"]
|
||||
|
||||
self.controller.management.add_to_audit_log(
|
||||
exec_user["user_id"],
|
||||
f"Deleted server {server_id} named {server_name}",
|
||||
server_id,
|
||||
self.get_remote_ip(),
|
||||
)
|
||||
|
||||
self.tasks_manager.remove_all_server_tasks(server_id)
|
||||
for item in self.controller.servers.failed_servers[:]:
|
||||
if item["server_id"] == int(server_id):
|
||||
self.controller.servers.failed_servers.remove(item)
|
||||
self.controller.remove_unloaded_server(server_id)
|
||||
|
||||
def check_server_id(self, server_id, page_name):
|
||||
if server_id is None:
|
||||
logger.warning(
|
||||
|
@ -157,6 +157,10 @@ class PanelHandler(BaseHandler):
|
||||
if server_id is None:
|
||||
self.redirect("/panel/error?error=Invalid Server ID")
|
||||
return None
|
||||
for server in self.controller.servers.failed_servers:
|
||||
if int(server_id) == server["server_id"]:
|
||||
self.failed_server = True
|
||||
return server_id
|
||||
# Does this server exist?
|
||||
if not self.controller.servers.server_id_exists(server_id):
|
||||
self.redirect("/panel/error?error=Invalid Server ID")
|
||||
@ -207,6 +211,7 @@ class PanelHandler(BaseHandler):
|
||||
|
||||
@tornado.web.authenticated
|
||||
async def get(self, page):
|
||||
self.failed_server = False
|
||||
error = self.get_argument("error", "WTF Error!")
|
||||
|
||||
template = "panel/denied.html"
|
||||
@ -504,9 +509,11 @@ class PanelHandler(BaseHandler):
|
||||
server_id = self.check_server_id()
|
||||
if server_id is None:
|
||||
return
|
||||
|
||||
server_obj = self.controller.servers.get_server_instance_by_id(server_id)
|
||||
page_data["backup_failed"] = server_obj.last_backup_status()
|
||||
if not self.failed_server:
|
||||
server_obj = self.controller.servers.get_server_instance_by_id(
|
||||
server_id
|
||||
)
|
||||
page_data["backup_failed"] = server_obj.last_backup_status()
|
||||
server_obj = None
|
||||
|
||||
valid_subpages = [
|
||||
@ -518,18 +525,57 @@ class PanelHandler(BaseHandler):
|
||||
"admin_controls",
|
||||
"schedules",
|
||||
]
|
||||
|
||||
server = self.controller.servers.get_server_instance_by_id(server_id)
|
||||
if not self.failed_server:
|
||||
server = self.controller.servers.get_server_instance_by_id(server_id)
|
||||
# server_data isn't needed since the server_stats also pulls server data
|
||||
page_data["server_data"] = self.controller.servers.get_server_data_by_id(
|
||||
server_id
|
||||
)
|
||||
page_data["server_stats"] = self.controller.servers.get_server_stats_by_id(
|
||||
server_id
|
||||
)
|
||||
page_data["downloading"] = self.controller.servers.get_download_status(
|
||||
server_id
|
||||
)
|
||||
if not self.failed_server:
|
||||
page_data[
|
||||
"server_stats"
|
||||
] = self.controller.servers.get_server_stats_by_id(server_id)
|
||||
else:
|
||||
server_temp_obj = self.controller.servers.get_server_data_by_id(
|
||||
server_id
|
||||
)
|
||||
page_data["server_stats"] = {
|
||||
"server_id": {
|
||||
"server_id": server_id,
|
||||
"server_name": server_temp_obj["server_name"],
|
||||
"server_uuid": server_temp_obj["server_uuid"],
|
||||
"path": server_temp_obj["path"],
|
||||
"log_path": server_temp_obj["log_path"],
|
||||
"executable": server_temp_obj["executable"],
|
||||
"execution_command": server_temp_obj["execution_command"],
|
||||
"stop_command": server_temp_obj["stop_command"],
|
||||
"executable_update_url": server_temp_obj[
|
||||
"executable_update_url"
|
||||
],
|
||||
"auto_start_delay": server_temp_obj["auto_start_delay"],
|
||||
"server_ip": server_temp_obj["server_ip"],
|
||||
"server_port": server_temp_obj["server_port"],
|
||||
"logs_delete_after": server_temp_obj["logs_delete_after"],
|
||||
"auto_start": server_temp_obj["auto_start"],
|
||||
"crash_detection": server_temp_obj["crash_detection"],
|
||||
"show_status": server_temp_obj["show_status"],
|
||||
},
|
||||
"running": False,
|
||||
"crashed": False,
|
||||
"server_type": "N/A",
|
||||
"cpu": "N/A",
|
||||
"mem": "N/A",
|
||||
"int_ping_results": [],
|
||||
"version": "N/A",
|
||||
"desc": "N/A",
|
||||
"started": "False",
|
||||
}
|
||||
if not self.failed_server:
|
||||
page_data["downloading"] = self.controller.servers.get_download_status(
|
||||
server_id
|
||||
)
|
||||
else:
|
||||
page_data["downloading"] = False
|
||||
page_data["server_id"] = server_id
|
||||
try:
|
||||
page_data["waiting_start"] = self.controller.servers.get_waiting_start(
|
||||
@ -538,7 +584,10 @@ class PanelHandler(BaseHandler):
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to get server waiting to start: {e}")
|
||||
page_data["waiting_start"] = False
|
||||
page_data["get_players"] = server.get_server_players()
|
||||
if not self.failed_server:
|
||||
page_data["get_players"] = server.get_server_players()
|
||||
else:
|
||||
page_data["get_players"] = []
|
||||
page_data["active_link"] = subpage
|
||||
page_data["permissions"] = {
|
||||
"Commands": EnumPermissionsServer.COMMANDS,
|
||||
@ -555,12 +604,14 @@ class PanelHandler(BaseHandler):
|
||||
] = self.controller.server_perms.get_user_id_permissions_list(
|
||||
exec_user["user_id"], server_id
|
||||
)
|
||||
page_data["server_stats"]["crashed"] = self.controller.servers.is_crashed(
|
||||
server_id
|
||||
)
|
||||
page_data["server_stats"][
|
||||
"server_type"
|
||||
] = self.controller.servers.get_server_type_by_id(server_id)
|
||||
if not self.failed_server:
|
||||
page_data["server_stats"][
|
||||
"crashed"
|
||||
] = self.controller.servers.is_crashed(server_id)
|
||||
if not self.failed_server:
|
||||
page_data["server_stats"][
|
||||
"server_type"
|
||||
] = self.controller.servers.get_server_type_by_id(server_id)
|
||||
if subpage not in valid_subpages:
|
||||
logger.debug("not a valid subpage")
|
||||
if not subpage:
|
||||
@ -640,6 +691,7 @@ class PanelHandler(BaseHandler):
|
||||
return
|
||||
page_data["java_versions"] = Helpers.find_java_installs()
|
||||
server_obj: Servers = self.controller.servers.get_server_obj(server_id)
|
||||
page_data["failed"] = self.failed_server
|
||||
page_java = []
|
||||
page_data["java_versions"].append("java")
|
||||
for version in page_data["java_versions"]:
|
||||
@ -1467,7 +1519,15 @@ class PanelHandler(BaseHandler):
|
||||
server_obj.auto_start = auto_start
|
||||
server_obj.crash_detection = crash_detection
|
||||
server_obj.logs_delete_after = logs_delete_after
|
||||
self.controller.servers.update_server(server_obj)
|
||||
failed = False
|
||||
for servers in self.controller.servers.failed_servers:
|
||||
if servers["server_id"] == int(server_id):
|
||||
failed = True
|
||||
if not failed:
|
||||
self.controller.servers.update_server(server_obj)
|
||||
else:
|
||||
self.controller.servers.update_unloaded_server(server_obj)
|
||||
self.controller.servers.init_all_servers()
|
||||
self.controller.servers.crash_detection(server_obj)
|
||||
|
||||
self.controller.servers.refresh_server_settings(server_id)
|
||||
|
@ -32,12 +32,14 @@
|
||||
<div class="col-sm-12 grid-margin">
|
||||
<div class="card">
|
||||
<div class="card-body pt-0">
|
||||
{% if not data['failed'] %}
|
||||
<span class="d-none d-sm-block">
|
||||
{% include "parts/server_controls_list.html %}
|
||||
</span>
|
||||
<span class="d-block d-sm-none">
|
||||
{% include "parts/m_server_controls_list.html %}
|
||||
</span>
|
||||
{% end %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-sm-12">
|
||||
@ -117,7 +119,6 @@
|
||||
</div>
|
||||
<br>
|
||||
{% end %}
|
||||
|
||||
<div class="form-group">
|
||||
<label for="stop_command">{{ translate('serverConfig', 'serverStopCommand', data['lang']) }} <small
|
||||
class="text-muted ml-1"> - {{ translate('serverConfig', 'serverStopCommandDesc', data['lang'])
|
||||
@ -176,35 +177,41 @@
|
||||
<div class="form-check-flat">
|
||||
<label for="auto_start" class="form-check-label ml-4 mb-4">
|
||||
{% if data['server_stats']['server_id']['auto_start'] %}
|
||||
<input type="checkbox" class="form-check-input" id="auto_start" name="auto_start" checked="" data-toggle="toggle"
|
||||
value="1"> {{ translate('serverConfig', 'serverAutoStart', data['lang']) }}
|
||||
<input type="checkbox" class="form-check-input" id="auto_start" name="auto_start" checked=""
|
||||
data-toggle="toggle" value="1"> {{ translate('serverConfig', 'serverAutoStart',
|
||||
data['lang']) }}
|
||||
{% else %}
|
||||
<input type="checkbox" class="form-check-input" id="auto_start" name="auto_start" value="1" data-toggle="toggle"> {{
|
||||
<input type="checkbox" class="form-check-input" id="auto_start" name="auto_start" value="1"
|
||||
data-toggle="toggle"> {{
|
||||
translate('serverConfig', 'serverAutoStart', data['lang']) }}
|
||||
{% end %}
|
||||
</label>
|
||||
|
||||
<label for="crash_detection" class="form-check-label ml-4 mb-4">
|
||||
{% if data['server_stats']['server_id']['crash_detection'] %}
|
||||
<input type="checkbox" class="form-check-input" id="crash_detection" name="crash_detection" data-toggle="toggle"
|
||||
checked="" value="1"> {{ translate('serverConfig', 'serverCrashDetection', data['lang']) }}
|
||||
<input type="checkbox" class="form-check-input" id="crash_detection" name="crash_detection"
|
||||
data-toggle="toggle" checked="" value="1"> {{ translate('serverConfig',
|
||||
'serverCrashDetection', data['lang']) }}
|
||||
{% else %}
|
||||
<input type="checkbox" class="form-check-input" id="crash_detection" name="crash_detection" data-toggle="toggle"
|
||||
value="1"> {{ translate('serverConfig', 'serverCrashDetection', data['lang']) }}
|
||||
<input type="checkbox" class="form-check-input" id="crash_detection" name="crash_detection"
|
||||
data-toggle="toggle" value="1"> {{ translate('serverConfig', 'serverCrashDetection',
|
||||
data['lang']) }}
|
||||
{% end %}
|
||||
</label>
|
||||
|
||||
{% if data['super_user'] %}
|
||||
<label for="show_status" class="form-check-label ml-4 mb-4">
|
||||
{% if data['server_stats']['server_id']['show_status'] %}
|
||||
<input type="checkbox" class="form-check-input" id="show_status" name="show_status" data-toggle="toggle"
|
||||
checked="" value="1"> {{ translate('serverConfig', 'showStatus', data['lang']) }}
|
||||
{% else %}
|
||||
<input type="checkbox" class="form-check-input" id="show_status" name="show_status" data-toggle="toggle"
|
||||
value="1"> {{ translate('serverConfig', 'showStatus', data['lang']) }}
|
||||
{% if data['super_user'] %}
|
||||
<label for="show_status" class="form-check-label ml-4 mb-4">
|
||||
{% if data['server_stats']['server_id']['show_status'] %}
|
||||
<input type="checkbox" class="form-check-input" id="show_status" name="show_status"
|
||||
data-toggle="toggle" checked="" value="1"> {{ translate('serverConfig', 'showStatus',
|
||||
data['lang']) }}
|
||||
{% else %}
|
||||
<input type="checkbox" class="form-check-input" id="show_status" name="show_status"
|
||||
data-toggle="toggle" value="1"> {{ translate('serverConfig', 'showStatus',
|
||||
data['lang']) }}
|
||||
{% end %}
|
||||
</label>
|
||||
{% end %}
|
||||
</label>
|
||||
{% end %}
|
||||
</div>
|
||||
|
||||
<button type="submit" class="btn btn-success mr-2"><i class="fas fa-save"></i> {{
|
||||
@ -238,8 +245,13 @@
|
||||
<button onclick="send_command(serverId, 'update_executable');" id="update_executable"
|
||||
style="max-width: 7rem;" class="btn btn-warning m-1 flex-grow-1">{{ translate('serverConfig',
|
||||
'update', data['lang']) }}</button>
|
||||
{% if not data['failed'] %}
|
||||
<button onclick="deleteConfirm()" class="btn btn-sm btn-danger">{{ translate('serverConfig',
|
||||
'deleteServer', data['lang']) }}</button>
|
||||
{% else %}
|
||||
<button onclick="deleteUnloadedConfirm()" class="btn btn-sm btn-danger">{{ translate('serverConfig',
|
||||
'deleteServer', data['lang']) }}</button>
|
||||
{% end %}
|
||||
{% end %}
|
||||
|
||||
</div>
|
||||
@ -255,19 +267,19 @@
|
||||
|
||||
</div>
|
||||
<style>
|
||||
.toggle-handle {
|
||||
.toggle-handle {
|
||||
background-color: white !important;
|
||||
}
|
||||
}
|
||||
|
||||
.toggle-on {
|
||||
.toggle-on {
|
||||
color: black !important;
|
||||
background-color: blueviolet !important;
|
||||
}
|
||||
}
|
||||
|
||||
.toggle {
|
||||
.toggle {
|
||||
height: 0px !important;
|
||||
background-color: grey !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<!-- content-wrapper ends -->
|
||||
|
||||
@ -275,7 +287,7 @@
|
||||
|
||||
{% block js %}
|
||||
<script>
|
||||
$(function() {
|
||||
$(function () {
|
||||
$('.form-check-input').bootstrapToggle({
|
||||
on: '',
|
||||
off: ''
|
||||
@ -430,6 +442,54 @@
|
||||
}
|
||||
});
|
||||
}
|
||||
function deleteUnloadedConfirm() {
|
||||
path = "{{data['server_stats']['server_id']['path']}}";
|
||||
name = "{{data['server_stats']['server_id']['server_name']}}";
|
||||
bootbox.confirm({
|
||||
size: "",
|
||||
title: "{% raw translate('serverConfig', 'deleteServerQuestion', data['lang']) %}",
|
||||
closeButton: false,
|
||||
message: "{% raw translate('serverConfig', 'deleteServerQuestionMessage', data['lang']) %}",
|
||||
buttons: {
|
||||
confirm: {
|
||||
label: "{{ translate('serverConfig', 'yesDelete', data['lang']) }}",
|
||||
className: 'btn-danger',
|
||||
},
|
||||
cancel: {
|
||||
label: "{{ translate('serverConfig', 'noDelete', data['lang']) }}",
|
||||
className: 'btn-link',
|
||||
}
|
||||
},
|
||||
callback: function (result) {
|
||||
if (!result) {
|
||||
return;
|
||||
return;
|
||||
}
|
||||
else {
|
||||
var token = getCookie("_xsrf")
|
||||
setTimeout(function () { window.location = '/panel/dashboard'; }, 5000);
|
||||
bootbox.dialog({
|
||||
backdrop: true,
|
||||
title: '{% raw translate("serverConfig", "sendingDelete", data['lang']) %}',
|
||||
message: '<div align="center"><i class="fas fa-spin fa-spinner"></i> {% raw translate("serverConfig", "bePatientDelete", data['lang']) %} </div>',
|
||||
closeButton: false
|
||||
})
|
||||
$.ajax({
|
||||
type: "DELETE",
|
||||
headers: { 'X-XSRFToken': token },
|
||||
url: '/ajax/delete_unloaded_server?id=' + serverId,
|
||||
data: {
|
||||
},
|
||||
success: function (data) {
|
||||
console.log("got response:");
|
||||
console.log(data);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user