lttng: move session_list to the lttng::cli namespace
[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
DG
16#include <lttng/lttng.h>
17
ca938aa5
OD
18#include <iterator>
19#include <memory>
28f23191
JG
20#include <popt.h>
21
8960e9cd 22extern char *opt_relayd_path;
92360082 23extern int opt_no_sessiond;
28f23191 24extern char *opt_sessiond_path;
92360082 25extern pid_t sessiond_pid;
8960e9cd 26
3c9bd23c
SM
27struct cmd_struct;
28
6e11909e
JG
29namespace lttng {
30namespace cli {
31
ca938aa5 32struct session_spec {
42a11b8f 33 enum class type {
ca938aa5
OD
34 NAME,
35 GLOB_PATTERN,
36 ALL,
37 };
38
42a11b8f
JG
39 explicit session_spec(type spec_type, const char *name_or_pattern = nullptr) noexcept :
40 type_(spec_type), value(name_or_pattern)
41 {
42 }
43
44 /* Disambiguate type enum from the member for buggy g++ versions. */
45 type type_;
ca938aa5
OD
46 const char *value;
47};
48
49/*
50 * We don't use a std::vector here because it would make a copy of the C array.
51 */
52class session_list {
9497e2f7 53 template <typename ContainerType, typename DereferenceReturnType>
9caec246 54 class _iterator : public std::iterator<std::random_access_iterator_tag, std::size_t> {
ca938aa5 55 public:
9caec246 56 explicit _iterator(ContainerType& list, std::size_t k) : _list(list), _index(k)
ca938aa5
OD
57 {
58 }
59
767954d2 60 _iterator& operator++() noexcept
ca938aa5
OD
61 {
62 ++_index;
63 return *this;
64 }
65
767954d2 66 _iterator& operator--() noexcept
ca938aa5
OD
67 {
68 --_index;
69 return *this;
70 }
71
767954d2 72 _iterator& operator++(int) noexcept
ca938aa5
OD
73 {
74 _index++;
75 return *this;
76 }
77
767954d2 78 _iterator& operator--(int) noexcept
ca938aa5
OD
79 {
80 _index--;
81 return *this;
82 }
83
767954d2 84 bool operator==(_iterator other) const noexcept
ca938aa5
OD
85 {
86 return _index == other._index;
87 }
88
767954d2 89 bool operator!=(_iterator other) const noexcept
ca938aa5
OD
90 {
91 return !(*this == other);
92 }
93
9497e2f7 94 DereferenceReturnType& operator*() const noexcept
ca938aa5
OD
95 {
96 return _list[_index];
97 }
98
99 private:
9497e2f7 100 ContainerType& _list;
ca938aa5
OD
101 std::size_t _index;
102 };
103
767954d2
JG
104 using iterator = _iterator<session_list, lttng_session>;
105 using const_iterator = _iterator<const session_list, const lttng_session>;
9497e2f7 106
ca938aa5
OD
107public:
108 session_list() : _sessions_count(0), _sessions(nullptr)
109 {
110 }
111
112 session_list(session_list&& original, std::size_t new_count)
113 {
114 _sessions_count = new_count;
115 _sessions = std::move(original._sessions);
116 }
117
118 session_list(struct lttng_session *raw_sessions, std::size_t raw_sessions_count)
119 {
120 _sessions_count = raw_sessions_count;
121 _sessions.reset(raw_sessions);
122 }
123
124 iterator begin() noexcept
125 {
126 return iterator(*this, 0);
127 }
128
129 iterator end() noexcept
130 {
131 return iterator(*this, _sessions_count);
132 }
133
9497e2f7
JG
134 const_iterator begin() const noexcept
135 {
136 return const_iterator(*this, 0);
137 }
138
139 const_iterator end() const noexcept
140 {
141 return const_iterator(*this, _sessions_count);
142 }
143
ca938aa5
OD
144 std::size_t size() const noexcept
145 {
146 return _sessions_count;
147 }
148
149 void resize(std::size_t new_size) noexcept
150 {
151 _sessions_count = new_size;
152 }
153
154 lttng_session& operator[](std::size_t index)
155 {
156 LTTNG_ASSERT(index < _sessions_count);
157 return _sessions.get()[index];
158 }
159
160 const lttng_session& operator[](std::size_t index) const
161 {
162 LTTNG_ASSERT(index < _sessions_count);
163 return _sessions.get()[index];
164 }
165
166private:
167 std::size_t _sessions_count;
168 std::unique_ptr<lttng_session,
f053d40c 169 lttng::memory::create_deleter_class<lttng_session, lttng::free>::deleter>
ca938aa5
OD
170 _sessions;
171};
172
6e11909e
JG
173lttng::cli::session_list list_sessions(const struct session_spec& spec);
174} /* namespace cli */
175} /* namespace lttng */
176
f3ed775e 177char *get_session_name(void);
1dac0189 178char *get_session_name_quiet(void);
3c9bd23c 179void list_commands(struct cmd_struct *commands, FILE *ofp);
679b4943 180void list_cmd_options(FILE *ofp, struct poptOption *options);
b083f028 181void list_cmd_options_argpar(FILE *ofp, const struct argpar_opt_descr *options);
f3ed775e 182
8ce58bad
MD
183/*
184 * Return the minimum order for which x <= (1UL << order).
185 * Return -1 if x is 0.
186 */
187int get_count_order_u32(uint32_t x);
188
189/*
190 * Return the minimum order for which x <= (1UL << order).
191 * Return -1 if x is 0.
192 */
193int get_count_order_u64(uint64_t x);
194
195/*
196 * Return the minimum order for which x <= (1UL << order).
197 * Return -1 if x is 0.
198 */
199int get_count_order_ulong(unsigned long x);
200
4fd2697f 201const char *get_event_type_str(enum lttng_event_type event_type);
b9dfb167 202
28f23191 203int print_missing_or_multiple_domains(unsigned int domain_count, bool include_agent_domains);
b9dfb167 204
8960e9cd
DG
205int spawn_relayd(const char *pathname, int port);
206int check_relayd(void);
20fb9e02 207void print_session_stats(const char *session_name);
58f237ca 208int get_session_stats_str(const char *session_name, char **str);
4fc83d94 209int show_cmd_help(const char *cmd_name, const char *help_msg);
8960e9cd 210
28f23191
JG
211int print_trace_archive_location(const struct lttng_trace_archive_location *location,
212 const char *session_name);
bbbfd849 213
e358ddd5 214int validate_exclusion_list(const char *event_name,
28f23191 215 const struct lttng_dynamic_pointer_array *exclusions);
e358ddd5 216
f3ed775e 217#endif /* _LTTNG_UTILS_H */
This page took 0.089987 seconds and 4 git commands to generate.