69
68
class LogBufferManager
72
ink_mutex _flush_array_mutex; // synchronize access to flush_array
73
LogBuffer *_flush_list;
74
LogBuffer **_flush_list_last;
75
LogBuffer *_delay_delete_array[DELAY_DELETE_SIZE];
76
int _head; // index of next buffer in deleted list
80
: _flush_list(0), _head(0)
82
_flush_list_last = &_flush_list;
83
for (int i = 0; i < DELAY_DELETE_SIZE; i++)
84
_delay_delete_array[i] = 0;
85
ink_mutex_init(&_flush_array_mutex, "_flush_array_mutex");
90
void add_to_flush_queue(LogBuffer * buffer)
92
if (buffer && buffer->sign == CLASS_SIGN_LOGBUFFER) {
93
ink_mutex_acquire(&_flush_array_mutex);
94
(*_flush_list_last = buffer)->next_flush = 0;
95
_flush_list_last = &buffer->next_flush;
96
ink_mutex_release(&_flush_array_mutex);
71
ASLL(LogBuffer, write_link) write_list;
72
int _num_flush_buffers;
75
LogBufferManager() : _num_flush_buffers(0) { }
77
void add_to_flush_queue(LogBuffer *buffer) {
78
write_list.push(buffer);
79
ink_atomic_increment(&_num_flush_buffers, 1);
100
LogBuffer *get_flush_queue(void)
103
ink_mutex_acquire(&_flush_array_mutex);
106
_flush_list_last = &_flush_list;
107
ink_mutex_release(&_flush_array_mutex);
111
size_t flush_buffers(LogBufferSink * sink, size_t * to_disk, size_t * to_net, size_t * to_pipe);
82
size_t flush_buffers(LogBufferSink *sink);
128
98
// WRITES_TO_PIPE: object writes to a named pipe rather than to a file
130
100
LogObject(LogFormat *format, const char *log_dir, const char *basename,
131
LogFileFormat file_format, const char *header,
132
int rolling_enabled, int rolling_interval_sec = 0, int rolling_offset_hr = 0, int rolling_size_mb = 0);
133
LogObject(LogFormat format, const char *log_dir, const char *basename,
134
LogFileFormat file_format, const char *header,
135
int rolling_enabled, int rolling_interval_sec = 0, int rolling_offset_hr = 0, int rolling_size_mb = 0);
137
void init(LogFormat * format, const char *log_dir, const char *basename,
138
LogFileFormat file_format, const char *header,
139
int rolling_enabled, int rolling_interval_sec = 0, int rolling_offset_hr = 0, int rolling_size_mb = 0);
101
LogFileFormat file_format, const char *header,
102
int rolling_enabled, int rolling_interval_sec = 0,
103
int rolling_offset_hr = 0, int rolling_size_mb = 0);
140
104
LogObject(LogObject &);
143
105
virtual ~LogObject();
145
107
void add_filter(LogFilter * filter, bool copy = true);
146
108
void set_filter_list(const LogFilterList & list, bool copy = true);
147
109
void add_loghost(LogHost * host, bool copy = true);
149
void set_remote_flag()
151
m_flags |= REMOTE_DATA;
111
void set_remote_flag() { m_flags |= REMOTE_DATA; };
154
113
int log(LogAccess * lad, char *text_entry = NULL);
155
int roll_files_if_needed(long time_now = 0);
157
int roll_files(long time_now = 0) {
158
return _roll_files(m_last_roll_time, time_now ? time_now : LogUtils::timestamp());
161
void add_to_flush_queue(LogBuffer * buffer)
163
m_buffer_manager.add_to_flush_queue(buffer);
166
size_t flush_buffers(size_t * to_disk, size_t * to_net, size_t * to_pipe)
168
return (m_logFile) ? m_buffer_manager.flush_buffers(m_logFile, to_disk, to_net, to_pipe) :
169
m_buffer_manager.flush_buffers(&m_host_list, to_disk, to_net, to_pipe);
115
int roll_files(long time_now = 0);
117
void add_to_flush_queue(LogBuffer * buffer) { m_buffer_manager.add_to_flush_queue(buffer); }
119
size_t flush_buffers()
124
nfb = m_buffer_manager.flush_buffers(m_logFile);
126
nfb = m_buffer_manager.flush_buffers(&m_host_list);
172
131
void check_buffer_expiration(long time_now);
175
134
void displayAsXML(FILE * fd = stdout, bool extended = false);
176
135
static uint64_t compute_signature(LogFormat * format, char *filename, unsigned int flags);
178
char *get_original_filename() const
183
char *get_full_filename() const
185
return (m_alt_filename ? m_alt_filename : m_filename);
188
char *get_base_filename() const
137
char *get_original_filename() const { return m_filename; }
138
char *get_full_filename() const { return (m_alt_filename ? m_alt_filename : m_filename); }
139
char *get_base_filename() const { return m_basename; }
193
141
off_t get_file_size_bytes();
195
uint64_t get_signature() const
200
int get_rolling_interval() const
202
return m_rolling_interval_sec;
205
void set_log_file_header(const char *header)
207
m_logFile->change_header(header);
143
uint64_t get_signature() const { return m_signature; }
145
int get_rolling_interval() const { return m_rolling_interval_sec; }
147
void set_log_file_header(const char *header) { m_logFile->change_header(header); }
210
149
void set_rolling_enabled(int rolling_enabled)
217
156
_setup_rolling(m_rolling_enabled, rolling_interval_sec, m_rolling_offset_hr, m_rolling_size_mb);
220
void set_rolling_offset_hr(int rolling_offset_hr)
159
void set_rolling_offset_hr(int rolling_offset_hr)
222
161
_setup_rolling(m_rolling_enabled, m_rolling_interval_sec, rolling_offset_hr, m_rolling_size_mb);
227
166
m_rolling_size_mb = rolling_size_mb;
230
bool is_collation_client()
232
return (m_logFile ? false : true);
235
bool receives_remote_data()
237
return m_flags & REMOTE_DATA ? true : false;
240
bool writes_to_pipe()
242
return m_flags & WRITES_TO_PIPE ? true : false;
245
bool writes_to_disk()
247
return (m_logFile && !(m_flags & WRITES_TO_PIPE) ? true : false);
250
unsigned int get_flags() const
169
bool is_collation_client() const { return (m_logFile ? false : true); }
170
bool receives_remote_data() const { return m_flags & REMOTE_DATA ? true : false; }
171
bool writes_to_pipe() const { return m_flags & WRITES_TO_PIPE ? true : false; }
172
bool writes_to_disk() { return (m_logFile && !(m_flags & WRITES_TO_PIPE) ? true : false); }
174
unsigned int get_flags() const { return m_flags; }
255
176
void rename(char *new_name);
257
bool has_alternate_name()
259
return (m_alt_filename ? true : false);
262
const char *get_format_string()
264
return (m_format ? m_format->format_string() : "<none>");
267
void force_new_buffer()
178
bool has_alternate_name() const { return (m_alt_filename ? true : false); }
180
const char *get_format_string() { return (m_format ? m_format->format_string() : "<none>"); }
182
void force_new_buffer() {
269
183
_checkout_write(NULL, 0);
449
362
LogObject *get_object_with_signature(uint64_t signature);
450
363
void check_buffer_expiration(long time_now);
451
size_t get_num_objects()
456
int roll_files(long time_now = 0) {
457
return _roll_files(time_now, false);
460
int roll_files_if_needed(long time_now = 0) {
461
return _roll_files(time_now, true);
364
size_t get_num_objects() const { return _numObjects; }
366
int roll_files(long time_now);
464
368
int log(LogAccess * lad);
465
369
void display(FILE * str = stdout);
466
370
void add_filter_to_all(LogFilter * filter);
467
371
LogObject *find_by_format_name(const char *name);
468
size_t flush_buffers(size_t * to_disk, size_t * to_net = 0, size_t * to_pipe = 0);
372
size_t flush_buffers();
469
373
void open_local_pipes();
470
374
void transfer_objects(LogObjectManager & mgr);
472
bool has_api_objects() const {
473
return (_numAPIobjects > 0);
376
bool has_api_objects() const { return (_numAPIobjects > 0); }
476
378
size_t get_num_collation_clients();
381
inline int LogObjectManager::roll_files(long time_now)
384
for (size_t i=0; i < _numObjects; i++) {
385
num_rolled += _objects[i]->roll_files(time_now);
481
391
LogObjectManager::log(LogAccess * lad)