diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2013-06-17 14:19:34 +0200 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2013-06-17 14:19:34 +0200 |
commit | fa523900ba66cda045d16476d64fd89d8d6f0bdc (patch) | |
tree | dc5f867dea9c7ab42b1845992a3a8f21fb7b3d25 | |
parent | ba4caf70560b5fd23fc2e1624b52f78784ce5b59 (diff) | |
parent | 1f6d402d50501bc612eb5041ed0674eb23432166 (diff) | |
download | rsyslog-fa523900ba66cda045d16476d64fd89d8d6f0bdc.tar.gz rsyslog-fa523900ba66cda045d16476d64fd89d8d6f0bdc.tar.bz2 rsyslog-fa523900ba66cda045d16476d64fd89d8d6f0bdc.zip |
Merge branch 'v7-stable'
-rwxr-xr-x | plugins/imjournal/imjournal.c | 5 | ||||
-rw-r--r-- | runtime/ratelimit.c | 18 | ||||
-rw-r--r-- | runtime/ratelimit.h | 2 |
3 files changed, 22 insertions, 3 deletions
diff --git a/plugins/imjournal/imjournal.c b/plugins/imjournal/imjournal.c index 7f6c31d6..f9c7eeec 100755 --- a/plugins/imjournal/imjournal.c +++ b/plugins/imjournal/imjournal.c @@ -515,7 +515,10 @@ finalize_it: BEGINrunInput CODESTARTrunInput CHKiRet(ratelimitNew(&ratelimiter, "imjournal", NULL)); + dbgprintf("imjournal: ratelimiting burst %d, interval %d\n", cs.ratelimitBurst, + cs.ratelimitInterval); ratelimitSetLinuxLike(ratelimiter, cs.ratelimitInterval, cs.ratelimitBurst); + ratelimitSetNoTimeCache(ratelimiter); if (cs.stateFile) { CHKiRet(loadJournalState()); @@ -601,6 +604,7 @@ ENDwillRun /* close journal */ BEGINafterRun CODESTARTafterRun + ratelimitDestruct(ratelimiter); if (cs.stateFile) { /* can't persist without a state file */ persistJournalState(); } @@ -610,7 +614,6 @@ ENDafterRun BEGINmodExit CODESTARTmodExit - ratelimitDestruct(ratelimiter); if(pInputName != NULL) prop.Destruct(&pInputName); if(pLocalHostIP != NULL) diff --git a/runtime/ratelimit.c b/runtime/ratelimit.c index 6e1df3e2..a808e04a 100644 --- a/runtime/ratelimit.c +++ b/runtime/ratelimit.c @@ -150,12 +150,21 @@ withinRatelimit(ratelimit_t *ratelimit, time_t tt) goto finalize_it; } + /* we primarily need "NoTimeCache" mode for imjournal, as it + * sets the message generation time to the journal timestamp. + * As such, we do not get a proper indication of the actual + * message rate. To prevent this, we need to query local + * system time ourselvs. + */ + if(ratelimit->bNoTimeCache) + tt = time(NULL); + assert(ratelimit->burst != 0); if(ratelimit->begin == 0) ratelimit->begin = tt; - /* resume if we go out of out time window */ + /* resume if we go out of time window */ if(tt > ratelimit->begin + ratelimit->interval) { ratelimit->begin = 0; ratelimit->done = 0; @@ -318,6 +327,12 @@ ratelimitSetThreadSafe(ratelimit_t *ratelimit) ratelimit->bThreadSafe = 1; pthread_mutex_init(&ratelimit->mut, NULL); } +void +ratelimitSetNoTimeCache(ratelimit_t *ratelimit) +{ + ratelimit->bNoTimeCache = 1; + pthread_mutex_init(&ratelimit->mut, NULL); +} /* Severity level determines which messages are subject to * ratelimiting. Default (no value set) is all messages. @@ -368,4 +383,3 @@ ratelimitModInit(void) finalize_it: RETiRet; } - diff --git a/runtime/ratelimit.h b/runtime/ratelimit.h index a058b069..563777fd 100644 --- a/runtime/ratelimit.h +++ b/runtime/ratelimit.h @@ -35,6 +35,7 @@ struct ratelimit_s { unsigned nsupp; /**< nbr of msgs suppressed */ msg_t *pMsg; sbool bThreadSafe; /**< do we need to operate in Thread-Safe mode? */ + sbool bNoTimeCache; /**< if we shall not used cached reception time */ pthread_mutex_t mut; /**< mutex if thread-safe operation desired */ }; @@ -42,6 +43,7 @@ struct ratelimit_s { rsRetVal ratelimitNew(ratelimit_t **ppThis, char *modname, char *dynname); void ratelimitSetThreadSafe(ratelimit_t *ratelimit); void ratelimitSetLinuxLike(ratelimit_t *ratelimit, unsigned short interval, unsigned short burst); +void ratelimitSetNoTimeCache(ratelimit_t *ratelimit); void ratelimitSetSeverity(ratelimit_t *ratelimit, intTiny severity); rsRetVal ratelimitMsg(ratelimit_t *ratelimit, msg_t *pMsg, msg_t **ppRep); rsRetVal ratelimitAddMsg(ratelimit_t *ratelimit, multi_submit_t *pMultiSub, msg_t *pMsg); |