mirror of
https://github.com/rsyslog/rsyslog.git
synced 2025-12-17 14:00:41 +01:00
imfile: implement support for module parameters via module() stmt
This commit is contained in:
parent
95e73e3cd2
commit
7166461613
@ -1,5 +1,8 @@
|
||||
---------------------------------------------------------------------------
|
||||
Version 6.5.1 [devel] 2012-08-??
|
||||
- imfile ported to new v6 config interface
|
||||
- imfile now supports config parameter for maximum number of submits
|
||||
which is a fine-tuning parameter in regard to input baching
|
||||
- added pure JSON output plugin parameter passing mode
|
||||
- ommongodb now supports templates
|
||||
- bugfix: imtcp could abort on exit due to invalid free()
|
||||
|
||||
@ -64,7 +64,11 @@ DEFobjCurrIf(strm)
|
||||
DEFobjCurrIf(prop)
|
||||
DEFobjCurrIf(ruleset)
|
||||
|
||||
#define NUM_MULTISUB 1024 /* max number of submits -- TODO: make configurable */
|
||||
static int bLegacyCnfModGlobalsPermitted;/* are legacy module-global config parameters permitted? */
|
||||
|
||||
#define NUM_MULTISUB 1024 /* default max number of submits */
|
||||
#define DFLT_PollInterval 10
|
||||
|
||||
typedef struct fileInfo_s {
|
||||
uchar *pszFileName;
|
||||
uchar *pszTag;
|
||||
@ -86,7 +90,7 @@ static struct configSettings_s {
|
||||
uchar *pszFileTag;
|
||||
uchar *pszStateFile;
|
||||
uchar *pszBindRuleset;
|
||||
int iPollInterval; /* number of seconds to sleep when there was no file activity */
|
||||
int iPollInterval;
|
||||
int iPersistStateInterval; /* how often if state file to be persisted? (default 0->never) */
|
||||
int iFacility; /* local0 */
|
||||
int iSeverity; /* notice, as of rfc 3164 */
|
||||
@ -117,7 +121,8 @@ static rsRetVal resetConfigVariables(uchar __attribute__((unused)) *pp, void __a
|
||||
|
||||
/* config variables */
|
||||
struct modConfData_s {
|
||||
rsconf_t *pConf; /* our overall config object */
|
||||
rsconf_t *pConf; /* our overall config object */
|
||||
int iPollInterval; /* number of seconds to sleep when there was no file activity */
|
||||
instanceConf_t *root, *tail;
|
||||
sbool configSetViaV2Method;
|
||||
};
|
||||
@ -130,6 +135,16 @@ static fileInfo_t files[MAX_INPUT_FILES];
|
||||
|
||||
static prop_t *pInputName = NULL; /* there is only one global inputName for all messages generated by this input */
|
||||
|
||||
/* module-global parameters */
|
||||
static struct cnfparamdescr modpdescr[] = {
|
||||
{ "pollinginterval", eCmdHdlrInt, 0 }
|
||||
};
|
||||
static struct cnfparamblk modpblk =
|
||||
{ CNFPARAMBLK_VERSION,
|
||||
sizeof(modpdescr)/sizeof(struct cnfparamdescr),
|
||||
modpdescr
|
||||
};
|
||||
|
||||
/* input instance parameters */
|
||||
static struct cnfparamdescr inppdescr[] = {
|
||||
{ "file", eCmdHdlrString, CNFPARAM_REQUIRED },
|
||||
@ -491,12 +506,14 @@ CODESTARTbeginCnfLoad
|
||||
loadModConf = pModConf;
|
||||
pModConf->pConf = pConf;
|
||||
/* init our settings */
|
||||
loadModConf->iPollInterval = DFLT_PollInterval;
|
||||
loadModConf->configSetViaV2Method = 0;
|
||||
bLegacyCnfModGlobalsPermitted = 1;
|
||||
/* init legacy config vars */
|
||||
cs.pszFileName = NULL;
|
||||
cs.pszFileTag = NULL;
|
||||
cs.pszStateFile = NULL;
|
||||
cs.iPollInterval = 10;
|
||||
cs.iPollInterval = DFLT_PollInterval;
|
||||
cs.iPersistStateInterval = 0;
|
||||
cs.iFacility = 128;
|
||||
cs.iSeverity = 5;
|
||||
@ -506,13 +523,59 @@ CODESTARTbeginCnfLoad
|
||||
ENDbeginCnfLoad
|
||||
|
||||
|
||||
BEGINsetModCnf
|
||||
struct cnfparamvals *pvals = NULL;
|
||||
int i;
|
||||
CODESTARTsetModCnf
|
||||
pvals = nvlstGetParams(lst, &modpblk, NULL);
|
||||
if(pvals == NULL) {
|
||||
errmsg.LogError(0, RS_RET_MISSING_CNFPARAMS, "imfile: error processing module "
|
||||
"config parameters [module(...)]");
|
||||
ABORT_FINALIZE(RS_RET_MISSING_CNFPARAMS);
|
||||
}
|
||||
|
||||
if(Debug) {
|
||||
dbgprintf("module (global) param blk for imfile:\n");
|
||||
cnfparamsPrint(&modpblk, pvals);
|
||||
}
|
||||
|
||||
for(i = 0 ; i < modpblk.nParams ; ++i) {
|
||||
if(!pvals[i].bUsed)
|
||||
continue;
|
||||
if(!strcmp(modpblk.descr[i].name, "pollinginterval")) {
|
||||
if(pvals[i].val.d.n < 1) {
|
||||
errmsg.LogError(0, RS_RET_MISSING_CNFPARAMS,
|
||||
"imfile: polling interval cannot be set below 1 - ignored");
|
||||
} else {
|
||||
loadModConf->iPollInterval = (int) pvals[i].val.d.n;
|
||||
}
|
||||
} else {
|
||||
dbgprintf("imfile: program error, non-handled "
|
||||
"param '%s' in beginCnfLoad\n", modpblk.descr[i].name);
|
||||
}
|
||||
}
|
||||
|
||||
/* remove all of our legacy handlers, as they can not used in addition
|
||||
* the the new-style config method.
|
||||
*/
|
||||
bLegacyCnfModGlobalsPermitted = 0;
|
||||
loadModConf->configSetViaV2Method = 1;
|
||||
|
||||
finalize_it:
|
||||
if(pvals != NULL)
|
||||
cnfparamvalsDestruct(pvals, &modpblk);
|
||||
ENDsetModCnf
|
||||
|
||||
|
||||
|
||||
BEGINendCnfLoad
|
||||
CODESTARTendCnfLoad
|
||||
if(!loadModConf->configSetViaV2Method) {
|
||||
/* persist module-specific settings from legacy config system */
|
||||
loadModConf->iPollInterval = cs.iPollInterval;
|
||||
}
|
||||
dbgprintf("imfile: polling interval is %d\n", loadModConf->iPollInterval);
|
||||
|
||||
//finalize_it:
|
||||
loadModConf = NULL; /* done loading */
|
||||
/* free legacy config vars */
|
||||
free(cs.pszFileName);
|
||||
@ -563,6 +626,7 @@ CODESTARTfreeCnf
|
||||
free(inst->pszBindRuleset);
|
||||
free(inst->pszFileName);
|
||||
free(inst->pszTag);
|
||||
free(inst->pszStateFile);
|
||||
del = inst;
|
||||
inst = inst->next;
|
||||
free(del);
|
||||
@ -631,7 +695,7 @@ CODESTARTrunInput
|
||||
* other valid scenario. So do not remove. -- rgerhards, 2008-02-14
|
||||
*/
|
||||
if(glbl.GetGlobalInputTermState() == 0)
|
||||
srSleep(cs.iPollInterval, 10);
|
||||
srSleep(runModConf->iPollInterval, 10);
|
||||
}
|
||||
DBGPRINTF("imfile: terminating upon request of rsyslog core\n");
|
||||
|
||||
@ -752,6 +816,7 @@ BEGINqueryEtryPt
|
||||
CODESTARTqueryEtryPt
|
||||
CODEqueryEtryPt_STD_IMOD_QUERIES
|
||||
CODEqueryEtryPt_STD_CONF2_QUERIES
|
||||
CODEqueryEtryPt_STD_CONF2_setModCnf_QUERIES
|
||||
CODEqueryEtryPt_STD_CONF2_IMOD_QUERIES
|
||||
CODEqueryEtryPt_IsCompatibleWithFeature_IF_OMOD_QUERIES
|
||||
ENDqueryEtryPt
|
||||
@ -776,7 +841,7 @@ resetConfigVariables(uchar __attribute__((unused)) *pp, void __attribute__((unus
|
||||
cs.pszFileTag = NULL;
|
||||
|
||||
/* set defaults... */
|
||||
cs.iPollInterval = 10;
|
||||
cs.iPollInterval = DFLT_PollInterval;
|
||||
cs.iFacility = 128; /* local0 */
|
||||
cs.iSeverity = 5; /* notice, as of rfc 3164 */
|
||||
cs.readMode = 0;
|
||||
@ -825,8 +890,6 @@ CODEmodInit_QueryRegCFSLineHdlr
|
||||
NULL, &cs.iSeverity, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr((uchar *)"inputfilefacility", 0, eCmdHdlrFacility,
|
||||
NULL, &cs.iFacility, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr((uchar *)"inputfilepollinterval", 0, eCmdHdlrInt,
|
||||
NULL, &cs.iPollInterval, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr((uchar *)"inputfilereadmode", 0, eCmdHdlrInt,
|
||||
NULL, &cs.readMode, STD_LOADABLE_MODULE_ID));
|
||||
CHKiRet(omsdRegCFSLineHdlr((uchar *)"inputfilemaxlinesatonce", 0, eCmdHdlrSize,
|
||||
@ -838,6 +901,11 @@ CODEmodInit_QueryRegCFSLineHdlr
|
||||
/* that command ads a new file! */
|
||||
CHKiRet(omsdRegCFSLineHdlr((uchar *)"inputrunfilemonitor", 0, eCmdHdlrGetWord,
|
||||
addInstance, NULL, STD_LOADABLE_MODULE_ID));
|
||||
/* module-global config params - will be disabled in configs that are loaded
|
||||
* via module(...).
|
||||
*/
|
||||
CHKiRet(regCfSysLineHdlr2((uchar *)"inputfilepollinterval", 0, eCmdHdlrInt,
|
||||
NULL, &cs.iPollInterval, STD_LOADABLE_MODULE_ID, &bLegacyCnfModGlobalsPermitted));
|
||||
CHKiRet(omsdRegCFSLineHdlr((uchar *)"resetconfigvariables", 1, eCmdHdlrCustomHandler,
|
||||
resetConfigVariables, NULL, STD_LOADABLE_MODULE_ID));
|
||||
ENDmodInit
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user