Add bt_component_class_query_info() API
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Sat, 11 Feb 2017 04:19:27 +0000 (23:19 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Sun, 28 May 2017 16:57:38 +0000 (12:57 -0400)
When you create a component class, you can set an optional "query info"
class method with bt_component_class_sink_set_query_info_method().

A "query info" class method is a method which accepts an action name
and custom parameters and returns custom results. It can be used for
component class-specific requests such as getting the beginning and end
timestamps of a trace, its total size, and other statistics. On some
real-time source component class, it can be used to get a list of
endpoints to which to connect.

You can use bt_component_class_query_info() to query a component class.
The action name and parameters are mandatory, although you can use
bt_value_null for the parameters.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/babeltrace/component/component-class-internal.h
include/babeltrace/component/component-class.h
lib/component/component-class.c

index 856621db3ed158c28b022a59d6e20483f07f9b0a..7ec59b95a21719a30fab748bacb23458f241ac44 100644 (file)
@@ -57,6 +57,7 @@ struct bt_component_class {
        struct {
                bt_component_class_init_method init;
                bt_component_class_destroy_method destroy;
+               bt_component_class_query_info_method query_info;
        } methods;
        /* Array of struct bt_component_class_destroy_listener */
        GArray *destroy_listeners;
index aee2474085a8556aae13842ce121dd2573bc30f9..9a631be0d7281e7db4e9816473a412672cf8f5cb 100644 (file)
@@ -73,6 +73,10 @@ typedef enum bt_notification_iterator_status
                (*bt_component_class_notification_iterator_seek_time_method)(
                struct bt_notification_iterator *iterator, int64_t time);
 
+typedef struct bt_value *(*bt_component_class_query_info_method)(
+               struct bt_component_class *component_class,
+               const char *action, struct bt_value *params);
+
 extern int bt_component_class_set_init_method(
                struct bt_component_class *component_class,
                bt_component_class_init_method init_method);
@@ -116,6 +120,14 @@ extern const char *bt_component_class_get_description(
 extern const char *bt_component_class_get_help(
                struct bt_component_class *component_class);
 
+extern int bt_component_class_set_query_info_method(
+               struct bt_component_class *component_class,
+               bt_component_class_query_info_method query_info_method);
+
+extern struct bt_value *bt_component_class_query_info(
+               struct bt_component_class *component_class,
+               const char *action, struct bt_value *params);
+
 /**
  * Get a component class' type.
  *
index 72bea187c23e89fd5992aa3754651042fd11d0aa..4e337e030876fd5accb698f7a405817d873e64f3 100644 (file)
@@ -228,6 +228,23 @@ end:
        return ret;
 }
 
+int bt_component_class_set_query_info_method(
+               struct bt_component_class *component_class,
+               bt_component_class_query_info_method query_info_method)
+{
+       int ret = 0;
+
+       if (!component_class || component_class->frozen || !query_info_method) {
+               ret = -1;
+               goto end;
+       }
+
+       component_class->methods.query_info = query_info_method;
+
+end:
+       return ret;
+}
+
 int bt_component_class_set_destroy_method(
                struct bt_component_class *component_class,
                bt_component_class_destroy_method destroy_method)
@@ -524,3 +541,21 @@ int bt_component_class_freeze(
 end:
        return ret;
 }
+
+struct bt_value *bt_component_class_query_info(
+               struct bt_component_class *component_class,
+               const char *action, struct bt_value *params)
+{
+       struct bt_value *results = NULL;
+
+       if (!component_class || !action || !params ||
+                       !component_class->methods.query_info) {
+               goto end;
+       }
+
+       results = component_class->methods.query_info(component_class,
+               action, params);
+
+end:
+       return results;
+}
This page took 0.026315 seconds and 4 git commands to generate.