Yes and no. It makes it easier for humans to read (sometimes). I know ops uses Splunk to report the most frequent errors/warnings. Also, I tend to grep or other post-process filters to just look at a single session/transaction, and it would suck to not have the error because it already happened for something else.
Maybe it could be used in conjunction with normal tag filtered debug output. <thought1> void DebugError(tag, throttle, msg, args); // if tag is enabled, logs all errors // else throttles log errors </thought1> But I could also use it to set a transaction to be verbose every once in a while, without overloading a production machine. Something like this would also make HostDB timing/updates considerably more readable. On Tue, Mar 31, 2020 at 4:58 PM Walt Karas <wka...@verizonmedia.com.invalid> wrote: > Should we add a utility like this to include/ts/util ? > > class Throttle > { > public: > Throttle(unsigned secondsBetween = 60); > > // Returns true the first time it's called, and if the time since the > last time it returned true is > // more than secondsBetween seconds. > // > bool operator () (); > > // Returns the number of times the member operator has been called. > // > unsigned times() const; > }; > > void Error(...); > > void foo(bool zwoop_ate_too_much_sushi) > { > if (zwoop_ate_too_much_sushi) { > static Throttle t; > > if (t()) { > Error("Zwoop ate too much sushi %u times, make salmon an > endangered species", t.times()); > } > } > } >