Add route for getting output logs

This commit is contained in:
pythongosssss 2024-08-27 21:27:24 +01:00
parent 6bbdcd28ae
commit d86f59ced1
4 changed files with 42 additions and 4 deletions

View File

@ -2,6 +2,7 @@ from aiohttp import web
from typing import Optional from typing import Optional
from folder_paths import models_dir, user_directory, output_directory from folder_paths import models_dir, user_directory, output_directory
from api_server.services.file_service import FileService from api_server.services.file_service import FileService
from app.log_interceptor import logs
class InternalRoutes: class InternalRoutes:
''' '''
@ -31,6 +32,15 @@ class InternalRoutes:
except Exception as e: except Exception as e:
return web.json_response({"error": str(e)}, status=500) return web.json_response({"error": str(e)}, status=500)
@self.routes.get('/logs')
async def get_logs(request):
return web.json_response([
{
'timestamp': dt.isoformat(),
'message': message
}
for dt, message in logs
])
def get_app(self): def get_app(self):
if self._app is None: if self._app is None:

21
app/log_interceptor.py Normal file
View File

@ -0,0 +1,21 @@
import io
import threading
from datetime import datetime
from collections import deque
logs = deque(maxlen=300)
class LogInterceptor(io.TextIOWrapper):
def __init__(self, stream, *args, **kwargs):
buffer = stream.buffer
encoding = stream.encoding
super().__init__(buffer, *args, **kwargs, encoding=encoding)
self._lock = threading.Lock()
def write(self, data):
with self._lock:
logs.append((datetime.now(), data))
super().write(data)
def flush(self):
super().flush()

View File

@ -1,13 +1,18 @@
import comfy.options import comfy.options
comfy.options.enable_args_parsing() comfy.options.enable_args_parsing()
# Intercept logs for error reporting
import sys
from app.log_interceptor import LogInterceptor
sys.stdout = LogInterceptor(sys.stdout)
sys.stderr = LogInterceptor(sys.stderr)
import os import os
import importlib.util import importlib.util
import folder_paths import folder_paths
import time import time
from comfy.cli_args import args from comfy.cli_args import args
def execute_prestartup_script(): def execute_prestartup_script():
def execute_script(script_path): def execute_script(script_path):
module_name = os.path.splitext(script_path)[0] module_name = os.path.splitext(script_path)[0]

View File

@ -30,7 +30,7 @@ from app.user_manager import UserManager
from model_filemanager import download_model, DownloadModelStatus from model_filemanager import download_model, DownloadModelStatus
from typing import Optional from typing import Optional
from api_server.routes.internal.internal_routes import InternalRoutes from api_server.routes.internal.internal_routes import InternalRoutes
import torch
class BinaryEventTypes: class BinaryEventTypes:
PREVIEW_IMAGE = 1 PREVIEW_IMAGE = 1
@ -401,7 +401,7 @@ class PromptServer():
return web.json_response(dt["__metadata__"]) return web.json_response(dt["__metadata__"])
@routes.get("/system_stats") @routes.get("/system_stats")
async def get_queue(request): async def system_stats(request):
device = comfy.model_management.get_torch_device() device = comfy.model_management.get_torch_device()
device_name = comfy.model_management.get_torch_device_name(device) device_name = comfy.model_management.get_torch_device_name(device)
vram_total, torch_vram_total = comfy.model_management.get_total_memory(device, torch_total_too=True) vram_total, torch_vram_total = comfy.model_management.get_total_memory(device, torch_total_too=True)
@ -410,7 +410,9 @@ class PromptServer():
"system": { "system": {
"os": os.name, "os": os.name,
"python_version": sys.version, "python_version": sys.version,
"embedded_python": os.path.split(os.path.split(sys.executable)[0])[1] == "python_embeded" "pytorch_version": torch.version.__version__,
"embedded_python": os.path.split(os.path.split(sys.executable)[0])[1] == "python_embeded",
"argv": sys.argv
}, },
"devices": [ "devices": [
{ {