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());
>         }
>     }
> }
>

Reply via email to