Commit 633534c2 authored by Cedric Roux's avatar Cedric Roux

T: extract: add time and count criteria

parent a46443b2
...@@ -16,6 +16,8 @@ void usage(void) ...@@ -16,6 +16,8 @@ void usage(void)
" -f <name> <value> field 'name' of 'event' has to match 'value'\n" " -f <name> <value> field 'name' of 'event' has to match 'value'\n"
" type of 'name' must be int\n" " type of 'name' must be int\n"
" (you can use several -f options)\n" " (you can use several -f options)\n"
" -after <raw time> <nsec> 'event' time has to be greater than this\n"
" -count <n> dump 'n' matching events (less if EOF reached)\n"
); );
exit(1); exit(1);
} }
...@@ -51,6 +53,10 @@ int main(int n, char **v) ...@@ -51,6 +53,10 @@ int main(int n, char **v)
int filter_count = 0; int filter_count = 0;
int buffer_arg; int buffer_arg;
int found; int found;
int count = 1;
int check_time = 0;
time_t sec;
long nsec;
for (i = 1; i < n; i++) { for (i = 1; i < n; i++) {
if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage(); if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
...@@ -63,6 +69,14 @@ int main(int n, char **v) ...@@ -63,6 +69,14 @@ int main(int n, char **v)
filter_value[filter_count++] = atoi(v[++i]); filter_value[filter_count++] = atoi(v[++i]);
continue; continue;
} }
if (!strcmp(v[i], "-after")) { if (i>n-3) usage();
check_time = 1;
sec = atoll(v[++i]);
nsec = atol(v[++i]);
continue;
}
if (!strcmp(v[i], "-count"))
{ if (i > n-2) usage(); count = atoi(v[++i]); continue; }
if (file == NULL) { file = v[i]; continue; } if (file == NULL) { file = v[i]; continue; }
if (event_name == NULL) { event_name = v[i]; continue; } if (event_name == NULL) { event_name = v[i]; continue; }
if (buffer_name == NULL) { buffer_name = v[i]; continue; } if (buffer_name == NULL) { buffer_name = v[i]; continue; }
...@@ -111,13 +125,20 @@ int main(int n, char **v) ...@@ -111,13 +125,20 @@ int main(int n, char **v)
break; break;
if (i != filter_count) if (i != filter_count)
continue; continue;
if (check_time &&
!(e.sending_time.tv_sec > sec ||
(e.sending_time.tv_sec == sec && e.sending_time.tv_nsec >= nsec)))
continue;
if (fwrite(e.e[buffer_arg].b, e.e[buffer_arg].bsize, 1, out) != 1) if (fwrite(e.e[buffer_arg].b, e.e[buffer_arg].bsize, 1, out) != 1)
{ perror(output_file); exit(1); } { perror(output_file); exit(1); }
found = 1; found++;
if (found == count)
break; break;
} }
if (found == 0) printf("ERROR: event not found\n"); if (found == 0) printf("ERROR: event not found\n");
if (found != count)
printf("WARNING: dumped %d events (wanted %d)\n", found, count);
fclose(out); fclose(out);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment