X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng%2Futils.cpp;h=9a9f39bf2529b1cd6328f5052b73672715d12663;hp=5b0c461d98a2d8f58627e76e3c6695914f606194;hb=HEAD;hpb=ca938aa52e0d841fc638ecffb4261a80d846831f diff --git a/src/bin/lttng/utils.cpp b/src/bin/lttng/utils.cpp index 5b0c461d9..45fe256a5 100644 --- a/src/bin/lttng/utils.cpp +++ b/src/bin/lttng/utils.cpp @@ -8,6 +8,7 @@ #define _LGPL_SOURCE #include "command.hpp" #include "conf.hpp" +#include "exception.hpp" #include "utils.hpp" #include @@ -20,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -665,11 +667,10 @@ end: namespace { template -session_list get_sessions(const FilterFunctionType& filter, bool return_first_match_only = false) +lttng::cli::session_list get_sessions(const FilterFunctionType& filter, + bool return_first_match_only = false) { - session_list list; - - { + lttng::cli::session_list list = []() { int list_ret; struct lttng_session *psessions; @@ -680,8 +681,8 @@ session_list get_sessions(const FilterFunctionType& filter, bool return_first_ma static_cast(list_ret)); } - list = session_list(psessions, list_ret); - } + return lttng::cli::session_list(psessions, list_ret); + }(); std::size_t write_to = 0; for (std::size_t read_from = 0; read_from < list.size(); ++read_from) { @@ -696,7 +697,7 @@ session_list get_sessions(const FilterFunctionType& filter, bool return_first_ma ++write_to; if (return_first_match_only) { - return session_list(std::move(list), 1); + return lttng::cli::session_list(std::move(list), 1); } } @@ -706,23 +707,23 @@ session_list get_sessions(const FilterFunctionType& filter, bool return_first_ma } } /* namespace */ -session_list list_sessions(const struct session_spec& spec) +lttng::cli::session_list lttng::cli::list_sessions(const struct session_spec& spec) { - switch (spec.type) { - case session_spec::NAME: + switch (spec.type_) { + case lttng::cli::session_spec::type::NAME: if (spec.value == nullptr) { const auto configured_name = - lttng::make_unique_wrapper(get_session_name()); - - if (configured_name) { - const struct session_spec new_spec = { - .type = session_spec::NAME, .value = configured_name.get() - }; + lttng::make_unique_wrapper( + get_session_name()); - return list_sessions(new_spec); + if (!configured_name) { + LTTNG_THROW_CLI_NO_DEFAULT_SESSION(); } - return session_list(); + const struct lttng::cli::session_spec new_spec( + lttng::cli::session_spec::type::NAME, configured_name.get()); + + return list_sessions(new_spec); } return get_sessions( @@ -730,13 +731,63 @@ session_list list_sessions(const struct session_spec& spec) return strcmp(session.name, spec.value) == 0; }, true); - case session_spec::GLOB_PATTERN: + case lttng::cli::session_spec::type::GLOB_PATTERN: return get_sessions([&spec](const lttng_session& session) { return fnmatch(spec.value, session.name, 0) == 0; }); - case session_spec::ALL: + case lttng::cli::session_spec::type::ALL: return get_sessions([](const lttng_session&) { return true; }); } - return session_list(); + return lttng::cli::session_list(); +} + +void print_kernel_tracer_status_error() +{ + if (lttng_opt_mi) { + return; + } + + enum lttng_kernel_tracer_status kernel_tracer_status; + const auto ret = lttng_get_kernel_tracer_status(&kernel_tracer_status); + + if (ret < 0) { + ERR("Failed to get kernel tracer status: %s", lttng_strerror(ret)); + } else { + switch (kernel_tracer_status) { + case LTTNG_KERNEL_TRACER_STATUS_INITIALIZED: + return; + case LTTNG_KERNEL_TRACER_STATUS_ERR_MODULES_UNKNOWN: + std::cerr << "\tKernel module loading failed" << std::endl; + break; + case LTTNG_KERNEL_TRACER_STATUS_ERR_MODULES_MISSING: + std::cerr << "\tMissing one or more required kernel modules" << std::endl; + break; + case LTTNG_KERNEL_TRACER_STATUS_ERR_MODULES_SIGNATURE: + std::cerr + << "\tKernel module signature error prevented loading of one or more required kernel modules" + << std::endl; + break; + case LTTNG_KERNEL_TRACER_STATUS_ERR_NEED_ROOT: + std::cerr << "\tlttng-sessiond isn't running as root" << std::endl; + break; + case LTTNG_KERNEL_TRACER_STATUS_ERR_NOTIFIER: + std::cerr << "\tFailed to setup notifiers" << std::endl; + break; + case LTTNG_KERNEL_TRACER_STATUS_ERR_OPEN_PROC_LTTNG: + std::cerr << "\tlttng-sessiond failed to open /proc/lttng" << std::endl; + break; + case LTTNG_KERNEL_TRACER_STATUS_ERR_VERSION_MISMATCH: + std::cerr << "\tVersion mismatch between kernel tracer and kernel tracer ABI" + << std::endl; + break; + default: + std::cerr << lttng::format("\t\tUnknown kernel tracer status (%d)", + static_cast(kernel_tracer_status)) + << std::endl; + break; + } + + std::cerr << "\tConsult lttng-sessiond logs for more information" << std::endl; + } }