diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2007-12-14 10:42:30 +0000 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2007-12-14 10:42:30 +0000 |
commit | 119573816d447a78fee256d173704b673c356664 (patch) | |
tree | 336ccb6794a884b7dc547425fa439fb5e7feaf31 | |
parent | 3f8f9f142c7bcc9c5dd97708b0611024037f2835 (diff) | |
download | rsyslog-119573816d447a78fee256d173704b673c356664.tar.gz rsyslog-119573816d447a78fee256d173704b673c356664.tar.xz rsyslog-119573816d447a78fee256d173704b673c356664.zip |
begin work on on immark, the first input module. In the long term this will
lead to a complete rewrite of the input system
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | plugins/immark/.cvsignore | 6 | ||||
-rw-r--r-- | plugins/immark/Makefile.am | 8 | ||||
-rw-r--r-- | plugins/immark/immark.c | 79 | ||||
-rw-r--r-- | plugins/immark/immark.h | 34 | ||||
-rwxr-xr-x | stringbuf.h | 2 | ||||
-rw-r--r-- | syslogd.c | 32 | ||||
-rw-r--r-- | syslogd.h | 5 |
9 files changed, 165 insertions, 5 deletions
diff --git a/Makefile.am b/Makefile.am index 1e6cf5a6..dc67a195 100644 --- a/Makefile.am +++ b/Makefile.am @@ -83,6 +83,8 @@ EXTRA_DIST = \ SUBDIRS = doc +SUBDIRS += plugins/immark + if ENABLE_MYSQL SUBDIRS += plugins/ommysql endif diff --git a/configure.ac b/configure.ac index ca0e16a9..5156c729 100644 --- a/configure.ac +++ b/configure.ac @@ -344,7 +344,7 @@ AC_SUBST(pgsql_libs) -AC_CONFIG_FILES([Makefile doc/Makefile plugins/ommysql/Makefile plugins/ompgsql/Makefile]) +AC_CONFIG_FILES([Makefile doc/Makefile plugins/immark/Makefile plugins/ommysql/Makefile plugins/ompgsql/Makefile]) AC_OUTPUT echo "****************************************************" diff --git a/plugins/immark/.cvsignore b/plugins/immark/.cvsignore new file mode 100644 index 00000000..d2a72d33 --- /dev/null +++ b/plugins/immark/.cvsignore @@ -0,0 +1,6 @@ +.deps +.libs +Makefile +Makefile.in +immark.la +immark_la-ommysql.lo diff --git a/plugins/immark/Makefile.am b/plugins/immark/Makefile.am new file mode 100644 index 00000000..7a53d594 --- /dev/null +++ b/plugins/immark/Makefile.am @@ -0,0 +1,8 @@ +pkglib_LTLIBRARIES = immark.la + +immark_la_SOURCES = immark.c immark.h ../../module-template.h +immark_la_CPPFLAGS = -I$(srcdir)/../.. $(pthreads_cflags) +immark_la_LDFLAGS = -module -avoid-version +immark_la_LIBADD = + +EXTRA_DIST = diff --git a/plugins/immark/immark.c b/plugins/immark/immark.c new file mode 100644 index 00000000..ca137f71 --- /dev/null +++ b/plugins/immark/immark.c @@ -0,0 +1,79 @@ +/* omfwd.c + * This is the implementation of the build-in mark message input module. + * + * NOTE: read comments in module-template.h to understand how this file + * works! + * + * File begun on 2007-07-20 by RGerhards (extracted from syslogd.c) + * This file is under development and has not yet arrived at being fully + * self-contained and a real object. So far, it is mostly an excerpt + * of the "old" message code without any modifications. However, it + * helps to have things at the right place one we go to the meat of it. + * + * Copyright 2007 Rainer Gerhards and Adiscon GmbH. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * A copy of the GPL can be found in the file "COPYING" in this distribution. + */ +#include "config.h" +#if 0 /* IMMARK */ +#include <stdlib.h> +#include <stdio.h> +#include <signal.h> +#include <pthread.h> +#include "rsyslog.h" +#include "syslogd.h" + +/* This function is called to gather input. It must terminate only + * a) on failure (iRet set accordingly) + * b) on termination of the input module (as part of the unload process) + * Code begun 2007-12-12 rgerhards + * + * This code must simply spawn emit a mark message at each mark interval. + * We are running on our own thread, so this is extremely easy: we just + * sleep MarkInterval seconds and each time we awake, we inject the message. + * Please note that we do not do the other fancy things that sysklogd + * (and pre 1.20.2 releases of rsyslog) did in mark procesing. They simply + * do not belong here. + */ +rsRetVal +immark_runInput(void) +{ + struct timeval tvSelectTimeout; + sigset_t sigSet; + sigfillset(&sigSet); + pthread_sigmask(SIG_BLOCK, &sigSet, NULL); + sigemptyset(&sigSet); + sigaddset(&sigSet, SIGTERM); + sigaddset(&sigSet, SIGHUP); + pthread_sigmask(SIG_UNBLOCK, &sigSet, NULL); +dbgprintf("immark_runInput running!\n"); + while(!bFinished) { +dbgprintf("immark pre select\n"); + tvSelectTimeout.tv_sec = 500; + tvSelectTimeout.tv_usec = 0; + select(0, NULL, NULL, NULL, &tvSelectTimeout); +dbgprintf("immark post select, doing mark, bFinished: %d\n", bFinished); + logmsgInternal(LOG_INFO, "-- MARK --", ADDDATE); + //logmsgInternal(LOG_INFO, "-- MARK --", ADDDATE|MARK); + } +fprintf(stderr, "immark: finished!\n"); + return RS_RET_OK; +} +#endif /* #if 0 */ +/* + * vi:set ai: + */ diff --git a/plugins/immark/immark.h b/plugins/immark/immark.h new file mode 100644 index 00000000..7a125780 --- /dev/null +++ b/plugins/immark/immark.h @@ -0,0 +1,34 @@ +/* immark.h + * These are the definitions for the built-in mark message generation module. This + * file may disappear when this has become a loadable module. + * + * File begun on 2007-12-12 by RGerhards (extracted from syslogd.c) + * + * Copyright 2007 Rainer Gerhards and Adiscon GmbH. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * A copy of the GPL can be found in the file "COPYING" in this distribution. + */ +#ifndef IMMARK_H_INCLUDED +#define IMMARK_H_INCLUDED 1 + +/* prototypes */ +rsRetVal immark_runInput(void); + +#endif /* #ifndef IMMARK_H_INCLUDED */ +/* + * vi:set ai: + */ diff --git a/stringbuf.h b/stringbuf.h index 2c3f4c3a..fa63ce34 100755 --- a/stringbuf.h +++ b/stringbuf.h @@ -29,7 +29,7 @@ struct rsCStrObject #endif
uchar *pBuf; /**< pointer to the string buffer, may be NULL if string is empty */
uchar *pszBuf; /**< pointer to the sz version of the string (after it has been created )*/
- size_t iBufSize; /**< current maximum size of the string buffer */
+ size_t iBufSize; /**< current maximum size of the string buffer */
size_t iStrLen; /**< length of the string in characters. */
size_t iAllocIncrement; /**< the amount of bytes the string should be expanded if it needs to */
};
@@ -1,3 +1,9 @@ +#define IMMARK 0 /* this is an aid to allow commiting work in progress to cvs. will be removed + * once we have a version that is ready to compile cleanly. If you don't + * develop immark, make sure this is set to 0 (should I forget to do that + * when I check in). + * rgerhards, 2007-12-14 + */ /** * \brief This is the main file of the rsyslogd daemon. * @@ -224,6 +230,9 @@ #include "omfwd.h" #include "omfile.h" #include "omdiscard.h" +#if IMMARK +#include "plugins/immark/immark.h" +#endif /* We define our own set of syslog defintions so that we * do not need to rely on (possibly different) implementations. @@ -389,7 +398,7 @@ static int bGlblDone = 0; static int bParseHOSTNAMEandTAG = 1; /* global config var: should the hostname and tag be * parsed inside message - rgerhards, 2006-03-13 */ -static int bFinished = 0; /* used by termination signal handler, read-only except there +int bFinished = 0; /* used by termination signal handler, read-only except there * is either 0 or the number of the signal that requested the * termination. */ @@ -2231,11 +2240,13 @@ void printline(char *hname, char *msg, int bParseHost) * function here probably is only an interim solution and that we need to * think on the best way to do this. */ -static void +void logmsgInternal(int pri, char *msg, int flags) { msg_t *pMsg; +dbgprintf("logmsgInternal: msg passed: '%s'\n", msg); + if((pMsg = MsgConstruct()) == NULL){ /* rgerhards 2004-11-09: calling panic might not be the * brightest idea - however, it is the best I currently have @@ -3464,11 +3475,17 @@ domark(void) register selector_t *f; if (MarkInterval > 0) { +/* Commented out, will be replaced by immark - just leave it in place for the + * time being so we know what happens. Remove once immark is done. + * rgerhards, 2007-12-12 + */ +#if !IMMARK MarkSeq += TIMERINTVL; if (MarkSeq >= MarkInterval) { logmsgInternal(LOG_INFO, "-- MARK --", ADDDATE|MARK); MarkSeq = 0; } +#endif /* see if we need to flush any "message repeated n times"... * Note that this interferes with objects running on another thread. @@ -6211,7 +6228,7 @@ int main(int argc, char **argv) extern int optind; extern char *optarg; struct sigaction sigAct; -#if 0 /* see comment for #if 0 below (towards end of function) */ +#if IMMARK /* see comment for #if 0 below (towards end of function) */ pthread_t thrdMain; sigset_t sigSet; #endif @@ -6474,6 +6491,11 @@ int main(int argc, char **argv) sigaction(SIGXFSZ, &sigAct, NULL); /* do not abort if 2gig file limit is hit */ (void) alarm(TIMERINTVL); +#if IMMARK + i = pthread_create(&thrdMain, NULL, immark_runInput, NULL); + dbgprintf("\"main\" thread started with state %d.\n", i); +#endif + mainThread(); #if 0 @@ -6497,7 +6519,11 @@ int main(int argc, char **argv) /* see comment in mainThread on why we start thread and then immediately * do a blocking wait on it - it makese sense... ;) rgerhards, 2007-10-08 */ +#endif +#if IMMARK +dbgprintf("waiting to join thrdMain\n"); pthread_join(thrdMain, NULL); +dbgprintf("joined thrdMain\n"); #endif return 0; @@ -66,6 +66,11 @@ void untty(void); rsRetVal cflineParseTemplateName(uchar** pp, omodStringRequest_t *pOMSR, int iEntry, int iTplOpts, uchar *dfltTplName); rsRetVal cflineParseFileName(uchar* p, uchar *pFileName, omodStringRequest_t *pOMSR, int iEntry, int iTplOpts); int getSubString(uchar **ppSrc, char *pDst, size_t DstSize, char cSep); +/* the following prototypes should go away once we have an input + * module interface -- rgerhards, 2007-12-12 + */ +void logmsgInternal(int pri, char *msg, int flags); +extern int bFinished; /* used by termination signal handler, read-only except there */ extern int glblHadMemShortage; /* indicates if we had memory shortage some time during the run */ extern char LocalHostName[]; |