@@ -83,6 +83,7 @@ static unsigned long file_rotate_size;
83
83
static str file_suffix ;
84
84
static pv_elem_p file_suffix_format ;
85
85
static str escape_delimiter = {0 , 0 };
86
+ static str file_header ;
86
87
87
88
static void raise_rotation_event (struct flat_file * file , const char * reason );
88
89
static void update_counters_and_rotate (struct flat_file * file ,
@@ -116,6 +117,7 @@ static const param_export_t mod_params[] = {
116
117
{"rotate_size" , INT_PARAM |STR_PARAM |USE_FUNC_PARAM , (void * )rotate_size_param },
117
118
{"suffix" , STR_PARAM , & file_suffix .s },
118
119
{"escape_delimiter" , STR_PARAM , & escape_delimiter .s },
120
+ {"header" , STR_PARAM , & file_header .s },
119
121
{0 ,0 ,0 }
120
122
};
121
123
@@ -283,6 +285,9 @@ static int mod_init(void) {
283
285
LM_DBG ("The delimiter for separating columns in files was set at %.*s\n" , delimiter .len , delimiter .s );
284
286
}
285
287
288
+ if (file_header .s )
289
+ file_header .len = strlen (file_header .s );
290
+
286
291
if (escape_delimiter .s ) {
287
292
escape_delimiter .len = strlen (escape_delimiter .s );
288
293
if (escape_delimiter .len != delimiter .len ) {
@@ -467,6 +472,7 @@ mi_response_t *mi_rotate(const mi_params_t *params,
467
472
found_fd -> rotate_version ++ ;
468
473
found_fd -> record_count = 0 ;
469
474
found_fd -> bytes_written = 0 ;
475
+ found_fd -> header_written = 0 ;
470
476
ensure_file_path (found_fd , 1 );
471
477
472
478
lock_release (global_lock );
@@ -503,6 +509,7 @@ static int insert_in_list(struct flat_file *entry) {
503
509
* list_files = entry ;
504
510
entry -> prev = NULL ;
505
511
entry -> next = NULL ;
512
+ entry -> header_written = 0 ;
506
513
return 0 ;
507
514
}
508
515
@@ -512,6 +519,7 @@ static int insert_in_list(struct flat_file *entry) {
512
519
entry -> file_index_process = head -> file_index_process + 1 ;
513
520
entry -> prev = NULL ;
514
521
entry -> next = head ;
522
+ entry -> header_written = 0 ;
515
523
head -> prev = entry ;
516
524
* list_files = entry ;
517
525
return 0 ;
@@ -524,6 +532,7 @@ static int insert_in_list(struct flat_file *entry) {
524
532
entry -> file_index_process = expected ;
525
533
entry -> prev = aux -> prev ;
526
534
entry -> next = aux ;
535
+ entry -> header_written = 0 ;
527
536
aux -> prev = entry ;
528
537
entry -> prev -> next = entry ;
529
538
return 0 ;
@@ -537,6 +546,7 @@ static int insert_in_list(struct flat_file *entry) {
537
546
entry -> file_index_process = expected ;
538
547
entry -> prev = parent ;
539
548
entry -> next = NULL ;
549
+ entry -> header_written = 0 ;
540
550
parent -> next = entry ;
541
551
return 0 ;
542
552
}
@@ -777,6 +787,17 @@ static void rotating(struct flat_file *file){
777
787
file -> counter_open ++ ;
778
788
LM_DBG ("File %s is opened %d time\n" , file -> pathname , file -> counter_open );
779
789
790
+ /* write header */
791
+ if (file_header .s && !file -> header_written ) {
792
+ if (write (opened_fds [index ], file_header .s ,
793
+ file_header .len ) == file_header .len &&
794
+ write (opened_fds [index ], "\n" , 1 ) == 1 ) {
795
+ file -> header_written = 1 ;
796
+ } else {
797
+ LM_ERR ("failed to write header to %s\n" , file -> pathname );
798
+ }
799
+ }
800
+
780
801
lock_release (global_lock );
781
802
return ;
782
803
@@ -1032,6 +1053,7 @@ static void event_flatstore_timer(unsigned int ticks, void *param)
1032
1053
file -> rotate_version ++ ;
1033
1054
file -> record_count = 0 ;
1034
1055
file -> bytes_written = 0 ;
1056
+ file -> header_written = 0 ;
1035
1057
ensure_file_path (file , 1 );
1036
1058
raise_rotation_event (file , ROTATE_REASON_PERIOD );
1037
1059
LM_DBG ("File %s is being rotated at %u - new file is %s\n" ,
@@ -1179,18 +1201,17 @@ static void update_counters_and_rotate(struct flat_file *file, ssize_t bytes_inc
1179
1201
file -> record_count ++ ;
1180
1202
file -> bytes_written += (unsigned long )bytes_inc ;
1181
1203
1182
- if (file_rotate_count &&
1183
- file -> record_count >= file_rotate_count )
1204
+ if (file_rotate_count && file -> record_count >= file_rotate_count )
1184
1205
hit_cnt = 1 ;
1185
1206
1186
- if (!hit_cnt && file_rotate_size &&
1187
- file -> bytes_written >= file_rotate_size )
1207
+ if (!hit_cnt && file_rotate_size && file -> bytes_written >= file_rotate_size )
1188
1208
hit_sz = 1 ;
1189
1209
1190
1210
if (hit_cnt || hit_sz ) {
1191
1211
file -> rotate_version ++ ;
1192
1212
file -> record_count = 0 ;
1193
1213
file -> bytes_written = 0 ;
1214
+ file -> header_written = 0 ;
1194
1215
ensure_file_path (file , 1 );
1195
1216
}
1196
1217
lock_release (global_lock );
0 commit comments