Admin API call to list server errors
This commit is contained in:
parent
73e0aa17c4
commit
29640e614c
2 changed files with 29 additions and 4 deletions
|
@ -2,7 +2,6 @@ import logging
|
||||||
import time
|
import time
|
||||||
import cgi
|
import cgi
|
||||||
import socket
|
import socket
|
||||||
import sys
|
|
||||||
import gevent
|
import gevent
|
||||||
|
|
||||||
from gevent.pywsgi import WSGIServer
|
from gevent.pywsgi import WSGIServer
|
||||||
|
@ -16,6 +15,17 @@ from Debug import Debug
|
||||||
import importlib
|
import importlib
|
||||||
|
|
||||||
|
|
||||||
|
class LogDb(logging.StreamHandler):
|
||||||
|
def __init__(self, ui_server):
|
||||||
|
self.lines = []
|
||||||
|
self.ui_server = ui_server
|
||||||
|
return super(LogDb, self).__init__()
|
||||||
|
|
||||||
|
def emit(self, record):
|
||||||
|
self.ui_server.updateWebsocket(log_event=record.levelname)
|
||||||
|
self.lines.append([time.time(), record.levelname, self.format(record)])
|
||||||
|
|
||||||
|
|
||||||
# Skip websocket handler if not necessary
|
# Skip websocket handler if not necessary
|
||||||
class UiWSGIHandler(WSGIHandler):
|
class UiWSGIHandler(WSGIHandler):
|
||||||
|
|
||||||
|
@ -53,7 +63,6 @@ class UiWSGIHandler(WSGIHandler):
|
||||||
|
|
||||||
|
|
||||||
class UiServer:
|
class UiServer:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.ip = config.ui_ip
|
self.ip = config.ui_ip
|
||||||
self.port = config.ui_port
|
self.port = config.ui_port
|
||||||
|
@ -86,6 +95,10 @@ class UiServer:
|
||||||
self.sites = SiteManager.site_manager.list()
|
self.sites = SiteManager.site_manager.list()
|
||||||
self.log = logging.getLogger(__name__)
|
self.log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
self.logdb_errors = LogDb(ui_server=self)
|
||||||
|
self.logdb_errors.setLevel(logging.getLevelName("ERROR"))
|
||||||
|
logging.getLogger('').addHandler(self.logdb_errors)
|
||||||
|
|
||||||
# After WebUI started
|
# After WebUI started
|
||||||
def afterStarted(self):
|
def afterStarted(self):
|
||||||
from util import Platform
|
from util import Platform
|
||||||
|
@ -196,5 +209,10 @@ class UiServer:
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
def updateWebsocket(self, **kwargs):
|
def updateWebsocket(self, **kwargs):
|
||||||
|
if kwargs:
|
||||||
|
param = {"event": list(kwargs.items())[0]}
|
||||||
|
else:
|
||||||
|
param = None
|
||||||
|
|
||||||
for ws in self.websockets:
|
for ws in self.websockets:
|
||||||
ws.event("serverChanged", kwargs)
|
ws.event("serverChanged", param)
|
||||||
|
|
|
@ -139,6 +139,8 @@ class UiWebsocket(object):
|
||||||
self.cmd("setSiteInfo", site_info)
|
self.cmd("setSiteInfo", site_info)
|
||||||
elif channel == "serverChanged":
|
elif channel == "serverChanged":
|
||||||
server_info = self.formatServerInfo()
|
server_info = self.formatServerInfo()
|
||||||
|
if len(params) > 0 and params[0]: # Extra data
|
||||||
|
server_info.update(params[0])
|
||||||
self.cmd("setServerInfo", server_info)
|
self.cmd("setServerInfo", server_info)
|
||||||
elif channel == "announcerChanged":
|
elif channel == "announcerChanged":
|
||||||
site = params[0]
|
site = params[0]
|
||||||
|
@ -1101,6 +1103,11 @@ class UiWebsocket(object):
|
||||||
self.user.save()
|
self.user.save()
|
||||||
self.response(to, "ok")
|
self.response(to, "ok")
|
||||||
|
|
||||||
|
@flag.admin
|
||||||
|
@flag.no_multiuser
|
||||||
|
def actionServerErrors(self, to):
|
||||||
|
return self.server.logdb_errors.lines
|
||||||
|
|
||||||
@flag.admin
|
@flag.admin
|
||||||
@flag.no_multiuser
|
@flag.no_multiuser
|
||||||
def actionServerUpdate(self, to):
|
def actionServerUpdate(self, to):
|
||||||
|
@ -1227,4 +1234,4 @@ class UiWebsocket(object):
|
||||||
else:
|
else:
|
||||||
gevent.spawn(main.file_server.checkSites, check_files=False, force_port_check=True)
|
gevent.spawn(main.file_server.checkSites, check_files=False, force_port_check=True)
|
||||||
|
|
||||||
self.response(to, "ok")
|
self.response(to, "ok")
|
Loading…
Reference in a new issue