Clean-up: apply suggested clang-tidy fixes
[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
d0eca33e 70 lttng_session_uptr _array = nullptr;
f74e820c
JG
71 std::size_t _count = 0;
72};
ca938aa5 73
f74e820c
JG
74class session_list_operations {
75public:
76 static lttng_session& get(const lttng::cli::details::session_storage& storage,
77 std::size_t index) noexcept
ca938aa5 78 {
a1949b5a 79 return storage._array[index];
ca938aa5
OD
80 }
81
f74e820c 82 static std::size_t size(const lttng::cli::details::session_storage& storage)
9497e2f7 83 {
f74e820c 84 return storage._count;
9497e2f7 85 }
f74e820c
JG
86};
87} /* namespace details */
88
89/*
90 * We don't use a std::vector here because it would make a copy of the C array.
91 */
92class session_list
93 : public lttng::utils::random_access_container_wrapper<details::session_storage,
94 lttng_session&,
95 details::session_list_operations> {
96public:
97 friend details::session_list_operations;
9497e2f7 98
f74e820c
JG
99 session_list() :
100 lttng::utils::random_access_container_wrapper<details::session_storage,
101 lttng_session&,
102 details::session_list_operations>(
103 { nullptr, 0 })
9497e2f7 104 {
9497e2f7
JG
105 }
106
0f4aa1a8 107 session_list(session_list&& original) noexcept :
f74e820c
JG
108 lttng::utils::random_access_container_wrapper<details::session_storage,
109 lttng_session&,
110 details::session_list_operations>(
56e5528d 111 std::move(original._container))
ca938aa5 112 {
ca938aa5
OD
113 }
114
f74e820c
JG
115 session_list(session_list&& original, std::size_t new_count) :
116 lttng::utils::random_access_container_wrapper<details::session_storage,
117 lttng_session&,
118 details::session_list_operations>(
119 { std::move(original._container), new_count })
ca938aa5 120 {
ca938aa5
OD
121 }
122
f74e820c
JG
123 session_list(lttng_session *raw_sessions, std::size_t raw_sessions_count) :
124 lttng::utils::random_access_container_wrapper<details::session_storage,
125 lttng_session&,
126 details::session_list_operations>(
127 { raw_sessions, raw_sessions_count })
ca938aa5 128 {
ca938aa5
OD
129 }
130
f74e820c 131 void resize(std::size_t new_size) noexcept
ca938aa5 132 {
f74e820c 133 _container._count = new_size;
ca938aa5 134 }
ca938aa5
OD
135};
136
6e11909e
JG
137lttng::cli::session_list list_sessions(const struct session_spec& spec);
138} /* namespace cli */
139} /* namespace lttng */
140
0f4aa1a8
JG
141char *get_session_name();
142char *get_session_name_quiet();
3c9bd23c 143void list_commands(struct cmd_struct *commands, FILE *ofp);
679b4943 144void list_cmd_options(FILE *ofp, struct poptOption *options);
b083f028 145void list_cmd_options_argpar(FILE *ofp, const struct argpar_opt_descr *options);
f3ed775e 146
8ce58bad
MD
147/*
148 * Return the minimum order for which x <= (1UL << order).
149 * Return -1 if x is 0.
150 */
151int get_count_order_u32(uint32_t x);
152
153/*
154 * Return the minimum order for which x <= (1UL << order).
155 * Return -1 if x is 0.
156 */
157int get_count_order_u64(uint64_t x);
158
159/*
160 * Return the minimum order for which x <= (1UL << order).
161 * Return -1 if x is 0.
162 */
163int get_count_order_ulong(unsigned long x);
164
4fd2697f 165const char *get_event_type_str(enum lttng_event_type event_type);
b9dfb167 166
28f23191 167int print_missing_or_multiple_domains(unsigned int domain_count, bool include_agent_domains);
b9dfb167 168
8960e9cd 169int spawn_relayd(const char *pathname, int port);
0f4aa1a8 170int check_relayd();
20fb9e02 171void print_session_stats(const char *session_name);
58f237ca 172int get_session_stats_str(const char *session_name, char **str);
4fc83d94 173int show_cmd_help(const char *cmd_name, const char *help_msg);
8960e9cd 174
28f23191
JG
175int print_trace_archive_location(const struct lttng_trace_archive_location *location,
176 const char *session_name);
bbbfd849 177
e358ddd5 178int validate_exclusion_list(const char *event_name,
28f23191 179 const struct lttng_dynamic_pointer_array *exclusions);
e358ddd5 180
4d4c8b8e
JG
181/*
182 * Ask the sessiond for the more details on the status of the kernel tracer and
183 * print it to stderr.
184 */
185void print_kernel_tracer_status_error();
186
f3ed775e 187#endif /* _LTTNG_UTILS_H */
This page took 0.089464 seconds and 4 git commands to generate.