From 0fdc1a54dbe967845cbe5d5fb5224d55fa61e332 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 14 Nov 2023 14:00:06 -0400 Subject: [PATCH] git-annex log --received modifier option Only counting received and not dropped makes this show the bandwidth of data coming into the repository, although only in a sense. Since git-annex branch updates only happen at the end of a command, and we don't know when a command started, it's only an approximation of the actual bandwidth. (A previous git-annex branch update made have happened in a different repository.) It would be possible to also add a --dropped option, but I don't know how useful that would be? Sponsored-by: Nicholas Golder-Manning on Patreon --- CHANGELOG | 2 ++ Command/Log.hs | 48 ++++++++++++++++++++++++++++++------------ doc/git-annex-log.mdwn | 28 ++++++++++++++---------- 3 files changed, 53 insertions(+), 25 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index df257afc45..b322f8f6be 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -15,6 +15,8 @@ git-annex (10.20230927) UNRELEASED; urgency=medium * info: Added calculation of combined annex size of all repositories. * log: Added options --sizesof, --sizes and --totalsizes that display how the size of repositories changed over time. + * log: Added options --interval, --bytes, --received + to tune the output of the above added options. -- Joey Hess Tue, 10 Oct 2023 13:17:31 -0400 diff --git a/Command/Log.hs b/Command/Log.hs index 3eba85040d..f02d213644 100644 --- a/Command/Log.hs +++ b/Command/Log.hs @@ -50,7 +50,8 @@ data LogOptions = LogOptions , sizesOfOption :: Maybe (DeferredParse UUID) , sizesOption :: Bool , totalSizesOption :: Bool - , whenOption :: Maybe Duration + , intervalOption :: Maybe Duration + , receivedOption :: Bool , rawDateOption :: Bool , bytesOption :: Bool , gourceOption :: Bool @@ -83,6 +84,10 @@ optParser desc = LogOptions ( long "interval" <> metavar paramTime <> help "minimum time between displays of changed size" )) + <*> switch + ( long "received" + <> help "display received data per interval rather than repository sizes" + ) <*> switch ( long "raw-date" <> help "display seconds from unix epoch" @@ -295,7 +300,7 @@ sizeHistoryInfo mu o = do uuidmap <- getuuidmap zone <- liftIO getCurrentTimeZone liftIO $ displayheader uuidmap - let dispst = (zone, False, epoch, Nothing) + let dispst = (zone, False, epoch, Nothing, mempty) (l, cleanup) <- getlog g <- Annex.gitRepo liftIO $ catObjectStream g $ \feeder closer reader -> do @@ -379,7 +384,9 @@ sizeHistoryInfo mu o = do combinedlog = PLog.compactLog (oldlog ++ newlog) combinedlocs = S.fromList (presentlocs combinedlog) addedlocs = S.difference combinedlocs oldlocs - removedlocs = S.difference oldlocs combinedlocs + removedlocs + | receivedOption o = S.empty + | otherwise = S.difference oldlocs combinedlocs addnew k sizemap locmap newlog = ( updatesize sizemap (ksz k) locs @@ -402,23 +409,36 @@ sizeHistoryInfo mu o = do (M.elems uuidmap) | otherwise = return () - displaysizes (zone, displayedyet, prevt, prevoutput) trustlog uuidmap sizemap t - | t - prevt >= dt - && (displayedyet || any (/= 0) sizes) - && (prevoutput /= Just output) = do + displaysizes (zone, displayedyet, prevt, prevoutput, prevsizemap) trustlog uuidmap sizemap t + | t - prevt >= dt && changedoutput = do displayts zone t output - return (zone, True, t, Just output) - | t < prevt = return (zone, displayedyet, t, Just output) - | otherwise = return (zone, displayedyet, prevt, Just output) + return (zone, True, t, Just output, sizemap') + | t < prevt = return (zone, displayedyet, t, Just output, prevsizemap) + | otherwise = return (zone, displayedyet, prevt, prevoutput, prevsizemap) where output = intercalate "," (map showsize sizes) us = case mu of Just u -> [u] Nothing -> M.keys uuidmap sizes - | totalSizesOption o = [sum (M.elems sizemap')] - | otherwise = map (\u -> fromMaybe 0 (M.lookup u sizemap')) us - dt = maybe 1 durationToPOSIXTime (whenOption o) + | totalSizesOption o = [sum (M.elems sizedisplaymap)] + | otherwise = map (\u -> fromMaybe 0 (M.lookup u sizedisplaymap)) us + dt = maybe 1 durationToPOSIXTime (intervalOption o) + + changedoutput + | receivedOption o = + any (/= 0) sizes + || prevoutput /= Just output + | otherwise = + (displayedyet || any (/= 0) sizes) + && (prevoutput /= Just output) + + sizedisplaymap + | receivedOption o = + M.unionWith posminus sizemap' prevsizemap + | otherwise = sizemap' + + posminus a b = max 0 (a - b) -- A verison of sizemap where uuids that are currently dead -- have 0 size. @@ -433,7 +453,7 @@ sizeHistoryInfo mu o = do then rawTimeStamp t else showTimeStamp zone "%Y-%m-%dT%H:%M:%S" t - displayendsizes (zone , _, _, Just output) = do + displayendsizes (zone , _, _, Just output, _) = do now <- getPOSIXTime displayts zone now output displayendsizes _ = return () diff --git a/doc/git-annex-log.mdwn b/doc/git-annex-log.mdwn index 65636e5c9c..9e24fac86f 100644 --- a/doc/git-annex-log.mdwn +++ b/doc/git-annex-log.mdwn @@ -41,7 +41,7 @@ false, information may not have been committed to the branch yet. * `--sizesof=repository` Displays a history of the total size of the annexed files in a repository - as it changed over time from the creation of the repository to the present. + over time from the creation of the repository to the present. The repository can be "here" for the current repository, or the name of a remote, or a repository description or uuid. @@ -65,10 +65,25 @@ false, information may not have been committed to the branch yet. When using `--sizesof`, `--sizes`, and `--totalsizes`, this controls the minimum interval between displays of the size. - The default is to display each recorded change to the size. + The default is to display each new recorded size. The time is of the form "30d" or "1y". +* `--received` + + Combine this option with `--sizesof` or `--sizes` to display + the amount of data received into repositories since the last + line was output. + +* `--bytes` + + Show sizes in bytes, disabling the default nicer units. + +* `--raw-date` + + Rather than the normal display of a date in the local time zone, + displays seconds since the unix epoch. + * `--since=date`, `--after=date`, `--until=date`, `--before=date`, `--max-count=N` These options are passed through to `git log`, and can be used to limit @@ -79,15 +94,6 @@ false, information may not have been committed to the branch yet. These options do not have an affect when using `--sizesof`, `--sizes`, and `--totalsizes`. -* `--bytes` - - Show sizes in bytes, disabling the default nicer units. - -* `--raw-date` - - Rather than the normal display of a date in the local time zone, - displays seconds since the unix epoch. - * `--gource` Generates output suitable for the `gource` visualization program.