summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRainer Gerhards <rgerhards@adiscon.com>2007-12-14 10:42:30 +0000
committerRainer Gerhards <rgerhards@adiscon.com>2007-12-14 10:42:30 +0000
commit119573816d447a78fee256d173704b673c356664 (patch)
tree336ccb6794a884b7dc547425fa439fb5e7feaf31
parent3f8f9f142c7bcc9c5dd97708b0611024037f2835 (diff)
downloadrsyslog-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.am2
-rw-r--r--configure.ac2
-rw-r--r--plugins/immark/.cvsignore6
-rw-r--r--plugins/immark/Makefile.am8
-rw-r--r--plugins/immark/immark.c79
-rw-r--r--plugins/immark/immark.h34
-rwxr-xr-xstringbuf.h2
-rw-r--r--syslogd.c32
-rw-r--r--syslogd.h5
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 */
};
diff --git a/syslogd.c b/syslogd.c
index e9e822eb..08e1599c 100644
--- a/syslogd.c
+++ b/syslogd.c
@@ -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;
diff --git a/syslogd.h b/syslogd.h
index c1d765eb..eac52916 100644
--- a/syslogd.h
+++ b/syslogd.h
@@ -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[];