**temporary commit**
This commit is contained in:
parent
92d5f72ddc
commit
89739fc1e6
5 changed files with 137 additions and 6 deletions
|
@ -21,10 +21,21 @@ typedef struct _ttail_s ttail_t;
|
||||||
#define TTAIL_FLAG_DATE_MIN 2
|
#define TTAIL_FLAG_DATE_MIN 2
|
||||||
#define TTAIL_FLAG_DATE_MAX 4
|
#define TTAIL_FLAG_DATE_MAX 4
|
||||||
#define TTAIL_FLAG_FORMAT 8
|
#define TTAIL_FLAG_FORMAT 8
|
||||||
#define TTAIL_DEFAULT_FORMATS {"%m", "%A %B %d, %Y %H:%M:%S", "%A", "%B", \
|
#define TTAIL_DEFAULT_FORMATS {"%m",\
|
||||||
"%m/%d/%y %I %p", "%d,%m,%Y %H:%M", "at %A the %dst of %B in %Y",\
|
"%A %B %d, %Y %H:%M:%S",\
|
||||||
"run job at %I %p,%B %dnd", "%A den %d. %B %Y %H.%M Uhr",\
|
"%A",\
|
||||||
"%c", "%y/%m/%d", "%Y/%m/%d", "%y-%m-%d", "%Y/%m/%d:%H:%M",NULL}
|
"%B%n%d %H:%M:%S",\
|
||||||
|
"%B%n%d %H:%M",\
|
||||||
|
"%m/%d/%y %I %p",\
|
||||||
|
"%d,%m,%Y %H:%M",\
|
||||||
|
"at %A the %dst of %B in %Y",\
|
||||||
|
"run job at %I %p,%B %dnd",\
|
||||||
|
"%A den %d. %B %Y %H.%M Uhr",\
|
||||||
|
"%c",\
|
||||||
|
"%y/%m/%d",\
|
||||||
|
"%Y/%m/%d",\
|
||||||
|
"%y-%m-%d",\
|
||||||
|
"%Y/%m/%d:%H:%M",NULL}
|
||||||
|
|
||||||
struct _ttail_s
|
struct _ttail_s
|
||||||
{
|
{
|
||||||
|
|
|
@ -71,6 +71,14 @@ int _ttail_search_file_sorted(ttail_t*);
|
||||||
*/
|
*/
|
||||||
int _ttail_file_reopen(ttail_t*, size_t);
|
int _ttail_file_reopen(ttail_t*, size_t);
|
||||||
|
|
||||||
|
/**@brief Set min & max date of file
|
||||||
|
*@param ttail_t* ttail
|
||||||
|
*@param size_t id file id in ttail
|
||||||
|
*@param struct tm[2] will be set to min & max
|
||||||
|
*@return 0 on success 1 if no date found or no fp -1 if error
|
||||||
|
*/
|
||||||
|
int _ttail_file_minmax(ttail_t*, size_t, struct tm[2]);
|
||||||
|
|
||||||
/**@brief Search next line
|
/**@brief Search next line
|
||||||
*
|
*
|
||||||
*Set f pos to next line begining and return the position
|
*Set f pos to next line begining and return the position
|
||||||
|
|
|
@ -112,7 +112,76 @@ int _ttail_search_closest_files_set_fsizes(ttail_t* t)
|
||||||
|
|
||||||
int _ttail_search_file_sorted(ttail_t* t)
|
int _ttail_search_file_sorted(ttail_t* t)
|
||||||
{
|
{
|
||||||
|
/* files start & stop log tm, file start id = i*2 file stop = i*2+1 */
|
||||||
|
struct tm *ftm;
|
||||||
|
|
||||||
|
ftm = malloc(sizeof(struct tm)*t->logfile_sz*2);
|
||||||
|
if(!ftm)
|
||||||
|
{
|
||||||
|
perror("Unable to allocate memory");
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(ftm);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int _ttail_file_minmax(ttail_t* t, size_t id, struct tm tm[2])
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
long cur;
|
||||||
|
memset(tm, 0, sizeof(struct tm)*2);
|
||||||
|
fp = t->logfile[id];
|
||||||
|
if(!fp)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if(!fseek(fp, 0, SEEK_SET))
|
||||||
|
{
|
||||||
|
perror("Unable to manipulate fp");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
if(ttail_getline(t, id) < 0)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if(!ttail_logline2date(t, ttail_getline_buf(t), tm))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!fseek(fp, -1, SEEK_END))
|
||||||
|
{
|
||||||
|
perror("Unable to manipulate fp");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
if((cur = _ttail_file_start_line(fp)) < 0)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if(ttail_getline(t, id) < 0)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if(!ttail_logline2date(t, ttail_getline_buf(t), tm+1))
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(!cur)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if(!fseek(fp, cur-1, SEEK_SET))
|
||||||
|
{
|
||||||
|
perror("Unable to manipulate fp");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int _ttail_file_reopen(ttail_t* t, size_t id)
|
int _ttail_file_reopen(ttail_t* t, size_t id)
|
||||||
|
|
|
@ -244,6 +244,26 @@ START_TEST (test_init_guess_datetime)
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST (test_init_guess_datetime2)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct tm tm;
|
||||||
|
char res[] = "%B%n%d %H:%M:%S";
|
||||||
|
ret = ttail_format_guess(ttail, "Mar 6 00:01:39 pilgrim dhclient", &tm);
|
||||||
|
ck_assert_int_ne(ret, -1);
|
||||||
|
ck_assert_str_eq(fmt[ret], res);
|
||||||
|
ck_assert(ttail->fmt != NULL);
|
||||||
|
ck_assert_str_eq(ttail->fmt, res);
|
||||||
|
ck_assert((ttail->flag & TTAIL_FLAG_FORMAT) == TTAIL_FLAG_FORMAT);
|
||||||
|
ck_assert_int_eq(tm.tm_year, 0);
|
||||||
|
ck_assert_int_eq(tm.tm_mon, 2);
|
||||||
|
ck_assert_int_eq(tm.tm_mday, 6);
|
||||||
|
ck_assert_int_eq(tm.tm_hour, 0);
|
||||||
|
ck_assert_int_eq(tm.tm_min, 1);
|
||||||
|
ck_assert_int_eq(tm.tm_sec, 39);
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
START_TEST (test_init_guess_noguess)
|
START_TEST (test_init_guess_noguess)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -290,7 +310,7 @@ START_TEST (test_init_guess_fmt_set)
|
||||||
int ret;
|
int ret;
|
||||||
char res[] = "%Y/%m/%d";
|
char res[] = "%Y/%m/%d";
|
||||||
ret = ttail_format_guess(ttail, "1988/10/22", NULL);
|
ret = ttail_format_guess(ttail, "1988/10/22", NULL);
|
||||||
ck_assert_int_eq(ret, 11);
|
ck_assert_str_eq(fmt[ret], res);
|
||||||
ret = ttail_format_guess(ttail, "1988/10/22", NULL);
|
ret = ttail_format_guess(ttail, "1988/10/22", NULL);
|
||||||
ck_assert_int_eq(ret, -2);
|
ck_assert_int_eq(ret, -2);
|
||||||
ck_assert_str_eq(ttail->fmt, res);
|
ck_assert_str_eq(ttail->fmt, res);
|
||||||
|
@ -500,6 +520,7 @@ Suite * ttail_init_suite(void)
|
||||||
setup_ttail_empty, teardown_ttail);
|
setup_ttail_empty, teardown_ttail);
|
||||||
tcase_add_test(tc_init_fmt_guess, test_init_guess_date);
|
tcase_add_test(tc_init_fmt_guess, test_init_guess_date);
|
||||||
tcase_add_test(tc_init_fmt_guess, test_init_guess_datetime);
|
tcase_add_test(tc_init_fmt_guess, test_init_guess_datetime);
|
||||||
|
tcase_add_test(tc_init_fmt_guess, test_init_guess_datetime2);
|
||||||
tcase_add_test(tc_init_fmt_guess, test_init_guess_noguess);
|
tcase_add_test(tc_init_fmt_guess, test_init_guess_noguess);
|
||||||
tcase_add_test(tc_init_fmt_guess, test_init_guess_date_notm);
|
tcase_add_test(tc_init_fmt_guess, test_init_guess_date_notm);
|
||||||
tcase_add_test(tc_init_fmt_guess, test_init_guess_noguess_notm);
|
tcase_add_test(tc_init_fmt_guess, test_init_guess_noguess_notm);
|
||||||
|
|
|
@ -146,10 +146,26 @@ START_TEST (test_file_line_start)
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST (test_file_minmax1)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
struct tm tm[2];
|
||||||
|
printf("%d\n", ttail->logfile_sz);
|
||||||
|
ttail->flag |= TTAIL_FLAG_FORMAT;
|
||||||
|
//ttail->fmt = "%b%n%d %H:%M";
|
||||||
|
r = _ttail_search_closest_files_init(ttail);
|
||||||
|
ck_assert_int_eq(r, 0);
|
||||||
|
/*
|
||||||
|
r = _ttail_file_minmax(ttail, 0, tm);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
Suite * ttail_search_suite(void)
|
Suite * ttail_search_suite(void)
|
||||||
{
|
{
|
||||||
Suite *s;
|
Suite *s;
|
||||||
TCase *tc_search_closest_fileinit, *tc_file_line;
|
TCase *tc_search_closest_fileinit, *tc_file_line,
|
||||||
|
*tc_file_minmax;
|
||||||
|
|
||||||
s = suite_create("ttail search checks");
|
s = suite_create("ttail search checks");
|
||||||
tc_search_closest_fileinit = tcase_create("\
|
tc_search_closest_fileinit = tcase_create("\
|
||||||
|
@ -168,8 +184,14 @@ ttail_logline_closest_files_init() checks");
|
||||||
tcase_add_test(tc_file_line, test_file_line_next);
|
tcase_add_test(tc_file_line, test_file_line_next);
|
||||||
tcase_add_test(tc_file_line, test_file_line_start);
|
tcase_add_test(tc_file_line, test_file_line_start);
|
||||||
|
|
||||||
|
tc_file_minmax = tcase_create("ttail_file_minmax() checks");
|
||||||
|
tcase_add_checked_fixture(tc_file_minmax,
|
||||||
|
setup_closest_fileinit, teardown_closest_fileinit);
|
||||||
|
tcase_add_test(tc_file_minmax, test_file_minmax1);
|
||||||
|
|
||||||
suite_add_tcase(s, tc_search_closest_fileinit);
|
suite_add_tcase(s, tc_search_closest_fileinit);
|
||||||
suite_add_tcase(s, tc_file_line);
|
suite_add_tcase(s, tc_file_line);
|
||||||
|
suite_add_tcase(s, tc_file_minmax);
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue