wolf 0.3.12 → 0.3.13
raw patch · 6 files changed
+122/−3 lines, 6 filesdep ~basenew-component:exe:wolf-counter
Dependency ranges changed: base
Files
- main/counter.hs +30/−0
- src/Network/AWS/Wolf.hs +1/−0
- src/Network/AWS/Wolf/Count.hs +59/−0
- src/Network/AWS/Wolf/SWF.hs +20/−2
- src/Network/AWS/Wolf/Types/Sum.hs +1/−0
- wolf.cabal +11/−1
+ main/counter.hs view
@@ -0,0 +1,30 @@+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}++-- | Run actor.+--+import Network.AWS.Wolf+import Options.Generic++-- | Args+--+-- Program arguments.+--+data Args = Args+ { config :: FilePath+ -- ^ Configuration file.+ , plan :: FilePath+ -- ^ Plan file to count on.+ } deriving (Show, Generic)++instance ParseRecord Args++-- | Run counter.+--+main :: IO ()+main = do+ args <- getRecord "Counter"+ countMain+ (config args)+ (plan args)
src/Network/AWS/Wolf.hs view
@@ -5,5 +5,6 @@ ) where import Network.AWS.Wolf.Act as Exports+import Network.AWS.Wolf.Count as Exports import Network.AWS.Wolf.Decide as Exports import Network.AWS.Wolf.Prelude as Exports
+ src/Network/AWS/Wolf/Count.hs view
@@ -0,0 +1,59 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}++-- | SWF Counter logic.+--+module Network.AWS.Wolf.Count+ ( count+ , countMain+ ) where++import Network.AWS.Wolf.Ctx+import Network.AWS.Wolf.File+import Network.AWS.Wolf.Prelude+import Network.AWS.Wolf.SWF+import Network.AWS.Wolf.Types++-- | Count pending activities.+--+countActivity :: MonadAmazon c m => Task -> m ()+countActivity t = do+ traceInfo "count-act" [ "task" .= t ]+ let queue = t ^. tQueue+ runAmazonWorkCtx queue $ do+ c <- countActivities+ traceInfo "count-acitivities" [ "task" .= t, "count" .= c ]+ statsGauge "wolf.act.queue.depth" c [ "queue" =. queue ]++-- | Count open workflows.+--+countDecision :: MonadAmazon c m => Task -> m ()+countDecision t = do+ traceInfo "count-decision" [ "task" .= t ]+ let queue = t ^. tQueue+ runAmazonWorkCtx queue $ do+ c <- countDecisions+ traceInfo "count-decisions" [ "task" .= t, "count" .= c ]+ statsGauge "wolf.decide.queue.depth" c [ "queue" =. queue ]++-- | Counter logic - count all the queues.+--+count :: MonadConf c m => Plan -> m ()+count p =+ preConfCtx [ "label" .= LabelCount ] $+ runAmazonCtx $ do+ countDecision (p ^. pStart)+ mapM_ countActivity (p ^. pTasks)++-- | Run counter from main with config file.+--+countMain :: MonadControl m => FilePath -> FilePath -> m ()+countMain cf pf =+ runResourceT $+ runCtx $+ runStatsCtx $ do+ conf <- readYaml cf+ runConfCtx conf $ do+ plans <- readYaml pf+ mapM_ count (plans :: [Plan])
src/Network/AWS/Wolf/SWF.hs view
@@ -6,6 +6,8 @@ module Network.AWS.Wolf.SWF ( pollActivity , pollDecision+ , countActivities+ , countDecisions , completeActivity , failActivity , completeDecision@@ -46,6 +48,24 @@ , reverse $ concatMap (view pfdtrsEvents) pfdtrs ) +-- | Count activities.+--+countActivities :: MonadAmazonWork c m => m Int+countActivities = do+ d <- view cDomain <$> view ccConf+ tl <- taskList <$> view awcQueue+ ptc <- send (countPendingActivityTasks d tl)+ return $ fromIntegral (ptc ^. ptcCount)++-- | Count decisions.+--+countDecisions :: MonadAmazonWork c m => m Int+countDecisions = do+ d <- view cDomain <$> view ccConf+ tl <- taskList <$> view awcQueue+ ptc <- send (countPendingDecisionTasks d tl)+ return $ fromIntegral (ptc ^. ptcCount)+ -- | Successful job completion. -- completeActivity :: MonadAmazon c m => Text -> Maybe Text -> m ()@@ -96,5 +116,3 @@ where fweda = failWorkflowExecutionDecisionAttributes--
src/Network/AWS/Wolf/Types/Sum.hs view
@@ -16,6 +16,7 @@ = LabelWolf | LabelAct | LabelDecide+ | LabelCount deriving (Show, Eq) $(deriveJSON spinalOptions ''LabelType)
wolf.cabal view
@@ -1,5 +1,5 @@ name: wolf-version: 0.3.12+version: 0.3.13 synopsis: Amazon Simple Workflow Service Wrapper. description: Wolf is a wrapper around Amazon Simple Workflow Service. homepage: https://github.com/swift-nav/wolf@@ -19,6 +19,7 @@ library exposed-modules: Network.AWS.Wolf other-modules: Network.AWS.Wolf.Act+ , Network.AWS.Wolf.Count , Network.AWS.Wolf.Ctx , Network.AWS.Wolf.Decide , Network.AWS.Wolf.File@@ -70,6 +71,15 @@ executable wolf-decider hs-source-dirs: main main-is: decider.hs+ ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall+ build-depends: base+ , wolf+ , optparse-generic+ default-language: Haskell2010++executable wolf-counter+ hs-source-dirs: main+ main-is: counter.hs ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall build-depends: base , wolf