Add functions to open trace from the traceset
[lttv.git] / lttv / modules / text / batchAnalysis.c
index aa30352021670cf5ae83d68db15d6f58c7fa57dd..ae661d47ac2f8c7a74beffc171b3534ac8bc238a 100644 (file)
@@ -24,6 +24,7 @@
 #endif
 
 #include <glib.h>
+#include <unistd.h>
 #include <lttv/lttv.h>
 #include <lttv/attribute.h>
 #include <lttv/hook.h>
@@ -34,6 +35,9 @@
 #include <lttv/stats.h>
 #include <lttv/filter.h>
 #include <ltt/trace.h>
+#include <lttv/sync/sync_chain_lttv.h>
+
+#include <babeltrace/context.h>
 
 static LttvTraceset *traceset;
 
@@ -47,17 +51,32 @@ static LttvHooks
   *event_hook,
   *main_hooks;
 
-static char *a_trace;
+static char *trace_path;
 
 static gboolean a_stats;
+static gboolean a_live;
+static int a_live_update_period;
+
+#define DEFAULT_LIVE_UPDATE_PERIOD 1
 
 void lttv_trace_option(void *hook_data)
 { 
-  LttTrace *trace;
-
-  trace = ltt_trace_open(a_trace);
+  //LttTrace *trace;
+  //trace_collection *trace;  
+  //format *fmt = bt_lookup_format(g_quark_from_static_string("ctf"));
+  /*
+  if(a_live) {
+    //trace = ltt_trace_open_live(a_trace);
+  } else {
+    bt_create_context();
+    //trace = bt_add_trace(a_trace,"ctf");
+  }
   if(trace == NULL) g_critical("cannot open trace %s", a_trace);
-  lttv_traceset_add(traceset, lttv_trace_new(trace));
+  lttv_traceset_add(traceset, lttv_trace_new(trace));*/
+
+  if(lttv_traceset_add_path(traceset, trace_path) < 0) {
+    printf("Cannot add trace %s", trace_path);
+  }
 }
 
 
@@ -67,7 +86,7 @@ static gboolean process_traceset(void *hook_data, void *call_data)
 
   LttvIAttribute *attributes = LTTV_IATTRIBUTE(lttv_global_attributes());
 
-  LttvTracesetStats *tscs;
+  LttvTracesetStats *tscs = NULL;
 
   LttvTracesetState *tss;
 
@@ -89,8 +108,13 @@ static gboolean process_traceset(void *hook_data, void *call_data)
   g_info("BatchAnalysis initialize context");
 
   lttv_context_init(tc, traceset);
-  lttv_state_add_event_hooks(tc);
+
+#ifdef BABEL_CLEANUP
+  syncTraceset(tc);
+
+  lttv_state_add_event_hooks(tss);
   if(a_stats) lttv_stats_add_event_hooks(tscs);
+#endif
 
   retval= lttv_iattribute_find_by_path(attributes, "filter/expression",
     LTTV_POINTER, &value_expression);
@@ -128,12 +152,27 @@ static gboolean process_traceset(void *hook_data, void *call_data)
   end.tv_nsec = G_MAXULONG;
 
   g_info("BatchAnalysis process traceset");
-
   lttv_process_traceset_seek_time(tc, start);
-  lttv_process_traceset_middle(tc,
-                               end,
-                               G_MAXULONG,
-                               NULL);
+  /* Read as long a we do not reach the end (0) */
+  unsigned int count;
+  unsigned int updated_count;
+  do {
+         count = lttv_process_traceset_middle(tc,
+                                                         end,
+                                                         G_MAXULONG,
+                                                         NULL);
+         
+#ifdef BABEL_CLEANUP
+         updated_count = lttv_process_traceset_update(tc);
+#endif
+               
+         sleep(a_live_update_period);
+  } while(count != 0
+#ifdef BABEL_CLEANUP
+      || updated_count > 0
+#endif
+      );
 
 
   //lttv_traceset_context_remove_hooks(tc,
@@ -149,8 +188,10 @@ static gboolean process_traceset(void *hook_data, void *call_data)
   g_info("BatchAnalysis destroy context");
 
   lttv_filter_destroy(*(value_filter.v_pointer));
+#ifdef BABEL_CLEANUP
   lttv_state_remove_event_hooks(tss);
   if(a_stats) lttv_stats_remove_event_hooks(tscs);
+#endif
   lttv_context_fini(tc);
   if (a_stats)
     g_object_unref(tscs);
@@ -174,7 +215,7 @@ static void init()
   lttv_option_add("trace", 't', 
       "add a trace to the trace set to analyse", 
       "pathname of the directory containing the trace", 
-      LTTV_OPT_STRING, &a_trace, lttv_trace_option, NULL);
+      LTTV_OPT_STRING, &trace_path, lttv_trace_option, NULL);
 
   a_stats = FALSE;
   lttv_option_add("stats", 's', 
@@ -182,6 +223,20 @@ static void init()
       "", 
       LTTV_OPT_NONE, &a_stats, NULL, NULL);
 
+  a_live = FALSE;
+  lttv_option_add("live", 0,
+      "define if the traceset is receiving live informations",
+      "",
+      LTTV_OPT_NONE, &a_live, NULL, NULL);
+  
+  a_live_update_period = DEFAULT_LIVE_UPDATE_PERIOD;
+  lttv_option_add("live-period", 0,
+                 "period to update a live trace",
+                 "in seconds",
+                 LTTV_OPT_INT,
+                 &a_live_update_period,
+                 NULL, NULL);
+
 
   traceset = lttv_traceset_new();
 
@@ -239,14 +294,18 @@ static void init()
 
 static void destroy()
 {
+#ifdef BABEL_CLEANUP
   guint i, nb;
 
   LttvTrace *trace;
+#endif
 
   g_info("Destroy batchAnalysis.c");
 
   lttv_option_remove("trace");
   lttv_option_remove("stats");
+  lttv_option_remove("live");
+  lttv_option_remove("live-period");
 
   lttv_hooks_destroy(before_traceset);
   lttv_hooks_destroy(after_traceset);
@@ -259,17 +318,17 @@ static void destroy()
   lttv_hooks_destroy(event_hook);
   lttv_hooks_remove_data(main_hooks, process_traceset, NULL);
 
+#ifdef BABEL_CLEANUP
   nb = lttv_traceset_number(traceset);
   for(i = 0 ; i < nb ; i++) {
     trace = lttv_traceset_get(traceset, i);
     ltt_trace_close(lttv_trace(trace));
-    /* This will be done by lttv_traceset_destroy */
-    //lttv_trace_destroy(trace);
+    lttv_trace_destroy(trace);
   }
-
+#endif
   lttv_traceset_destroy(traceset); 
 }
 
 LTTV_MODULE("batchAnalysis", "Batch processing of a trace", \
     "Run through a trace calling all the registered hooks", \
-    init, destroy, "state", "stats", "option","textFilter")
+    init, destroy, "state", "stats", "option","textFilter", "sync")
This page took 0.024625 seconds and 4 git commands to generate.