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 +1/−1
- src/Arbor/Monad/Counter.hs +25/−11
- src/Arbor/Monad/Counter/Type.hs +0/−1
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