Fix production gaps: config file loading, structured JSON logging, update PLAN

- config.nim: Add baradb.json parsing + full env var support (BARADB_*)
- logging.nim: Wire structured JSON logger into server.nim and baradadb.nim
- server.nim: Replace echo with info/warn/errorMsg logging calls
- baradadb.nim: Init logger from config (logLevel, logFile)
- PLAN.md: Update honest assessment — deadlock, compaction, JOIN, TLS, slow query all verified working
This commit is contained in:
2026-05-07 00:09:09 +03:00
parent b6cdf8c88e
commit 011bc5bef4
4 changed files with 163 additions and 32 deletions
+9 -8
View File
@@ -7,6 +7,7 @@ import std/os
import std/endians
import std/monotimes
import config
import logging
import ../protocol/wire
import ../protocol/ssl
import ../query/lexer
@@ -216,7 +217,7 @@ proc slowQueryLog(logPath: string, query: string, durationMs: int, clientId: int
except: discard
proc handleClient(server: Server, client: AsyncSocket, clientId: int) {.async.} =
echo "Client ", clientId, " connected"
info("Client " & $clientId & " connected")
var connCtx = cloneForConnection(server.ctx)
let idleTimeout = server.config.idleTimeoutMs
let queryTimeout = server.config.queryTimeoutMs
@@ -243,7 +244,7 @@ proc handleClient(server: Server, client: AsyncSocket, clientId: int) {.async.}
of mkQuery:
var pos = 0
let queryStr = readString(cast[seq[byte]](payload), pos)
echo "[", clientId, "] Query: ", queryStr
info("[" & $clientId & "] Query: " & queryStr)
let startTicks = getMonoTime().ticks()
let (success, result, errorMsg) = executeQuery(server.db, connCtx, queryStr)
@@ -264,7 +265,7 @@ proc handleClient(server: Server, client: AsyncSocket, clientId: int) {.async.}
of mkQueryParams:
let (queryStr, params) = readQueryParamsMessage(cast[seq[byte]](payload))
echo "[", clientId, "] QueryParams: ", queryStr, " (", params.len, " params)"
info("[" & $clientId & "] QueryParams: " & queryStr & " (" & $params.len & " params)")
let startTicks = getMonoTime().ticks()
let (success, result, errorMsg) = executeQuery(server.db, connCtx, queryStr, params)
@@ -299,10 +300,10 @@ proc handleClient(server: Server, client: AsyncSocket, clientId: int) {.async.}
await client.send(cast[string](errorMsg))
except Exception as e:
echo "Client ", clientId, " error: ", e.msg
errorMsg("Client " & $clientId & " error: " & e.msg)
finally:
dec server.activeConnections
echo "Client ", clientId, " disconnected"
info("Client " & $clientId & " disconnected")
client.close()
proc run*(server: Server) {.async.} =
@@ -313,9 +314,9 @@ proc run*(server: Server) {.async.} =
sock.bindAddr(Port(server.config.port), server.config.address)
sock.listen()
if server.config.tlsEnabled:
echo "BaraDB TLS listening on ", server.config.address, ":", server.config.port
info("BaraDB TLS listening on " & server.config.address & ":" & $server.config.port)
else:
echo "BaraDB listening on ", server.config.address, ":", server.config.port
info("BaraDB listening on " & server.config.address & ":" & $server.config.port)
while server.running:
let client = await sock.accept()
if server.config.maxConnections > 0 and server.activeConnections >= server.config.maxConnections:
@@ -325,7 +326,7 @@ proc run*(server: Server) {.async.} =
try:
server.tls.wrapServer(client)
except Exception as e:
echo "TLS handshake failed: ", e.msg
errorMsg("TLS handshake failed: " & e.msg)
client.close()
continue
inc clientId