From de464918a8d0caacb60f3495d99eddfa6b31f160 Mon Sep 17 00:00:00 2001 From: lucasbutzke Date: Thu, 31 Jul 2025 11:55:28 -0300 Subject: [PATCH] [RTOP-26] Fix logging on restapi --- webserver/config.py | 18 ++++++++++++------ webserver/restapi.py | 22 ++++++++++++++-------- webserver/webserver.py | 6 ++++++ 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/webserver/config.py b/webserver/config.py index 066cce3..3ba846c 100644 --- a/webserver/config.py +++ b/webserver/config.py @@ -11,7 +11,13 @@ from dotenv import load_dotenv ENV_PATH = Path(__file__).resolve().parent.parent / ".env" DB_PATH = Path(__file__).resolve().parent.parent / "restapi.db" BASE_DIR = os.path.abspath(os.path.dirname(__file__)) + logger = logging.getLogger(__name__) +logging.basicConfig( + level=logging.DEBUG, # Minimum level to capture + format='[%(levelname)s] %(asctime)s - %(message)s', + datefmt='%H:%M:%S' +) # Function to validate environment variable values def is_valid_env(var_name, value): @@ -34,17 +40,17 @@ def generate_env_file(): f.write(f"PEPPER={pepper}\n") os.chmod(ENV_PATH, 0o600) - logger.info(f"✅ .env file created at {ENV_PATH}") + logger.info(f".env file created at {ENV_PATH}") # Ensure the database file exists and is writable # Deletion is required because new secrets will change the database saved hashes if os.path.exists(DB_PATH): os.remove(DB_PATH) - logger.info(f"⚠️ Deleted existing database file: {DB_PATH}") + logger.info(f"Deleted existing database file: {DB_PATH}") # Load .env file if not os.path.isfile(ENV_PATH): - logger.warning("⚠️ .env file not found, creating one...") + logger.warning(".env file not found, creating one...") generate_env_file() load_dotenv(dotenv_path=ENV_PATH, override=False) @@ -56,15 +62,15 @@ try: if not val or not is_valid_env(var, val): raise RuntimeError(f"Environment variable '{var}' is invalid or missing") except RuntimeError as e: - logger.error(f"❌ {e}") + logger.error(f"{e}") # Need to regenerate .env file and remove the database as well response = input("Do you want to regenerate the .env file? This will delete your database. [y/N]: ").strip().lower() if response == 'y': - logger.info("🔁 Regenerating .env with new valid values...") + logger.info("Regenerating .env with new valid values...") generate_env_file() load_dotenv(ENV_PATH) else: - logger.error("🚫 Exiting due to invalid environment configuration.") + logger.error("Exiting due to invalid environment configuration.") exit(1) diff --git a/webserver/restapi.py b/webserver/restapi.py index 94eec86..50a3ac7 100644 --- a/webserver/restapi.py +++ b/webserver/restapi.py @@ -19,6 +19,12 @@ else: app_restapi.config.from_object(config.DevConfig) logger = logging.getLogger(__name__) +logging.basicConfig( + level=logging.DEBUG, # Minimum level to capture + format='[%(levelname)s] %(asctime)s - %(message)s', + datefmt='%H:%M:%S' +) + restapi_bp = Blueprint('restapi_blueprint', __name__) _handler_callback_get: Optional[Callable[[str, dict], dict]] = None _handler_callback_post: Optional[Callable[[str, dict], dict]] = None @@ -74,12 +80,12 @@ def user_lookup_callback(_jwt_header, jwt_data): def register_callback_get(callback: Callable[[str, dict], dict]): global _handler_callback_get _handler_callback_get = callback - print("GET Callback registered successfully for rest_blueprint!") + logger.info("GET Callback registered successfully for rest_blueprint!") def register_callback_post(callback: Callable[[str, dict], dict]): global _handler_callback_post _handler_callback_post = callback - print("POST Callback registered successfully for rest_blueprint!") + logger.info("POST Callback registered successfully for rest_blueprint!") @restapi_bp.route("/create-user", methods=["POST"]) def create_user(): @@ -87,7 +93,7 @@ def create_user(): try: users_exist = User.query.first() is not None except Exception as e: - print(f"Error checking for users: {e}") + logger.error(f"Error checking for users: {e}") return jsonify({"msg": "User creation error"}), 401 # if there are no users, we don't need to verify JWT @@ -121,7 +127,7 @@ def get_user_info(user_id): try: user = User.query.get(user_id) except Exception as e: - print(f"Error retrieving user: {e}") + logger.error(f"Error retrieving user: {e}") return jsonify({"msg": "User retrieval error"}), 500 if not user: @@ -135,11 +141,11 @@ def get_users_info(): try: verify_jwt_in_request() except Exception as e: - print("No JWT token provided, checking for users without authentication") + logger.warning("No JWT token provided, checking for users without authentication") try: users_exist = User.query.first() is not None except Exception as e: - print(f"Error checking for users: {e}") + logger.error(f"Error checking for users: {e}") return jsonify({"msg": "User retrieval error"}), 500 if not users_exist: @@ -149,7 +155,7 @@ def get_users_info(): try: users = User.query.all() except Exception as e: - print(f"Error retrieving users: {e}") + logger.error(f"Error retrieving users: {e}") return jsonify({"msg": "User retrieval error"}), 500 return jsonify([user.to_dict() for user in users]), 200 @@ -169,7 +175,7 @@ def change_password(user_id): try: user = User.query.get(user_id) except Exception as e: - print(f"Error retrieving user: {e}") + logger.error(f"Error retrieving user: {e}") return jsonify({"msg": "User retrieval error"}), 500 if not user: diff --git a/webserver/webserver.py b/webserver/webserver.py index be07c3f..a3cc03d 100644 --- a/webserver/webserver.py +++ b/webserver/webserver.py @@ -28,7 +28,13 @@ app = flask.Flask(__name__) app.secret_key = str(os.urandom(16)) login_manager = flask_login.LoginManager() login_manager.init_app(app) + logger = logging.getLogger(__name__) +logging.basicConfig( + level=logging.DEBUG, # Minimum level to capture + format='[%(levelname)s] %(asctime)s - %(message)s', + datefmt='%H:%M:%S' +) openplc_runtime = openplc.runtime()