syslog-ng source
grouping-parser.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015 BalaBit
3  * Copyright (c) 2023 Balazs Scheidler <bazsi77@gmail.com>
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 as published
7  * by the Free Software Foundation, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * As an additional exemption you are allowed to compile & link against the
19  * OpenSSL libraries as published by the OpenSSL project. See the file
20  * COPYING for details.
21  *
22  */
23 #ifndef CORRELATION_GROUPING_PARSER_H_INCLUDED
24 #define CORRELATION_GROUPING_PARSER_H_INCLUDED
25 
26 #include "stateful-parser.h"
27 #include "correlation.h"
28 #include <iv.h>
29 
30 typedef struct _GroupingParser GroupingParser;
31 
32 typedef enum
33 {
38 
40 {
42  struct iv_timer tick;
44  LogTemplate *key_template;
45  LogTemplate *sort_key_template;
46  gint timeout;
48  gboolean (*filter_messages)(GroupingParser *self, LogMessage **pmsg, const LogPathOptions *path_options);
49  CorrelationContext *(*construct_context)(GroupingParser *self, CorrelationKey *key);
50  GroupingParserUpdateContextResult (*update_context)(GroupingParser *self, CorrelationContext *context, LogMessage *msg);
51  LogMessage *(*aggregate_context)(GroupingParser *self, CorrelationContext *context);
52 };
53 
54 static inline gboolean
55 grouping_parser_filter_messages(GroupingParser *self, LogMessage **pmsg, const LogPathOptions *path_options)
56 {
57  if (self->filter_messages)
58  return self->filter_messages(self, pmsg, path_options);
59  return TRUE;
60 }
61 
62 static inline CorrelationContext *
63 grouping_parser_construct_context(GroupingParser *self, CorrelationKey *key)
64 {
65  if (self->construct_context)
66  return self->construct_context(self, key);
68 }
69 
70 static inline gboolean
71 grouping_parser_update_context(GroupingParser *self, CorrelationContext *context, LogMessage *msg)
72 {
73  return self->update_context(self, context, msg);
74 }
75 
76 LogMessage *grouping_parser_aggregate_context(GroupingParser *self, CorrelationContext *context);
77 
78 void grouping_parser_set_key_template(LogParser *s, LogTemplate *key_template);
79 void grouping_parser_set_sort_key_template(LogParser *s, LogTemplate *sort_key);
80 void grouping_parser_set_scope(LogParser *s, CorrelationScope scope);
81 void grouping_parser_set_timeout(LogParser *s, gint timeout);
82 void grouping_parser_clone_settings(GroupingParser *self, GroupingParser *cloned);
83 
84 
85 CorrelationContext *grouping_parser_lookup_or_create_context(GroupingParser *self, LogMessage *msg);
86 void grouping_parser_perform_grouping(GroupingParser *s, LogMessage *msg,
87  StatefulParserEmittedMessages *emitted_mesages);
88 
89 gboolean
91  LogMessage **pmsg, const LogPathOptions *path_options,
92  const char *input, gsize input_len);
93 gboolean grouping_parser_init_method(LogPipe *s);
94 gboolean grouping_parser_deinit_method(LogPipe *s);
95 
96 void grouping_parser_free_method(LogPipe *s);
97 void grouping_parser_init_instance(GroupingParser *self, GlobalConfig *cfg);
98 
100 
101 #endif
CorrelationContext * correlation_context_new(CorrelationKey *key)
Definition: correlation-context.c:124
CorrelationScope
Definition: correlation-key.h:30
CorrelationContext * grouping_parser_lookup_or_create_context(GroupingParser *self, LogMessage *msg)
Definition: grouping-parser.c:184
void grouping_parser_set_timeout(LogParser *s, gint timeout)
Definition: grouping-parser.c:54
gboolean grouping_parser_init_method(LogPipe *s)
Definition: grouping-parser.c:293
gboolean grouping_parser_deinit_method(LogPipe *s)
Definition: grouping-parser.c:313
void grouping_parser_global_init(void)
Definition: grouping-parser.c:353
gboolean grouping_parser_process_method(LogParser *s, LogMessage **pmsg, const LogPathOptions *path_options, const char *input, gsize input_len)
Definition: grouping-parser.c:273
GroupingParserUpdateContextResult
Definition: grouping-parser.h:33
@ GP_CONTEXT_COMPLETE
Definition: grouping-parser.h:35
@ GP_CONTEXT_UPDATED
Definition: grouping-parser.h:34
@ GP_STARTS_NEW_CONTEXT
Definition: grouping-parser.h:36
void grouping_parser_init_instance(GroupingParser *self, GlobalConfig *cfg)
Definition: grouping-parser.c:340
void grouping_parser_free_method(LogPipe *s)
Definition: grouping-parser.c:328
void grouping_parser_set_scope(LogParser *s, CorrelationScope scope)
Definition: grouping-parser.c:46
LogMessage * grouping_parser_aggregate_context(GroupingParser *self, CorrelationContext *context)
Definition: grouping-parser.c:141
void grouping_parser_perform_grouping(GroupingParser *s, LogMessage *msg, StatefulParserEmittedMessages *emitted_mesages)
Definition: grouping-parser.c:233
void grouping_parser_set_sort_key_template(LogParser *s, LogTemplate *sort_key)
Definition: grouping-parser.c:37
void grouping_parser_clone_settings(GroupingParser *self, GroupingParser *cloned)
Definition: grouping-parser.c:62
void grouping_parser_set_key_template(LogParser *s, LogTemplate *key_template)
Definition: grouping-parser.c:28
#define self
Definition: rcptid.c:38
Definition: correlation-key.h:47
Definition: correlation.h:33
Definition: stateful-parser.h:74
Definition: stateful-parser.h:37
Definition: grouping-parser.h:40
CorrelationState * correlation
Definition: grouping-parser.h:43
StatefulParser super
Definition: grouping-parser.h:41
GroupingParserUpdateContextResult(* update_context)(GroupingParser *self, CorrelationContext *context, LogMessage *msg)
Definition: grouping-parser.h:50
gint timeout
Definition: grouping-parser.h:46
LogTemplate * key_template
Definition: grouping-parser.h:44
LogTemplate * sort_key_template
Definition: grouping-parser.h:45
gboolean(* filter_messages)(GroupingParser *self, LogMessage **pmsg, const LogPathOptions *path_options)
Definition: grouping-parser.h:48
struct iv_timer tick
Definition: grouping-parser.h:42
CorrelationScope scope
Definition: grouping-parser.h:47
GlobalConfig * cfg
Definition: test_batched_ack_tracker.c:34
LogMessage * msg
Definition: test_rename.c:35
LogPathOptions path_options
Definition: test_wildcard_file_reader.c:62
struct tm key
Definition: cache.c:63