mirror of
https://github.com/aljazceru/CTFd.git
synced 2025-12-17 22:14:25 +01:00
ping database with python instead of mysql client (#1862)
* Replaces `mysqladmin ping` with a custom script * Closes #725
This commit is contained in:
34
ping.py
Normal file
34
ping.py
Normal file
@@ -0,0 +1,34 @@
|
||||
"""
|
||||
Script for checking that a database server is available.
|
||||
Essentially a cross-platform, database agnostic mysqladmin.
|
||||
"""
|
||||
import time
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.engine.url import make_url
|
||||
|
||||
from CTFd.config import Config
|
||||
|
||||
url = make_url(Config.DATABASE_URL)
|
||||
|
||||
# Ignore sqlite databases
|
||||
if url.drivername.startswith("sqlite"):
|
||||
exit(0)
|
||||
|
||||
# Null out the database so raw_connection doesnt error if it doesnt exist
|
||||
# CTFd will create the database if it doesnt exist
|
||||
url.database = None
|
||||
|
||||
# Wait for the database server to be available
|
||||
engine = create_engine(url)
|
||||
print(f"Waiting for {url} to be ready")
|
||||
while True:
|
||||
try:
|
||||
engine.raw_connection()
|
||||
break
|
||||
except Exception:
|
||||
print(".", end="", flush=True)
|
||||
time.sleep(1)
|
||||
|
||||
print(f"{url} is ready")
|
||||
time.sleep(1)
|
||||
Reference in New Issue
Block a user