summaryrefslogtreecommitdiffstats
path: root/plugins/impstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2010-09-13 15:43:56 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2010-09-13 15:43:56 +0200
commite86cb62f1299ef18732f7b3b87d45a840ee38f1e (patch)
tree8e346e0c74431c09ea174d63bebae80fb7761ef9 /plugins/impstats
parent3d50fd6a67b7d0bf31628aea14128a47dd5d326f (diff)
downloadrsyslog-e86cb62f1299ef18732f7b3b87d45a840ee38f1e.tar.gz
rsyslog-e86cb62f1299ef18732f7b3b87d45a840ee38f1e.tar.xz
rsyslog-e86cb62f1299ef18732f7b3b87d45a840ee38f1e.zip
improved statistics-gathering subsystem
... well, actually this is a first real implementation of this subsystem. I have added a counter registry, a way to access the countres (as readable string) and a way to define and maintem them. Also, module impstats has been updated to utilize the new system. Finally, I added some counters. I hope that this sets the baseline for useful future enhancements.
Diffstat (limited to 'plugins/impstats')
-rw-r--r--plugins/impstats/impstats.c39
1 files changed, 27 insertions, 12 deletions
diff --git a/plugins/impstats/impstats.c b/plugins/impstats/impstats.c
index a818d20c..1312a4e8 100644
--- a/plugins/impstats/impstats.c
+++ b/plugins/impstats/impstats.c
@@ -45,6 +45,7 @@
#include "srUtils.h"
#include "unicode-helper.h"
#include "glbl.h"
+#include "statsobj.h"
#include "prop.h"
MODULE_TYPE_INPUT
@@ -58,6 +59,9 @@ MODULE_TYPE_INPUT
DEF_IMOD_STATIC_DATA
DEFobjCurrIf(glbl)
DEFobjCurrIf(prop)
+DEFobjCurrIf(statsobj)
+DEFobjCurrIf(errmsg)
+
typedef struct configSettings_s {
int iStatsInterval;
int iFacility;
@@ -112,22 +116,25 @@ finalize_it:
}
+/* callback for statsobj
+ * Note: usrptr exists only to satisfy requirements of statsobj callback interface!
+ */
+static rsRetVal
+doStatsLine(void __attribute__((unused)) *usrptr, cstr_t *cstr)
+{
+ DEFiRet;
+ doSubmitMsg(rsCStrGetSzStrNoNULL(cstr));
+ RETiRet;
+}
+
+
/* the function to generate the actual statistics messages
* rgerhards, 2010-09-09
*/
static inline void
generateStatsMsgs(void)
{
- int iMsgQueueSize;
- uchar msg[1024];
- rsRetVal iRet;
-
- CHKiRet(diagGetMainMsgQSize(&iMsgQueueSize));
- snprintf((char*)msg, sizeof(msg), "mainqueue size=%d", iMsgQueueSize);
- doSubmitMsg(msg);
-
-finalize_it:
- /*empty statement needed per C syntax*/;
+ statsobj.GetAllStatsLines(doStatsLine, NULL);
}
@@ -138,9 +145,7 @@ CODESTARTrunInput
* right into the sleep below.
*/
while(1) {
-dbgprintf("impstats: stats interval %d seconds - going to sleep\n", cs.iStatsInterval);
srSleep(cs.iStatsInterval, 0); /* seconds, micro seconds */
-dbgprintf("impstats: woke up\n");
if(glbl.GetGlobalInputTermState() == 1)
break; /* terminate input! */
@@ -151,10 +156,16 @@ ENDrunInput
BEGINwillRun
+ rsRetVal localRet;
CODESTARTwillRun
DBGPRINTF("impstats: stats interval %d seconds\n", cs.iStatsInterval);
if(cs.iStatsInterval == 0)
ABORT_FINALIZE(RS_RET_NO_RUN);
+ localRet = statsobj.EnableStats();
+ if(localRet != RS_RET_OK) {
+ errmsg.LogError(0, localRet, "impstat: error enabling statistics gathering");
+ ABORT_FINALIZE(RS_RET_NO_RUN);
+ }
finalize_it:
ENDwillRun
@@ -171,6 +182,8 @@ CODESTARTmodExit
/* release objects we used */
objRelease(glbl, CORE_COMPONENT);
objRelease(prop, CORE_COMPONENT);
+ objRelease(errmsg, CORE_COMPONENT);
+ objRelease(statsobj, CORE_COMPONENT);
ENDmodExit
@@ -196,6 +209,8 @@ CODEmodInit_QueryRegCFSLineHdlr
initConfigSettings();
CHKiRet(objUse(glbl, CORE_COMPONENT));
CHKiRet(objUse(prop, CORE_COMPONENT));
+ CHKiRet(objUse(errmsg, CORE_COMPONENT));
+ CHKiRet(objUse(statsobj, CORE_COMPONENT));
CHKiRet(omsdRegCFSLineHdlr((uchar *)"pstatsinterval", 0, eCmdHdlrInt, NULL, &cs.iStatsInterval, STD_LOADABLE_MODULE_ID));
CHKiRet(omsdRegCFSLineHdlr((uchar *)"pstatfacility", 0, eCmdHdlrInt, NULL, &cs.iFacility, STD_LOADABLE_MODULE_ID));
CHKiRet(omsdRegCFSLineHdlr((uchar *)"pstatseverity", 0, eCmdHdlrInt, NULL, &cs.iSeverity, STD_LOADABLE_MODULE_ID));