Admin API call to list server errors

This commit is contained in:
shortcutme 2019-10-06 03:12:47 +02:00
parent 73e0aa17c4
commit 29640e614c
No known key found for this signature in database
GPG key ID: 5B63BAE6CB9613AE
2 changed files with 29 additions and 4 deletions

View file

@ -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)

View file

@ -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):