Papaflessas commited on
Commit
d72801c
·
1 Parent(s): 4856b42

Deploy Signal Generator app

Browse files
Files changed (2) hide show
  1. src/main.py +33 -1
  2. src/templates/logs.html +4 -0
src/main.py CHANGED
@@ -15,9 +15,41 @@ from src.db.local_database import LocalDatabase, DatabaseEntry, DataType
15
  from run_saturday_analysis import run_saturday_analysis
16
 
17
  # Configure logging
18
- logging.basicConfig(level=logging.INFO)
19
  logger = logging.getLogger(__name__)
20
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  app = FastAPI(title="Stock Alchemist Signal Generator")
22
 
23
  # --- Models ---
 
15
  from run_saturday_analysis import run_saturday_analysis
16
 
17
  # Configure logging
18
+ # logging.basicConfig(level=logging.INFO) # Replaced by handler below
19
  logger = logging.getLogger(__name__)
20
 
21
+ # --- Logging Capture Setup ---
22
+ import collections
23
+ # Create a thread-safe buffer for logs
24
+ log_buffer = collections.deque(maxlen=2000)
25
+
26
+ class LogCaptureHandler(logging.Handler):
27
+ def emit(self, record):
28
+ try:
29
+ log_entry = self.format(record)
30
+ # Prepend timestamp if not present
31
+ # if not log_entry.startswith("20"):
32
+ # log_entry = f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} - {log_entry}"
33
+ log_buffer.append(log_entry)
34
+ except Exception:
35
+ self.handleError(record)
36
+
37
+ # Setup Root Logger to capture ALL logs (including Coordinator)
38
+ root_logger = logging.getLogger()
39
+ root_logger.setLevel(logging.INFO)
40
+
41
+ # Avoid adding duplicate handlers if reloaded
42
+ if not any(isinstance(h, LogCaptureHandler) for h in root_logger.handlers):
43
+ capture_handler = LogCaptureHandler()
44
+ formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
45
+ capture_handler.setFormatter(formatter)
46
+ root_logger.addHandler(capture_handler)
47
+
48
+ # Add console handler too if not present
49
+ console_handler = logging.StreamHandler(sys.stdout)
50
+ console_handler.setFormatter(formatter)
51
+ root_logger.addHandler(console_handler)
52
+
53
  app = FastAPI(title="Stock Alchemist Signal Generator")
54
 
55
  # --- Models ---
src/templates/logs.html CHANGED
@@ -132,6 +132,10 @@
132
  }
133
  } catch (e) {
134
  console.error("Failed to fetch logs", e);
 
 
 
 
135
  }
136
  }
137
 
 
132
  }
133
  } catch (e) {
134
  console.error("Failed to fetch logs", e);
135
+ // Only show error if container is empty or we really want to know
136
+ if (container.innerText === 'Loading logs...') {
137
+ container.innerHTML = `<div class="log-error">Failed to load logs: ${e.message}. \nCheck console for details.</div>`;
138
+ }
139
  }
140
  }
141