Tor 0.4.9.0-alpha-dev
ratelim.h
Go to the documentation of this file.
1/* Copyright (c) 2003-2004, Roger Dingledine
2 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
3 * Copyright (c) 2007-2021, The Tor Project, Inc. */
4/* See LICENSE for licensing information */
5
6/**
7 * \file ratelim.h
8 * \brief Summarize similar messages that would otherwise flood the logs.
9 **/
10
11#ifndef TOR_RATELIM_H
12#define TOR_RATELIM_H
13
14#include <time.h>
15
16/* Rate-limiter */
17
18/** A ratelim_t remembers how often an event is occurring, and how often
19 * it's allowed to occur. Typical usage is something like:
20 *
21 <pre>
22 if (possibly_very_frequent_event()) {
23 const int INTERVAL = 300;
24 static ratelim_t warning_limit = RATELIM_INIT(INTERVAL);
25 char *m;
26 if ((m = rate_limit_log(&warning_limit, approx_time()))) {
27 log_warn(LD_GENERAL, "The event occurred!%s", m);
28 tor_free(m);
29 }
30 }
31 </pre>
32
33 As a convenience wrapper for logging, you can replace the above with:
34 <pre>
35 if (possibly_very_frequent_event()) {
36 static ratelim_t warning_limit = RATELIM_INIT(300);
37 log_fn_ratelim(&warning_limit, LOG_WARN, LD_GENERAL,
38 "The event occurred!");
39 }
40 </pre>
41 */
42typedef struct ratelim_t {
43 /** How many seconds must elapse between log messages? */
44 int rate;
45 /** When did this limiter last allow a message to appear? */
47 /** When did this limiter start suppressing messages? */
49 /** How many messages has this limiter suppressed since it last allowed
50 * one to appear? */
52} ratelim_t;
53
54#ifndef COCCI
55#define RATELIM_INIT(r) { (r), 0, 0, 0 }
56#endif
57#define RATELIM_TOOMANY (16*1000*1000)
58
59char *rate_limit_log(ratelim_t *lim, time_t now);
60
61#endif /* !defined(TOR_RATELIM_H) */
char * rate_limit_log(ratelim_t *lim, time_t now)
Definition: ratelim.c:42
int n_calls_since_last_time
Definition: ratelim.h:51
time_t last_allowed
Definition: ratelim.h:46
int rate
Definition: ratelim.h:44
time_t started_limiting
Definition: ratelim.h:48
Definitions for timing-related constants.