X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Fctf%2Ffs-src%2Fquery.c;h=872caddf9b4dfdbc95c5a01ea894670d652aea63;hb=73760435c5a44d48313a85d94af093c293bc17ef;hp=6f78505b078da3d5799158b04ffa3faf2f9a5541;hpb=98903a3ed6827edb1228cf8f9f30a6eb1b81bb49;p=babeltrace.git diff --git a/src/plugins/ctf/fs-src/query.c b/src/plugins/ctf/fs-src/query.c index 6f78505b..872caddf 100644 --- a/src/plugins/ctf/fs-src/query.c +++ b/src/plugins/ctf/fs-src/query.c @@ -47,12 +47,13 @@ struct range { }; BT_HIDDEN -bt_query_status metadata_info_query( +bt_component_class_query_method_status metadata_info_query( bt_self_component_class_source *comp_class, const bt_value *params, bt_logging_level log_level, const bt_value **user_result) { - bt_query_status status = BT_QUERY_STATUS_OK; + bt_component_class_query_method_status status = + BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_OK; bt_value *result = NULL; const bt_value *path_value = NULL; char *metadata_text = NULL; @@ -65,7 +66,7 @@ bt_query_status metadata_info_query( result = bt_value_map_create(); if (!result) { - status = BT_QUERY_STATUS_NOMEM; + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_MEMORY_ERROR; goto error; } @@ -73,20 +74,20 @@ bt_query_status metadata_info_query( if (!bt_value_is_map(params)) { BT_LOGE_STR("Query parameters is not a map value object."); - status = BT_QUERY_STATUS_INVALID_PARAMS; + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_INVALID_PARAMS; goto error; } path_value = bt_value_map_borrow_entry_value_const(params, "path"); if (!path_value) { BT_LOGE_STR("Mandatory `path` parameter missing"); - status = BT_QUERY_STATUS_INVALID_PARAMS; + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_INVALID_PARAMS; goto error; } if (!bt_value_is_string(path_value)) { BT_LOGE_STR("`path` parameter is required to be a string value"); - status = BT_QUERY_STATUS_INVALID_PARAMS; + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_INVALID_PARAMS; goto error; } @@ -104,7 +105,8 @@ bt_query_status metadata_info_query( if (is_packetized) { ret = ctf_metadata_decoder_packetized_file_stream_to_buf( - metadata_fp, &metadata_text, bo, log_level, NULL); + metadata_fp, &metadata_text, bo, NULL, NULL, + log_level, NULL); if (ret) { BT_LOGE("Cannot decode packetized metadata file: path=\"%s\"", path); @@ -175,7 +177,7 @@ error: result = NULL; if (status >= 0) { - status = BT_QUERY_STATUS_ERROR; + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_ERROR; } end: @@ -198,7 +200,7 @@ int add_range(bt_value *info, struct range *range, const char *range_name) { int ret = 0; - bt_value_status status; + bt_value_map_insert_entry_status status; bt_value *range_map = NULL; if (!range->set) { @@ -214,21 +216,21 @@ int add_range(bt_value *info, struct range *range, status = bt_value_map_insert_signed_integer_entry(range_map, "begin", range->begin_ns); - if (status != BT_VALUE_STATUS_OK) { + if (status != BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK) { ret = -1; goto end; } status = bt_value_map_insert_signed_integer_entry(range_map, "end", range->end_ns); - if (status != BT_VALUE_STATUS_OK) { + if (status != BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK) { ret = -1; goto end; } status = bt_value_map_insert_entry(info, range_name, range_map); - if (status != BT_VALUE_STATUS_OK) { + if (status != BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK) { ret = -1; goto end; } @@ -242,12 +244,12 @@ static int add_stream_ids(bt_value *info, struct ctf_fs_ds_file_group *ds_file_group) { int ret = 0; - bt_value_status status; + bt_value_map_insert_entry_status status; if (ds_file_group->stream_id != UINT64_C(-1)) { status = bt_value_map_insert_unsigned_integer_entry(info, "id", ds_file_group->stream_id); - if (status != BT_VALUE_STATUS_OK) { + if (status != BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK) { ret = -1; goto end; } @@ -255,7 +257,7 @@ int add_stream_ids(bt_value *info, struct ctf_fs_ds_file_group *ds_file_group) status = bt_value_map_insert_unsigned_integer_entry(info, "class-id", ds_file_group->sc->id); - if (status != BT_VALUE_STATUS_OK) { + if (status != BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK) { ret = -1; goto end; } @@ -270,7 +272,8 @@ int populate_stream_info(struct ctf_fs_ds_file_group *group, { int ret = 0; size_t file_idx; - bt_value_status status; + bt_value_map_insert_entry_status insert_status; + bt_value_array_append_element_status append_status; bt_value *file_paths; struct ctf_fs_ds_index_entry *first_ds_index_entry, *last_ds_index_entry; gchar *port_name = NULL; @@ -286,9 +289,9 @@ int populate_stream_info(struct ctf_fs_ds_file_group *group, g_ptr_array_index(group->ds_file_infos, file_idx); - status = bt_value_array_append_string_element(file_paths, + append_status = bt_value_array_append_string_element(file_paths, info->path->str); - if (status != BT_VALUE_STATUS_OK) { + if (append_status != BT_VALUE_ARRAY_APPEND_ELEMENT_STATUS_OK) { ret = -1; goto end; } @@ -328,9 +331,9 @@ int populate_stream_info(struct ctf_fs_ds_file_group *group, goto end; } - status = bt_value_map_insert_entry(group_info, "paths", + insert_status = bt_value_map_insert_entry(group_info, "paths", file_paths); - if (status != BT_VALUE_STATUS_OK) { + if (insert_status != BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK) { ret = -1; goto end; } @@ -346,14 +349,15 @@ int populate_stream_info(struct ctf_fs_ds_file_group *group, goto end; } - status = bt_value_map_insert_string_entry(group_info, "port-name", - port_name); - if (status != BT_VALUE_STATUS_OK) { + insert_status = bt_value_map_insert_string_entry(group_info, + "port-name", port_name); + if (insert_status != BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK) { ret = -1; goto end; } end: + g_free(port_name); bt_value_put_ref(file_paths); return ret; } @@ -363,7 +367,8 @@ int populate_trace_info(const struct ctf_fs_trace *trace, bt_value *trace_info) { int ret = 0; size_t group_idx; - bt_value_status status; + bt_value_map_insert_entry_status insert_status; + bt_value_array_append_element_status append_status; bt_value *file_groups = NULL; struct range trace_range = { .begin_ns = INT64_MAX, @@ -388,15 +393,15 @@ int populate_trace_info(const struct ctf_fs_trace *trace, bt_value *trace_info) goto end; } - status = bt_value_map_insert_string_entry(trace_info, "name", + insert_status = bt_value_map_insert_string_entry(trace_info, "name", trace->name->str); - if (status != BT_VALUE_STATUS_OK) { + if (insert_status != BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK) { ret = -1; goto end; } - status = bt_value_map_insert_string_entry(trace_info, "path", + insert_status = bt_value_map_insert_string_entry(trace_info, "path", trace->path->str); - if (status != BT_VALUE_STATUS_OK) { + if (insert_status != BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK) { ret = -1; goto end; } @@ -421,9 +426,10 @@ int populate_trace_info(const struct ctf_fs_trace *trace, bt_value *trace_info) goto end; } - status = bt_value_array_append_element(file_groups, group_info); + append_status = bt_value_array_append_element(file_groups, + group_info); bt_value_put_ref(group_info); - if (status != BT_VALUE_STATUS_OK) { + if (append_status != BT_VALUE_ARRAY_APPEND_ELEMENT_STATUS_OK) { goto end; } @@ -455,10 +461,10 @@ int populate_trace_info(const struct ctf_fs_trace *trace, bt_value *trace_info) } } - status = bt_value_map_insert_entry(trace_info, "streams", + insert_status = bt_value_map_insert_entry(trace_info, "streams", file_groups); BT_VALUE_PUT_REF_AND_RESET(file_groups); - if (status != BT_VALUE_STATUS_OK) { + if (insert_status != BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK) { ret = -1; goto end; } @@ -469,15 +475,16 @@ end: } BT_HIDDEN -bt_query_status trace_info_query( +bt_component_class_query_method_status trace_info_query( bt_self_component_class_source *comp_class, const bt_value *params, bt_logging_level log_level, const bt_value **user_result) { struct ctf_fs_component *ctf_fs = NULL; - bt_query_status status = BT_QUERY_STATUS_OK; + bt_component_class_query_method_status status = + BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_OK; bt_value *result = NULL; - const bt_value *paths_value = NULL; + const bt_value *inputs_value = NULL; int ret = 0; guint i; @@ -485,34 +492,34 @@ bt_query_status trace_info_query( if (!bt_value_is_map(params)) { BT_LOGE("Query parameters is not a map value object."); - status = BT_QUERY_STATUS_INVALID_PARAMS; + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_INVALID_PARAMS; goto error; } - ctf_fs = ctf_fs_component_create(log_level); + ctf_fs = ctf_fs_component_create(log_level, NULL); if (!ctf_fs) { goto error; } - if (!read_src_fs_parameters(params, &paths_value, ctf_fs)) { - status = BT_QUERY_STATUS_INVALID_PARAMS; + if (!read_src_fs_parameters(params, &inputs_value, ctf_fs)) { + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_INVALID_PARAMS; goto error; } - if (ctf_fs_component_create_ctf_fs_traces(NULL, ctf_fs, paths_value)) { + if (ctf_fs_component_create_ctf_fs_traces(NULL, ctf_fs, inputs_value)) { goto error; } result = bt_value_array_create(); if (!result) { - status = BT_QUERY_STATUS_NOMEM; + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_MEMORY_ERROR; goto error; } for (i = 0; i < ctf_fs->traces->len; i++) { struct ctf_fs_trace *trace; bt_value *trace_info; - bt_value_status status; + bt_value_array_append_element_status append_status; trace = g_ptr_array_index(ctf_fs->traces, i); BT_ASSERT(trace); @@ -529,9 +536,10 @@ bt_query_status trace_info_query( goto error; } - status = bt_value_array_append_element(result, trace_info); + append_status = bt_value_array_append_element(result, + trace_info); bt_value_put_ref(trace_info); - if (status != BT_VALUE_STATUS_OK) { + if (append_status != BT_VALUE_ARRAY_APPEND_ELEMENT_STATUS_OK) { goto error; } } @@ -543,7 +551,7 @@ error: result = NULL; if (status >= 0) { - status = BT_QUERY_STATUS_ERROR; + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_ERROR; } end: @@ -555,3 +563,76 @@ end: *user_result = result; return status; } + +BT_HIDDEN +bt_component_class_query_method_status support_info_query( + bt_self_component_class_source *comp_class, + const bt_value *params, bt_logging_level log_level, + const bt_value **user_result) +{ + const bt_value *input_type_value; + const char *input_type; + bt_component_class_query_method_status status; + double weight = 0; + gchar *metadata_path = NULL; + bt_value *result = NULL; + + input_type_value = bt_value_map_borrow_entry_value_const(params, "type"); + BT_ASSERT(input_type_value); + BT_ASSERT(bt_value_get_type(input_type_value) == BT_VALUE_TYPE_STRING); + input_type = bt_value_string_get(input_type_value); + + result = bt_value_map_create(); + if (!result) { + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_MEMORY_ERROR; + goto end; + } + + if (strcmp(input_type, "directory") == 0) { + const bt_value *input_value; + const char *path; + + input_value = bt_value_map_borrow_entry_value_const(params, "input"); + BT_ASSERT(input_value); + BT_ASSERT(bt_value_get_type(input_value) == BT_VALUE_TYPE_STRING); + path = bt_value_string_get(input_value); + + metadata_path = g_build_filename(path, CTF_FS_METADATA_FILENAME, NULL); + if (!metadata_path) { + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_MEMORY_ERROR; + goto end; + } + + /* + * If the metadata file exists in this directory, consider it to + * be a CTF trace. + */ + if (g_file_test(metadata_path, G_FILE_TEST_EXISTS)) { + weight = 0.5; + } + } + + if (bt_value_map_insert_real_entry(result, "weight", weight) != BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK) { + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_MEMORY_ERROR; + goto end; + } + + /* + * Use the arbitrary constant string "ctf" as the group, such that all + * found ctf traces are passed to the same instance of src.ctf.fs. + */ + if (bt_value_map_insert_string_entry(result, "group", "ctf") != BT_VALUE_MAP_INSERT_ENTRY_STATUS_OK) { + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_MEMORY_ERROR; + goto end; + } + + *user_result = result; + result = NULL; + status = BT_COMPONENT_CLASS_QUERY_METHOD_STATUS_OK; + +end: + g_free(metadata_path); + bt_value_put_ref(result); + + return status; +}