diff options
| author | Ben Sima <ben@bensima.com> | 2025-12-19 22:31:48 -0500 |
|---|---|---|
| committer | Ben Sima <ben@bensima.com> | 2025-12-19 22:31:48 -0500 |
| commit | 9da36431a548fbbd00939b46792828ce5367cfe6 (patch) | |
| tree | a2bd6579040f50fc802fe1d3a6068aa403363e91 | |
| parent | 43e2512d3ca1311cd7019148e9cf417a8feab068 (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.hs | 20 | ||||
| -rw-r--r-- | Omni/Ava/Web.hs | 5 |
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 |
