mirror of
https://github.com/rsyslog/rsyslog.git
synced 2025-12-21 13:40:42 +01:00
Merge branch 'v5-stable-newstats' into v5-devel
Conflicts: configure.ac
This commit is contained in:
commit
1d0dec9b0c
@ -121,6 +121,9 @@ Version 5.9.0 [V5-DEVEL] (rgerhards), 2011-06-08
|
||||
Version 5.8.9 [V5-stable] 2012-03-??
|
||||
- bugfix: stopped DA queue was never processed after a restart due to a
|
||||
regression from statistics module
|
||||
- added better doc for statsobj interface
|
||||
Thanks to Kaiwang Chen for his suggestions and analysis in regard to the
|
||||
stats subsystem.
|
||||
---------------------------------------------------------------------------
|
||||
Version 5.8.8 [V5-stable] 2012-03-05
|
||||
- added capability to use a local interface IP address as fromhost-ip for
|
||||
|
||||
@ -856,6 +856,7 @@ addLstn(ptcpsrv_t *pSrv, int sock, int isIPv6)
|
||||
isIPv6 ? "IPv6" : "IPv4");
|
||||
statname[sizeof(statname)-1] = '\0'; /* just to be on the save side... */
|
||||
CHKiRet(statsobj.SetName(pLstn->stats, statname));
|
||||
STATSCOUNTER_INIT(pLstn->ctrSubmit, pLstn->mutCtrSubmit);
|
||||
CHKiRet(statsobj.AddCounter(pLstn->stats, UCHAR_CONSTANT("submitted"),
|
||||
ctrType_IntCtr, &(pLstn->ctrSubmit)));
|
||||
CHKiRet(statsobj.ConstructFinalize(pLstn->stats));
|
||||
|
||||
@ -234,6 +234,7 @@ static rsRetVal addListner(void __attribute__((unused)) *pVal, uchar *pNewVal)
|
||||
snprintf((char*)statname, sizeof(statname), "imudp(%s:%s)", bindName, port);
|
||||
statname[sizeof(statname)-1] = '\0'; /* just to be on the save side... */
|
||||
CHKiRet(statsobj.SetName(newlcnfinfo->stats, statname));
|
||||
STATSCOUNTER_INIT(newlcnfinfo->ctrSubmit, newlcnfinfo->mutCtrSubmit);
|
||||
CHKiRet(statsobj.AddCounter(newlcnfinfo->stats, UCHAR_CONSTANT("submitted"),
|
||||
ctrType_IntCtr, &(newlcnfinfo->ctrSubmit)));
|
||||
CHKiRet(statsobj.ConstructFinalize(newlcnfinfo->stats));
|
||||
|
||||
@ -1231,10 +1231,13 @@ CODEmodInit_QueryRegCFSLineHdlr
|
||||
/* support statistics gathering */
|
||||
CHKiRet(statsobj.Construct(&modStats));
|
||||
CHKiRet(statsobj.SetName(modStats, UCHAR_CONSTANT("imuxsock")));
|
||||
STATSCOUNTER_INIT(ctrSubmit, mutCtrSubmit);
|
||||
CHKiRet(statsobj.AddCounter(modStats, UCHAR_CONSTANT("submitted"),
|
||||
ctrType_IntCtr, &ctrSubmit));
|
||||
STATSCOUNTER_INIT(ctrLostRatelimit, mutCtrLostRatelimit);
|
||||
CHKiRet(statsobj.AddCounter(modStats, UCHAR_CONSTANT("ratelimit.discarded"),
|
||||
ctrType_IntCtr, &ctrLostRatelimit));
|
||||
STATSCOUNTER_INIT(ctrNumRatelimiters, mutCtrNumRatelimiters);
|
||||
CHKiRet(statsobj.AddCounter(modStats, UCHAR_CONSTANT("ratelimit.numratelimiters"),
|
||||
ctrType_IntCtr, &ctrNumRatelimiters));
|
||||
CHKiRet(statsobj.ConstructFinalize(modStats));
|
||||
|
||||
@ -1985,10 +1985,9 @@ qqueueStart(qqueue_t *pThis) /* this is the ConstructionFinalizer */
|
||||
CHKiRet(statsobj.Construct(&pThis->statsobj));
|
||||
CHKiRet(statsobj.SetName(pThis->statsobj, qName));
|
||||
/* we need to save the queue size, as the stats module initializes it to 0! */
|
||||
iQueueSizeSave = pThis->iQueueSize;
|
||||
/* iQueueSize is a dual-use counter: no init, no mutex! */
|
||||
CHKiRet(statsobj.AddCounter(pThis->statsobj, UCHAR_CONSTANT("size"),
|
||||
ctrType_Int, &pThis->iQueueSize));
|
||||
pThis->iQueueSize = iQueueSizeSave;
|
||||
|
||||
STATSCOUNTER_INIT(pThis->ctrEnqueued, pThis->mutCtrEnqueued);
|
||||
CHKiRet(statsobj.AddCounter(pThis->statsobj, UCHAR_CONSTANT("enqueued"),
|
||||
@ -2005,7 +2004,7 @@ qqueueStart(qqueue_t *pThis) /* this is the ConstructionFinalizer */
|
||||
CHKiRet(statsobj.AddCounter(pThis->statsobj, UCHAR_CONSTANT("discarded.nf"),
|
||||
ctrType_IntCtr, &pThis->ctrNFDscrd));
|
||||
|
||||
pThis->ctrMaxqsize = 0;
|
||||
pThis->ctrMaxqsize = 0; /* no mutex needed, thus no init call */
|
||||
CHKiRet(statsobj.AddCounter(pThis->statsobj, UCHAR_CONSTANT("maxqsize"),
|
||||
ctrType_Int, &pThis->ctrMaxqsize));
|
||||
|
||||
|
||||
@ -171,7 +171,7 @@ struct queue_s {
|
||||
STATSCOUNTER_DEF(ctrFull, mutCtrFull);
|
||||
STATSCOUNTER_DEF(ctrFDscrd, mutCtrFDscrd);
|
||||
STATSCOUNTER_DEF(ctrNFDscrd, mutCtrNFDscrd);
|
||||
int ctrMaxqsize;
|
||||
int ctrMaxqsize; /* NOT guarded by a mutex */
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -3,25 +3,23 @@
|
||||
* This object provides a statistics-gathering facility inside rsyslog. This
|
||||
* functionality will be pragmatically implemented and extended.
|
||||
*
|
||||
* Copyright 2010 Rainer Gerhards and Adiscon GmbH.
|
||||
* Copyright 2010-2012 Adiscon GmbH.
|
||||
*
|
||||
* This file is part of the rsyslog runtime library.
|
||||
*
|
||||
* The rsyslog runtime library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The rsyslog runtime library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with the rsyslog runtime library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* A copy of the GPL can be found in the file "COPYING" in this distribution.
|
||||
* A copy of the LGPL can be found in the file "COPYING.LESSER" in this distribution.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* -or-
|
||||
* see COPYING.ASL20 in the source distribution
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
@ -139,6 +137,10 @@ finalize_it:
|
||||
|
||||
/* add a counter to an object
|
||||
* ctrName is duplicated, caller must free it if requried
|
||||
* NOTE: The counter is READ-ONLY and MUST NOT be modified (most
|
||||
* importantly, it must not be initialized, so the caller must
|
||||
* ensure the counter is properly initialized before AddCounter()
|
||||
* is called.
|
||||
*/
|
||||
static rsRetVal
|
||||
addCounter(statsobj_t *pThis, uchar *ctrName, statsCtrType_t ctrType, void *pCtr)
|
||||
@ -154,11 +156,9 @@ addCounter(statsobj_t *pThis, uchar *ctrName, statsCtrType_t ctrType, void *pCtr
|
||||
switch(ctrType) {
|
||||
case ctrType_IntCtr:
|
||||
ctr->val.pIntCtr = (intctr_t*) pCtr;
|
||||
*(ctr->val.pIntCtr) = 0;
|
||||
break;
|
||||
case ctrType_Int:
|
||||
ctr->val.pInt = (int*) pCtr;
|
||||
*(ctr->val.pInt) = 0;
|
||||
break;
|
||||
}
|
||||
addCtrToList(pThis, ctr);
|
||||
|
||||
@ -1,24 +1,22 @@
|
||||
/* The statsobj object.
|
||||
*
|
||||
* Copyright 2010 Rainer Gerhards and Adiscon GmbH.
|
||||
* Copyright 2010-2012 Rainer Gerhards and Adiscon GmbH.
|
||||
*
|
||||
* This file is part of the rsyslog runtime library.
|
||||
*
|
||||
* The rsyslog runtime library is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The rsyslog runtime library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with the rsyslog runtime library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* A copy of the GPL can be found in the file "COPYING" in this distribution.
|
||||
* A copy of the LGPL can be found in the file "COPYING.LESSER" in this distribution.
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* -or-
|
||||
* see COPYING.ASL20 in the source distribution
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef INCLUDED_STATSOBJ_H
|
||||
#define INCLUDED_STATSOBJ_H
|
||||
@ -96,6 +94,31 @@ PROTOTYPEObj(statsobj);
|
||||
* Unfortunately, this does not work if counter is e.g. "pThis->ctr".
|
||||
* So we decided, for clarity, to always insist on specifying the mutex
|
||||
* name (after all, it's just a few more keystrokes...).
|
||||
* --------------------------------------------------------------------
|
||||
* NOTE WELL
|
||||
* --------------------------------------------------------------------
|
||||
* There are actually two types of stats counters: "regular" counters,
|
||||
* which are only used for stats purposes and "dual" counters, which
|
||||
* are primarily used for other purposes but can be included in stats
|
||||
* as well. ALL regular counters MUST be initialized with
|
||||
* STATSCOUNTER_INIT and only be modified by STATSCOUNTER_* functions.
|
||||
* They MUST NOT be used for any other purpose (if this seems to make
|
||||
* sense, consider changing it to a dual counter).
|
||||
* Dual counters are somewhat dangerous in that a single variable is
|
||||
* used for two purposes: the actual application need and stats
|
||||
* counting. However, this is supported for performance reasons, as it
|
||||
* provides insight into the inner engine workings without need for
|
||||
* additional counters (and their maintenance code). Dual counters
|
||||
* MUST NOT be modified by STATSCOUNTER_* functions. Most importantly,
|
||||
* it is expected that the actua application code provides proper
|
||||
* (enough) synchronized access to these counters. Most importantly,
|
||||
* this means they have NO stats-system mutex associated to them.
|
||||
*
|
||||
* The interface function AddCounter() is a read-only function. It
|
||||
* only provides the stats subsystem with a reference to a counter.
|
||||
* It is irrelevant if the counter is a regular or dual one. For that
|
||||
* reason, AddCounter() must not modify the counter contents, as in
|
||||
* the case of a dual counter application code may be broken.
|
||||
*/
|
||||
#define STATSCOUNTER_DEF(ctr, mut) \
|
||||
intctr_t ctr; \
|
||||
|
||||
1
tcpsrv.c
1
tcpsrv.c
@ -128,6 +128,7 @@ addNewLstnPort(tcpsrv_t *pThis, uchar *pszPort)
|
||||
snprintf((char*)statname, sizeof(statname), "%s(%s)", pThis->pszInputName, pszPort);
|
||||
statname[sizeof(statname)-1] = '\0'; /* just to be on the save side... */
|
||||
CHKiRet(statsobj.SetName(pEntry->stats, statname));
|
||||
STATSCOUNTER_INIT(pEntry->ctrSubmit, pEntry->mutCtrSubmit);
|
||||
CHKiRet(statsobj.AddCounter(pEntry->stats, UCHAR_CONSTANT("submitted"),
|
||||
ctrType_IntCtr, &(pEntry->ctrSubmit)));
|
||||
CHKiRet(statsobj.ConstructFinalize(pEntry->stats));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user