if (cfg->cmd_data.print_ctf_metadata.path) {
g_string_free(cfg->cmd_data.print_ctf_metadata.path,
TRUE);
+ g_string_free(
+ cfg->cmd_data.print_ctf_metadata.output_path,
+ TRUE);
}
break;
case BT_CONFIG_COMMAND_PRINT_LTTNG_LIVE_SESSIONS:
g_string_free(
cfg->cmd_data.print_lttng_live_sessions.url,
TRUE);
+ g_string_free(
+ cfg->cmd_data.print_lttng_live_sessions.output_path,
+ TRUE);
}
break;
default:
goto error;
}
+ cfg->cmd_data.print_ctf_metadata.output_path = g_string_new(NULL);
+ if (!cfg->cmd_data.print_ctf_metadata.output_path) {
+ print_err_oom();
+ goto error;
+ }
+
goto end;
error:
goto error;
}
+ cfg->cmd_data.print_lttng_live_sessions.output_path =
+ g_string_new(NULL);
+ if (!cfg->cmd_data.print_lttng_live_sessions.output_path) {
+ print_err_oom();
+ goto error;
+ }
+
goto end;
error:
gs_leftover = leftovers->data;
g_string_assign(cfg->cmd_data.print_ctf_metadata.path,
gs_leftover->str);
+
+ if (output) {
+ g_string_assign(
+ cfg->cmd_data.print_ctf_metadata.output_path,
+ output);
+ }
+
goto end;
}
g_string_assign(cfg->cmd_data.print_lttng_live_sessions.url,
gs_leftover->str);
+
+ if (output) {
+ g_string_assign(
+ cfg->cmd_data.print_lttng_live_sessions.output_path,
+ output);
+ }
+
goto end;
}
BT_COMPONENT_CLASS_TYPE_SOURCE;
int64_t array_size, i;
const char *fail_reason = NULL;
+ FILE *out_stream = stdout;
assert(cfg->cmd_data.print_lttng_live_sessions.url);
comp_cls = find_component_class(plugin_name, comp_cls_name,
goto error;
}
+ if (cfg->cmd_data.print_lttng_live_sessions.output_path->len > 0) {
+ out_stream =
+ fopen(cfg->cmd_data.print_lttng_live_sessions.output_path->str,
+ "w");
+ if (!out_stream) {
+ ret = -1;
+ BT_LOGE_ERRNO("Cannot open file for writing",
+ ": path=\"%s\"",
+ cfg->cmd_data.print_lttng_live_sessions.output_path->str);
+ goto end;
+ }
+ }
+
array_size = bt_value_array_size(results);
for (i = 0; i < array_size; i++) {
const char *url_text;
}
ret = bt_value_string_get(v, &url_text);
assert(ret == 0);
- printf("%s", url_text);
+ fprintf(out_stream, "%s", url_text);
BT_PUT(v);
v = bt_value_map_get(map, "timer-us");
}
ret = bt_value_integer_get(v, &timer_us);
assert(ret == 0);
- printf(" (timer = %" PRIu64 ", ", timer_us);
+ fprintf(out_stream, " (timer = %" PRIu64 ", ", timer_us);
BT_PUT(v);
v = bt_value_map_get(map, "stream-count");
}
ret = bt_value_integer_get(v, &streams);
assert(ret == 0);
- printf("%" PRIu64 " stream(s), ", streams);
+ fprintf(out_stream, "%" PRIu64 " stream(s), ", streams);
BT_PUT(v);
v = bt_value_map_get(map, "client-count");
}
ret = bt_value_integer_get(v, &clients);
assert(ret == 0);
- printf("%" PRIu64 " client(s) connected)\n", clients);
+ fprintf(out_stream, "%" PRIu64 " client(s) connected)\n", clients);
BT_PUT(v);
BT_PUT(map);
bt_put(results);
bt_put(params);
bt_put(comp_cls);
+
+ if (out_stream && out_stream != stdout) {
+ int fclose_ret = fclose(out_stream);
+
+ if (fclose_ret) {
+ BT_LOGE_ERRNO("Cannot close file stream",
+ ": path=\"%s\"",
+ cfg->cmd_data.print_lttng_live_sessions.output_path->str);
+ }
+ }
+
return 0;
}
static const enum bt_component_class_type comp_cls_type =
BT_COMPONENT_CLASS_TYPE_SOURCE;
const char *fail_reason = NULL;
+ FILE *out_stream = stdout;
assert(cfg->cmd_data.print_ctf_metadata.path);
comp_cls = find_component_class(plugin_name, comp_cls_name,
ret = bt_value_string_get(metadata_text_value, &metadata_text);
assert(ret == 0);
- printf("%s\n", metadata_text);
+
+ if (cfg->cmd_data.print_ctf_metadata.output_path->len > 0) {
+ out_stream =
+ fopen(cfg->cmd_data.print_ctf_metadata.output_path->str,
+ "w");
+ if (!out_stream) {
+ ret = -1;
+ BT_LOGE_ERRNO("Cannot open file for writing",
+ ": path=\"%s\"",
+ cfg->cmd_data.print_ctf_metadata.output_path->str);
+ goto end;
+ }
+ }
+
+ ret = fprintf(out_stream, "%s\n", metadata_text);
+ if (ret < 0) {
+ BT_LOGE("Cannot write whole metadata text to output stream: "
+ "ret=%d", ret);
+ }
+
goto end;
failed:
bt_put(params);
bt_put(metadata_text_value);
bt_put(comp_cls);
+
+ if (out_stream && out_stream != stdout) {
+ int fclose_ret = fclose(out_stream);
+
+ if (fclose_ret) {
+ BT_LOGE_ERRNO("Cannot close file stream",
+ ": path=\"%s\"",
+ cfg->cmd_data.print_ctf_metadata.output_path->str);
+ }
+ }
+
return 0;
}
*babeltrace convert* ['GENERAL OPTIONS'] [opt:--omit-home-plugin-path]
[opt:--omit-system-plugin-path]
[opt:--plugin-path='PATH'[:__PATH__]...]
+ [opt:--output='OUTPATH']
opt:--output-format=`ctf-metadata` 'TRACE-PATH'
Print the available http://lttng.org/docs/#doc-lttng-live[LTTng live]
*babeltrace convert* ['GENERAL OPTIONS'] [opt:--omit-home-plugin-path]
[opt:--omit-system-plugin-path]
[opt:--plugin-path='PATH'[:__PATH__]...]
- opt:--input-format=`lttng-live` 'URL'
+ [opt:--output='OUTPATH'] opt:--input-format=`lttng-live` 'URL'
DESCRIPTION
Shared options
~~~~~~~~~~~~~~
opt:-w 'PATH', opt:--output='PATH'::
- When you specify opt:--output-format=`ctf`, set the
- manparam:sink.ctf.fs:path initialization parameter of the implicit
- compcls:sink.ctf.fs component to 'PATH'. Otherwise, create an
- implicit compcls:sink.text.pretty component and set its
- manparam:sink.text.pretty:path initialization parameter to 'PATH'.
+ With opt:--output-format=`ctf-metadata` or
+ opt:--input-format=`lttng-live` (when printing the available LTTng
+ live sessions), write the text to the file 'PATH' instead of the
+ standard output.
++
+When you specify opt:--output-format=`ctf`, set the
+manparam:sink.ctf.fs:path initialization parameter of the implicit
+compcls:sink.ctf.fs component to 'PATH'. Otherwise, create an implicit
+compcls:sink.text.pretty component and set its
+manparam:sink.text.pretty:path initialization parameter to 'PATH'.
+
See man:babeltrace-sink.ctf.fs(7) and
man:babeltrace-sink.text.pretty(7) to learn more about those