From 5d973490687c40922f2b7a2ddf2a3e19c207eb0f Mon Sep 17 00:00:00 2001
From: Nate Sesti <sestinj@gmail.com>
Date: Thu, 27 Jul 2023 11:23:55 -0700
Subject: feat: :loud_sound: give users access to Continue server logs

can see logs in ~/.continue/continue.log
---
 continuedev/src/continuedev/libs/util/paths.py     |  5 ++++
 .../continuedev/plugins/context_providers/file.py  | 35 ++++++++++++----------
 continuedev/src/continuedev/server/main.py         | 29 ++++++++++++++++--
 3 files changed, 51 insertions(+), 18 deletions(-)

(limited to 'continuedev')

diff --git a/continuedev/src/continuedev/libs/util/paths.py b/continuedev/src/continuedev/libs/util/paths.py
index 14a97f57..b08b0949 100644
--- a/continuedev/src/continuedev/libs/util/paths.py
+++ b/continuedev/src/continuedev/libs/util/paths.py
@@ -44,3 +44,8 @@ def getConfigFilePath() -> str:
             f.write(getDefaultConfigFile())
 
     return path
+
+
+def getLogFilePath():
+    path = os.path.join(getGlobalFolderPath(), "continue.log")
+    return path
diff --git a/continuedev/src/continuedev/plugins/context_providers/file.py b/continuedev/src/continuedev/plugins/context_providers/file.py
index 90835d98..31c8e1d9 100644
--- a/continuedev/src/continuedev/plugins/context_providers/file.py
+++ b/continuedev/src/continuedev/plugins/context_providers/file.py
@@ -13,14 +13,13 @@ def get_file_contents(filepath: str) -> str:
     try:
         filesize = os.path.getsize(filepath)
         if filesize > MAX_SIZE_IN_BYTES:
-            print("File is over 1MB size limit: ", filepath, filesize)
-            return ""
+            return None
 
         with open(filepath, "r") as f:
             return f.read()
     except Exception as e:
-        print("Error reading file contents", filepath, e)
-        return ""
+        # Some files cannot be read, e.g. binary files
+        return None
 
 
 DEFAULT_IGNORE_DIRS = [
@@ -68,15 +67,21 @@ class FileContextProvider(ContextProvider):
             if len(filepaths) > 1000:
                 break
 
-        return [ContextItem(
-            content=get_file_contents(file)[:min(
-                2000, len(get_file_contents(file)))],
-            description=ContextItemDescription(
-                name=os.path.basename(file),
-                description=file,
-                id=ContextItemId(
-                    provider_title=self.title,
-                    item_id=re.sub(r'[^0-9a-zA-Z_-]', '', file)
+        items = []
+        for file in filepaths:
+            content = get_file_contents(file)
+            if content is None:
+                continue  # no pun intended
+
+            items.append(ContextItem(
+                content=content[:min(2000, len(content))],
+                description=ContextItemDescription(
+                    name=os.path.basename(file),
+                    description=file,
+                    id=ContextItemId(
+                        provider_title=self.title,
+                        item_id=re.sub(r'[^0-9a-zA-Z_-]', '', file)
+                    )
                 )
-            )
-        ) for file in filepaths]
+            ))
+        return items
diff --git a/continuedev/src/continuedev/server/main.py b/continuedev/src/continuedev/server/main.py
index 0b59d4fe..e155fad4 100644
--- a/continuedev/src/continuedev/server/main.py
+++ b/continuedev/src/continuedev/server/main.py
@@ -1,4 +1,5 @@
 import asyncio
+import sys
 import time
 import psutil
 import os
@@ -7,10 +8,13 @@ from fastapi.middleware.cors import CORSMiddleware
 import atexit
 import uvicorn
 import argparse
+import logging.config
+
 
 from .ide import router as ide_router
 from .gui import router as gui_router
 from .session_manager import session_manager
+from ..libs.util.paths import getLogFilePath
 
 app = FastAPI()
 
@@ -39,12 +43,31 @@ parser.add_argument("-p", "--port", help="server port",
                     type=int, default=65432)
 args = parser.parse_args()
 
+LOGGING_CONFIG = {
+    'version': 1,
+    'disable_existing_loggers': False,
+    'handlers': {
+        'file': {
+            'level': 'DEBUG',
+            'class': 'logging.FileHandler',
+            'filename': 'uvicorn.log',
+        },
+    },
+    'root': {
+        'level': 'DEBUG',
+        'handlers': ['file']
+    }
+}
+
+logging.config.dictConfig(LOGGING_CONFIG)
+sys.stdout = open(getLogFilePath(), 'w')
 
-# log_file = open('output.log', 'a')
-# sys.stdout = log_file
 
 def run_server():
-    uvicorn.run(app, host="0.0.0.0", port=args.port)
+    config = uvicorn.Config(app, host="0.0.0.0", port=args.port)
+    server = uvicorn.Server(config)
+
+    server.run()
 
 
 async def cleanup_coroutine():
-- 
cgit v1.2.3-70-g09d2