syslog-ng source
logsource.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2002-2011 Balabit
3  * Copyright (c) 1998-2011 Balázs Scheidler
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18  *
19  * As an additional exemption you are allowed to compile & link against the
20  * OpenSSL libraries as published by the OpenSSL project. See the file
21  * COPYING for details.
22  *
23  */
24 
25 #ifndef LOGSOURCE_H_INCLUDED
26 #define LOGSOURCE_H_INCLUDED
27 
28 #include "logpipe.h"
29 #include "stats/stats-registry.h"
30 #include "stats/stats-compat.h"
32 #include "window-size-counter.h"
33 #include "dynamic-window.h"
34 
35 typedef struct _LogSourceOptions
36 {
38  const gchar *group_name;
39  gboolean keep_timestamp;
40  gboolean keep_hostname;
41  gboolean chain_hostnames;
45  gchar *host_override;
48  gboolean read_old_records;
49  gboolean use_syslogng_pid;
50  GArray *tags;
55 
56 typedef struct _LogSource LogSource;
57 
66 struct _LogSource
67 {
68  LogPipe super;
70  gboolean threaded;
71  gchar *name;
72  gchar *stats_id;
73  WindowSizeCounter window_size;
74  DynamicWindow dynamic_window;
77  /* full_window_size = static + dynamic */
81 
82  struct
83  {
84  StatsClusterKeyBuilder *stats_kb;
85 
89 
90  StatsClusterKey *recvd_messages_key;
92 
93  StatsClusterKey *recvd_bytes_key;
95 
99 
100  guint32 last_ack_count;
101  guint32 ack_count;
103  struct timespec last_ack_rate_time;
104  AckTrackerFactory *ack_tracker_factory;
105  AckTracker *ack_tracker;
106 
107  void (*wakeup)(LogSource *s);
108  void (*schedule_dynamic_window_realloc)(LogSource *s);
109 };
110 
111 static inline gboolean
112 log_source_free_to_send(LogSource *self)
113 {
114  return !window_size_counter_suspended(&self->window_size);
115 }
116 
117 static inline gsize
118 log_source_get_init_window_size(LogSource *self)
119 {
120  return self->initial_window_size;
121 }
122 
123 static inline void
124 log_source_schedule_dynamic_window_realloc(LogSource *s)
125 {
126  if (!s || !s->schedule_dynamic_window_realloc)
127  return;
128  s->schedule_dynamic_window_realloc(s);
129 }
130 
131 gboolean log_source_init(LogPipe *s);
132 gboolean log_source_deinit(LogPipe *s);
133 
134 void log_source_post(LogSource *self, LogMessage *msg);
135 
136 void log_source_set_options(LogSource *self, LogSourceOptions *options, const gchar *stats_id,
137  StatsClusterKeyBuilder *kb, gboolean threaded, LogExprNode *expr_node);
138 void log_source_set_ack_tracker_factory(LogSource *self, AckTrackerFactory *factory);
139 void log_source_set_name(LogSource *self, const gchar *name);
140 void log_source_mangle_hostname(LogSource *self, LogMessage *msg);
141 void log_source_init_instance(LogSource *self, GlobalConfig *cfg);
143 void log_source_options_init(LogSourceOptions *options, GlobalConfig *cfg, const gchar *group_name);
145 void log_source_options_set_tags(LogSourceOptions *options, GList *tags);
146 void log_source_free(LogPipe *s);
147 void log_source_wakeup(LogSource *self);
148 void log_source_flow_control_adjust(LogSource *self, guint32 window_size_increment);
149 void log_source_flow_control_adjust_when_suspended(LogSource *self, guint32 window_size_increment);
150 void log_source_flow_control_suspend(LogSource *self);
151 void log_source_disable_bookmark_saving(LogSource *self);
152 void log_source_enable_dynamic_window(LogSource *self, DynamicWindowPool *window_ctr);
153 void log_source_dynamic_window_update_statistics(LogSource *self);
154 gboolean log_source_is_dynamic_window_enabled(LogSource *self);
155 
156 void log_source_global_init(void);
157 
158 /* protected */
159 void log_source_dynamic_window_realloc(LogSource *self);
160 
161 #endif
const gchar * name
Definition: debugger.c:265
void log_source_init_instance(LogSource *self, GlobalConfig *cfg)
Definition: logsource.c:806
void log_source_options_set_tags(LogSourceOptions *options, GList *tags)
Definition: logsource.c:904
void log_source_free(LogPipe *s)
Definition: logsource.c:819
void log_source_flow_control_suspend(LogSource *self)
Definition: logsource.c:191
gboolean log_source_deinit(LogPipe *s)
Definition: logsource.c:541
void log_source_flow_control_adjust(LogSource *self, guint32 window_size_increment)
Definition: logsource.c:158
void log_source_global_init(void)
Definition: logsource.c:922
void log_source_wakeup(LogSource *self)
Definition: logsource.c:44
void log_source_set_name(LogSource *self, const gchar *name)
Definition: logsource.c:799
void log_source_post(LogSource *self, LogMessage *msg)
Definition: logsource.c:552
void log_source_flow_control_adjust_when_suspended(LogSource *self, guint32 window_size_increment)
Definition: logsource.c:165
gboolean log_source_init(LogPipe *s)
Definition: logsource.c:503
void log_source_options_defaults(LogSourceOptions *options)
Definition: logsource.c:851
gboolean log_source_is_dynamic_window_enabled(LogSource *self)
Definition: logsource.c:207
void log_source_dynamic_window_realloc(LogSource *self)
Definition: logsource.c:358
void log_source_set_options(LogSource *self, LogSourceOptions *options, const gchar *stats_id, StatsClusterKeyBuilder *kb, gboolean threaded, LogExprNode *expr_node)
Definition: logsource.c:772
void log_source_options_init(LogSourceOptions *options, GlobalConfig *cfg, const gchar *group_name)
Definition: logsource.c:866
void log_source_disable_bookmark_saving(LogSource *self)
Definition: logsource.c:172
void log_source_options_destroy(LogSourceOptions *options)
Definition: logsource.c:889
void log_source_set_ack_tracker_factory(LogSource *self, AckTrackerFactory *factory)
Definition: logsource.c:792
void log_source_dynamic_window_update_statistics(LogSource *self)
Definition: logsource.c:213
void log_source_enable_dynamic_window(LogSource *self, DynamicWindowPool *window_ctr)
Definition: logsource.c:201
void log_source_mangle_hostname(LogSource *self, LogMessage *msg)
Definition: logsource.c:370
#define self
Definition: rcptid.c:38
Definition: host-resolve.h:30
Definition: logsource.h:36
gboolean use_syslogng_pid
Definition: logsource.h:49
HostResolveOptions host_resolve_options
Definition: logsource.h:42
gint program_override_len
Definition: logsource.h:44
gboolean chain_hostnames
Definition: logsource.h:41
gchar * host_override
Definition: logsource.h:45
gint stats_source
Definition: logsource.h:53
const gchar * group_name
Definition: logsource.h:38
gchar * program_override
Definition: logsource.h:43
GList * source_queue_callbacks
Definition: logsource.h:51
gssize init_window_size
Definition: logsource.h:37
GArray * tags
Definition: logsource.h:50
gboolean keep_timestamp
Definition: logsource.h:39
gboolean read_old_records
Definition: logsource.h:48
gboolean keep_hostname
Definition: logsource.h:40
LogTagId source_group_tag
Definition: logsource.h:47
gint stats_level
Definition: logsource.h:52
gint host_override_len
Definition: logsource.h:46
Definition: stats-compat.h:55
Definition: stats-cluster.h:155
Definition: stats-counter.h:67
Definition: logsource.h:67
StatsCounterItem * stat_window_size
Definition: logsource.h:86
DynamicWindow dynamic_window
Definition: logsource.h:74
struct timespec last_ack_rate_time
Definition: logsource.h:103
LogPipe super
Definition: logsource.h:68
StatsCounterItem * last_message_seen
Definition: logsource.h:88
StatsCluster * stat_full_window_cluster
Definition: logsource.h:97
gboolean threaded
Definition: logsource.h:70
StatsCounterItem * stat_full_window
Definition: logsource.h:87
StatsCounterItem * recvd_messages
Definition: logsource.h:91
gsize initial_window_size
Definition: logsource.h:76
StatsClusterKeyBuilder * stats_kb
Definition: logsource.h:84
void(* schedule_dynamic_window_realloc)(LogSource *s)
Definition: logsource.h:108
StatsCluster * stat_window_size_cluster
Definition: logsource.h:96
void(* wakeup)(LogSource *s)
Definition: logsource.h:107
AckTrackerFactory * ack_tracker_factory
Definition: logsource.h:104
LogSourceOptions * options
Definition: logsource.h:69
WindowSizeCounter window_size
Definition: logsource.h:73
gboolean window_initialized
Definition: logsource.h:75
guint32 ack_count
Definition: logsource.h:101
gsize full_window_size
Definition: logsource.h:78
gchar * name
Definition: logsource.h:71
atomic_gssize pending_reclaimed
Definition: logsource.h:80
StatsByteCounter recvd_bytes
Definition: logsource.h:94
struct _LogSource::@61 metrics
gint64 window_full_sleep_nsec
Definition: logsource.h:102
guint32 last_ack_count
Definition: logsource.h:100
StatsClusterKey * recvd_messages_key
Definition: logsource.h:90
atomic_gssize window_size_to_be_reclaimed
Definition: logsource.h:79
AckTracker * ack_tracker
Definition: logsource.h:105
StatsClusterKey * recvd_bytes_key
Definition: logsource.h:93
gchar * stats_id
Definition: logsource.h:72
Definition: atomic-gssize.h:33
guint16 LogTagId
Definition: tags.h:31
GlobalConfig * cfg
Definition: test_batched_ack_tracker.c:34
LogMessage * msg
Definition: test_rename.c:35
gboolean window_size_counter_suspended(WindowSizeCounter *c)
Definition: window-size-counter.c:96