logging: convert stats loggers to non-thread module

pull/2245/head
Jason Ish 9 years ago committed by Victor Julien
parent 9475c83713
commit b580016c80

@ -296,13 +296,7 @@ static void LogStatsLogDeInitCtx(OutputCtx *output_ctx)
void TmModuleLogStatsLogRegister (void) void TmModuleLogStatsLogRegister (void)
{ {
tmm_modules[TMM_LOGSTATSLOG].name = MODULE_NAME; OutputRegisterStatsModule(MODULE_NAME, "stats", LogStatsLogInitCtx,
tmm_modules[TMM_LOGSTATSLOG].ThreadInit = LogStatsLogThreadInit; LogStatsLogger, LogStatsLogThreadInit, LogStatsLogThreadDeinit,
tmm_modules[TMM_LOGSTATSLOG].ThreadExitPrintStats = LogStatsLogExitPrintStats; LogStatsLogExitPrintStats);
tmm_modules[TMM_LOGSTATSLOG].ThreadDeinit = LogStatsLogThreadDeinit;
tmm_modules[TMM_LOGSTATSLOG].RegisterTests = NULL;
tmm_modules[TMM_LOGSTATSLOG].cap_flags = 0;
tmm_modules[TMM_LOGSTATSLOG].flags = TM_FLAG_LOGAPI_TM;
OutputRegisterStatsModule(MODULE_NAME, "stats", LogStatsLogInitCtx, LogStatsLogger);
} }

@ -372,34 +372,22 @@ OutputCtx *OutputStatsLogInitSub(ConfNode *conf, OutputCtx *parent_ctx)
} }
void TmModuleJsonStatsLogRegister (void) { void TmModuleJsonStatsLogRegister (void) {
tmm_modules[TMM_JSONSTATSLOG].name = MODULE_NAME;
tmm_modules[TMM_JSONSTATSLOG].ThreadInit = JsonStatsLogThreadInit;
tmm_modules[TMM_JSONSTATSLOG].ThreadDeinit = JsonStatsLogThreadDeinit;
tmm_modules[TMM_JSONSTATSLOG].RegisterTests = NULL;
tmm_modules[TMM_JSONSTATSLOG].cap_flags = 0;
tmm_modules[TMM_JSONSTATSLOG].flags = TM_FLAG_LOGAPI_TM;
/* register as separate module */ /* register as separate module */
OutputRegisterStatsModule(MODULE_NAME, "stats-json", OutputStatsLogInit, OutputRegisterStatsModule(MODULE_NAME, "stats-json", OutputStatsLogInit,
JsonStatsLogger); JsonStatsLogger, JsonStatsLogThreadInit, JsonStatsLogThreadDeinit,
NULL);
/* also register as child of eve-log */ /* also register as child of eve-log */
OutputRegisterStatsSubModule("eve-log", MODULE_NAME, "eve-log.stats", OutputRegisterStatsSubModule("eve-log", MODULE_NAME, "eve-log.stats",
OutputStatsLogInitSub, JsonStatsLogger); OutputStatsLogInitSub, JsonStatsLogger, JsonStatsLogThreadInit,
JsonStatsLogThreadDeinit, NULL);
} }
#else #else
static TmEcode OutputJsonThreadInit(ThreadVars *t, void *initdata, void **data)
{
SCLogInfo("Can't init JSON output - JSON support was disabled during build.");
return TM_ECODE_FAILED;
}
void TmModuleJsonStatsLogRegister (void) void TmModuleJsonStatsLogRegister (void)
{ {
tmm_modules[TMM_JSONSTATSLOG].name = MODULE_NAME; SCLogInfo("Can't register JSON output - JSON support was disabled during build.");
tmm_modules[TMM_JSONSTATSLOG].ThreadInit = OutputJsonThreadInit;
} }
#endif #endif

@ -46,17 +46,18 @@ typedef struct OutputStatsLogger_ {
OutputCtx *output_ctx; OutputCtx *output_ctx;
struct OutputStatsLogger_ *next; struct OutputStatsLogger_ *next;
const char *name; const char *name;
TmmId module_id; ThreadInitFunc ThreadInit;
ThreadDeinitFunc ThreadDeinit;
ThreadExitPrintStatsFunc ThreadExitPrintStats;
} OutputStatsLogger; } OutputStatsLogger;
static OutputStatsLogger *list = NULL; static OutputStatsLogger *list = NULL;
int OutputRegisterStatsLogger(const char *name, StatsLogger LogFunc, OutputCtx *output_ctx) int OutputRegisterStatsLogger(const char *name, StatsLogger LogFunc,
OutputCtx *output_ctx, ThreadInitFunc ThreadInit,
ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats)
{ {
int module_id = TmModuleGetIdByName(name);
if (module_id < 0)
return -1;
OutputStatsLogger *op = SCMalloc(sizeof(*op)); OutputStatsLogger *op = SCMalloc(sizeof(*op));
if (op == NULL) if (op == NULL)
return -1; return -1;
@ -65,7 +66,9 @@ int OutputRegisterStatsLogger(const char *name, StatsLogger LogFunc, OutputCtx *
op->LogFunc = LogFunc; op->LogFunc = LogFunc;
op->output_ctx = output_ctx; op->output_ctx = output_ctx;
op->name = name; op->name = name;
op->module_id = (TmmId) module_id; op->ThreadInit = ThreadInit;
op->ThreadDeinit = ThreadDeinit;
op->ThreadExitPrintStats = ThreadExitPrintStats;
if (list == NULL) if (list == NULL)
list = op; list = op;
@ -126,16 +129,9 @@ static TmEcode OutputStatsLogThreadInit(ThreadVars *tv, void *initdata, void **d
OutputStatsLogger *logger = list; OutputStatsLogger *logger = list;
while (logger) { while (logger) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name); if (logger->ThreadInit) {
if (tm_module == NULL) {
SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", logger->name);
exit(EXIT_FAILURE);
}
if (tm_module->ThreadInit) {
void *retptr = NULL; void *retptr = NULL;
if (tm_module->ThreadInit(tv, (void *)logger->output_ctx, &retptr) == TM_ECODE_OK) { if (logger->ThreadInit(tv, (void *)logger->output_ctx, &retptr) == TM_ECODE_OK) {
OutputLoggerThreadStore *ts = SCMalloc(sizeof(*ts)); OutputLoggerThreadStore *ts = SCMalloc(sizeof(*ts));
/* todo */ BUG_ON(ts == NULL); /* todo */ BUG_ON(ts == NULL);
memset(ts, 0x00, sizeof(*ts)); memset(ts, 0x00, sizeof(*ts));
@ -170,15 +166,12 @@ static TmEcode OutputStatsLogThreadDeinit(ThreadVars *tv, void *thread_data)
OutputStatsLogger *logger = list; OutputStatsLogger *logger = list;
while (logger && store) { while (logger && store) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name); if (logger->ThreadDeinit) {
if (tm_module == NULL) { logger->ThreadDeinit(tv, store->thread_data);
SCLogError(SC_ERR_INVALID_ARGUMENT, } else {
"TmModuleGetByName for %s failed", logger->name); /* XXX Temporary. */
exit(EXIT_FAILURE); SCLogNotice("Logger {%s} does not have ThreadDeinit.",
} logger->name);
if (tm_module->ThreadDeinit) {
tm_module->ThreadDeinit(tv, store->thread_data);
} }
OutputLoggerThreadStore *next_store = store->next; OutputLoggerThreadStore *next_store = store->next;
@ -198,15 +191,8 @@ static void OutputStatsLogExitPrintStats(ThreadVars *tv, void *thread_data)
OutputStatsLogger *logger = list; OutputStatsLogger *logger = list;
while (logger && store) { while (logger && store) {
TmModule *tm_module = TmModuleGetByName((char *)logger->name); if (logger->ThreadExitPrintStats) {
if (tm_module == NULL) { logger->ThreadExitPrintStats(tv, store->thread_data);
SCLogError(SC_ERR_INVALID_ARGUMENT,
"TmModuleGetByName for %s failed", logger->name);
exit(EXIT_FAILURE);
}
if (tm_module->ThreadExitPrintStats) {
tm_module->ThreadExitPrintStats(tv, store->thread_data);
} }
logger = logger->next; logger = logger->next;

@ -46,7 +46,9 @@ TmEcode OutputStatsLog(ThreadVars *tv, void *thread_data, StatsTable *st);
typedef int (*StatsLogger)(ThreadVars *, void *thread_data, const StatsTable *); typedef int (*StatsLogger)(ThreadVars *, void *thread_data, const StatsTable *);
int OutputRegisterStatsLogger(const char *name, StatsLogger LogFunc, OutputCtx *); int OutputRegisterStatsLogger(const char *name, StatsLogger LogFunc,
OutputCtx *, ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats);
void TmModuleStatsLoggerRegister (void); void TmModuleStatsLoggerRegister (void);

@ -637,7 +637,9 @@ error:
*/ */
void void
OutputRegisterStatsModule(const char *name, const char *conf_name, OutputRegisterStatsModule(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), StatsLogger StatsLogFunc) OutputCtx *(*InitFunc)(ConfNode *), StatsLogger StatsLogFunc,
ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats)
{ {
if (unlikely(StatsLogFunc == NULL)) { if (unlikely(StatsLogFunc == NULL)) {
goto error; goto error;
@ -652,6 +654,9 @@ OutputRegisterStatsModule(const char *name, const char *conf_name,
module->conf_name = conf_name; module->conf_name = conf_name;
module->InitFunc = InitFunc; module->InitFunc = InitFunc;
module->StatsLogFunc = StatsLogFunc; module->StatsLogFunc = StatsLogFunc;
module->ThreadInit = ThreadInit;
module->ThreadDeinit = ThreadDeinit;
module->ThreadExitPrintStats = ThreadExitPrintStats;
TAILQ_INSERT_TAIL(&output_modules, module, entries); TAILQ_INSERT_TAIL(&output_modules, module, entries);
SCLogDebug("Stats logger \"%s\" registered.", name); SCLogDebug("Stats logger \"%s\" registered.", name);
@ -672,7 +677,9 @@ error:
void void
OutputRegisterStatsSubModule(const char *parent_name, const char *name, OutputRegisterStatsSubModule(const char *parent_name, const char *name,
const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *), const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *),
StatsLogger StatsLogFunc) StatsLogger StatsLogFunc, ThreadInitFunc ThreadInit,
ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats)
{ {
if (unlikely(StatsLogFunc == NULL)) { if (unlikely(StatsLogFunc == NULL)) {
goto error; goto error;
@ -688,6 +695,9 @@ OutputRegisterStatsSubModule(const char *parent_name, const char *name,
module->parent_name = parent_name; module->parent_name = parent_name;
module->InitSubFunc = InitFunc; module->InitSubFunc = InitFunc;
module->StatsLogFunc = StatsLogFunc; module->StatsLogFunc = StatsLogFunc;
module->ThreadInit = ThreadInit;
module->ThreadDeinit = ThreadDeinit;
module->ThreadExitPrintStats = ThreadExitPrintStats;
TAILQ_INSERT_TAIL(&output_modules, module, entries); TAILQ_INSERT_TAIL(&output_modules, module, entries);
SCLogDebug("Stats logger \"%s\" registered.", name); SCLogDebug("Stats logger \"%s\" registered.", name);

@ -147,10 +147,14 @@ void OutputRegisterStreamingSubModule(const char *parent_name, const char *name,
StreamingLogger StreamingLogFunc, enum OutputStreamingType stream_type); StreamingLogger StreamingLogFunc, enum OutputStreamingType stream_type);
void OutputRegisterStatsModule(const char *name, const char *conf_name, void OutputRegisterStatsModule(const char *name, const char *conf_name,
OutputCtx *(*InitFunc)(ConfNode *), StatsLogger StatsLogFunc); OutputCtx *(*InitFunc)(ConfNode *), StatsLogger StatsLogFunc,
ThreadInitFunc ThreadInit, ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats);
void OutputRegisterStatsSubModule(const char *parent_name, const char *name, void OutputRegisterStatsSubModule(const char *parent_name, const char *name,
const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *), const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *),
StatsLogger StatsLogFunc); StatsLogger StatsLogFunc, ThreadInitFunc ThreadInit,
ThreadDeinitFunc ThreadDeinit,
ThreadExitPrintStatsFunc ThreadExitPrintStats);
OutputModule *OutputGetModuleByConfName(const char *name); OutputModule *OutputGetModuleByConfName(const char *name);
void OutputDeregisterAll(void); void OutputDeregisterAll(void);

@ -592,7 +592,9 @@ static void SetupOutput(const char *name, OutputModule *module, OutputCtx *outpu
} }
/* stats logger doesn't run in the packet path */ /* stats logger doesn't run in the packet path */
if (module->StatsLogFunc) { if (module->StatsLogFunc) {
OutputRegisterStatsLogger(module->name, module->StatsLogFunc, output_ctx); OutputRegisterStatsLogger(module->name, module->StatsLogFunc,
output_ctx,module->ThreadInit, module->ThreadDeinit,
module->ThreadExitPrintStats);
return; return;
} }

@ -240,14 +240,12 @@ const char * TmModuleTmmIdToString(TmmId id)
CASE_CODE (TMM_FILEDATALOGGER); CASE_CODE (TMM_FILEDATALOGGER);
CASE_CODE (TMM_STREAMINGLOGGER); CASE_CODE (TMM_STREAMINGLOGGER);
CASE_CODE (TMM_JSONFILELOG); CASE_CODE (TMM_JSONFILELOG);
CASE_CODE (TMM_JSONSTATSLOG);
CASE_CODE (TMM_OUTPUTJSON); CASE_CODE (TMM_OUTPUTJSON);
CASE_CODE (TMM_FLOWMANAGER); CASE_CODE (TMM_FLOWMANAGER);
CASE_CODE (TMM_FLOWRECYCLER); CASE_CODE (TMM_FLOWRECYCLER);
CASE_CODE (TMM_UNIXMANAGER); CASE_CODE (TMM_UNIXMANAGER);
CASE_CODE (TMM_DETECTLOADER); CASE_CODE (TMM_DETECTLOADER);
CASE_CODE (TMM_LUALOG); CASE_CODE (TMM_LUALOG);
CASE_CODE (TMM_LOGSTATSLOG);
CASE_CODE (TMM_RECEIVENETMAP); CASE_CODE (TMM_RECEIVENETMAP);
CASE_CODE (TMM_DECODENETMAP); CASE_CODE (TMM_DECODENETMAP);
CASE_CODE (TMM_TLSSTORE); CASE_CODE (TMM_TLSSTORE);

@ -72,11 +72,9 @@ typedef enum {
TMM_FILELOGGER, TMM_FILELOGGER,
TMM_FILEDATALOGGER, TMM_FILEDATALOGGER,
TMM_STREAMINGLOGGER, TMM_STREAMINGLOGGER,
TMM_JSONSTATSLOG,
TMM_JSONFILELOG, TMM_JSONFILELOG,
TMM_RECEIVENFLOG, TMM_RECEIVENFLOG,
TMM_DECODENFLOG, TMM_DECODENFLOG,
TMM_LOGSTATSLOG,
TMM_FLOWMANAGER, TMM_FLOWMANAGER,
TMM_FLOWRECYCLER, TMM_FLOWRECYCLER,

Loading…
Cancel
Save