more debug logging (#135)

This commit is contained in:
CaliBrain
2025-04-15 10:52:25 -04:00
committed by GitHub
parent 954262fb2f
commit 00d0a2e7c3
5 changed files with 40 additions and 4 deletions
+2
View File
@@ -253,6 +253,8 @@ def internal_error(error: Exception) -> Union[Response, Tuple[Response, int]]:
# Register all routes with /request prefix
register_dual_routes(app)
logger.log_resource_usage()
if __name__ == '__main__':
logger.info(f"Starting Flask application on {FLASK_HOST}:{FLASK_PORT} IN {APP_ENV} mode")
app.run(
+8 -1
View File
@@ -101,6 +101,9 @@ def _get_chromium_args():
arguments = [
"--no-sandbox",
"--disable-gpu",
"--disable-dev-shm-usage", # Often helpful in Docker
"--window-size=800,600" # Optional, but recommended
]
# Conditionally add verbose logging arguments
@@ -178,6 +181,7 @@ def _init_driver():
def _get_driver():
global DRIVER, DISPLAY
global LAST_USED
logger.info("Getting driver...")
LAST_USED = time.time()
if env.DOCKERMODE and env.USE_CF_BYPASS and not DISPLAY:
from pyvirtualdisplay import Display
@@ -189,9 +193,11 @@ def _get_driver():
_reset_pyautogui_display_state()
if not DRIVER:
return _init_driver()
logger.log_resource_usage()
return DRIVER
def _reset_driver():
logger.log_resource_usage()
logger.info("Resetting driver...")
global DRIVER, DISPLAY
if DRIVER:
@@ -218,7 +224,8 @@ def _reset_driver():
except Exception as e:
logger.warning(f"Error killing chrom: {e}")
time.sleep(0.5)
logger.info("Driver reset.")
logger.log_resource_usage()
def _cleanup_driver():
global LOCKED
+16 -1
View File
@@ -3,6 +3,7 @@ set -e
# Configure timezone
if [ "$TZ" ]; then
echo "Setting timezone to $TZ"
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
fi
@@ -17,20 +18,23 @@ if [ -z "$GID" ]; then
fi
if ! getent group "$GID" >/dev/null; then
echo "Adding group $GID with name appuser"
groupadd -g "$GID" appuser
fi
# Create user if it doesn't exist
if ! id -u "$UID" >/dev/null 2>&1; then
echo "Adding user $UID with name appuser"
useradd -u "$UID" -g "$GID" -d /app -s /sbin/nologin appuser
fi
# Get username for the UID (whether we just created it or it existed)
USERNAME=$(getent passwd "$UID" | cut -d: -f1)
echo "Username for UID $UID is $USERNAME"
# Ensure proper ownership of application directories
change_ownership() {
folder=$1
echo "Changing ownership of $folder to $USERNAME:$GID"
chown -R "${UID}:${GID}" "${folder}" || echo "Failed to change ownership for ${folder}, continuing..."
}
@@ -46,6 +50,17 @@ else
command="python3 app.py"
fi
echo "Making sure /tmp is mounted and has enough space"
df -h /tmp
# Hacky way to verify /tmp has at least 1MB of space and is writable/readable
echo "Verifying /tmp has enough space"
rm -f /tmp/test.cwa-bd
for i in {1..150000}; do printf "%04d\n" $i; done > /tmp/test.cwa-bd
sum=$(python3 -c "print(sum(int(l.strip()) for l in open('/tmp/test.cwa-bd').readlines()))")
[ "$sum" == 11250075000 ] && echo "Success: /tmp is writable" || (echo "Failure: /tmp is not writable" && exit 1)
rm /tmp/test.cwa-bd
echo "Running command: '$command' as '$USERNAME' in '$APP_ENV' mode"
exec sudo -E -u "$USERNAME" $command
+12 -1
View File
@@ -12,7 +12,17 @@ class CustomLogger(logging.Logger):
def error_trace(self, msg: Any, *args: Any, **kwargs: Any) -> None:
"""Log an error message with full stack trace."""
self.log_resource_usage()
self.error(msg, *args, exc_info=True, **kwargs)
def log_resource_usage(self):
import psutil
memory = psutil.virtual_memory()
available_mb = memory.available / (1024 * 1024)
memory_used_mb = memory.used / (1024 * 1024)
cpu_percent = psutil.cpu_percent()
self.debug(f"Container Memory: Available={available_mb:.2f} MB, Used={memory_used_mb:.2f} MB, CPU: {cpu_percent:.2f}%")
def setup_logger(name: str, log_file: Path = LOG_FILE) -> CustomLogger:
"""Set up and configure a logger instance.
@@ -75,4 +85,5 @@ def setup_logger(name: str, log_file: Path = LOG_FILE) -> CustomLogger:
except Exception as e:
logger.error_trace(f"Failed to create log file: {e}", exc_info=True)
return logger
return logger
+2 -1
View File
@@ -7,4 +7,5 @@ dnspython
pyautogui
seleniumbase
gunicorn
python-xlib
python-xlib
psutil