mirror of
https://gitlab.com/crafty-controller/crafty-4.git
synced 2024-08-30 18:23:09 +00:00
Full release on stdout fix!
Basically I ditch the ANSI codes and use the old highlighting system.
This commit is contained in:
parent
4bac56e84a
commit
d1f582edfe
@ -285,7 +285,7 @@ class Controller:
|
||||
server_command = 'java -Xms{}M -Xmx{}M -jar {} nogui'.format(helper.float_to_string(min_mem),
|
||||
helper.float_to_string(max_mem),
|
||||
full_jar_path)
|
||||
print('command: ' + server_command)
|
||||
logger.debug('command: ' + server_command)
|
||||
server_log_file = "{}/logs/latest.log".format(new_server_dir)
|
||||
server_stop = "stop"
|
||||
|
||||
|
@ -53,20 +53,11 @@ class ServerOutBuf:
|
||||
self.line_buffer += char
|
||||
|
||||
def new_line_handler(self, new_line):
|
||||
console.debug('New line: {}'.format(new_line))
|
||||
|
||||
new_line = re.sub('(\033\\[(0;)?[0-9]*[A-z]?(;[0-9])?m?)|(> )', '', new_line)
|
||||
new_line = re.sub('[A-z]{2}\b\b', '', new_line)
|
||||
highlighted = helper.log_colors(html.escape(new_line))
|
||||
|
||||
print('broadcasting new vterm line')
|
||||
|
||||
websocket_helper.broadcast_page_params(
|
||||
'/panel/server_detail',
|
||||
{
|
||||
'id': self.server_id
|
||||
},
|
||||
'notification',
|
||||
'test test test'
|
||||
)
|
||||
logger.debug('Broadcasting new virtual terminal line')
|
||||
|
||||
# TODO: Do not send data to clients who do not have permission to view this server's console
|
||||
websocket_helper.broadcast_page_params(
|
||||
@ -76,8 +67,7 @@ class ServerOutBuf:
|
||||
},
|
||||
'vterm_new_line',
|
||||
{
|
||||
'line': highlighted + '<br />',
|
||||
'server_id': self.server_id
|
||||
'line': highlighted + '<br />'
|
||||
}
|
||||
)
|
||||
|
||||
@ -137,7 +127,7 @@ class Server:
|
||||
|
||||
def run_threaded_server(self):
|
||||
# start the server
|
||||
self.server_thread = threading.Thread(target=self.start_server, daemon=True)
|
||||
self.server_thread = threading.Thread(target=self.start_server, daemon=True, name='{}_server_thread'.format(self.server_id))
|
||||
self.server_thread.start()
|
||||
|
||||
def setup_server_run_command(self):
|
||||
@ -185,8 +175,8 @@ class Server:
|
||||
self.process = pexpect.spawn(self.server_command, cwd=self.server_path, timeout=None, encoding='utf-8')
|
||||
out_buf = ServerOutBuf(self.process, self.server_id)
|
||||
|
||||
console.cyan('Start vterm listener')
|
||||
threading.Thread(target=out_buf.check, daemon=True).start()
|
||||
logger.debug('Starting virtual terminal listener for server {}'.format(self.name))
|
||||
threading.Thread(target=out_buf.check, daemon=True, name='{}_virtual_terminal'.format(self.server_id)).start()
|
||||
|
||||
self.is_crashed = False
|
||||
|
||||
|
@ -196,7 +196,6 @@ class TasksManager:
|
||||
|
||||
host_stats = db_helper.get_latest_hosts_stats()
|
||||
if len(websocket_helper.clients) > 0:
|
||||
print('there are clients')
|
||||
# There are clients
|
||||
websocket_helper.broadcast_page('/panel/dashboard', 'update_host_stats', {
|
||||
'cpu_usage': host_stats.get('cpu_usage'),
|
||||
|
@ -6,6 +6,7 @@ import bleach
|
||||
import os
|
||||
import shutil
|
||||
import html
|
||||
import re
|
||||
|
||||
from app.classes.shared.console import console
|
||||
from app.classes.shared.models import Users, installer
|
||||
@ -71,6 +72,8 @@ class AjaxHandler(BaseHandler):
|
||||
|
||||
for d in data:
|
||||
try:
|
||||
d = re.sub('(\033\\[(0;)?[0-9]*[A-z]?(;[0-9])?m?)|(> )', '', d)
|
||||
d = re.sub('[A-z]{2}\b\b', '', d)
|
||||
line = helper.log_colors(html.escape(d))
|
||||
self.write('{}<br />'.format(line))
|
||||
# self.write(d.encode("utf-8"))
|
||||
@ -152,7 +155,6 @@ class AjaxHandler(BaseHandler):
|
||||
file_name = self.get_body_argument('file_name', default=None, strip=True)
|
||||
file_path = os.path.join(file_parent, file_name)
|
||||
server_id = self.get_argument('id', None)
|
||||
print(server_id)
|
||||
|
||||
if not self.check_server_id(server_id, 'create_file'): return
|
||||
else: server_id = bleach.clean(server_id)
|
||||
@ -172,7 +174,6 @@ class AjaxHandler(BaseHandler):
|
||||
dir_name = self.get_body_argument('dir_name', default=None, strip=True)
|
||||
dir_path = os.path.join(dir_parent, dir_name)
|
||||
server_id = self.get_argument('id', None)
|
||||
print(server_id)
|
||||
|
||||
if not self.check_server_id(server_id, 'create_dir'): return
|
||||
else: server_id = bleach.clean(server_id)
|
||||
@ -211,7 +212,6 @@ class AjaxHandler(BaseHandler):
|
||||
elif page == "del_dir":
|
||||
dir_path = self.get_body_argument('dir_path', default=None, strip=True)
|
||||
server_id = self.get_argument('id', None)
|
||||
print(server_id)
|
||||
|
||||
console.warning("delete {} for server {}".format(file_path, server_id))
|
||||
|
||||
@ -235,9 +235,6 @@ class AjaxHandler(BaseHandler):
|
||||
file_contents = self.get_body_argument('file_contents', default=None, strip=True)
|
||||
file_path = self.get_body_argument('file_path', default=None, strip=True)
|
||||
server_id = self.get_argument('id', None)
|
||||
print(file_contents)
|
||||
print(file_path)
|
||||
print(server_id)
|
||||
|
||||
if not self.check_server_id(server_id, 'save_file'): return
|
||||
else: server_id = bleach.clean(server_id)
|
||||
@ -256,7 +253,6 @@ class AjaxHandler(BaseHandler):
|
||||
item_path = self.get_body_argument('item_path', default=None, strip=True)
|
||||
new_item_name = self.get_body_argument('new_item_name', default=None, strip=True)
|
||||
server_id = self.get_argument('id', None)
|
||||
print(server_id)
|
||||
|
||||
if not self.check_server_id(server_id, 'rename_item'): return
|
||||
else: server_id = bleach.clean(server_id)
|
||||
|
@ -159,7 +159,7 @@ class Webserver:
|
||||
|
||||
console.info("Server Init Complete: Listening For Connections:")
|
||||
|
||||
self.ioloop = tornado.ioloop.IOLoop.instance()
|
||||
self.ioloop = tornado.ioloop.IOLoop.current()
|
||||
self.ioloop.start()
|
||||
|
||||
def stop_web_server(self):
|
||||
|
@ -1,14 +1,21 @@
|
||||
import json
|
||||
import logging
|
||||
import asyncio
|
||||
|
||||
from urllib.parse import parse_qsl
|
||||
import tornado.websocket
|
||||
from app.classes.shared.models import Users, db_helper
|
||||
from app.classes.shared.helpers import helper
|
||||
from app.classes.web.websocket_helper import websocket_helper
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
try:
|
||||
import tornado.websocket
|
||||
|
||||
except ModuleNotFoundError as e:
|
||||
logger.critical("Import Error: Unable to load {} module".format(e, e.name))
|
||||
console.critical("Import Error: Unable to load {} module".format(e, e.name))
|
||||
sys.exit(1)
|
||||
|
||||
class SocketHandler(tornado.websocket.WebSocketHandler):
|
||||
|
||||
@ -16,6 +23,7 @@ class SocketHandler(tornado.websocket.WebSocketHandler):
|
||||
self.controller = controller
|
||||
self.tasks_manager = tasks_manager
|
||||
self.translator = translator
|
||||
self.io_loop = tornado.ioloop.IOLoop.current()
|
||||
|
||||
def get_remote_ip(self):
|
||||
remote_ip = self.request.headers.get("X-Real-IP") or \
|
||||
@ -67,3 +75,9 @@ class SocketHandler(tornado.websocket.WebSocketHandler):
|
||||
logger.debug('Closed WebSocket connection')
|
||||
# websocket_helper.broadcast('notification', 'Client disconnected')
|
||||
|
||||
async def write_message_int(self, message):
|
||||
self.write_message(message)
|
||||
|
||||
def write_message_helper(self, message):
|
||||
asyncio.run_coroutine_threadsafe(self.write_message_int(message), self.io_loop.asyncio_loop)
|
||||
|
||||
|
@ -1,10 +1,20 @@
|
||||
import json
|
||||
import logging
|
||||
import sys, threading, asyncio
|
||||
|
||||
from app.classes.shared.console import console
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
try:
|
||||
import tornado.ioloop
|
||||
|
||||
except ModuleNotFoundError as e:
|
||||
logger.critical("Import Error: Unable to load {} module".format(e, e.name))
|
||||
console.critical("Import Error: Unable to load {} module".format(e, e.name))
|
||||
sys.exit(1)
|
||||
|
||||
class WebSocketHelper:
|
||||
def __init__(self):
|
||||
self.clients = set()
|
||||
@ -14,19 +24,19 @@ class WebSocketHelper:
|
||||
|
||||
def remove_client(self, client):
|
||||
self.clients.remove(client)
|
||||
|
||||
|
||||
def send_message(self, client, event_type: str, data):
|
||||
if client.check_auth():
|
||||
message = str(json.dumps({'event': event_type, 'data': data}))
|
||||
client.write_message(message)
|
||||
client.write_message_helper(message)
|
||||
|
||||
def broadcast(self, event_type: str, data):
|
||||
logger.debug('Sending to {} clients: {}'.format(len(self.clients), json.dumps({'event': event_type, 'data': data})))
|
||||
for client in self.clients:
|
||||
try:
|
||||
self.send_message(client, event_type, data)
|
||||
except Exception:
|
||||
pass
|
||||
except Exception as e:
|
||||
logger.exception('Error catched while sending WebSocket message to {}'.format(client.get_remote_ip()))
|
||||
|
||||
def broadcast_page(self, page: str, event_type: str, data):
|
||||
def filter_fn(client):
|
||||
@ -39,8 +49,8 @@ class WebSocketHelper:
|
||||
for client in clients:
|
||||
try:
|
||||
self.send_message(client, event_type, data)
|
||||
except Exception:
|
||||
pass
|
||||
except Exception as e:
|
||||
logger.exception('Error catched while sending WebSocket message to {}'.format(client.get_remote_ip()))
|
||||
|
||||
def broadcast_page_params(self, page: str, params: dict, event_type: str, data):
|
||||
def filter_fn(client):
|
||||
@ -58,8 +68,8 @@ class WebSocketHelper:
|
||||
for client in clients:
|
||||
try:
|
||||
self.send_message(client, event_type, data)
|
||||
except Exception:
|
||||
pass
|
||||
except Exception as e:
|
||||
logger.exception('Error catched while sending WebSocket message to {}'.format(client.get_remote_ip()))
|
||||
|
||||
def disconnect_all(self):
|
||||
console.info('Disconnecting WebSocket clients')
|
||||
|
@ -10,7 +10,7 @@
|
||||
"stats_update_frequency": 30,
|
||||
"delete_default_json": false,
|
||||
"show_contribute_link": true,
|
||||
"virtual_terminal_lines": 30,
|
||||
"virtual_terminal_lines": 70,
|
||||
"max_log_lines": 700,
|
||||
"keywords": ["help", "chunk"]
|
||||
}
|
||||
|
@ -65,7 +65,7 @@
|
||||
<li class="nav-item term-nav-item">
|
||||
<label class="p-0 m-0">
|
||||
<input type="checkbox" name="stop_scroll" id="stop_scroll" />
|
||||
{{ translate('serverTerm', 'stopRefresh') }}
|
||||
{{ translate('serverTerm', 'stopScroll') }}
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
@ -147,7 +147,6 @@
|
||||
let server_id = '{{ data['server_stats']['server_id']['server_id'] }}';
|
||||
|
||||
function get_server_log(){
|
||||
if( !$("#stop_scroll").is(':checked')){
|
||||
$.ajax({
|
||||
type: 'GET',
|
||||
url: '/ajax/server_log?id={{ data['server_stats']['server_id']['server_id'] }}',
|
||||
@ -155,15 +154,15 @@
|
||||
success: function (data) {
|
||||
console.log('Got Log From Server')
|
||||
$('#virt_console').html(data);
|
||||
scroll();
|
||||
},
|
||||
scrollConsole();
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function new_line_handler(data) {
|
||||
if (server_id === data.server_id) {
|
||||
$('#virt_console').append(data.line)
|
||||
$('#virt_console').append(data.line)
|
||||
if (!$("#stop_scroll").is(':checked')) {
|
||||
scrollConsole()
|
||||
}
|
||||
}
|
||||
|
||||
@ -177,13 +176,7 @@
|
||||
console.log( "ready!" );
|
||||
get_server_log()
|
||||
|
||||
if (webSocket) {
|
||||
webSocket.on('vterm_new_line', new_line_handler)
|
||||
} else {
|
||||
setInterval(function(){
|
||||
get_server_log() // this will run after every 5 seconds
|
||||
}, 1500);
|
||||
}
|
||||
webSocket.on('vterm_new_line', new_line_handler)
|
||||
});
|
||||
|
||||
$('#server_command').on('keydown', function (e) {
|
||||
@ -206,7 +199,7 @@
|
||||
|
||||
});
|
||||
|
||||
function scroll(){
|
||||
function scrollConsole(){
|
||||
var logview = $('#virt_console');
|
||||
if(logview.length)
|
||||
logview.scrollTop(logview[0].scrollHeight - logview.height());
|
||||
|
@ -120,7 +120,7 @@
|
||||
"playerControls": "Player Management"
|
||||
},
|
||||
"serverTerm": {
|
||||
"stopRefresh": "Stop Refresh",
|
||||
"stopScroll": "Stop Auto Scrollling",
|
||||
"commandInput": "Enter your command",
|
||||
"sendCommand": "Send command",
|
||||
"start": "Start",
|
||||
|
@ -120,7 +120,7 @@
|
||||
"playerControls": "Pelaajahallinta"
|
||||
},
|
||||
"serverTerm": {
|
||||
"stopRefresh": "Lopeta päivitys",
|
||||
"stopScroll": "Lopeta automaattinen vieritys",
|
||||
"commandInput": "Kirjoita komento",
|
||||
"sendCommand": "Lähetä komento",
|
||||
"start": "Käynnistä",
|
||||
|
Loading…
Reference in New Issue
Block a user