chiark / gitweb /
ratelimit start requests
[elogind.git] / ratelimit.h
diff --git a/ratelimit.h b/ratelimit.h
new file mode 100644 (file)
index 0000000..7f01838
--- /dev/null
@@ -0,0 +1,36 @@
+/*-*- Mode: C; c-basic-offset: 8 -*-*/
+
+#ifndef fooratelimithfoo
+#define fooratelimithfoo
+
+#include "util.h"
+
+typedef struct RateLimit {
+        usec_t interval;
+        unsigned burst;
+        unsigned n_printed, n_missed;
+        usec_t begin;
+} RateLimit;
+
+#define RATELIMIT_DEFINE(_name, _interval, _burst)      \
+        RateLimit _name = {                             \
+                .interval = (_interval),                \
+                .burst = (_burst),                      \
+                .n_printed = 0,                         \
+                .n_missed = 0,                          \
+                .begin = 0                              \
+        }
+
+#define RATELIMIT_INIT(v, _interval, _burst)            \
+        do {                                            \
+                RateLimit *r = &(v);                    \
+                r->interval = (_interval);              \
+                r->burst = (_burst);                    \
+                r->n_printed = 0;                       \
+                r->n_missed = 0;                        \
+                r->begin = 0;                           \
+        } while (false);
+
+bool ratelimit_test(RateLimit *r);
+
+#endif