2 * Copyright (C) 2011 EfficiOS Inc.
4 * SPDX-License-Identifier: GPL-2.0-only
11 #include <common/argpar/argpar.h>
12 #include <common/container-wrapper.hpp>
13 #include <common/dynamic-array.hpp>
14 #include <common/make-unique-wrapper.hpp>
16 #include <lttng/lttng.h>
22 extern char *opt_relayd_path;
23 extern int opt_no_sessiond;
24 extern char *opt_sessiond_path;
25 extern pid_t sessiond_pid;
39 explicit session_spec(type spec_type, const char *name_or_pattern = nullptr) noexcept :
40 type_(spec_type), value(name_or_pattern)
44 /* Disambiguate type enum from the member for buggy g++ versions. */
50 * We don't use a std::vector here because it would make a copy of the C array.
53 template <typename ContainerType, typename DereferenceReturnType>
54 class _iterator : public std::iterator<std::random_access_iterator_tag, std::size_t> {
56 explicit _iterator(ContainerType& list, std::size_t k) : _list(list), _index(k)
60 _iterator& operator++() noexcept
66 _iterator& operator--() noexcept
72 _iterator& operator++(int) noexcept
78 _iterator& operator--(int) noexcept
84 bool operator==(_iterator other) const noexcept
86 return _index == other._index;
89 bool operator!=(_iterator other) const noexcept
91 return !(*this == other);
94 DereferenceReturnType& operator*() const noexcept
100 ContainerType& _list;
104 using iterator = _iterator<session_list, lttng_session>;
105 using const_iterator = _iterator<const session_list, const lttng_session>;
108 session_list() : _sessions_count(0), _sessions(nullptr)
112 session_list(session_list&& original, std::size_t new_count)
114 _sessions_count = new_count;
115 _sessions = std::move(original._sessions);
118 session_list(struct lttng_session *raw_sessions, std::size_t raw_sessions_count)
120 _sessions_count = raw_sessions_count;
121 _sessions.reset(raw_sessions);
124 iterator begin() noexcept
126 return iterator(*this, 0);
129 iterator end() noexcept
131 return iterator(*this, _sessions_count);
134 const_iterator begin() const noexcept
136 return const_iterator(*this, 0);
139 const_iterator end() const noexcept
141 return const_iterator(*this, _sessions_count);
144 std::size_t size() const noexcept
146 return _sessions_count;
149 void resize(std::size_t new_size) noexcept
151 _sessions_count = new_size;
154 lttng_session& operator[](std::size_t index)
156 LTTNG_ASSERT(index < _sessions_count);
157 return _sessions.get()[index];
160 const lttng_session& operator[](std::size_t index) const
162 LTTNG_ASSERT(index < _sessions_count);
163 return _sessions.get()[index];
167 std::size_t _sessions_count;
168 std::unique_ptr<lttng_session,
169 lttng::memory::create_deleter_class<lttng_session, lttng::free>::deleter>
173 lttng::cli::session_list list_sessions(const struct session_spec& spec);
174 } /* namespace cli */
175 } /* namespace lttng */
177 char *get_session_name(void);
178 char *get_session_name_quiet(void);
179 void list_commands(struct cmd_struct *commands, FILE *ofp);
180 void list_cmd_options(FILE *ofp, struct poptOption *options);
181 void list_cmd_options_argpar(FILE *ofp, const struct argpar_opt_descr *options);
184 * Return the minimum order for which x <= (1UL << order).
185 * Return -1 if x is 0.
187 int get_count_order_u32(uint32_t x);
190 * Return the minimum order for which x <= (1UL << order).
191 * Return -1 if x is 0.
193 int get_count_order_u64(uint64_t x);
196 * Return the minimum order for which x <= (1UL << order).
197 * Return -1 if x is 0.
199 int get_count_order_ulong(unsigned long x);
201 const char *get_event_type_str(enum lttng_event_type event_type);
203 int print_missing_or_multiple_domains(unsigned int domain_count, bool include_agent_domains);
205 int spawn_relayd(const char *pathname, int port);
206 int check_relayd(void);
207 void print_session_stats(const char *session_name);
208 int get_session_stats_str(const char *session_name, char **str);
209 int show_cmd_help(const char *cmd_name, const char *help_msg);
211 int print_trace_archive_location(const struct lttng_trace_archive_location *location,
212 const char *session_name);
214 int validate_exclusion_list(const char *event_name,
215 const struct lttng_dynamic_pointer_array *exclusions);
217 #endif /* _LTTNG_UTILS_H */