diff --git a/src/log-stats.c b/src/log-stats.c index a02e4a1225..51cb56c481 100644 --- a/src/log-stats.c +++ b/src/log-stats.c @@ -296,13 +296,7 @@ static void LogStatsLogDeInitCtx(OutputCtx *output_ctx) void TmModuleLogStatsLogRegister (void) { - tmm_modules[TMM_LOGSTATSLOG].name = MODULE_NAME; - tmm_modules[TMM_LOGSTATSLOG].ThreadInit = LogStatsLogThreadInit; - tmm_modules[TMM_LOGSTATSLOG].ThreadExitPrintStats = 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); + OutputRegisterStatsModule(MODULE_NAME, "stats", LogStatsLogInitCtx, + LogStatsLogger, LogStatsLogThreadInit, LogStatsLogThreadDeinit, + LogStatsLogExitPrintStats); } diff --git a/src/output-json-stats.c b/src/output-json-stats.c index 3f45732bb4..dbfba0c43c 100644 --- a/src/output-json-stats.c +++ b/src/output-json-stats.c @@ -372,34 +372,22 @@ OutputCtx *OutputStatsLogInitSub(ConfNode *conf, OutputCtx *parent_ctx) } 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 */ OutputRegisterStatsModule(MODULE_NAME, "stats-json", OutputStatsLogInit, - JsonStatsLogger); + JsonStatsLogger, JsonStatsLogThreadInit, JsonStatsLogThreadDeinit, + NULL); /* also register as child of eve-log */ OutputRegisterStatsSubModule("eve-log", MODULE_NAME, "eve-log.stats", - OutputStatsLogInitSub, JsonStatsLogger); + OutputStatsLogInitSub, JsonStatsLogger, JsonStatsLogThreadInit, + JsonStatsLogThreadDeinit, NULL); } #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) { - tmm_modules[TMM_JSONSTATSLOG].name = MODULE_NAME; - tmm_modules[TMM_JSONSTATSLOG].ThreadInit = OutputJsonThreadInit; + SCLogInfo("Can't register JSON output - JSON support was disabled during build."); } #endif diff --git a/src/output-stats.c b/src/output-stats.c index 8309755de6..47fedf05c7 100644 --- a/src/output-stats.c +++ b/src/output-stats.c @@ -46,17 +46,18 @@ typedef struct OutputStatsLogger_ { OutputCtx *output_ctx; struct OutputStatsLogger_ *next; const char *name; - TmmId module_id; + ThreadInitFunc ThreadInit; + ThreadDeinitFunc ThreadDeinit; + ThreadExitPrintStatsFunc ThreadExitPrintStats; } OutputStatsLogger; 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)); if (op == NULL) return -1; @@ -65,7 +66,9 @@ int OutputRegisterStatsLogger(const char *name, StatsLogger LogFunc, OutputCtx * op->LogFunc = LogFunc; op->output_ctx = output_ctx; op->name = name; - op->module_id = (TmmId) module_id; + op->ThreadInit = ThreadInit; + op->ThreadDeinit = ThreadDeinit; + op->ThreadExitPrintStats = ThreadExitPrintStats; if (list == NULL) list = op; @@ -126,16 +129,9 @@ static TmEcode OutputStatsLogThreadInit(ThreadVars *tv, void *initdata, void **d OutputStatsLogger *logger = list; while (logger) { - TmModule *tm_module = TmModuleGetByName((char *)logger->name); - if (tm_module == NULL) { - SCLogError(SC_ERR_INVALID_ARGUMENT, - "TmModuleGetByName for %s failed", logger->name); - exit(EXIT_FAILURE); - } - - if (tm_module->ThreadInit) { + if (logger->ThreadInit) { 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)); /* todo */ BUG_ON(ts == NULL); memset(ts, 0x00, sizeof(*ts)); @@ -170,15 +166,12 @@ static TmEcode OutputStatsLogThreadDeinit(ThreadVars *tv, void *thread_data) OutputStatsLogger *logger = list; while (logger && store) { - TmModule *tm_module = TmModuleGetByName((char *)logger->name); - if (tm_module == NULL) { - SCLogError(SC_ERR_INVALID_ARGUMENT, - "TmModuleGetByName for %s failed", logger->name); - exit(EXIT_FAILURE); - } - - if (tm_module->ThreadDeinit) { - tm_module->ThreadDeinit(tv, store->thread_data); + if (logger->ThreadDeinit) { + logger->ThreadDeinit(tv, store->thread_data); + } else { + /* XXX Temporary. */ + SCLogNotice("Logger {%s} does not have ThreadDeinit.", + logger->name); } OutputLoggerThreadStore *next_store = store->next; @@ -198,15 +191,8 @@ static void OutputStatsLogExitPrintStats(ThreadVars *tv, void *thread_data) OutputStatsLogger *logger = list; while (logger && store) { - TmModule *tm_module = TmModuleGetByName((char *)logger->name); - if (tm_module == NULL) { - 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); + if (logger->ThreadExitPrintStats) { + logger->ThreadExitPrintStats(tv, store->thread_data); } logger = logger->next; diff --git a/src/output-stats.h b/src/output-stats.h index 75017ca20c..eba72f36e4 100644 --- a/src/output-stats.h +++ b/src/output-stats.h @@ -46,7 +46,9 @@ TmEcode OutputStatsLog(ThreadVars *tv, void *thread_data, StatsTable *st); 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); diff --git a/src/output.c b/src/output.c index 5d121b3294..84fe7fab2e 100644 --- a/src/output.c +++ b/src/output.c @@ -637,7 +637,9 @@ error: */ 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) { if (unlikely(StatsLogFunc == NULL)) { goto error; @@ -652,6 +654,9 @@ OutputRegisterStatsModule(const char *name, const char *conf_name, module->conf_name = conf_name; module->InitFunc = InitFunc; module->StatsLogFunc = StatsLogFunc; + module->ThreadInit = ThreadInit; + module->ThreadDeinit = ThreadDeinit; + module->ThreadExitPrintStats = ThreadExitPrintStats; TAILQ_INSERT_TAIL(&output_modules, module, entries); SCLogDebug("Stats logger \"%s\" registered.", name); @@ -672,7 +677,9 @@ error: void OutputRegisterStatsSubModule(const char *parent_name, const char *name, const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *), - StatsLogger StatsLogFunc) + StatsLogger StatsLogFunc, ThreadInitFunc ThreadInit, + ThreadDeinitFunc ThreadDeinit, + ThreadExitPrintStatsFunc ThreadExitPrintStats) { if (unlikely(StatsLogFunc == NULL)) { goto error; @@ -688,6 +695,9 @@ OutputRegisterStatsSubModule(const char *parent_name, const char *name, module->parent_name = parent_name; module->InitSubFunc = InitFunc; module->StatsLogFunc = StatsLogFunc; + module->ThreadInit = ThreadInit; + module->ThreadDeinit = ThreadDeinit; + module->ThreadExitPrintStats = ThreadExitPrintStats; TAILQ_INSERT_TAIL(&output_modules, module, entries); SCLogDebug("Stats logger \"%s\" registered.", name); diff --git a/src/output.h b/src/output.h index 9a6296ffc2..a895fdc310 100644 --- a/src/output.h +++ b/src/output.h @@ -147,10 +147,14 @@ void OutputRegisterStreamingSubModule(const char *parent_name, const char *name, StreamingLogger StreamingLogFunc, enum OutputStreamingType stream_type); 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, const char *conf_name, OutputCtx *(*InitFunc)(ConfNode *, OutputCtx *), - StatsLogger StatsLogFunc); + StatsLogger StatsLogFunc, ThreadInitFunc ThreadInit, + ThreadDeinitFunc ThreadDeinit, + ThreadExitPrintStatsFunc ThreadExitPrintStats); OutputModule *OutputGetModuleByConfName(const char *name); void OutputDeregisterAll(void); diff --git a/src/runmodes.c b/src/runmodes.c index 6c0d9918c8..a22436a096 100644 --- a/src/runmodes.c +++ b/src/runmodes.c @@ -592,7 +592,9 @@ static void SetupOutput(const char *name, OutputModule *module, OutputCtx *outpu } /* stats logger doesn't run in the packet path */ if (module->StatsLogFunc) { - OutputRegisterStatsLogger(module->name, module->StatsLogFunc, output_ctx); + OutputRegisterStatsLogger(module->name, module->StatsLogFunc, + output_ctx,module->ThreadInit, module->ThreadDeinit, + module->ThreadExitPrintStats); return; } diff --git a/src/tm-modules.c b/src/tm-modules.c index df0b21ecc8..c333367e36 100644 --- a/src/tm-modules.c +++ b/src/tm-modules.c @@ -240,14 +240,12 @@ const char * TmModuleTmmIdToString(TmmId id) CASE_CODE (TMM_FILEDATALOGGER); CASE_CODE (TMM_STREAMINGLOGGER); CASE_CODE (TMM_JSONFILELOG); - CASE_CODE (TMM_JSONSTATSLOG); CASE_CODE (TMM_OUTPUTJSON); CASE_CODE (TMM_FLOWMANAGER); CASE_CODE (TMM_FLOWRECYCLER); CASE_CODE (TMM_UNIXMANAGER); CASE_CODE (TMM_DETECTLOADER); CASE_CODE (TMM_LUALOG); - CASE_CODE (TMM_LOGSTATSLOG); CASE_CODE (TMM_RECEIVENETMAP); CASE_CODE (TMM_DECODENETMAP); CASE_CODE (TMM_TLSSTORE); diff --git a/src/tm-threads-common.h b/src/tm-threads-common.h index 861bd8e6f7..75916590d7 100644 --- a/src/tm-threads-common.h +++ b/src/tm-threads-common.h @@ -72,11 +72,9 @@ typedef enum { TMM_FILELOGGER, TMM_FILEDATALOGGER, TMM_STREAMINGLOGGER, - TMM_JSONSTATSLOG, TMM_JSONFILELOG, TMM_RECEIVENFLOG, TMM_DECODENFLOG, - TMM_LOGSTATSLOG, TMM_FLOWMANAGER, TMM_FLOWRECYCLER,