Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,14 @@ Setup background job workers as described here: https://docs.nextcloud.com/serve
<image>nextcloud/context_chat_backend</image>
<image-tag>4.3.0</image-tag>
</docker-install>
<routes>
<route>
<url>downloadLogs</url>
<verb>GET</verb>
<access_level>ADMIN</access_level>
<headers_to_exclude>[]</headers_to_exclude>
</route>
</routes>
<environment-variables>
<variable>
<name>EXTERNAL_DB</name>
Expand Down
15 changes: 15 additions & 0 deletions context_chat_backend/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@
import logging
import multiprocessing as mp
import os
import tempfile
import threading
import zipfile
from collections.abc import Callable
from contextlib import asynccontextmanager
from functools import wraps
Expand All @@ -25,6 +27,7 @@
from nc_py_api import AsyncNextcloudApp, NextcloudApp
from nc_py_api.ex_app import persistent_storage, set_handlers
from pydantic import BaseModel, ValidationInfo, field_validator
from starlette.responses import FileResponse

from .chain.context import do_doc_search
from .chain.ingest.injest import embed_sources
Expand Down Expand Up @@ -492,3 +495,15 @@ def _(query: Query) -> list[SearchResult]:
query.scopeType,
query.scopeList,
))


@app.get('/downloadLogs')
def download_logs() -> FileResponse:
with tempfile.NamedTemporaryFile('wb', delete=False) as tmp:
with zipfile.ZipFile(tmp, mode='w', compression=zipfile.ZIP_DEFLATED) as zip_file:
files = os.listdir(os.path.join(persistent_storage(), 'logs'))
for file in files:
file_path = os.path.join(persistent_storage(), 'logs', file)
if os.path.isfile(file_path): # Might be a folder (just skip it then)
zip_file.write(file_path)
return FileResponse(tmp.name, media_type='application/zip', filename='docker_logs.zip')
Loading