]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
logging: convert stats loggers to non-thread module
authorJason Ish <ish@unx.ca>
Fri, 27 May 2016 16:39:50 +0000 (10:39 -0600)
committerVictor Julien <victor@inliniac.net>
Mon, 19 Sep 2016 11:47:52 +0000 (13:47 +0200)
src/log-stats.c
src/output-json-stats.c
src/output-stats.c
src/output-stats.h
src/output.c
src/output.h
src/runmodes.c
src/tm-modules.c
src/tm-threads-common.h

index a02e4a1225a3d6471333eb639ba16db72d26c023..51cb56c4817e5c868e61b520eb051b3a9d5ea917 100644 (file)
@@ -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);
 }
index 3f45732bb4438943fd394078af439d6450905046..dbfba0c43cf71519673cb3adc9a544fb52f0f67e 100644 (file)
@@ -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
index 8309755de62c48e862648f1860f5d36cb9d095b4..47fedf05c775acd2f7aad28a94032f29e7bbf0a6 100644 (file)
@@ -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;
index 75017ca20c4e7f78ece739c1c40929c93c37dac2..eba72f36e4101815ea6d5ed67f5a762bf80e8ae4 100644 (file)
@@ -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);
 
index 5d121b32947b49c78d4b276046e8788704073b25..84fe7fab2eed1c3fd88376bed3550bd566c6faef 100644 (file)
@@ -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);
index 9a6296ffc2580fa0cabbe83e165c424dfa19ad7b..a895fdc310b2c39a322b61a0c24ca3da0e908e4f 100644 (file)
@@ -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);
index 6c0d9918c8e36762d1fdb27cfe7a30ca03637436..a22436a0969ad73f9adf73873c906a934f40b514 100644 (file)
@@ -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;
     }
 
index df0b21ecc8f291c7e56ae920a06c0127166455d0..c333367e36b07f480b309fea6666d2aa3f9ac493 100644 (file)
@@ -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);
index 861bd8e6f79f41ae2d514a002aebe7b116180835..75916590d7309b317c0242524a2a2d43d62864dc 100644 (file)
@@ -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,