From: Eric Leblond Date: Thu, 23 Jan 2020 12:30:29 +0000 (+0100) Subject: util-log-redis: ensure a dump per second X-Git-Tag: suricata-5.0.4~56 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fd47d93d3017b0f66ea0348c03f849238dfb2780;p=thirdparty%2Fsuricata.git util-log-redis: ensure a dump per second In sync mode, Suricata was waiting to have batch size alerts before logging them. This was introducing delay in some configuration with low traffic. (cherry picked from commit 3ae33bb7a10544babc2f2c56543c825a1f29599d) --- diff --git a/src/util-log-redis.c b/src/util-log-redis.c index 5259b18da4..af0380ef76 100644 --- a/src/util-log-redis.c +++ b/src/util-log-redis.c @@ -67,6 +67,7 @@ static SCLogRedisContext *SCLogRedisContextAlloc(void) ctx->async = NULL; #endif ctx->batch_count = 0; + ctx->last_push = 0; ctx->tried = 0; return ctx; @@ -92,6 +93,7 @@ static SCLogRedisContext *SCLogRedisContextAsyncAlloc(void) ctx->ev_base = NULL; ctx->connected = 0; ctx->batch_count = 0; + ctx->last_push = 0; ctx->tried = 0; return ctx; @@ -338,11 +340,14 @@ static int SCLogRedisWriteSync(LogFileCtx *file_ctx, const char *string) file_ctx->redis_setup.command, file_ctx->redis_setup.key, string); - if (ctx->batch_count == file_ctx->redis_setup.batch_size) { + time_t now = time(NULL); + if ((ctx->batch_count == file_ctx->redis_setup.batch_size) || (ctx->last_push < now)) { redisReply *reply; int i; + int batch_size = ctx->batch_count; ctx->batch_count = 0; - for (i = 0; i <= file_ctx->redis_setup.batch_size; i++) { + ctx->last_push = now; + for (i = 0; i <= batch_size; i++) { if (redisGetReply(redis, (void **)&reply) == REDIS_OK) { freeReplyObject(reply); ret = 0; diff --git a/src/util-log-redis.h b/src/util-log-redis.h index 0153151eba..ec4a4aff73 100644 --- a/src/util-log-redis.h +++ b/src/util-log-redis.h @@ -55,6 +55,7 @@ typedef struct SCLogRedisContext_ { #endif /* HAVE_LIBEVENT */ time_t tried; int batch_count; + time_t last_push; } SCLogRedisContext; void SCLogRedisInit(void);