summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Sima <ben@bensima.com>2025-12-19 22:31:48 -0500
committerBen Sima <ben@bensima.com>2025-12-19 22:31:48 -0500
commit9da36431a548fbbd00939b46792828ce5367cfe6 (patch)
treea2bd6579040f50fc802fe1d3a6068aa403363e91
parent43e2512d3ca1311cd7019148e9cf417a8feab068 (diff)
fix(ava): initialize tool_traces table on web server startup
The table creation was in Memory.initMemoryDb but Web.hs opened the database directly without calling it. Now Trace.hs has its own initTraceDb function that Web.startWebServer calls on startup.
-rw-r--r--Omni/Ava/Trace.hs20
-rw-r--r--Omni/Ava/Web.hs5
2 files changed, 25 insertions, 0 deletions
diff --git a/Omni/Ava/Trace.hs b/Omni/Ava/Trace.hs
index 6dbdf51..d648da1 100644
--- a/Omni/Ava/Trace.hs
+++ b/Omni/Ava/Trace.hs
@@ -12,6 +12,7 @@
-- : dep uuid
module Omni.Ava.Trace
( TraceRecord (..),
+ initTraceDb,
insertTrace,
getTrace,
cleanupOldTraces,
@@ -30,6 +31,25 @@ import qualified Database.SQLite.Simple as SQL
import qualified Database.SQLite.Simple.ToField as SQL
import qualified Omni.Test as Test
+-- | Initialize the tool_traces table if it doesn't exist.
+initTraceDb :: SQL.Connection -> IO ()
+initTraceDb conn = do
+ SQL.execute_
+ conn
+ "CREATE TABLE IF NOT EXISTS tool_traces (\
+ \ id TEXT PRIMARY KEY,\
+ \ created_at TEXT NOT NULL,\
+ \ tool_name TEXT NOT NULL,\
+ \ input TEXT NOT NULL,\
+ \ output TEXT NOT NULL,\
+ \ duration_ms INTEGER NOT NULL,\
+ \ user_id TEXT,\
+ \ chat_id TEXT\
+ \)"
+ SQL.execute_
+ conn
+ "CREATE INDEX IF NOT EXISTS idx_traces_created ON tool_traces(created_at)"
+
main :: IO ()
main = Test.run test
diff --git a/Omni/Ava/Web.hs b/Omni/Ava/Web.hs
index 86a8280..4d4ece6 100644
--- a/Omni/Ava/Web.hs
+++ b/Omni/Ava/Web.hs
@@ -17,6 +17,7 @@ module Omni.Ava.Web
( startWebServer,
app,
defaultPort,
+ main,
)
where
@@ -33,12 +34,16 @@ import qualified Network.Wai.Handler.Warp as Warp
import qualified Omni.Ava.Trace as Trace
import qualified System.Environment as Environment
+main :: IO ()
+main = putText "Use Omni.Ava for the main entry point"
+
defaultPort :: Int
defaultPort = 8079
startWebServer :: Int -> FilePath -> IO ()
startWebServer port dbPath = do
putText <| "Starting Ava web server on port " <> tshow port
+ SQL.withConnection dbPath Trace.initTraceDb
Warp.run port (app dbPath)
app :: FilePath -> Wai.Application