This new parameter indicates the log level to use during the query
execution.
The project's component classes are changed to receive this log level,
but they do not use it. This work is reserved for a future patch.
The CLI passes its default log level (main `--log-level` option) to
bt_query_executor_query().
Python bindings are adapted accordingly.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I929d545a1df2f4d6d083f6c536f6fcf26aa972bd
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1461
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
18 files changed:
*/
#include <babeltrace2/types.h>
*/
#include <babeltrace2/types.h>
+/* For bt_logging_level */
+#include <babeltrace2/logging.h>
+
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
extern "C" {
#endif
bt_self_component_class_filter *comp_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
bt_self_component_class_filter *comp_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
- const bt_value **result);
+ bt_logging_level logging_level, const bt_value **result);
typedef bt_self_component_status
(*bt_component_class_filter_accept_input_port_connection_method)(
typedef bt_self_component_status
(*bt_component_class_filter_accept_input_port_connection_method)(
*/
#include <babeltrace2/types.h>
*/
#include <babeltrace2/types.h>
+/* For bt_logging_level */
+#include <babeltrace2/logging.h>
+
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
extern "C" {
#endif
bt_self_component_class_sink *comp_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
bt_self_component_class_sink *comp_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
+ bt_logging_level logging_level,
const bt_value **result);
typedef bt_self_component_status
const bt_value **result);
typedef bt_self_component_status
*/
#include <babeltrace2/types.h>
*/
#include <babeltrace2/types.h>
+/* For bt_logging_level */
+#include <babeltrace2/logging.h>
+
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
extern "C" {
#endif
bt_self_component_class_source *comp_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
bt_self_component_class_source *comp_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
+ bt_logging_level logging_level,
const bt_value **result);
typedef bt_self_component_status
const bt_value **result);
typedef bt_self_component_status
/* For bt_query_executor, bt_component_class, bt_value */
#include <babeltrace2/types.h>
/* For bt_query_executor, bt_component_class, bt_value */
#include <babeltrace2/types.h>
+/* For bt_logging_level */
+#include <babeltrace2/logging.h>
+
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
extern "C" {
#endif
bt_query_executor *query_executor,
const bt_component_class *component_class,
const char *object, const bt_value *params,
bt_query_executor *query_executor,
const bt_component_class *component_class,
const char *object, const bt_value *params,
- const bt_value **result);
+ bt_logging_level logging_level, const bt_value **result);
extern
bt_query_executor_status bt_query_executor_cancel(
extern
bt_query_executor_status bt_query_executor_cancel(
def addr(cls):
return int(cls._cc_ptr)
def addr(cls):
return int(cls._cc_ptr)
- def _query_from_native(cls, query_exec_ptr, obj, params_ptr):
+ def _query_from_native(cls, query_exec_ptr, obj, params_ptr, log_level):
# this can raise, in which case the native call to
# bt_component_class_query() returns NULL
if params_ptr is not None:
# this can raise, in which case the native call to
# bt_component_class_query() returns NULL
if params_ptr is not None:
query_exec_ptr)
# this can raise, but the native side checks the exception
query_exec_ptr)
# this can raise, but the native side checks the exception
- results = cls._query(query_exec, obj, params)
+ results = cls._query(query_exec, obj, params, log_level)
# this can raise, but the native side checks the exception
results = bt2.create_value(results)
# this can raise, but the native side checks the exception
results = bt2.create_value(results)
bt_self_component_class_source *comp_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
bt_self_component_class_source *comp_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
+ bt_logging_level log_level,
const bt_value **result);
typedef bt_self_component_status
const bt_value **result);
typedef bt_self_component_status
bt_self_component_class_filter *comp_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
bt_self_component_class_filter *comp_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
+ bt_logging_level log_level,
const bt_value **result);
typedef bt_self_component_status
const bt_value **result);
typedef bt_self_component_status
bt_self_component_class_sink *comp_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
bt_self_component_class_sink *comp_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
+ bt_logging_level log_level,
const bt_value **result);
typedef bt_self_component_status
const bt_value **result);
typedef bt_self_component_status
const bt_component_class *component_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
const bt_component_class *component_class,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
+ bt_logging_level log_level,
const bt_value **result)
{
PyObject *py_cls = NULL;
const bt_value **result)
{
PyObject *py_cls = NULL;
}
py_results_addr = PyObject_CallMethod(py_cls,
}
py_results_addr = PyObject_CallMethod(py_cls,
- "_query_from_native", "(OOO)", py_query_exec_ptr,
- py_object, py_params_ptr);
+ "_query_from_native", "(OOOi)", py_query_exec_ptr,
+ py_object, py_params_ptr, (int) log_level);
if (!py_results_addr) {
BT_LOGE("Failed to call Python class's _query_from_native() method: "
if (!py_results_addr) {
BT_LOGE("Failed to call Python class's _query_from_native() method: "
bt_self_component_class_source *self_component_class_source,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
bt_self_component_class_source *self_component_class_source,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
+ bt_logging_level log_level,
const bt_value **result)
{
const bt_component_class_source *component_class_source = bt_self_component_class_source_as_component_class_source(self_component_class_source);
const bt_component_class *component_class = bt_component_class_source_as_component_class_const(component_class_source);
const bt_value **result)
{
const bt_component_class_source *component_class_source = bt_self_component_class_source_as_component_class_source(self_component_class_source);
const bt_component_class *component_class = bt_component_class_source_as_component_class_const(component_class_source);
- return bt_py3_component_class_query(component_class, query_executor, object, params, result);
+ return bt_py3_component_class_query(component_class, query_executor, object, params, log_level, result);
bt_self_component_class_filter *self_component_class_filter,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
bt_self_component_class_filter *self_component_class_filter,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
+ bt_logging_level log_level,
const bt_value **result)
{
const bt_component_class_filter *component_class_filter = bt_self_component_class_filter_as_component_class_filter(self_component_class_filter);
const bt_component_class *component_class = bt_component_class_filter_as_component_class_const(component_class_filter);
const bt_value **result)
{
const bt_component_class_filter *component_class_filter = bt_self_component_class_filter_as_component_class_filter(self_component_class_filter);
const bt_component_class *component_class = bt_component_class_filter_as_component_class_const(component_class_filter);
- return bt_py3_component_class_query(component_class, query_executor, object, params, result);
+ return bt_py3_component_class_query(component_class, query_executor, object, params, log_level, result);
bt_self_component_class_sink *self_component_class_sink,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
bt_self_component_class_sink *self_component_class_sink,
const bt_query_executor *query_executor,
const char *object, const bt_value *params,
+ bt_logging_level log_level,
const bt_value **result)
{
const bt_component_class_sink *component_class_sink = bt_self_component_class_sink_as_component_class_sink(self_component_class_sink);
const bt_component_class *component_class = bt_component_class_sink_as_component_class_const(component_class_sink);
const bt_value **result)
{
const bt_component_class_sink *component_class_sink = bt_self_component_class_sink_as_component_class_sink(self_component_class_sink);
const bt_component_class *component_class = bt_component_class_sink_as_component_class_const(component_class_sink);
- return bt_py3_component_class_query(component_class, query_executor, object, params, result);
+ return bt_py3_component_class_query(component_class, query_executor, object, params, log_level, result);
}
static bt_self_message_iterator_status
}
static bt_self_message_iterator_status
bt_query_executor *query_executor,
const bt_component_class *component_class,
const char *object, const bt_value *params,
bt_query_executor *query_executor,
const bt_component_class *component_class,
const char *object, const bt_value *params,
+ bt_logging_level logging_level, const bt_value **OUT);
extern
bt_query_executor_status bt_query_executor_cancel(
extern
bt_query_executor_status bt_query_executor_cancel(
from bt2 import native_bt, object, utils
import bt2.component
from bt2 import native_bt, object, utils
import bt2.component
assert(is_canceled >= 0)
return is_canceled > 0
assert(is_canceled >= 0)
return is_canceled > 0
- def query(self, component_class, object, params=None):
+ def query(self, component_class, object, params=None,
+ logging_level=bt2.logging.LoggingLevel.NONE):
if self.is_canceled:
raise bt2.QueryExecutorCanceled
if self.is_canceled:
raise bt2.QueryExecutorCanceled
params = bt2.create_value(params)
params_ptr = params._ptr
params = bt2.create_value(params)
params_ptr = params._ptr
+ utils._check_log_level(logging_level)
cc_ptr = component_class._component_class_ptr()
status, result_ptr = native_bt.query_executor_query(self._ptr, cc_ptr,
cc_ptr = component_class._component_class_ptr()
status, result_ptr = native_bt.query_executor_query(self._ptr, cc_ptr,
+ object, params_ptr,
+ logging_level)
self._handle_status(status, 'cannot query component class')
assert(result_ptr)
return bt2.value._create_from_ptr(result_ptr)
self._handle_status(status, 'cannot query component class')
assert(result_ptr)
return bt2.value._create_from_ptr(result_ptr)
-int query(const bt_component_class *comp_cls, const char *obj,
- const bt_value *params, const bt_value **user_result,
- const char **fail_reason)
+int query(struct bt_config *cfg, const bt_component_class *comp_cls,
+ const char *obj, const bt_value *params,
+ const bt_value **user_result, const char **fail_reason)
{
const bt_value *result = NULL;
bt_query_executor_status status;
{
const bt_value *result = NULL;
bt_query_executor_status status;
while (true) {
status = bt_query_executor_query(the_query_executor,
while (true) {
status = bt_query_executor_query(the_query_executor,
- comp_cls, obj, params, &result);
+ comp_cls, obj, params, cfg->log_level, &result);
switch (status) {
case BT_QUERY_EXECUTOR_STATUS_OK:
goto ok;
switch (status) {
case BT_QUERY_EXECUTOR_STATUS_OK:
goto ok;
- ret = query(comp_cls, cfg->cmd_data.query.object->str,
+ ret = query(cfg, comp_cls, cfg->cmd_data.query.object->str,
cfg->cmd_data.query.cfg_component->params,
&results, &fail_reason);
if (ret) {
cfg->cmd_data.query.cfg_component->params,
&results, &fail_reason);
if (ret) {
- ret = query(comp_cls, "sessions", params,
+ ret = query(cfg, comp_cls, "sessions", params,
&results, &fail_reason);
if (ret) {
goto failed;
&results, &fail_reason);
if (ret) {
goto failed;
- ret = query(comp_cls, "metadata-info",
+ ret = query(cfg, comp_cls, "metadata-info",
params, &results, &fail_reason);
if (ret) {
goto failed;
params, &results, &fail_reason);
if (ret) {
goto failed;
const bt_component_class *comp_cls =
bt_component_class_source_as_component_class_const(src_comp_cls);
const bt_component_class *comp_cls =
bt_component_class_source_as_component_class_const(src_comp_cls);
- ret = query(comp_cls, "trace-info",
+ ret = query(ctx->cfg, comp_cls, "trace-info",
cfg_comp->params, &query_result,
&fail_reason);
if (ret) {
cfg_comp->params, &query_result,
&fail_reason);
if (ret) {
#include "lib/lib-logging.h"
#include "common/assert.h"
#include "lib/lib-logging.h"
#include "common/assert.h"
+#include "common/common.h"
#include "lib/assert-pre.h"
#include <babeltrace2/graph/query-executor-const.h>
#include <babeltrace2/graph/query-executor.h>
#include "lib/assert-pre.h"
#include <babeltrace2/graph/query-executor-const.h>
#include <babeltrace2/graph/query-executor.h>
struct bt_query_executor *query_exec,
const struct bt_component_class *comp_cls,
const char *object, const struct bt_value *params,
struct bt_query_executor *query_exec,
const struct bt_component_class *comp_cls,
const char *object, const struct bt_value *params,
+ bt_logging_level log_level,
const struct bt_value **user_result)
{
typedef enum bt_query_status (*method_t)(void *, const void *,
const struct bt_value **user_result)
{
typedef enum bt_query_status (*method_t)(void *, const void *,
- const void *, const void *, const void *);
+ const void *, const void *, bt_logging_level, const void *);
enum bt_query_status status;
enum bt_query_executor_status exec_status;
enum bt_query_status status;
enum bt_query_executor_status exec_status;
}
BT_LIB_LOGD("Calling user's query method: "
}
BT_LIB_LOGD("Calling user's query method: "
- "query-exec-addr=%p, %![cc-]+C, object=\"%s\", %![params-]+v",
- query_exec, comp_cls, object, params);
+ "query-exec-addr=%p, %![cc-]+C, object=\"%s\", %![params-]+v, "
+ "log-level=%s",
+ query_exec, comp_cls, object, params,
+ bt_common_logging_level_string(log_level));
*user_result = NULL;
status = method((void *) comp_cls, query_exec, object, params,
*user_result = NULL;
status = method((void *) comp_cls, query_exec, object, params,
+ log_level, user_result);
BT_LIB_LOGD("User method returned: status=%s, %![res-]+v",
bt_query_status_string(status), *user_result);
BT_ASSERT_PRE(status != BT_QUERY_STATUS_OK || *user_result,
BT_LIB_LOGD("User method returned: status=%s, %![res-]+v",
bt_query_status_string(status), *user_result);
BT_ASSERT_PRE(status != BT_QUERY_STATUS_OK || *user_result,
bt_self_component_class_source *comp_class,
const bt_query_executor *query_exec,
const char *object, const bt_value *params,
bt_self_component_class_source *comp_class,
const bt_query_executor *query_exec,
const char *object, const bt_value *params,
+ __attribute__((unused)) bt_logging_level log_level,
const bt_value **result)
{
bt_query_status status = BT_QUERY_STATUS_OK;
const bt_value **result)
{
bt_query_status status = BT_QUERY_STATUS_OK;
bt_self_component_class_source *comp_class,
const bt_query_executor *query_exec,
const char *object, const bt_value *params,
bt_self_component_class_source *comp_class,
const bt_query_executor *query_exec,
const char *object, const bt_value *params,
+ bt_logging_level log_level,
const bt_value **result);
BT_HIDDEN
const bt_value **result);
BT_HIDDEN
bt_query_status lttng_live_query(bt_self_component_class_source *comp_class,
const bt_query_executor *query_exec,
const char *object, const bt_value *params,
bt_query_status lttng_live_query(bt_self_component_class_source *comp_class,
const bt_query_executor *query_exec,
const char *object, const bt_value *params,
+ __attribute__((unused)) bt_logging_level log_level,
const bt_value **result)
{
bt_query_status status = BT_QUERY_STATUS_OK;
const bt_value **result)
{
bt_query_status status = BT_QUERY_STATUS_OK;
bt_self_component_class_source *comp_class,
const bt_query_executor *query_exec,
const char *object, const bt_value *params,
bt_self_component_class_source *comp_class,
const bt_query_executor *query_exec,
const char *object, const bt_value *params,
+ bt_logging_level log_level,
const bt_value **result);
void lttng_live_component_finalize(bt_self_component_source *component);
const bt_value **result);
void lttng_live_component_finalize(bt_self_component_source *component);
- def _query(cls, query_exec, obj, params):
+ def _query(cls, query_exec, obj, params, log_level):
raise ValueError
with self.assertRaises(bt2.Error):
raise ValueError
with self.assertRaises(bt2.Error):
- def _query(cls, query_exec, obj, params):
+ def _query(cls, query_exec, obj, params, log_level):
return ...
with self.assertRaises(bt2.Error):
return ...
with self.assertRaises(bt2.Error):
- def _query(cls, query_exec, obj, params):
+ def _query(cls, query_exec, obj, params, log_level):
nonlocal query_params
query_params = params
return None
nonlocal query_params
query_params = params
return None
- def _query(cls, query_exec, obj, params):
+ def _query(cls, query_exec, obj, params, log_level):
nonlocal query_params
query_params = params
return 17.5
nonlocal query_params
query_params = params
return 17.5
- def _query(cls, query_exec, obj, params):
+ def _query(cls, query_exec, obj, params, log_level):
nonlocal query_params
query_params = params
return {
nonlocal query_params
query_params = params
return {
- def _query(cls, query_exec, obj, params):
+ def _query(cls, query_exec, obj, params, log_level):
return [obj, params, 23]
self._py_comp_cls = MySink
return [obj, params, 23]
self._py_comp_cls = MySink
- def _query(cls, query_exec, obj, params):
+ def _query(cls, query_exec, obj, params, log_level):
nonlocal query_params
query_params = params
return {
nonlocal query_params
query_params = params
return {
- def _query(cls, query_exec, obj, params):
+ def _query(cls, query_exec, obj, params, log_level):
nonlocal query_params
query_params = params
nonlocal query_params
query_params = params
- def _query(cls, query_exec, obj, params):
+ def _query(cls, query_exec, obj, params, log_level):
raise ValueError
with self.assertRaises(bt2.Error):
raise ValueError
with self.assertRaises(bt2.Error):
- def _query(cls, query_exec, obj, params):
+ def _query(cls, query_exec, obj, params, log_level):
raise bt2.InvalidQueryObject
with self.assertRaises(bt2.InvalidQueryObject):
raise bt2.InvalidQueryObject
with self.assertRaises(bt2.InvalidQueryObject):
- def _query(cls, query_exec, obj, params):
+ def _query(cls, query_exec, obj, params, log_level):
raise bt2.InvalidQueryParams
with self.assertRaises(bt2.InvalidQueryParams):
raise bt2.InvalidQueryParams
with self.assertRaises(bt2.InvalidQueryParams):
- def _query(cls, query_exec, obj, params):
+ def _query(cls, query_exec, obj, params, log_level):
raise bt2.TryAgain
with self.assertRaises(bt2.TryAgain):
raise bt2.TryAgain
with self.assertRaises(bt2.TryAgain):
- def _query(cls, query_exec, obj, params):
+ def _query(cls, query_exec, obj, params, log_level):
raise bt2.TryAgain
query_exec = bt2.QueryExecutor()
raise bt2.TryAgain
query_exec = bt2.QueryExecutor()
bt_self_component_class_filter *component_class,
const bt_query_executor *query_exec,
const char *object, const bt_value *params,
bt_self_component_class_filter *component_class,
const bt_query_executor *query_exec,
const char *object, const bt_value *params,
+ __attribute__((unused)) bt_logging_level log_level,
const bt_value **result)
{
bt_value *res = bt_value_array_create();
const bt_value **result)
{
bt_value *res = bt_value_array_create();
BT_ASSERT(params);
ret = bt_query_executor_query(query_exec,
bt_component_class_filter_as_component_class_const(filter_comp_class),
BT_ASSERT(params);
ret = bt_query_executor_query(query_exec,
bt_component_class_filter_as_component_class_const(filter_comp_class),
- "get-something", params, &results);
+ "get-something", params, BT_LOGGING_LEVEL_NONE, &results);
ok(ret == 0 && results, "bt_query_executor_query() succeeds");
BT_ASSERT(bt_value_is_array(results) && bt_value_array_get_size(results) == 2);
object = bt_value_array_borrow_element_by_index_const(results, 0);
ok(ret == 0 && results, "bt_query_executor_query() succeeds");
BT_ASSERT(bt_value_is_array(results) && bt_value_array_get_size(results) == 2);
object = bt_value_array_borrow_element_by_index_const(results, 0);