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 cgi
|
||||
import socket
|
||||
import sys
|
||||
import gevent
|
||||
|
||||
from gevent.pywsgi import WSGIServer
|
||||
|
@ -16,6 +15,17 @@ from Debug import Debug
|
|||
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
|
||||
class UiWSGIHandler(WSGIHandler):
|
||||
|
||||
|
@ -53,7 +63,6 @@ class UiWSGIHandler(WSGIHandler):
|
|||
|
||||
|
||||
class UiServer:
|
||||
|
||||
def __init__(self):
|
||||
self.ip = config.ui_ip
|
||||
self.port = config.ui_port
|
||||
|
@ -86,6 +95,10 @@ class UiServer:
|
|||
self.sites = SiteManager.site_manager.list()
|
||||
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
|
||||
def afterStarted(self):
|
||||
from util import Platform
|
||||
|
@ -196,5 +209,10 @@ class UiServer:
|
|||
time.sleep(1)
|
||||
|
||||
def updateWebsocket(self, **kwargs):
|
||||
if kwargs:
|
||||
param = {"event": list(kwargs.items())[0]}
|
||||
else:
|
||||
param = None
|
||||
|
||||
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)
|
||||
elif channel == "serverChanged":
|
||||
server_info = self.formatServerInfo()
|
||||
if len(params) > 0 and params[0]: # Extra data
|
||||
server_info.update(params[0])
|
||||
self.cmd("setServerInfo", server_info)
|
||||
elif channel == "announcerChanged":
|
||||
site = params[0]
|
||||
|
@ -1101,6 +1103,11 @@ class UiWebsocket(object):
|
|||
self.user.save()
|
||||
self.response(to, "ok")
|
||||
|
||||
@flag.admin
|
||||
@flag.no_multiuser
|
||||
def actionServerErrors(self, to):
|
||||
return self.server.logdb_errors.lines
|
||||
|
||||
@flag.admin
|
||||
@flag.no_multiuser
|
||||
def actionServerUpdate(self, to):
|
||||
|
@ -1227,4 +1234,4 @@ class UiWebsocket(object):
|
|||
else:
|
||||
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