vscode: Add configurations to run the executables under the debugger
[lttng-tools.git] / src / bin / lttng / utils.hpp
CommitLineData
f3ed775e 1/*
21cf9b6b 2 * Copyright (C) 2011 EfficiOS Inc.
f3ed775e 3 *
ab5be9fa 4 * SPDX-License-Identifier: GPL-2.0-only
f3ed775e 5 *
f3ed775e
DG
6 */
7
8#ifndef _LTTNG_UTILS_H
9#define _LTTNG_UTILS_H
10
e358ddd5 11#include <common/argpar/argpar.h>
6e11909e 12#include <common/container-wrapper.hpp>
c9e313bc 13#include <common/dynamic-array.hpp>
ca938aa5 14#include <common/make-unique-wrapper.hpp>
679b4943 15
b9dfb167 16#include <lttng/lttng.h>
d0eca33e 17#include <lttng/session-internal.hpp>
b9dfb167 18
ca938aa5
OD
19#include <iterator>
20#include <memory>
28f23191
JG
21#include <popt.h>
22
8960e9cd 23extern char *opt_relayd_path;
92360082 24extern int opt_no_sessiond;
28f23191 25extern char *opt_sessiond_path;
92360082 26extern pid_t sessiond_pid;
8960e9cd 27
3c9bd23c
SM
28struct cmd_struct;
29
6e11909e
JG
30namespace lttng {
31namespace cli {
32
ca938aa5 33struct session_spec {
42a11b8f 34 enum class type {
ca938aa5
OD
35 NAME,
36 GLOB_PATTERN,
37 ALL,
38 };
39
42a11b8f
JG
40 explicit session_spec(type spec_type, const char *name_or_pattern = nullptr) noexcept :
41 type_(spec_type), value(name_or_pattern)
42 {
43 }
44
45 /* Disambiguate type enum from the member for buggy g++ versions. */
46 type type_;
ca938aa5
OD
47 const char *value;
48};
49
f74e820c 50class session_list;
9497e2f7 51
f74e820c
JG
52namespace details {
53class session_storage {
ca938aa5 54public:
f74e820c
JG
55 session_storage(lttng_session *raw_sessions, std::size_t sessions_count) :
56 _array(raw_sessions), _count(sessions_count)
ca938aa5
OD
57 {
58 }
59
0f4aa1a8 60 session_storage(session_storage&& original) noexcept :
f74e820c 61 _array(std::move(original._array)), _count(original._count)
ca938aa5 62 {
ca938aa5
OD
63 }
64
f74e820c
JG
65 session_storage(session_storage&& original, std::size_t new_count) :
66 _array(std::move(original._array)), _count(new_count)
ca938aa5 67 {
ca938aa5
OD
68 }
69
77c8b540
JG
70 session_storage(session_storage&) = delete;
71 session_storage& operator=(const session_storage& other) = delete;
72 session_storage& operator=(session_storage&& other) = delete;
73 ~session_storage() = default;
74
d0eca33e 75 lttng_session_uptr _array = nullptr;
f74e820c
JG
76 std::size_t _count = 0;
77};
ca938aa5 78
f74e820c
JG
79class session_list_operations {
80public:
81 static lttng_session& get(const lttng::cli::details::session_storage& storage,
82 std::size_t index) noexcept
ca938aa5 83 {
a1949b5a 84 return storage._array[index];
ca938aa5
OD
85 }
86
f74e820c 87 static std::size_t size(const lttng::cli::details::session_storage& storage)
9497e2f7 88 {
f74e820c 89 return storage._count;
9497e2f7 90 }
f74e820c
JG
91};
92} /* namespace details */
93
94/*
95 * We don't use a std::vector here because it would make a copy of the C array.
96 */
97class session_list
98 : public lttng::utils::random_access_container_wrapper<details::session_storage,
99 lttng_session&,
100 details::session_list_operations> {
101public:
102 friend details::session_list_operations;
9497e2f7 103
f74e820c
JG
104 session_list() :
105 lttng::utils::random_access_container_wrapper<details::session_storage,
106 lttng_session&,
107 details::session_list_operations>(
108 { nullptr, 0 })
9497e2f7 109 {
9497e2f7
JG
110 }
111
0f4aa1a8 112 session_list(session_list&& original) noexcept :
f74e820c
JG
113 lttng::utils::random_access_container_wrapper<details::session_storage,
114 lttng_session&,
115 details::session_list_operations>(
56e5528d 116 std::move(original._container))
ca938aa5 117 {
ca938aa5
OD
118 }
119
f74e820c
JG
120 session_list(session_list&& original, std::size_t new_count) :
121 lttng::utils::random_access_container_wrapper<details::session_storage,
122 lttng_session&,
123 details::session_list_operations>(
124 { std::move(original._container), new_count })
ca938aa5 125 {
ca938aa5
OD
126 }
127
f74e820c
JG
128 session_list(lttng_session *raw_sessions, std::size_t raw_sessions_count) :
129 lttng::utils::random_access_container_wrapper<details::session_storage,
130 lttng_session&,
131 details::session_list_operations>(
132 { raw_sessions, raw_sessions_count })
ca938aa5 133 {
ca938aa5
OD
134 }
135
77c8b540
JG
136 session_list(session_list&) = delete;
137 session_list& operator=(const session_list& other) = delete;
138 session_list& operator=(session_list&& other) = delete;
139 ~session_list() = default;
140
f74e820c 141 void resize(std::size_t new_size) noexcept
ca938aa5 142 {
f74e820c 143 _container._count = new_size;
ca938aa5 144 }
ca938aa5
OD
145};
146
6e11909e
JG
147lttng::cli::session_list list_sessions(const struct session_spec& spec);
148} /* namespace cli */
149} /* namespace lttng */
150
0f4aa1a8
JG
151char *get_session_name();
152char *get_session_name_quiet();
3c9bd23c 153void list_commands(struct cmd_struct *commands, FILE *ofp);
679b4943 154void list_cmd_options(FILE *ofp, struct poptOption *options);
b083f028 155void list_cmd_options_argpar(FILE *ofp, const struct argpar_opt_descr *options);
f3ed775e 156
8ce58bad
MD
157/*
158 * Return the minimum order for which x <= (1UL << order).
159 * Return -1 if x is 0.
160 */
161int get_count_order_u32(uint32_t x);
162
163/*
164 * Return the minimum order for which x <= (1UL << order).
165 * Return -1 if x is 0.
166 */
167int get_count_order_u64(uint64_t x);
168
169/*
170 * Return the minimum order for which x <= (1UL << order).
171 * Return -1 if x is 0.
172 */
173int get_count_order_ulong(unsigned long x);
174
4fd2697f 175const char *get_event_type_str(enum lttng_event_type event_type);
b9dfb167 176
28f23191 177int print_missing_or_multiple_domains(unsigned int domain_count, bool include_agent_domains);
b9dfb167 178
8960e9cd 179int spawn_relayd(const char *pathname, int port);
0f4aa1a8 180int check_relayd();
20fb9e02 181void print_session_stats(const char *session_name);
58f237ca 182int get_session_stats_str(const char *session_name, char **str);
4fc83d94 183int show_cmd_help(const char *cmd_name, const char *help_msg);
8960e9cd 184
28f23191
JG
185int print_trace_archive_location(const struct lttng_trace_archive_location *location,
186 const char *session_name);
bbbfd849 187
e358ddd5 188int validate_exclusion_list(const char *event_name,
28f23191 189 const struct lttng_dynamic_pointer_array *exclusions);
e358ddd5 190
4d4c8b8e
JG
191/*
192 * Ask the sessiond for the more details on the status of the kernel tracer and
193 * print it to stderr.
194 */
195void print_kernel_tracer_status_error();
196
f3ed775e 197#endif /* _LTTNG_UTILS_H */
This page took 0.087216 seconds and 4 git commands to generate.