packages feed

arbor-monad-counter 2.0.0 → 2.0.1

raw patch · 3 files changed

+26/−13 lines, 3 filesnew-uploaderPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Arbor.Monad.Counter.Type: [$sel:total:Counters] :: Counters -> CountersMap
+ Arbor.Monad.Counter: currentStats :: MonadCounters m => m CountersMap
+ Arbor.Monad.Counter: setByKey :: MonadCounters m => Int -> CounterKey -> m ()
+ Arbor.Monad.Counter: setByKey' :: Int -> Counters -> CounterKey -> IO ()
- Arbor.Monad.Counter.Type: Counters :: CountersMap -> CountersMap -> CountersMap -> Counters
+ Arbor.Monad.Counter.Type: Counters :: CountersMap -> CountersMap -> Counters

Files

arbor-monad-counter.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack  name:           arbor-monad-counter-version:        2.0.0+version:        2.0.1 description:    Please see the README on Github at <https://github.com/arbor/arbor-monad-counter#readme> category:       Services homepage:       https://github.com/arbor/arbor-monad-counter#readme
src/Arbor/Monad/Counter.hs view
@@ -9,6 +9,8 @@   , incByKey'   , addByKey   , addByKey'+  , setByKey+  , setByKey'    , newCounters   , resetStats@@ -16,6 +18,7 @@   , extractValues   , newCountersMap   , deltaStats+  , currentStats   ) where  import Arbor.Monad.Counter.Type    (CounterKey, CounterValue (CounterValue), Counters (Counters), CountersMap, MonadCounters)@@ -31,7 +34,7 @@ import qualified Data.Map.Strict          as M  newCounters :: [CounterKey] -> IO Counters-newCounters ks = Counters <$> newCountersMap ks <*> newCountersMap ks <*> newCountersMap ks+newCounters ks = Counters <$> newCountersMap ks <*> newCountersMap ks  newCountersMap :: [CounterKey] -> IO CountersMap newCountersMap (k:ks) = do@@ -64,13 +67,25 @@  -- Modify the current value with the supplied function modifyByKey' :: (Int -> Int) -> Counters -> CounterKey -> IO ()-modifyByKey' f (Counters cur _ _) key = do-  let (CounterValue v) = cur M.! key-  atomically $ modifyTVar v f+modifyByKey' f (Counters cur _) key = do+  let (CounterValue tv) = cur M.! key+  atomically $ modifyTVar tv f +-- Set the current value+setByKey :: MonadCounters m => Int -> CounterKey -> m ()+setByKey value key = do+  counters <- Z.getCounters+  liftIO $ setByKey' value counters key++-- Set the current value+setByKey' :: Int -> Counters -> CounterKey -> IO ()+setByKey' value (Counters cur _) key = do+  let (CounterValue tv) = cur M.! key+  atomically $ writeTVar tv value+ valuesByKeys :: MonadCounters m => [CounterKey] -> m [Int] valuesByKeys ks = do-  (Counters cur _ _) <- Z.getCounters+  (Counters cur _) <- Z.getCounters   liftIO $ atomically $ sequence $ readTVar <$> ((\k -> cur M.! k ^. the @"var") <$> ks)  extractValues :: CountersMap -> STM ([(CounterKey, Int)], [TVar Int])@@ -81,7 +96,6 @@   return (zip names nums, tvars)  -- store the current stats into previous;--- accumulate stats in total -- calculate the delta deltaStats :: MonadCounters m => m CountersMap deltaStats = do@@ -91,21 +105,21 @@   liftIO $ atomically $ do     (_, oldTvars)   <- extractValues $ counters ^. the @"previous"     (_, newTvars)   <- extractValues $ counters ^. the @"current"-    (_, totalTvars) <- extractValues $ counters ^. the @"total"     (_, deltaTvars) <- extractValues deltas-    for_ (DL.zip4 oldTvars newTvars totalTvars deltaTvars) $ \(old, new, total, delta) -> do+    for_ (DL.zip3 oldTvars newTvars deltaTvars) $ \(old, new, delta) -> do       new' <- readTVar new       old' <- readTVar old-      total' <- readTVar total       writeTVar old new'       writeTVar delta (new' - old')-      writeTVar total (total' + (new' - old'))     return deltas +currentStats :: MonadCounters m => m CountersMap+currentStats = Z.getCounters <&> (^. the @"current")+ resetStats :: MonadCounters m => m () resetStats = do   counters <- Z.getCounters-  sequence_ $ setZeroes <$> [counters ^. the @"current", counters ^. the @"previous", counters ^. the @"total"]+  sequence_ $ setZeroes <$> [counters ^. the @"current", counters ^. the @"previous"]  setZeroes :: MonadIO m => CountersMap -> m () setZeroes cs = liftIO $ atomically $ do
src/Arbor/Monad/Counter/Type.hs view
@@ -24,7 +24,6 @@ data Counters = Counters   { current  :: CountersMap   , previous :: CountersMap-  , total    :: CountersMap   } deriving (Generic)  class (Monad m, MonadIO m) => MonadCounters m where