Initial import (#848388).
This commit is contained in:
parent
3af46ae612
commit
a3920d6470
1
.gitignore
vendored
1
.gitignore
vendored
@ -0,0 +1 @@
|
||||
/liblognorm-0.3.4.tar.gz
|
9
liblognorm-0.3.4-pc-file.patch
Normal file
9
liblognorm-0.3.4-pc-file.patch
Normal file
@ -0,0 +1,9 @@
|
||||
--- x/lognorm.pc.in 2012-09-20 17:19:10.901594600 +0530
|
||||
+++ y/lognorm.pc.in 2012-09-20 17:20:22.076596296 +0530
|
||||
@@ -6,5 +6,5 @@
|
||||
Name: lognorm
|
||||
Description: fast samples-based log normalization library
|
||||
Version: @VERSION@
|
||||
-Libs: -L${libdir} -llognorm -lee -lestr
|
||||
+Libs: -L${libdir} -llognorm
|
||||
Cflags: -I${includedir}
|
624
liblognorm-0.3.4-rename-to-lognormalizer.patch
Normal file
624
liblognorm-0.3.4-rename-to-lognormalizer.patch
Normal file
@ -0,0 +1,624 @@
|
||||
diff -Naru a/src/lognormalizer.c b/src/lognormalizer.c
|
||||
--- a/src/lognormalizer.c 1970-01-01 05:30:00.000000000 +0530
|
||||
+++ b/src/lognormalizer.c 2012-09-20 14:45:09.780374402 +0530
|
||||
@@ -0,0 +1,246 @@
|
||||
+/**
|
||||
+ * @file normalizer.c
|
||||
+ * @brief A small tool to normalize data.
|
||||
+ *
|
||||
+ * This is the most basic example demonstrating how to use liblognorm.
|
||||
+ * It loads log samples from the files specified on the command line,
|
||||
+ * reads to-be-normalized data from stdin and writes the normalized
|
||||
+ * form to stdout. Besides being an example, it also carries out useful
|
||||
+ * processing.
|
||||
+ *
|
||||
+ * @author Rainer Gerhards <rgerhards@adiscon.com>
|
||||
+ *
|
||||
+ *//*
|
||||
+ * liblognorm - a fast samples-based log normalization library
|
||||
+ * Copyright 2010-2011 by Rainer Gerhards and Adiscon GmbH.
|
||||
+ *
|
||||
+ * This file is part of liblognorm.
|
||||
+ *
|
||||
+ * This 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 2.1 of the License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This 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 this library; if not, write to the Free Software
|
||||
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
+ *
|
||||
+ * A copy of the LGPL v2.1 can be found in the file "COPYING" in this distribution.
|
||||
+ */
|
||||
+#include <stdio.h>
|
||||
+#include <string.h>
|
||||
+#include <getopt.h>
|
||||
+#include <libestr.h>
|
||||
+#include <libee/libee.h>
|
||||
+#include "liblognorm.h"
|
||||
+#include "ptree.h"
|
||||
+#include "lognorm.h"
|
||||
+
|
||||
+static ln_ctx ctx;
|
||||
+static ee_ctx eectx;
|
||||
+
|
||||
+static int verbose = 0;
|
||||
+static int parsedOnly = 0; /**< output unparsed messages? */
|
||||
+static int flatTags = 0; /**< output unparsed messages? */
|
||||
+static FILE *fpDOT;
|
||||
+static es_str_t *encFmt = NULL; /**< a format string for encoder use */
|
||||
+static es_str_t *mandatoryTag = NULL; /**< tag which must be given so that mesg will
|
||||
+ be output. NULL=all */
|
||||
+static enum { f_syslog, f_json, f_xml, f_csv } outfmt = f_syslog;
|
||||
+
|
||||
+void
|
||||
+dbgCallBack(void __attribute__((unused)) *cookie, char *msg,
|
||||
+ size_t __attribute__((unused)) lenMsg)
|
||||
+{
|
||||
+ printf("liblognorm: %s\n", msg);
|
||||
+}
|
||||
+
|
||||
+void errout(char *errmsg)
|
||||
+{
|
||||
+ fprintf(stderr, "%s\n", errmsg);
|
||||
+ exit(1);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/* param str is just a performance enhancement, which saves us re-creation
|
||||
+ * of the string on every call.
|
||||
+ */
|
||||
+static inline void
|
||||
+outputEvent(struct ee_event *event)
|
||||
+{
|
||||
+ char *cstr;
|
||||
+ es_str_t *str = NULL;
|
||||
+
|
||||
+ switch(outfmt) {
|
||||
+ case f_json:
|
||||
+ ee_fmtEventToJSON(event, &str);
|
||||
+ break;
|
||||
+ case f_syslog:
|
||||
+ ee_fmtEventToRFC5424(event, &str);
|
||||
+ break;
|
||||
+ case f_xml:
|
||||
+ ee_fmtEventToXML(event, &str);
|
||||
+ break;
|
||||
+ case f_csv:
|
||||
+ ee_fmtEventToCSV(event, &str, encFmt);
|
||||
+ break;
|
||||
+ }
|
||||
+ cstr = es_str2cstr(str, NULL);
|
||||
+ if(verbose > 0) printf("normalized: '%s'\n", cstr);
|
||||
+ printf("%s\n", cstr);
|
||||
+ free(cstr);
|
||||
+ es_deleteStr(str);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/* normalize input data
|
||||
+ */
|
||||
+void
|
||||
+normalize(void)
|
||||
+{
|
||||
+ FILE *fp = stdin;
|
||||
+ char buf[10*1024];
|
||||
+ es_str_t *str;
|
||||
+ struct ee_event *event = NULL;
|
||||
+ es_str_t *constUnparsed;
|
||||
+ long long unsigned numUnparsed = 0;
|
||||
+ long long unsigned numWrongTag = 0;
|
||||
+
|
||||
+ constUnparsed = es_newStrFromBuf("unparsed-data", sizeof("unparsed-data") - 1);
|
||||
+
|
||||
+ while((fgets(buf, sizeof(buf), fp)) != NULL) {
|
||||
+ buf[strlen(buf)-1] = '\0';
|
||||
+ if(strlen(buf) > 0 && buf[strlen(buf)-1] == '\r')
|
||||
+ buf[strlen(buf)-1] = '\0';
|
||||
+ if(verbose > 0) printf("To normalize: '%s'\n", buf);
|
||||
+ str = es_newStrFromCStr(buf, strlen(buf));
|
||||
+ ln_normalize(ctx, str, &event);
|
||||
+ //printf("normalize result: %d\n", ln_normalizeRec(ctx, ctx->ptree, str, 0, &event));
|
||||
+ if(event != NULL) {
|
||||
+ if( mandatoryTag == NULL
|
||||
+ || (mandatoryTag != NULL && ee_EventHasTag(event, mandatoryTag))) {
|
||||
+ if( parsedOnly == 1
|
||||
+ && ee_getEventField(event, constUnparsed) != NULL){
|
||||
+ numUnparsed++;
|
||||
+ } else {
|
||||
+ outputEvent(event);
|
||||
+ }
|
||||
+ } else {
|
||||
+ numWrongTag++;
|
||||
+ }
|
||||
+ ee_deleteEvent(event);
|
||||
+ event = NULL;
|
||||
+ }
|
||||
+ es_deleteStr(str);
|
||||
+ }
|
||||
+ if(numUnparsed > 0)
|
||||
+ fprintf(stderr, "%llu unparsable entries\n", numUnparsed);
|
||||
+ if(numWrongTag > 0)
|
||||
+ fprintf(stderr, "%llu entries with wrong tag dropped\n", numWrongTag);
|
||||
+ es_deleteStr(constUnparsed);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+/**
|
||||
+ * Generate a command file for the GNU DOT tools.
|
||||
+ */
|
||||
+static void
|
||||
+genDOT()
|
||||
+{
|
||||
+ es_str_t *str;
|
||||
+
|
||||
+ str = es_newStr(1024);
|
||||
+ ln_genDotPTreeGraph(ctx->ptree, &str);
|
||||
+ fwrite(es_getBufAddr(str), 1, es_strlen(str), fpDOT);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ int opt;
|
||||
+ char *repository = NULL;
|
||||
+
|
||||
+ while((opt = getopt(argc, argv, "d:e:r:E:vpt:T")) != -1) {
|
||||
+ switch (opt) {
|
||||
+ case 'd': /* generate DOT file */
|
||||
+ if(!strcmp(optarg, "")) {
|
||||
+ fpDOT = stdout;
|
||||
+ } else {
|
||||
+ if((fpDOT = fopen(optarg, "w")) == NULL) {
|
||||
+ errout("cannot open DOT file");
|
||||
+ }
|
||||
+ }
|
||||
+ case 'v':
|
||||
+ verbose++;
|
||||
+ break;
|
||||
+ case 'E': /* encoder-specific format string (will be validated by encoder) */
|
||||
+ encFmt = es_newStrFromCStr(optarg, strlen(optarg));
|
||||
+ break;
|
||||
+ case 'p':
|
||||
+ parsedOnly = 1;
|
||||
+ break;
|
||||
+ case 'T':
|
||||
+ flatTags = 1;
|
||||
+ break;
|
||||
+ case 'e': /* encoder to use */
|
||||
+ if(!strcmp(optarg, "json")) {
|
||||
+ outfmt = f_json;
|
||||
+ } else if(!strcmp(optarg, "xml")) {
|
||||
+ outfmt = f_xml;
|
||||
+ } else if(!strcmp(optarg, "csv")) {
|
||||
+ outfmt = f_csv;
|
||||
+ }
|
||||
+ break;
|
||||
+ case 'r': /* rule base to use */
|
||||
+ repository = optarg;
|
||||
+ break;
|
||||
+ case 't': /* if given, only messages tagged with the argument
|
||||
+ are output */
|
||||
+ mandatoryTag = es_newStrFromCStr(optarg, strlen(optarg));
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if(repository == NULL) {
|
||||
+ errout("samples repository must be given");
|
||||
+ }
|
||||
+
|
||||
+ if((ctx = ln_initCtx()) == NULL) {
|
||||
+ errout("Could not initialize liblognorm context");
|
||||
+ }
|
||||
+
|
||||
+ if((eectx = ee_initCtx()) == NULL) {
|
||||
+ errout("Could not initialize libee context");
|
||||
+ }
|
||||
+ if(flatTags) {
|
||||
+ ee_setFlags(eectx, EE_CTX_FLAG_INCLUDE_FLAT_TAGS);
|
||||
+ }
|
||||
+
|
||||
+ if(verbose) {
|
||||
+ ln_setDebugCB(ctx, dbgCallBack, NULL);
|
||||
+ ln_enableDebug(ctx, 1);
|
||||
+ }
|
||||
+ ln_setEECtx(ctx, eectx);
|
||||
+
|
||||
+ ln_loadSamples(ctx, repository);
|
||||
+
|
||||
+ if(verbose > 0)
|
||||
+ printf("number of tree nodes: %d\n", ctx->nNodes);
|
||||
+
|
||||
+ if(fpDOT != NULL) {
|
||||
+ genDOT();
|
||||
+ exit(1);
|
||||
+ }
|
||||
+
|
||||
+ if(verbose > 2) ln_displayPTree(ctx->ptree, 0);
|
||||
+
|
||||
+ normalize();
|
||||
+
|
||||
+ ln_exitCtx(ctx);
|
||||
+ return 0;
|
||||
+}
|
||||
diff -Naru a/src/Makefile.am b/src/Makefile.am
|
||||
--- a/src/Makefile.am 2012-09-20 14:45:07.345374340 +0530
|
||||
+++ b/src/Makefile.am 2012-09-20 14:48:25.492379050 +0530
|
||||
@@ -4,12 +4,12 @@
|
||||
|
||||
#CFLAGS += $(DEBUG)
|
||||
|
||||
-# we need to clean the normalizer up once we have reached a decent
|
||||
+# we need to clean the lognormalizer up once we have reached a decent
|
||||
# milestone (latest at initial release!)
|
||||
-bin_PROGRAMS = normalizer
|
||||
-normalizer_SOURCES = normalizer.c
|
||||
-normalizer_CPPFLAGS = -I$(top_srcdir) $(LIBEE_CFLAGS) $(LIBESTR_CFLAGS)
|
||||
-normalizer_LDADD = $(LIBEE_LIBS) $(LIBLOGNORM_LIBS) $(LIBESTR_LIBS)
|
||||
+bin_PROGRAMS = lognormalizer
|
||||
+lognormalizer_SOURCES = lognormalizer.c
|
||||
+lognormalizer_CPPFLAGS = -I$(top_srcdir) $(LIBEE_CFLAGS) $(LIBESTR_CFLAGS)
|
||||
+lognormalizer_LDADD = $(LIBEE_LIBS) $(LIBLOGNORM_LIBS) $(LIBESTR_LIBS)
|
||||
|
||||
lib_LTLIBRARIES = liblognorm.la
|
||||
|
||||
diff -Naru a/src/Makefile.in b/src/Makefile.in
|
||||
--- a/src/Makefile.in 2012-09-20 14:45:07.345374340 +0530
|
||||
+++ b/src/Makefile.in 2012-09-20 14:48:00.210378450 +0530
|
||||
@@ -36,7 +36,7 @@
|
||||
POST_UNINSTALL = :
|
||||
build_triplet = @build@
|
||||
host_triplet = @host@
|
||||
-bin_PROGRAMS = normalizer$(EXEEXT)
|
||||
+bin_PROGRAMS = lognormalizer$(EXEEXT)
|
||||
subdir = src
|
||||
DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in
|
||||
@@ -89,9 +89,9 @@
|
||||
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
|
||||
$(liblognorm_la_LDFLAGS) $(LDFLAGS) -o $@
|
||||
PROGRAMS = $(bin_PROGRAMS)
|
||||
-am_normalizer_OBJECTS = normalizer-normalizer.$(OBJEXT)
|
||||
-normalizer_OBJECTS = $(am_normalizer_OBJECTS)
|
||||
-normalizer_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
|
||||
+am_lognormalizer_OBJECTS = lognormalizer-lognormalizer.$(OBJEXT)
|
||||
+lognormalizer_OBJECTS = $(am_lognormalizer_OBJECTS)
|
||||
+lognormalizer_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
|
||||
$(am__DEPENDENCIES_1)
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
@@ -119,8 +119,8 @@
|
||||
AM_V_GEN = $(am__v_GEN_$(V))
|
||||
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
|
||||
am__v_GEN_0 = @echo " GEN " $@;
|
||||
-SOURCES = $(liblognorm_la_SOURCES) $(normalizer_SOURCES)
|
||||
-DIST_SOURCES = $(liblognorm_la_SOURCES) $(normalizer_SOURCES)
|
||||
+SOURCES = $(liblognorm_la_SOURCES) $(lognormalizer_SOURCES)
|
||||
+DIST_SOURCES = $(liblognorm_la_SOURCES) $(lognormalizer_SOURCES)
|
||||
HEADERS = $(include_HEADERS)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
@@ -250,9 +250,9 @@
|
||||
# Uncomment for debugging
|
||||
DEBUG = -g
|
||||
PTHREADS_CFLAGS = -pthread
|
||||
-normalizer_SOURCES = normalizer.c
|
||||
-normalizer_CPPFLAGS = -I$(top_srcdir) $(LIBEE_CFLAGS) $(LIBESTR_CFLAGS)
|
||||
-normalizer_LDADD = $(LIBEE_LIBS) $(LIBLOGNORM_LIBS) $(LIBESTR_LIBS)
|
||||
+lognormalizer_SOURCES = lognormalizer.c
|
||||
+lognormalizer_CPPFLAGS = -I$(top_srcdir) $(LIBEE_CFLAGS) $(LIBESTR_CFLAGS)
|
||||
+lognormalizer_LDADD = $(LIBEE_LIBS) $(LIBLOGNORM_LIBS) $(LIBESTR_LIBS)
|
||||
lib_LTLIBRARIES = liblognorm.la
|
||||
liblognorm_la_SOURCES = \
|
||||
liblognorm.c \
|
||||
@@ -383,9 +383,9 @@
|
||||
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
|
||||
echo " rm -f" $$list; \
|
||||
rm -f $$list
|
||||
-normalizer$(EXEEXT): $(normalizer_OBJECTS) $(normalizer_DEPENDENCIES)
|
||||
- @rm -f normalizer$(EXEEXT)
|
||||
- $(AM_V_CCLD)$(LINK) $(normalizer_OBJECTS) $(normalizer_LDADD) $(LIBS)
|
||||
+lognormalizer$(EXEEXT): $(lognormalizer_OBJECTS) $(lognormalizer_DEPENDENCIES)
|
||||
+ @rm -f lognormalizer$(EXEEXT)
|
||||
+ $(AM_V_CCLD)$(LINK) $(lognormalizer_OBJECTS) $(lognormalizer_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
@@ -398,7 +398,7 @@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblognorm_la-lognorm.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblognorm_la-ptree.Plo@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblognorm_la-samp.Plo@am__quote@
|
||||
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/normalizer-normalizer.Po@am__quote@
|
||||
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lognormalizer-lognormalizer.Po@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@@ -464,21 +464,21 @@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(liblognorm_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o liblognorm_la-lognorm.lo `test -f 'lognorm.c' || echo '$(srcdir)/'`lognorm.c
|
||||
|
||||
-normalizer-normalizer.o: normalizer.c
|
||||
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normalizer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT normalizer-normalizer.o -MD -MP -MF $(DEPDIR)/normalizer-normalizer.Tpo -c -o normalizer-normalizer.o `test -f 'normalizer.c' || echo '$(srcdir)/'`normalizer.c
|
||||
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/normalizer-normalizer.Tpo $(DEPDIR)/normalizer-normalizer.Po
|
||||
+lognormalizer-lognormalizer.o: lognormalizer.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lognormalizer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lognormalizer-lognormalizer.o -MD -MP -MF $(DEPDIR)/lognormalizer-lognormalizer.Tpo -c -o lognormalizer-lognormalizer.o `test -f 'lognormalizer.c' || echo '$(srcdir)/'`lognormalizer.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lognormalizer-lognormalizer.Tpo $(DEPDIR)/lognormalizer-lognormalizer.Po
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
|
||||
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='normalizer.c' object='normalizer-normalizer.o' libtool=no @AMDEPBACKSLASH@
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lognormalizer.c' object='lognormalizer-lognormalizer.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normalizer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o normalizer-normalizer.o `test -f 'normalizer.c' || echo '$(srcdir)/'`normalizer.c
|
||||
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lognormalizer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lognormalizer-lognormalizer.o `test -f 'lognormalizer.c' || echo '$(srcdir)/'`lognormalizer.c
|
||||
|
||||
-normalizer-normalizer.obj: normalizer.c
|
||||
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normalizer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT normalizer-normalizer.obj -MD -MP -MF $(DEPDIR)/normalizer-normalizer.Tpo -c -o normalizer-normalizer.obj `if test -f 'normalizer.c'; then $(CYGPATH_W) 'normalizer.c'; else $(CYGPATH_W) '$(srcdir)/normalizer.c'; fi`
|
||||
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/normalizer-normalizer.Tpo $(DEPDIR)/normalizer-normalizer.Po
|
||||
+lognormalizer-lognormalizer.obj: lognormalizer.c
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lognormalizer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lognormalizer-lognormalizer.obj -MD -MP -MF $(DEPDIR)/lognormalizer-lognormalizer.Tpo -c -o lognormalizer-lognormalizer.obj `if test -f 'lognormalizer.c'; then $(CYGPATH_W) 'lognormalizer.c'; else $(CYGPATH_W) '$(srcdir)/lognormalizer.c'; fi`
|
||||
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/lognormalizer-lognormalizer.Tpo $(DEPDIR)/lognormalizer-lognormalizer.Po
|
||||
@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
|
||||
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='normalizer.c' object='normalizer-normalizer.obj' libtool=no @AMDEPBACKSLASH@
|
||||
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lognormalizer.c' object='lognormalizer-lognormalizer.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
-@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(normalizer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o normalizer-normalizer.obj `if test -f 'normalizer.c'; then $(CYGPATH_W) 'normalizer.c'; else $(CYGPATH_W) '$(srcdir)/normalizer.c'; fi`
|
||||
+@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lognormalizer_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lognormalizer-lognormalizer.obj `if test -f 'lognormalizer.c'; then $(CYGPATH_W) 'lognormalizer.c'; else $(CYGPATH_W) '$(srcdir)/lognormalizer.c'; fi`
|
||||
|
||||
mostlyclean-libtool:
|
||||
-rm -f *.lo
|
||||
diff -Naru a/src/normalizer.c b/src/normalizer.c
|
||||
--- a/src/normalizer.c 2012-09-20 14:45:07.345374340 +0530
|
||||
+++ b/src/normalizer.c 1970-01-01 05:30:00.000000000 +0530
|
||||
@@ -1,246 +0,0 @@
|
||||
-/**
|
||||
- * @file normalizer.c
|
||||
- * @brief A small tool to normalize data.
|
||||
- *
|
||||
- * This is the most basic example demonstrating how to use liblognorm.
|
||||
- * It loads log samples from the files specified on the command line,
|
||||
- * reads to-be-normalized data from stdin and writes the normalized
|
||||
- * form to stdout. Besides being an example, it also carries out useful
|
||||
- * processing.
|
||||
- *
|
||||
- * @author Rainer Gerhards <rgerhards@adiscon.com>
|
||||
- *
|
||||
- *//*
|
||||
- * liblognorm - a fast samples-based log normalization library
|
||||
- * Copyright 2010-2011 by Rainer Gerhards and Adiscon GmbH.
|
||||
- *
|
||||
- * This file is part of liblognorm.
|
||||
- *
|
||||
- * This 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 2.1 of the License, or (at your option) any later version.
|
||||
- *
|
||||
- * This 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 this library; if not, write to the Free Software
|
||||
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
- *
|
||||
- * A copy of the LGPL v2.1 can be found in the file "COPYING" in this distribution.
|
||||
- */
|
||||
-#include <stdio.h>
|
||||
-#include <string.h>
|
||||
-#include <getopt.h>
|
||||
-#include <libestr.h>
|
||||
-#include <libee/libee.h>
|
||||
-#include "liblognorm.h"
|
||||
-#include "ptree.h"
|
||||
-#include "lognorm.h"
|
||||
-
|
||||
-static ln_ctx ctx;
|
||||
-static ee_ctx eectx;
|
||||
-
|
||||
-static int verbose = 0;
|
||||
-static int parsedOnly = 0; /**< output unparsed messages? */
|
||||
-static int flatTags = 0; /**< output unparsed messages? */
|
||||
-static FILE *fpDOT;
|
||||
-static es_str_t *encFmt = NULL; /**< a format string for encoder use */
|
||||
-static es_str_t *mandatoryTag = NULL; /**< tag which must be given so that mesg will
|
||||
- be output. NULL=all */
|
||||
-static enum { f_syslog, f_json, f_xml, f_csv } outfmt = f_syslog;
|
||||
-
|
||||
-void
|
||||
-dbgCallBack(void __attribute__((unused)) *cookie, char *msg,
|
||||
- size_t __attribute__((unused)) lenMsg)
|
||||
-{
|
||||
- printf("liblognorm: %s\n", msg);
|
||||
-}
|
||||
-
|
||||
-void errout(char *errmsg)
|
||||
-{
|
||||
- fprintf(stderr, "%s\n", errmsg);
|
||||
- exit(1);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-/* param str is just a performance enhancement, which saves us re-creation
|
||||
- * of the string on every call.
|
||||
- */
|
||||
-static inline void
|
||||
-outputEvent(struct ee_event *event)
|
||||
-{
|
||||
- char *cstr;
|
||||
- es_str_t *str = NULL;
|
||||
-
|
||||
- switch(outfmt) {
|
||||
- case f_json:
|
||||
- ee_fmtEventToJSON(event, &str);
|
||||
- break;
|
||||
- case f_syslog:
|
||||
- ee_fmtEventToRFC5424(event, &str);
|
||||
- break;
|
||||
- case f_xml:
|
||||
- ee_fmtEventToXML(event, &str);
|
||||
- break;
|
||||
- case f_csv:
|
||||
- ee_fmtEventToCSV(event, &str, encFmt);
|
||||
- break;
|
||||
- }
|
||||
- cstr = es_str2cstr(str, NULL);
|
||||
- if(verbose > 0) printf("normalized: '%s'\n", cstr);
|
||||
- printf("%s\n", cstr);
|
||||
- free(cstr);
|
||||
- es_deleteStr(str);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-/* normalize input data
|
||||
- */
|
||||
-void
|
||||
-normalize(void)
|
||||
-{
|
||||
- FILE *fp = stdin;
|
||||
- char buf[10*1024];
|
||||
- es_str_t *str;
|
||||
- struct ee_event *event = NULL;
|
||||
- es_str_t *constUnparsed;
|
||||
- long long unsigned numUnparsed = 0;
|
||||
- long long unsigned numWrongTag = 0;
|
||||
-
|
||||
- constUnparsed = es_newStrFromBuf("unparsed-data", sizeof("unparsed-data") - 1);
|
||||
-
|
||||
- while((fgets(buf, sizeof(buf), fp)) != NULL) {
|
||||
- buf[strlen(buf)-1] = '\0';
|
||||
- if(strlen(buf) > 0 && buf[strlen(buf)-1] == '\r')
|
||||
- buf[strlen(buf)-1] = '\0';
|
||||
- if(verbose > 0) printf("To normalize: '%s'\n", buf);
|
||||
- str = es_newStrFromCStr(buf, strlen(buf));
|
||||
- ln_normalize(ctx, str, &event);
|
||||
- //printf("normalize result: %d\n", ln_normalizeRec(ctx, ctx->ptree, str, 0, &event));
|
||||
- if(event != NULL) {
|
||||
- if( mandatoryTag == NULL
|
||||
- || (mandatoryTag != NULL && ee_EventHasTag(event, mandatoryTag))) {
|
||||
- if( parsedOnly == 1
|
||||
- && ee_getEventField(event, constUnparsed) != NULL){
|
||||
- numUnparsed++;
|
||||
- } else {
|
||||
- outputEvent(event);
|
||||
- }
|
||||
- } else {
|
||||
- numWrongTag++;
|
||||
- }
|
||||
- ee_deleteEvent(event);
|
||||
- event = NULL;
|
||||
- }
|
||||
- es_deleteStr(str);
|
||||
- }
|
||||
- if(numUnparsed > 0)
|
||||
- fprintf(stderr, "%llu unparsable entries\n", numUnparsed);
|
||||
- if(numWrongTag > 0)
|
||||
- fprintf(stderr, "%llu entries with wrong tag dropped\n", numWrongTag);
|
||||
- es_deleteStr(constUnparsed);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-/**
|
||||
- * Generate a command file for the GNU DOT tools.
|
||||
- */
|
||||
-static void
|
||||
-genDOT()
|
||||
-{
|
||||
- es_str_t *str;
|
||||
-
|
||||
- str = es_newStr(1024);
|
||||
- ln_genDotPTreeGraph(ctx->ptree, &str);
|
||||
- fwrite(es_getBufAddr(str), 1, es_strlen(str), fpDOT);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-int main(int argc, char *argv[])
|
||||
-{
|
||||
- int opt;
|
||||
- char *repository = NULL;
|
||||
-
|
||||
- while((opt = getopt(argc, argv, "d:e:r:E:vpt:T")) != -1) {
|
||||
- switch (opt) {
|
||||
- case 'd': /* generate DOT file */
|
||||
- if(!strcmp(optarg, "")) {
|
||||
- fpDOT = stdout;
|
||||
- } else {
|
||||
- if((fpDOT = fopen(optarg, "w")) == NULL) {
|
||||
- errout("cannot open DOT file");
|
||||
- }
|
||||
- }
|
||||
- case 'v':
|
||||
- verbose++;
|
||||
- break;
|
||||
- case 'E': /* encoder-specific format string (will be validated by encoder) */
|
||||
- encFmt = es_newStrFromCStr(optarg, strlen(optarg));
|
||||
- break;
|
||||
- case 'p':
|
||||
- parsedOnly = 1;
|
||||
- break;
|
||||
- case 'T':
|
||||
- flatTags = 1;
|
||||
- break;
|
||||
- case 'e': /* encoder to use */
|
||||
- if(!strcmp(optarg, "json")) {
|
||||
- outfmt = f_json;
|
||||
- } else if(!strcmp(optarg, "xml")) {
|
||||
- outfmt = f_xml;
|
||||
- } else if(!strcmp(optarg, "csv")) {
|
||||
- outfmt = f_csv;
|
||||
- }
|
||||
- break;
|
||||
- case 'r': /* rule base to use */
|
||||
- repository = optarg;
|
||||
- break;
|
||||
- case 't': /* if given, only messages tagged with the argument
|
||||
- are output */
|
||||
- mandatoryTag = es_newStrFromCStr(optarg, strlen(optarg));
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if(repository == NULL) {
|
||||
- errout("samples repository must be given");
|
||||
- }
|
||||
-
|
||||
- if((ctx = ln_initCtx()) == NULL) {
|
||||
- errout("Could not initialize liblognorm context");
|
||||
- }
|
||||
-
|
||||
- if((eectx = ee_initCtx()) == NULL) {
|
||||
- errout("Could not initialize libee context");
|
||||
- }
|
||||
- if(flatTags) {
|
||||
- ee_setFlags(eectx, EE_CTX_FLAG_INCLUDE_FLAT_TAGS);
|
||||
- }
|
||||
-
|
||||
- if(verbose) {
|
||||
- ln_setDebugCB(ctx, dbgCallBack, NULL);
|
||||
- ln_enableDebug(ctx, 1);
|
||||
- }
|
||||
- ln_setEECtx(ctx, eectx);
|
||||
-
|
||||
- ln_loadSamples(ctx, repository);
|
||||
-
|
||||
- if(verbose > 0)
|
||||
- printf("number of tree nodes: %d\n", ctx->nNodes);
|
||||
-
|
||||
- if(fpDOT != NULL) {
|
||||
- genDOT();
|
||||
- exit(1);
|
||||
- }
|
||||
-
|
||||
- if(verbose > 2) ln_displayPTree(ctx->ptree, 0);
|
||||
-
|
||||
- normalize();
|
||||
-
|
||||
- ln_exitCtx(ctx);
|
||||
- return 0;
|
||||
-}
|
86
liblognorm.spec
Normal file
86
liblognorm.spec
Normal file
@ -0,0 +1,86 @@
|
||||
Name: liblognorm
|
||||
Version: 0.3.4
|
||||
Release: 4%{?dist}
|
||||
Summary: Fast samples-based log normalization library
|
||||
|
||||
License: LGPLv2+
|
||||
URL: http://www.liblognorm.com
|
||||
Source0: http://www.liblognorm.com/files/download/%{name}-%{version}.tar.gz
|
||||
Patch0: liblognorm-0.3.4-rename-to-lognormalizer.patch
|
||||
Patch1: liblognorm-0.3.4-pc-file.patch
|
||||
|
||||
BuildRequires: libestr-devel, libee-devel, chrpath
|
||||
|
||||
%description
|
||||
Briefly described, liblognorm is a tool to normalize log data.
|
||||
|
||||
People who need to take a look at logs often have a common problem. Logs from
|
||||
different machines (from different vendors) usually have different formats for
|
||||
their logs. Even if it is the same type of log (e.g. from firewalls), the log
|
||||
entries are so different, that it is pretty hard to read these. This is where
|
||||
liblognorm comes into the game. With this tool you can normalize all your logs.
|
||||
All you need is liblognorm and its dependencies and a sample database that fits
|
||||
the logs you want to normalize.
|
||||
|
||||
%package devel
|
||||
Summary: Development tools for programs using liblognorm library
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: libee-devel%{?_isa} libestr-devel%{?_isa}
|
||||
|
||||
%description devel
|
||||
The liblognorm-devel package includes header files, libraries necessary for
|
||||
developing programs which use liblognorm library.
|
||||
|
||||
%package utils
|
||||
Summary: Lognormalizer utility for normalizing log files
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description utils
|
||||
The lognormalizer is the core of liblognorm, it is a utility for normalizing
|
||||
log files.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch0 -p1 -b .rename-to-lognormalizer.patch
|
||||
%patch1 -p1 -b .pc-file.patch
|
||||
|
||||
%build
|
||||
%configure
|
||||
V=1 make
|
||||
|
||||
%install
|
||||
make install INSTALL="install -p" DESTDIR=%{buildroot}
|
||||
rm -f %{buildroot}/%{_libdir}/*.{a,la}
|
||||
chrpath -d %{buildroot}/%{_bindir}/lognormalizer
|
||||
chrpath -d %{buildroot}/%{_libdir}/liblognorm.so.0.0.0
|
||||
|
||||
%post -p /sbin/ldconfig
|
||||
|
||||
%postun -p /sbin/ldconfig
|
||||
|
||||
%files
|
||||
%doc AUTHORS ChangeLog COPYING NEWS README
|
||||
%{_libdir}/lib*.so.*
|
||||
|
||||
%files devel
|
||||
%{_libdir}/lib*.so
|
||||
%{_includedir}/*.h
|
||||
%{_libdir}/pkgconfig/*.pc
|
||||
|
||||
%files utils
|
||||
%{_bindir}/lognormalizer
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Oct 05 2012 mdarade <mdarade@redhat.com> - 0.3.4-4
|
||||
- Modified description of main & util package
|
||||
|
||||
* Thu Sep 20 2012 Mahaveer Darade <mdarade@redhat.com> - 0.3.4-3
|
||||
- Renamed normalizer binary to lognormalizer
|
||||
- Updated pc file to exclude lee and lestr
|
||||
|
||||
* Mon Aug 27 2012 mdarade <mdarade@redhat.com> - 0.3.4-2
|
||||
- Updated BuildRequires to contain libestr-devel
|
||||
|
||||
* Wed Aug 1 2012 Milan Bartos <mbartos@redhat.com> - 0.3.4-1
|
||||
- initial port
|
Loading…
Reference in New Issue
Block a user