log-stats: make global/threads logging configurable

pull/1508/head
Victor Julien 11 years ago
parent 2c9a2c8327
commit 3fab736539

@ -49,6 +49,9 @@
#define MODULE_NAME "LogStatsLog" #define MODULE_NAME "LogStatsLog"
#define OUTPUT_BUFFER_SIZE 16384 #define OUTPUT_BUFFER_SIZE 16384
#define LOG_STATS_TOTALS (1<<0)
#define LOG_STATS_THREADS (1<<1)
TmEcode LogStatsLogThreadInit(ThreadVars *, void *, void **); TmEcode LogStatsLogThreadInit(ThreadVars *, void *, void **);
TmEcode LogStatsLogThreadDeinit(ThreadVars *, void *); TmEcode LogStatsLogThreadDeinit(ThreadVars *, void *);
void LogStatsLogExitPrintStats(ThreadVars *, void *); void LogStatsLogExitPrintStats(ThreadVars *, void *);
@ -100,25 +103,27 @@ int LogStatsLogger(ThreadVars *tv, void *thread_data, const StatsTable *st)
/* global stats */ /* global stats */
uint32_t u = 0; uint32_t u = 0;
for (u = 0; u < st->nstats; u++) { if (aft->statslog_ctx->flags & LOG_STATS_TOTALS) {
if (st->stats[u].name == NULL) for (u = 0; u < st->nstats; u++) {
continue; if (st->stats[u].name == NULL)
continue;
char line[1024];
size_t len = snprintf(line, sizeof(line), "%-25s | %-25s | %-" PRIu64 "\n", char line[1024];
st->stats[u].name, st->stats[u].tm_name, st->stats[u].value); size_t len = snprintf(line, sizeof(line), "%-25s | %-25s | %-" PRIu64 "\n",
st->stats[u].name, st->stats[u].tm_name, st->stats[u].value);
/* since we can have many threads, the buffer might not be big enough.
* Expand if necessary. */ /* since we can have many threads, the buffer might not be big enough.
if (MEMBUFFER_OFFSET(aft->buffer) + len > MEMBUFFER_SIZE(aft->buffer)) { * Expand if necessary. */
MemBufferExpand(&aft->buffer, OUTPUT_BUFFER_SIZE); if (MEMBUFFER_OFFSET(aft->buffer) + len > MEMBUFFER_SIZE(aft->buffer)) {
} MemBufferExpand(&aft->buffer, OUTPUT_BUFFER_SIZE);
}
MemBufferWriteString(aft->buffer, "%s", line); MemBufferWriteString(aft->buffer, "%s", line);
}
} }
/* per thread stats */ /* per thread stats */
if (st->tstats != NULL) { if (st->tstats != NULL && aft->statslog_ctx->flags & LOG_STATS_THREADS) {
/* for each thread (store) */ /* for each thread (store) */
uint32_t x; uint32_t x;
for (x = 0; x < st->ntstats; x++) { for (x = 0; x < st->ntstats; x++) {
@ -228,6 +233,22 @@ OutputCtx *LogStatsLogInitCtx(ConfNode *conf)
} }
memset(statslog_ctx, 0x00, sizeof(LogStatsFileCtx)); memset(statslog_ctx, 0x00, sizeof(LogStatsFileCtx));
statslog_ctx->flags = LOG_STATS_TOTALS;
if (conf != NULL) {
const char *totals = ConfNodeLookupChildValue(conf, "totals");
const char *threads = ConfNodeLookupChildValue(conf, "threads");
SCLogDebug("totals %s threads %s", totals, threads);
if (totals != NULL && ConfValIsFalse(totals)) {
statslog_ctx->flags &= ~LOG_STATS_TOTALS;
}
if (threads != NULL && ConfValIsTrue(threads)) {
statslog_ctx->flags |= LOG_STATS_THREADS;
}
SCLogDebug("statslog_ctx->flags %08x", statslog_ctx->flags);
}
statslog_ctx->file_ctx = file_ctx; statslog_ctx->file_ctx = file_ctx;
OutputCtx *output_ctx = SCCalloc(1, sizeof(OutputCtx)); OutputCtx *output_ctx = SCCalloc(1, sizeof(OutputCtx));

@ -274,6 +274,8 @@ outputs:
- stats: - stats:
enabled: yes enabled: yes
filename: stats.log filename: stats.log
totals: yes # stats for all threads merged together
threads: no # per thread stats
# a line based alerts log similar to fast.log into syslog # a line based alerts log similar to fast.log into syslog
- syslog: - syslog:

Loading…
Cancel
Save