summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Omni/Agent/Worker.hs3
-rw-r--r--Omni/Jr/Web.hs18
-rw-r--r--Omni/Task/Core.hs18
3 files changed, 22 insertions, 17 deletions
diff --git a/Omni/Agent/Worker.hs b/Omni/Agent/Worker.hs
index 2c603a9..2557d70 100644
--- a/Omni/Agent/Worker.hs
+++ b/Omni/Agent/Worker.hs
@@ -5,6 +5,7 @@ module Omni.Agent.Worker where
import Alpha
import qualified Data.Aeson as Aeson
+import qualified Data.Aeson.Key as AesonKey
import qualified Data.ByteString.Lazy as BSL
import qualified Data.Text as Text
import qualified Data.Text.Encoding as TE
@@ -40,7 +41,7 @@ logMsg worker msg =
-- | Convert key-value pairs to JSON metadata string
toMetadata :: [(Text, Text)] -> Text
toMetadata pairs =
- let obj = Aeson.object [(k, Aeson.String v) | (k, v) <- pairs]
+ let obj = Aeson.object [(AesonKey.fromText k, Aeson.String v) | (k, v) <- pairs]
in TE.decodeUtf8 (BSL.toStrict (Aeson.encode obj))
runOnce :: Core.Worker -> Maybe Text -> IO ()
diff --git a/Omni/Jr/Web.hs b/Omni/Jr/Web.hs
index d117169..9d46a78 100644
--- a/Omni/Jr/Web.hs
+++ b/Omni/Jr/Web.hs
@@ -50,8 +50,8 @@ type API =
:<|> "ready" :> Get '[Lucid.HTML] ReadyQueuePage
:<|> "stats" :> QueryParam "epic" Text :> Get '[Lucid.HTML] StatsPage
:<|> "tasks"
- :> QueryParam "status" TaskCore.Status
- :> QueryParam "priority" TaskCore.Priority
+ :> QueryParam "status" Text
+ :> QueryParam "priority" Text
:> QueryParam "namespace" Text
:> Get '[Lucid.HTML] TaskListPage
:<|> "tasks" :> Capture "id" Text :> Get '[Lucid.HTML] TaskDetailPage
@@ -653,13 +653,21 @@ server =
stats <- liftIO <| TaskCore.getTaskStats epicId
pure (StatsPage stats epicId)
- taskListHandler :: Maybe TaskCore.Status -> Maybe TaskCore.Priority -> Maybe Text -> Servant.Handler TaskListPage
- taskListHandler maybeStatus maybePriority maybeNamespace = do
+ taskListHandler :: Maybe Text -> Maybe Text -> Maybe Text -> Servant.Handler TaskListPage
+ taskListHandler maybeStatusText maybePriorityText maybeNamespace = do
allTasks <- liftIO TaskCore.loadTasks
- let filters = TaskFilters maybeStatus maybePriority (emptyToNothing maybeNamespace)
+ let maybeStatus = parseStatus =<< emptyToNothing maybeStatusText
+ maybePriority = parsePriority =<< emptyToNothing maybePriorityText
+ filters = TaskFilters maybeStatus maybePriority (emptyToNothing maybeNamespace)
filteredTasks = applyFilters filters allTasks
pure (TaskListPage filteredTasks filters)
+ parseStatus :: Text -> Maybe TaskCore.Status
+ parseStatus = readMaybe <. Text.unpack
+
+ parsePriority :: Text -> Maybe TaskCore.Priority
+ parsePriority = readMaybe <. Text.unpack
+
emptyToNothing :: Maybe Text -> Maybe Text
emptyToNothing (Just t) | Text.null (Text.strip t) = Nothing
emptyToNothing x = x
diff --git a/Omni/Task/Core.hs b/Omni/Task/Core.hs
index bd70fde..4e65581 100644
--- a/Omni/Task/Core.hs
+++ b/Omni/Task/Core.hs
@@ -140,18 +140,14 @@ instance FromJSON TaskActivity
-- HTTP API Instances (for Servant query params)
instance FromHttpApiData Status where
- parseQueryParam t
- | T.null t = Left ""
- | otherwise = case readMaybe (T.unpack t) of
- Just s -> Right s
- Nothing -> Left ("Invalid status: " <> t)
+ parseQueryParam t = case readMaybe (T.unpack t) of
+ Just s -> Right s
+ Nothing -> Left ("Invalid status: " <> t)
instance FromHttpApiData Priority where
- parseQueryParam t
- | T.null t = Left ""
- | otherwise = case readMaybe (T.unpack t) of
- Just p -> Right p
- Nothing -> Left ("Invalid priority: " <> t)
+ parseQueryParam t = case readMaybe (T.unpack t) of
+ Just p -> Right p
+ Nothing -> Left ("Invalid priority: " <> t)
-- SQLite Instances
@@ -1013,7 +1009,7 @@ logActivity tid stage metadata =
SQL.execute
conn
"INSERT INTO task_activity (task_id, stage, message, metadata) VALUES (?, ?, ?, ?)"
- (tid, show stage, Nothing :: Maybe Text, metadata)
+ (tid, show stage :: String, Nothing :: Maybe Text, metadata)
-- | Get all activities for a task, ordered by timestamp descending
getActivitiesForTask :: Text -> IO [TaskActivity]