X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Fmodules%2Ftext%2FtextFilter.c;h=afac4f91bc6cdcd4ae1e33e3ac996f55e615a1fc;hb=4ec0c90410f2c28ec11fc20a0acf28ce30a97950;hp=488635caf7908cdc2904048b15bce23b7c4b7ecb;hpb=7e7af7f21b42d02e74f52576a8ac163b65e021b4;p=lttv.git diff --git a/ltt/branches/poly/lttv/modules/text/textFilter.c b/ltt/branches/poly/lttv/modules/text/textFilter.c index 488635ca..afac4f91 100644 --- a/ltt/branches/poly/lttv/modules/text/textFilter.c +++ b/ltt/branches/poly/lttv/modules/text/textFilter.c @@ -25,6 +25,11 @@ * file containing filtering expressions. */ +#ifdef HAVE_CONFIG_H +#include +#endif + +#include #include #include #include @@ -38,16 +43,10 @@ #include #include #include -#include /* Insert the hooks before and after each trace and tracefile, and for each event. Print a global header. */ -/* - * YET TO BE ANSWERED ! - * - why does this module need dependency with batchAnalysis ? - */ - /* * TODO * - specify wich hook function will be used to call the core filter @@ -63,8 +62,7 @@ static LttvHooks /** * filters the file input from user - * @param hook_data the hook data - * @return success/failure of operation + * @param hook_data the hook data, unused */ void filter_analyze_file(void *hook_data) { @@ -89,17 +87,21 @@ void filter_analyze_file(void *hook_data) { g_assert(lttv_iattribute_find_by_path(attributes, "filter/expression", LTTV_POINTER, &value)); - if(((GString*)*(value.v_pointer))->len != 0) g_string_append_c((GString*)*(value.v_pointer),'&'); - g_string_append_c((GString*)*(value.v_pointer),'('); - g_string_append((GString*)*(value.v_pointer),a_file_content); - g_string_append_c((GString*)*(value.v_pointer),')'); + if(((GString*)*(value.v_pointer))->len != 0) + (GString*)*(value.v_pointer) = + g_string_append_c((GString*)*(value.v_pointer),'&'); + (GString*)*(value.v_pointer) = + g_string_append_c((GString*)*(value.v_pointer),'('); + (GString*)*(value.v_pointer) = + g_string_append((GString*)*(value.v_pointer),a_file_content); + (GString*)*(value.v_pointer) = + g_string_append_c((GString*)*(value.v_pointer),')'); } /** * filters the string input from user - * @param hook_data the hook data - * @return success/failure of operation + * @param hook_data the hook data, unused */ void filter_analyze_string(void *hook_data) { @@ -115,13 +117,58 @@ void filter_analyze_string(void *hook_data) { g_assert(lttv_iattribute_find_by_path(attributes, "filter/expression", LTTV_POINTER, &value)); - if(((GString*)*(value.v_pointer))->len != 0) g_string_append_c((GString*)*(value.v_pointer),'&'); - g_string_append_c((GString*)*(value.v_pointer),'('); - g_string_append((GString*)*(value.v_pointer),a_string); - g_string_append_c((GString*)*(value.v_pointer),')'); + if(((GString*)*(value.v_pointer))->len != 0) + (GString*)*(value.v_pointer) = + g_string_append_c((GString*)*(value.v_pointer),'&'); + (GString*)*(value.v_pointer) = + g_string_append_c((GString*)*(value.v_pointer),'('); + (GString*)*(value.v_pointer) = + g_string_append((GString*)*(value.v_pointer),a_string); + (GString*)*(value.v_pointer) = + g_string_append_c((GString*)*(value.v_pointer),')'); } +/** + * Output all filter commands on console + * @param hook_data the hook data + */ +void filter_list_commands(void *hook_data) { + + g_print("[field] [op] [value]\n\n"); + + g_print("*** Possible fields ***\n"); + g_print("event.name (string)\n"); + g_print("event.facility (string)\n"); + g_print("event.category (string)\n"); + g_print("event.time (double)\n"); + g_print("event.tsc (integer)\n"); + g_print("event.field.facility_name.event_name.field_name.subfield_name (field_type)\n"); + g_print("tracefile.name (string)\n"); + g_print("trace.name (string)\n"); + g_print("state.pid (integer)\n"); + g_print("state.ppid (integer)\n"); + g_print("state.creation_time (double)\n"); + g_print("state.insertion_time (double)\n"); + g_print("state.process_name (string)\n"); + g_print("state.thread_brand (string)\n"); + g_print("state.execution_mode (string)\n"); + g_print("state.execution_submode (string)\n"); + g_print("state.process_status (string)\n"); + g_print("state.cpu (string)\n\n"); + + g_print("*** Possible operators ***\n"); + g_print("equal '='\n"); + g_print("not equal '!='\n"); + g_print("greater '>'\n"); + g_print("greater or equal '>='\n"); + g_print("lower '<'\n"); + g_print("lower or equal '<='\n"); + + g_print("*** Possible values ***\n"); + g_print("string, integer, double"); +} + /** * initialize the new module */ @@ -151,6 +198,11 @@ static void init() { "file name", LTTV_OPT_STRING, &a_file_name, filter_analyze_file, NULL); + lttv_option_add("list", 'l', + "list all possible filter commands for module", + "list commands", + LTTV_OPT_NONE, NULL, filter_list_commands, NULL); + } /** @@ -163,6 +215,8 @@ static void destroy() { lttv_option_remove("filename"); + lttv_option_remove("list"); + LttvAttributeValue value; LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes());