2020-08-13 14:38:36 +00:00
{% extends ../base.html %}
2020-08-27 22:35:08 +00:00
{% block meta %}
< meta http-equiv = "refresh" content = "60" >
{% end %}
2021-09-29 02:25:47 +00:00
{% block title %}Crafty Controller - {{ translate('dashboard', 'dashboard', data['lang']) }}{% end %}
2020-08-13 14:38:36 +00:00
{% block content %}
< div class = "content-wrapper" >
<!-- Page Title Header Starts -->
< div class = "row page-title-header" >
< div class = "col-12" >
< div class = "page-header" >
2021-09-29 02:25:47 +00:00
< h4 class = "page-title" > {{ translate('dashboard', 'dashboard', data['lang']) }}< / h4 >
2020-08-13 14:38:36 +00:00
< / div >
< / div >
< / div >
<!-- Page Title Header Ends -->
< div class = "row" >
< div class = "col-md-12 grid-margin" >
< div class = "card" >
< div class = "card-body" >
< div class = "row" >
2021-09-27 17:17:29 +00:00
< div class = "col-lg-4 col-md-6" >
2020-08-13 14:38:36 +00:00
< div class = "d-flex" >
< div class = "wrapper" >
2021-09-29 02:25:47 +00:00
< h5 class = "mb-1 font-weight-medium text-primary" > {{ translate('dashboard', 'host', data['lang']) }}< / h5 >
2020-08-17 02:47:53 +00:00
< h3 class = "mb-0 font-weight-semibold" > < i class = "fas fa-chart-line" > < / i > < / h3 >
2020-08-13 14:38:36 +00:00
< / div >
< div class = "wrapper my-auto ml-auto ml-lg-4" >
2021-09-29 02:25:47 +00:00
< p id = "cpu_data" class = "mb-0 text-success" data-toggle = "tooltip" data-placement = "top" data-html = "true" title = "{% raw translate('dashboard', 'cpuCores', data['lang']) %}: {{ data.get('hosts_data').get('cpu_cores') }} <br /> {% raw translate('dashboard', 'cpuCurFreq', data['lang']) %}: {{ data.get('hosts_data').get('cpu_cur_freq') }} <br /> {% raw translate('dashboard', 'cpuMaxFreq', data['lang']) %}: {{ data.get('hosts_data').get('cpu_max_freq') }}" >
{{ translate('dashboard', 'cpuUsage', data['lang']) }}: < span id = "cpu_usage" > {{ data.get('hosts_data').get('cpu_usage') }}< / span >
2020-08-28 03:21:55 +00:00
< / p >
2021-09-29 02:25:47 +00:00
< p id = "mem_usage" class = "mb-0 text-danger" data-toggle = "tooltip" data-placement = "top" title = "{{ translate('dashboard', 'memUsage', data['lang']) }}: {{ data.get('hosts_data').get('mem_usage') }}" >
{{ translate('dashboard', 'memUsage', data['lang']) }}: < span id = "mem_percent" > {{ data.get('hosts_data').get('mem_percent') }}%< / span >
2020-08-28 03:21:55 +00:00
< / p >
2020-08-13 14:38:36 +00:00
< / div >
< / div >
< / div >
2021-09-27 17:17:29 +00:00
< div class = "col-lg-4 col-md-6 mt-md-0 mt-4" >
2020-08-13 14:38:36 +00:00
< div class = "d-flex" >
< div class = "wrapper" >
2021-09-29 02:25:47 +00:00
< h5 class = "mb-1 font-weight-medium text-primary" > {{ translate('dashboard', 'servers', data['lang']) }}< / h5 >
2020-08-19 01:04:43 +00:00
< h3 class = "mb-0 font-weight-semibold" > {{ data['server_stats']['total'] }}< / h3 >
2020-08-13 14:38:36 +00:00
< / div >
< div class = "wrapper my-auto ml-auto ml-lg-4" >
2021-09-29 02:25:47 +00:00
< p class = "mb-0 text-success" > {{ data['server_stats']['running'] }} {{ translate('dashboard', 'online', data['lang']).lower() }}< / p >
< p class = "mb-0 text-warning" > {{ data['server_stats']['stopped'] }} {{ translate('dashboard', 'offline', data['lang']).lower() }}< / p >
2020-08-13 14:38:36 +00:00
< / div >
< / div >
< / div >
2021-09-27 17:17:29 +00:00
< div class = "col-lg-4 col-md-6 mt-md-0 mt-4" >
2020-08-13 14:38:36 +00:00
< div class = "d-flex" >
< div class = "wrapper" >
2021-09-29 02:25:47 +00:00
< h5 class = "mb-1 font-weight-medium text-primary" > {{ translate('dashboard', 'players', data['lang']) }}< / h5 >
2021-09-13 21:04:46 +00:00
< h3 class = "mb-0 font-weight-semibold" > {{ data['num_players'] }}< / h3 >
2020-08-13 14:38:36 +00:00
< / div >
< div class = "wrapper my-auto ml-auto ml-lg-4" >
2021-09-29 02:25:47 +00:00
< p class = "mb-0 text-success" > 35 {{ translate('dashboard', 'max', data['lang']) }}< / p >
< p class = "mb-0 text-warning" > 10 {{ translate('dashboard', 'avg', data['lang']) }}< / p >
2020-08-13 14:38:36 +00:00
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "row" >
< div class = "col-md-12 col-lg-12 grid-margin stretch-card" >
< div class = "card" >
< div class = "card-header header-sm d-flex justify-content-between align-items-center" >
2021-09-29 02:25:47 +00:00
< h4 class = "card-title" > < i class = "fas fa-server" > < / i > {{ translate('dashboard', 'allServers', data['lang']) }}< / h4 >
2021-09-27 16:52:43 +00:00
{% if len(data['servers']) > 0 %}
2021-09-29 02:25:47 +00:00
< span class = "too_small" title = "{{ translate('dashboard', 'cannotSeeOnMobile', data['lang']) }}" , data-content = "{{ translate('dashboard', 'cannotSeeOnMobile2', data['lang']) }}" , data-placement = "top" > < / span >
2021-09-27 17:08:43 +00:00
{% end %}
2021-09-29 02:25:47 +00:00
< div > < a class = "nav-link" href = "/server/step1" > < i class = "fas fa-plus-circle" > < / i > {{ translate('dashboard', 'newServer', data['lang']) }}< / a > < / div >
2020-08-13 14:38:36 +00:00
< / div >
< div class = "card-body" >
< div class = "table-responsive" >
2021-09-25 19:07:39 +00:00
{% if len(data['servers']) == 0%}
< div style = "text-align: center; color: grey;" >
2021-09-29 02:25:47 +00:00
< h1 > {{ translate('dashboard', 'welcome', data['lang']) }}< / h1 >
2021-09-25 19:07:39 +00:00
< br >
2021-09-29 23:32:21 +00:00
< h7 > {{ translate('dashboard', 'no-servers', data['lang']) }} {{ translate('dashboard', 'newServer', data['lang']) }}.< / h7 >
2021-09-25 19:07:39 +00:00
< / div >
2021-11-23 21:11:23 +00:00
2021-09-25 19:07:39 +00:00
{% end %}
{% if len(data['servers']) > 0 %}
2021-08-21 23:41:25 +00:00
< table class = "table table-hover" >
2020-08-13 14:38:36 +00:00
< thead >
< tr class = "rounded" >
2021-09-29 02:25:47 +00:00
< th > {{ translate('dashboard', 'server', data['lang']) }}< / th >
< th > {{ translate('dashboard', 'actions', data['lang']) }}< / th >
< th > {{ translate('dashboard', 'cpuUsage', data['lang']) }}< / th >
< th > {{ translate('dashboard', 'memUsage', data['lang']) }}< / th >
< th > {{ translate('dashboard', 'world', data['lang']) }}< / th >
< th > {{ translate('dashboard', 'players', data['lang']) }}< / th >
< th > {{ translate('dashboard', 'status', data['lang']) }}< / th >
2020-08-13 14:38:36 +00:00
< / tr >
< / thead >
< tbody >
2020-08-24 17:08:17 +00:00
{% for server in data['servers'] %}
2020-08-13 14:38:36 +00:00
< tr >
< td >
2020-08-24 17:08:17 +00:00
< i class = "fas fa-server" > < / i >
2020-08-27 22:30:56 +00:00
< a href = "/panel/server_detail?id={{server['server_data']['server_id']}}" >
{{ server['server_data']['server_name'] }}
2020-08-24 17:08:17 +00:00
< / a >
< / td >
2021-07-26 22:43:57 +00:00
< td id = "controls{{server['server_data']['server_id']}}" class = "actions_serverlist" >
2021-08-21 23:41:25 +00:00
{% if server['user_command_permission'] %}
{% if server['stats']['running'] %}
2021-09-29 02:25:47 +00:00
< a class = "stop_button" data-id = "{{server['server_data']['server_id']}}" data-toggle = "tooltip" title = {{ translate ( ' dashboard ' , ' stop ' , data [ ' lang ' ] ) } } > < i class = "fas fa-stop" > < / i > < / a >
< a class = "restart_button" data-id = "{{server['server_data']['server_id']}}" data-toggle = "tooltip" title = {{ translate ( ' dashboard ' , ' restart ' , data [ ' lang ' ] ) } } > < i class = "fas fa-sync" > < / i > < / a >
< a class = "kill_button" data-id = "{{server['server_data']['server_id']}}" class = "kill_button" data-toggle = "tooltip" title = {{ translate ( ' dashboard ' , ' kill ' , data [ ' lang ' ] ) } } > < i class = "fas fa-skull" > < / i > < / a >
2021-08-21 23:41:25 +00:00
{% elif server['stats']['updating']%}
2021-09-29 02:25:47 +00:00
< a data-id = "{{server['server_data']['server_id']}}" class = "" > {{ translate('serverTerm', 'updating', data['lang']) }}< / i > < / a >
2021-09-20 18:46:31 +00:00
{% elif server['stats']['waiting_start']%}
2021-09-29 02:25:47 +00:00
< a data-id = "{{server['server_data']['server_id']}}" class = "" title = {{ translate ( ' dashboard ' , ' delay-explained ' , data [ ' lang ' ] ) } } > {{ translate('dashboard', 'starting', data['lang']) }}< / i > < / a >
2021-08-21 23:41:25 +00:00
{% else %}
2021-09-29 02:25:47 +00:00
< a data-id = "{{server['server_data']['server_id']}}" class = "play_button" > < i class = "fas fa-play" data-toggle = "tooltip" title = {{ translate ( ' dashboard ' , ' start ' , data [ ' lang ' ] ) } } > < / i > < / a >
< a data-id = "{{server['server_data']['server_id']}}" class = "clone_button" > < i class = "fas fa-clone" data-toggle = "tooltip" title = {{ translate ( ' dashboard ' , ' clone ' , data [ ' lang ' ] ) } } > < / i > < / a >
< a class = "kill_button" data-id = "{{server['server_data']['server_id']}}" class = "kill_button" data-toggle = "tooltip" title = {{ translate ( ' dashboard ' , ' kill ' , data [ ' lang ' ] ) } } > < i class = "fas fa-skull" > < / i > < / a >
2021-08-21 23:41:25 +00:00
{% end %}
2020-08-24 17:08:17 +00:00
{% end %}
2020-08-13 14:38:36 +00:00
< / td >
2020-08-24 17:08:17 +00:00
2020-08-13 14:38:36 +00:00
< td >
2021-03-22 04:02:18 +00:00
< div class = "progress mb-1" data-toggle = "tooltip" data-placement = "top" title = "{{server['stats']['cpu']}}" >
2020-08-28 00:01:41 +00:00
< div class = "progress-bar
2021-03-22 04:02:18 +00:00
{% if server['stats']['cpu'] < = 33 %}
2020-08-28 00:01:41 +00:00
bg-success
2021-03-22 04:02:18 +00:00
{% elif 34 < = server['stats']['cpu'] < = 66 %}
2020-08-28 00:01:41 +00:00
bg-warning
{% else %}
bg-danger
{% end %}
2021-03-22 04:02:18 +00:00
" role="progressbar" style="width: {{server['stats']['cpu']}}%" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">< / div >
2020-08-13 14:38:36 +00:00
< / div >
2021-03-22 04:02:18 +00:00
{{server['stats']['cpu']}}%
2020-08-13 14:38:36 +00:00
< / td >
2020-08-24 17:08:17 +00:00
2020-08-13 14:38:36 +00:00
< td >
2021-03-22 04:02:18 +00:00
< div class = "progress mb-1" data-toggle = "tooltip" data-placement = "top" title = "{{server['stats']['mem']}}" >
2020-08-28 00:01:41 +00:00
< div class = "progress-bar
2021-03-22 04:02:18 +00:00
{% if server['stats']['mem_percent'] < = 33 %}
2020-08-28 00:01:41 +00:00
bg-success
2021-03-22 04:02:18 +00:00
{% elif 34 < = server['stats']['mem_percent'] < = 66 %}
2020-08-28 00:01:41 +00:00
bg-warning
{% else %}
bg-danger
{% end %}
2021-03-22 04:02:18 +00:00
" role="progressbar" style="width: {{server['stats']['mem_percent']}}%" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">< / div >
2020-08-13 14:38:36 +00:00
< / div >
2021-03-22 04:02:18 +00:00
{{server['stats']['mem_percent']}}% -
2020-08-31 17:46:25 +00:00
2021-03-22 04:02:18 +00:00
{% if server['stats']['mem'] == 0 %}
2020-08-31 17:46:25 +00:00
0 MB
{% else %}
2021-03-22 04:02:18 +00:00
{{server['stats']['mem']}}
2020-08-31 17:46:25 +00:00
{% end %}
2020-08-13 14:38:36 +00:00
< / td >
< td >
2021-03-22 04:02:18 +00:00
{{ server['stats']['world_name'] }} : {{ server['stats']['world_size'] }}
2020-08-13 14:38:36 +00:00
< / td >
< td >
2021-03-22 04:02:18 +00:00
{% if server['stats']['int_ping_results'] %}
2021-09-29 02:25:47 +00:00
{{ server['stats']['online'] }} / {{ server['stats']['max'] }} {{ translate('dashboard', 'max', data['lang']) }}< br / >
2020-08-31 17:46:25 +00:00
2021-03-22 04:02:18 +00:00
{% if server['stats']['desc'] != 'False' %}
2021-11-23 21:11:23 +00:00
{{ server['stats']['desc'] }} < br / >
2020-08-31 17:46:25 +00:00
{% end %}
2021-03-22 04:02:18 +00:00
{% if server['stats']['version'] != 'False' %}
{{ server['stats']['version'] }}
2020-08-31 17:46:25 +00:00
{% end %}
2020-08-24 23:11:17 +00:00
{% end %}
2020-08-31 17:46:25 +00:00
2020-08-24 17:08:17 +00:00
< / td >
< td >
2021-03-22 04:02:18 +00:00
{% if server['stats']['running'] %}
2021-09-29 02:25:47 +00:00
< i class = "fas fa-thumbs-up" > < / i > < span class = "text-success" > {{ translate('dashboard', 'online', data['lang']) }}< / span >
2020-08-24 17:08:17 +00:00
{% else %}
2021-09-29 02:25:47 +00:00
< i class = "fas fa-thumbs-down" > < / i > < span class = "text-danger" > {{ translate('dashboard', 'offline', data['lang']) }}< / span >
2020-08-24 17:08:17 +00:00
{% end %}
2020-08-13 14:38:36 +00:00
< / td >
< / tr >
2020-08-24 17:08:17 +00:00
{% end %}
2020-08-13 14:38:36 +00:00
< / tbody >
< / table >
2021-09-25 19:07:39 +00:00
{% end %}
2020-08-13 14:38:36 +00:00
< / div >
< / div >
< / div >
< / div >
< / div >
2020-08-24 17:08:17 +00:00
2020-08-13 14:38:36 +00:00
< / div >
<!-- content - wrapper ends -->
2021-09-27 16:52:43 +00:00
< style >
.popover-body{
color: white !important;;
}
< / style >
2020-08-13 14:38:36 +00:00
2020-08-24 23:11:17 +00:00
{% end %}
{% block js %}
< script >
2021-11-23 21:11:23 +00:00
$(document).ready(function(){
2021-09-27 16:52:43 +00:00
$('[data-toggle="popover"]').popover();
2021-09-29 00:15:29 +00:00
if($(window).width() < 1000 ) {
$('.too_small').popover("show");
}
2021-11-23 21:11:23 +00:00
2021-09-27 16:52:43 +00:00
});
$(window).ready(function(){
$('body').click(function(){
$('.too_small').popover("hide");
});
});
2021-09-29 00:15:29 +00:00
$(window).resize(function() {
// This will execute whenever the window is resized
if($(window).width() < 1000 ) {
$('.too_small').popover("show");
}
else{
$('.too_small').popover("hide");
} // New width
});
2021-09-27 16:52:43 +00:00
< / script >
< script >
2020-08-24 23:11:17 +00:00
function send_command (server_id, command){
2021-02-26 08:59:25 +00:00
/* this getCookie function is in base.html */
2020-08-24 23:11:17 +00:00
var token = getCookie("_xsrf");
$.ajax({
type: "POST",
headers: {'X-XSRFToken': token},
url: '/server/command?command=' + command + '& id=' + server_id,
success: function(data){
console.log("got response:");
console.log(data);
2021-08-07 19:23:22 +00:00
setTimeout(function(){
if (command != 'start_server'){
location.reload();
}
}, 10000);
2020-08-24 23:11:17 +00:00
}
});
}
2021-09-13 19:03:47 +00:00
function send_kill (server_id){
/* this getCookie function is in base.html */
var token = getCookie("_xsrf");
$.ajax({
type: "POST",
headers: {'X-XSRFToken': token},
url: '/ajax/kill?id=' + server_id,
success: function(data){
console.log("got response:");
console.log(data);
setTimeout(function(){
location.reload();
}, 10000);
}
});
}
2020-08-24 23:11:17 +00:00
$( document ).ready(function() {
console.log('ready for JS!')
$( ".play_button" ).click(function() {
server_id = $(this).attr("data-id");
send_command(server_id, 'start_server');
bootbox.alert({
backdrop: true,
2021-09-29 02:25:47 +00:00
title: '{% raw translate("dashboard", "sendingCommand", data['lang']) %}',
message: '< div align = "center" > < i class = "fas fa-spin fa-spinner" > < / i > {% raw translate("dashboard", "bePatientStart", data['lang']) %} < / div > '
2020-08-24 23:11:17 +00:00
});
});
$( ".stop_button" ).click(function() {
console.log("stopping server");
server_id = $(this).attr("data-id");
send_command(server_id, 'stop_server');
bootbox.alert({
backdrop: true,
2021-09-29 02:25:47 +00:00
title: '{% raw translate("dashboard", "sendingCommand", data['lang']) %}',
message: '< div align = "center" > < i class = "fas fa-spin fa-spinner" > < / i > {% raw translate("dashboard", "bePatientStop", data['lang']) %} < / div > '
2020-08-24 23:11:17 +00:00
});
});
$( ".restart_button" ).click(function() {
server_id = $(this).attr("data-id");
send_command(server_id, 'restart_server');
bootbox.alert({
backdrop: true,
2021-09-29 02:25:47 +00:00
title: '{% raw translate("dashboard", "sendingCommand", data['lang']) %}',
message: '< div align = "center" > < i class = "fas fa-spin fa-spinner" > < / i > {% raw translate("dashboard", "bePatientRestart", data['lang']) %} < / div > '
2020-08-24 23:11:17 +00:00
});
2021-09-13 19:03:47 +00:00
});
$( ".kill_button" ).click(function() {
server_id = $(this).attr("data-id");
bootbox.confirm({
message: "This will kill the server process and all it's subprocesses. Killing a process can potentially corrupt files. Only do this in extreme circumstances. Are you sure you would like to continue?",
buttons: {
confirm: {
2021-09-29 02:25:47 +00:00
label: '{% raw translate("dashboard", "kill", data['lang']) %}',
2021-09-13 19:03:47 +00:00
className: 'btn-danger'
},
cancel: {
2021-09-29 02:25:47 +00:00
label: '{% raw translate("panelConfig", "cancel", data['lang']) %}',
2021-09-13 19:03:47 +00:00
className: 'btn-secondary'
}
},
callback: function (result) {
if(result){
send_kill(server_id);
var dialog = bootbox.dialog({
2021-09-29 02:25:47 +00:00
title: '{% raw translate("dashboard", "killing", data['lang']) %}',
2021-09-13 19:03:47 +00:00
message: '< p > < i class = "fa fa-spin fa-spinner" > < / i > Loading...< / p > '
});
2021-11-23 21:11:23 +00:00
2021-09-13 19:03:47 +00:00
dialog.init(function(){
setTimeout(function(){
location.reload();
}, 15000);
});
}
}
});
2020-08-24 23:11:17 +00:00
});
2021-02-27 12:05:04 +00:00
if (webSocket) {
cpu_data = document.getElementById('cpu_data');
cpu_usage = document.getElementById('cpu_usage');
mem_usage = document.getElementById('mem_usage');
mem_percent = document.getElementById('mem_percent');
webSocket.on('update_host_stats', function (hostStats) {
2021-09-29 02:25:47 +00:00
var cpuDataTitle = `{% raw translate('dashboard', 'cpuCores', data['lang']) %}: ${hostStats.cpu_cores} < br / > {% raw translate("dashboard", "cpuCurFreq", data['lang']) %}: ${hostStats.cpu_cur_freq} < br / > {% raw translate("dashboard", "cpuMaxFreq", data['lang']) %}: ${hostStats.cpu_max_freq}`;
2021-02-27 12:05:04 +00:00
cpu_data.setAttribute('data-original-title', cpuDataTitle);
cpu_usage.textContent = hostStats.cpu_usage;
2021-09-29 02:25:47 +00:00
mem_usage.setAttribute('data-original-title', `{% raw translate("dashboard", "memUsage", data['lang']) %}: ${hostStats.mem_usage}`);
2021-02-27 12:05:04 +00:00
mem_percent.textContent = hostStats.mem_percent + '%';
});
}
2021-08-21 19:17:07 +00:00
if (webSocket) {
webSocket.on('send_start_reload', function (start_error) {
location.reload()
});
}
2021-08-21 20:17:35 +00:00
2021-07-26 22:43:57 +00:00
if (webSocket) {
webSocket.on('update_button_status', function (updateButton) {
var id = 'controls';
2021-07-27 01:05:52 +00:00
var dataId = updateButton.server_id;
2021-07-27 01:39:22 +00:00
var string = updateButton.string
2021-07-26 22:43:57 +00:00
var id = id.concat(updateButton.server_id);
if (updateButton.isUpdating){
console.log(updateButton.isUpdating)
2021-07-27 01:39:22 +00:00
document.getElementById(id).innerHTML = string;
2021-07-26 22:43:57 +00:00
}
else{
2021-07-27 01:05:52 +00:00
window.location.reload()
2021-07-26 22:43:57 +00:00
}
});
}
2021-02-26 15:39:35 +00:00
2021-01-28 18:46:13 +00:00
$( ".clone_button" ).click(function() {
server_id = $(this).attr("data-id");
send_command(server_id, 'clone_server');
bootbox.alert({
backdrop: true,
2021-09-29 02:25:47 +00:00
title: '{% raw translate("dashboard", "sendingCommand", data['lang']) %}',
message: '< div align = "center" > < i class = "fas fa-spin fa-spinner" > < / i > {% raw translate("dashboard", "bePatientClone", data['lang']) %} < / div > '
2021-01-28 18:46:13 +00:00
});
});
2020-08-24 23:11:17 +00:00
});
< / script >
2020-08-13 14:38:36 +00:00
{% end %}