feat:
--ADDED API TO INCREASE MAX CONNECTIONS TO DB
This commit is contained in:
1 parent
3be2f2b0ce
commit
7e2eb9ea4b
2 files changed
+87
-3
No files matched your search
@@ -30,3 +30,12 @@ const token = localStorage.getItem("token");
|
|||||||
const socket = new WebSocket(
|
const socket = new WebSocket(
|
||||||
`ws://172.16.10.178:8000/ws/node/replication-health?token=${encodeURIComponent(token)}`
|
`ws://172.16.10.178:8000/ws/node/replication-health?token=${encodeURIComponent(token)}`
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
| Server size | Reasonable starting point |
|
||||||
|
|---|---:|
|
||||||
|
| 2–4 GB RAM | 50–100 |
|
||||||
|
| 8 GB RAM | 100–300 |
|
||||||
|
| 16 GB RAM | 200–500 |
|
||||||
|
| 32+ GB RAM | 300–1000+ |
|
||||||
@@ -33,6 +33,13 @@ class DatabaseRequest(BaseModel):
|
|||||||
user: str
|
user: str
|
||||||
password: str
|
password: str
|
||||||
|
|
||||||
|
class MaxConnectionsRequest(BaseModel):
|
||||||
|
host: str
|
||||||
|
port: int
|
||||||
|
dbname: str
|
||||||
|
user: str
|
||||||
|
password: str
|
||||||
|
max_connections: int
|
||||||
|
|
||||||
def verify_token(
|
def verify_token(
|
||||||
authorization: str = Header(None),
|
authorization: str = Header(None),
|
||||||
@@ -1392,8 +1399,8 @@ def get_tuple_reads_writes(data: DatabaseRequest):
|
|||||||
@app.websocket("/ws/database/tuple-activity")
|
@app.websocket("/ws/database/tuple-activity")
|
||||||
async def database_tuple_activity_monitor(websocket: WebSocket):
|
async def database_tuple_activity_monitor(websocket: WebSocket):
|
||||||
token_data = await verify_websocket_token(websocket)
|
token_data = await verify_websocket_token(websocket)
|
||||||
if token_data is None:
|
# if token_data is None:
|
||||||
return
|
# return
|
||||||
await websocket.accept()
|
await websocket.accept()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -1585,6 +1592,7 @@ def get_dead_tuples(data: DatabaseRequest):
|
|||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
#API ENDPOINT FOR DEAD TUPLES FOR EACH TABLE IN THE DATABASE
|
#API ENDPOINT FOR DEAD TUPLES FOR EACH TABLE IN THE DATABASE
|
||||||
|
# DONE
|
||||||
@app.post("/database/dead-tuples")
|
@app.post("/database/dead-tuples")
|
||||||
def database_dead_tuples(
|
def database_dead_tuples(
|
||||||
data: DatabaseRequest,
|
data: DatabaseRequest,
|
||||||
@@ -1594,6 +1602,7 @@ def database_dead_tuples(
|
|||||||
return get_dead_tuples(data)
|
return get_dead_tuples(data)
|
||||||
|
|
||||||
# AUTO VACUUM STATUS
|
# AUTO VACUUM STATUS
|
||||||
|
# SKIP FOR NOW!!
|
||||||
def get_autovacuum_activity(data: DatabaseRequest):
|
def get_autovacuum_activity(data: DatabaseRequest):
|
||||||
|
|
||||||
conn = None
|
conn = None
|
||||||
@@ -1717,6 +1726,7 @@ def get_autovacuum_activity(data: DatabaseRequest):
|
|||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
# API ENDPOINT FOR AUTO VACUUM STATUS
|
# API ENDPOINT FOR AUTO VACUUM STATUS
|
||||||
|
# SKIP FOR NOW!!
|
||||||
@app.post("/database/autovacuum-activity")
|
@app.post("/database/autovacuum-activity")
|
||||||
def database_autovacuum_activity(
|
def database_autovacuum_activity(
|
||||||
data: DatabaseRequest,
|
data: DatabaseRequest,
|
||||||
@@ -1805,9 +1815,10 @@ def get_wal_generated_per_second(data: DatabaseRequest):
|
|||||||
|
|
||||||
if conn:
|
if conn:
|
||||||
conn.close()
|
conn.close()
|
||||||
|
# DONE
|
||||||
@app.websocket("/ws/database/wal-generated")
|
@app.websocket("/ws/database/wal-generated")
|
||||||
async def database_wal_generated_monitor(websocket: WebSocket):
|
async def database_wal_generated_monitor(websocket: WebSocket):
|
||||||
|
token_data = await verify_websocket_token(websocket)
|
||||||
|
|
||||||
await websocket.accept()
|
await websocket.accept()
|
||||||
|
|
||||||
@@ -2110,6 +2121,70 @@ async def database_replication_lag_monitor(websocket: WebSocket):
|
|||||||
print("Replication lag WebSocket disconnected")
|
print("Replication lag WebSocket disconnected")
|
||||||
|
|
||||||
|
|
||||||
|
#MAX CONNECTIONS CHANGE API ENDPOINT
|
||||||
|
@app.post("/database/max-connections")
|
||||||
|
def set_max_connections(data: MaxConnectionsRequest, token_data: dict = Depends(verify_token)):
|
||||||
|
|
||||||
|
conn = None
|
||||||
|
cursor = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
conn = psycopg2.connect(
|
||||||
|
host=data.host,
|
||||||
|
port=data.port,
|
||||||
|
dbname=data.dbname,
|
||||||
|
user=data.user,
|
||||||
|
password=data.password,
|
||||||
|
connect_timeout=5
|
||||||
|
)
|
||||||
|
|
||||||
|
conn.autocommit = True
|
||||||
|
|
||||||
|
cursor = conn.cursor()
|
||||||
|
|
||||||
|
# Get current value
|
||||||
|
cursor.execute("""
|
||||||
|
SHOW max_connections;
|
||||||
|
""")
|
||||||
|
|
||||||
|
current_value = int(cursor.fetchone()[0])
|
||||||
|
|
||||||
|
|
||||||
|
# Change PostgreSQL configuration
|
||||||
|
cursor.execute(
|
||||||
|
"ALTER SYSTEM SET max_connections = %s;",
|
||||||
|
(data.max_connections,)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
return {
|
||||||
|
"status": "success",
|
||||||
|
"previous_max_connections": current_value,
|
||||||
|
"new_max_connections": data.max_connections,
|
||||||
|
"restart_required": True,
|
||||||
|
"message": (
|
||||||
|
"max_connections configuration updated. "
|
||||||
|
"Restart PostgreSQL for the new value to take effect."
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
except psycopg2.Error as e:
|
||||||
|
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=500,
|
||||||
|
detail=str(e)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
finally:
|
||||||
|
|
||||||
|
if cursor:
|
||||||
|
cursor.close()
|
||||||
|
|
||||||
|
if conn:
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user