lib: strictly type function return status enumerations
[babeltrace.git] / src / plugins / text / details / details.h
CommitLineData
55478183
PP
1#ifndef BABELTRACE_PLUGINS_TEXT_DETAILS_DETAILS_H
2#define BABELTRACE_PLUGINS_TEXT_DETAILS_DETAILS_H
3
4/*
5 * Copyright 2019 Philippe Proulx <pproulx@efficios.com>
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in
15 * all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 * SOFTWARE.
24 */
25
26#include <glib.h>
27#include <babeltrace2/babeltrace.h>
28#include <stdbool.h>
29
30/*
31 * This structure contains a hash table which maps trace IR stream class
32 * and event class addresses to whether or not they have been printed
33 * already during the lifetime of the component.
34 *
35 * It is safe to keep the addresses (weak references) in this hash table
36 * as long as the trace class to which the structure is associated
37 * exists because it's not possible to remove stream classes from a
38 * trace class and event classes from a stream class.
39 */
40struct details_trace_class_meta {
41 /*
42 * Stream class or event class address (`const void *`) ->
43 * `guint` (as a pointer)
44 *
45 * This acts as a set in fact; we don't care about the values,
46 * but we put 1 so that we can use g_hash_table_lookup() to know
47 * whether or not the hash table contains a given key
48 * (g_hash_table_lookup() returns `NULL` when not found, but
49 * also when the value is `NULL`).
50 */
51 GHashTable *objects;
52
53 /*
54 * Trace class destruction listener ID (`UINT64_C(-1)` if
55 * there's no listener ID.
56 */
57 uint64_t tc_destruction_listener_id;
58};
59
60/*
61 * An entry of the `traces` hash table of a
62 * `struct details_comp` structure.
63 */
64struct details_trace {
65 /* Unique ID of this trace within the lifetime of the component */
66 uint64_t unique_id;
67
68 /*
69 * Trace destruction listener ID (`UINT64_C(-1)` if there's no
70 * listener ID.
71 */
72 uint64_t trace_destruction_listener_id;
73};
74
75/* A `sink.text.details` component */
76struct details_comp {
6c868a3a 77 bt_logging_level log_level;
d400b9e6 78 bt_self_component *self_comp;
6c868a3a 79
55478183
PP
80 /* Component's configuration */
81 struct {
82 /* Write metadata objects */
83 bool with_meta;
84
85 /*
86 * Compact mode: each line is a single message, and
87 * there are no extended message properties and
88 * event/packet fields. `with_meta` can still be true in
89 * compact mode, printing the full metadata objects, but
90 * making the messages compact.
91 */
92 bool compact;
93
94 /* Colorize output */
95 bool with_color;
96
97 /* Write message's time */
98 bool with_time;
99
100 /* Write trace class's name */
101 bool with_trace_class_name;
102
103 /* Write trace's name */
104 bool with_trace_name;
105
106 /* Write stream class's name */
107 bool with_stream_class_name;
108
109 /* Write stream's name */
110 bool with_stream_name;
111
112 /* Write UUID */
113 bool with_uuid;
114 } cfg;
115
116 /*
117 * `const bt_trace_class *` (weak) ->
118 * `struct details_trace_class_meta *` (owned by this)
119 *
120 * The key (trace class object) is weak. An entry is added, if
121 * `cfg.with_meta` above is true, when first encountering a
122 * trace class. An entry is removed when a trace class is
123 * destroyed or when the component is finalized.
124 */
125 GHashTable *meta;
126
127 /*
128 * `const bt_trace *` (weak) ->
129 * `struct details_trace *` (owner by this)
130 *
131 * This hash table associates a trace object to a unique ID
132 * within the lifetime of this component. This is used to easily
133 * follow the messages of a given trace/stream when reading the
134 * text output of the component. We cannot use the actual stream
135 * ID properties for this because many streams can share the
136 * same ID (with different stream classes or different traces).
137 *
138 * When adding an entry, the unique ID to use is
139 * `next_unique_trace_id`.
140 *
141 * An entry is added when first encountering a trace. An entry
142 * is removed when a trace is destroyed or when the component is
143 * finalized.
144 */
145 GHashTable *traces;
146 uint32_t next_unique_trace_id;
147
148 /* Upstream message iterator */
149 bt_self_component_port_input_message_iterator *msg_iter;
150
151 /*
152 * True if this component printed something. This is used to
153 * prepend a newline to the next message string instead of
154 * appending it so that the last printed message is not followed
155 * with an empty line.
156 */
157 bool printed_something;
158
159 /* Current message's output buffer */
160 GString *str;
161};
162
163BT_HIDDEN
d24d5663 164bt_component_class_init_method_status details_init(
55478183
PP
165 bt_self_component_sink *component,
166 const bt_value *params, void *init_method_data);
167
168BT_HIDDEN
169void details_finalize(bt_self_component_sink *component);
170
171BT_HIDDEN
d24d5663 172bt_component_class_sink_graph_is_configured_method_status details_graph_is_configured(
55478183
PP
173 bt_self_component_sink *comp);
174
175BT_HIDDEN
d24d5663 176bt_component_class_sink_consume_method_status details_consume(bt_self_component_sink *component);
55478183
PP
177
178BT_HIDDEN
179void details_destroy_details_trace_class_meta(
180 struct details_trace_class_meta *details_trace_class_meta);
181
182BT_HIDDEN
183struct details_trace_class_meta *details_create_details_trace_class_meta(void);
184
185#endif /* BABELTRACE_PLUGINS_TEXT_DETAILS_DETAILS_H */
This page took 0.030989 seconds and 4 git commands to generate.