Commit | Line | Data |
---|---|---|
0475c50c DG |
1 | /* |
2 | * Copyright (C) 2013 - David Goulet <dgoulet@efficios.com> | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or modify it | |
5 | * under the terms of the GNU General Public License, version 2 only, as | |
6 | * published by the Free Software Foundation. | |
7 | * | |
8 | * This program is distributed in the hope that it will be useful, but WITHOUT | |
9 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
10 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
11 | * more details. | |
12 | * | |
13 | * You should have received a copy of the GNU General Public License along with | |
14 | * this program; if not, write to the Free Software Foundation, Inc., 51 | |
15 | * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | |
16 | */ | |
17 | ||
96090c92 MD |
18 | #ifndef LTTNG_SESSIOND_JUL_H |
19 | #define LTTNG_SESSIOND_JUL_H | |
0475c50c | 20 | |
f20baf8e DG |
21 | #define _GNU_SOURCE |
22 | #include <inttypes.h> | |
23 | ||
0475c50c DG |
24 | #include <common/hashtable/hashtable.h> |
25 | #include <lttng/lttng.h> | |
26 | ||
f20baf8e DG |
27 | /* |
28 | * Hash table that contains the JUL app created upon registration indexed by | |
29 | * socket. | |
30 | */ | |
31 | struct lttng_ht *jul_apps_ht_by_sock; | |
32 | ||
4a4ab2c3 DG |
33 | struct jul_ht_key { |
34 | const char *name; | |
35 | enum lttng_loglevel_jul loglevel; | |
36 | }; | |
37 | ||
f20baf8e DG |
38 | /* |
39 | * Registration message payload from a JUL application. The PID is used to find | |
40 | * back the corresponding UST app object so both socket can be linked. | |
41 | */ | |
42 | struct jul_register_msg { | |
43 | uint32_t pid; | |
44 | }; | |
45 | ||
46 | /* | |
6657149e MD |
47 | * JUL application object created after a successful registration. This |
48 | * object is linked to its associated UST app by their PID through hash | |
49 | * table lookups. | |
f20baf8e DG |
50 | */ |
51 | struct jul_app { | |
52 | /* | |
53 | * PID sent during registration of a JUL application. | |
54 | */ | |
55 | pid_t pid; | |
56 | ||
57 | /* | |
58 | * JUL TCP socket that was created upon registration. | |
59 | */ | |
60 | struct lttcomm_sock *sock; | |
61 | ||
f20baf8e DG |
62 | /* Initialized with the JUL sock value. */ |
63 | struct lttng_ht_node_ulong node; | |
64 | }; | |
65 | ||
0475c50c DG |
66 | /* |
67 | * Java Util Logging event representation. | |
68 | */ | |
69 | struct jul_event { | |
70 | /* | |
71 | * Name of the event which is directly mapped to a Logger object name in | |
72 | * the JUL API. | |
73 | */ | |
74 | char name[LTTNG_SYMBOL_NAME_LEN]; | |
b2064f54 DG |
75 | enum lttng_loglevel_jul loglevel; |
76 | enum lttng_loglevel_type loglevel_type; | |
0475c50c DG |
77 | |
78 | /* | |
79 | * Tells if the event is enabled or not on the JUL Agent. | |
80 | */ | |
81 | unsigned int enabled:1; | |
82 | ||
83 | /* | |
84 | * Hash table nodes of the JUL domain. Indexed by name string. | |
85 | */ | |
86 | struct lttng_ht_node_str node; | |
7923a38c DG |
87 | |
88 | /* Bytecode filter associated with the event . NULL if none. */ | |
89 | struct lttng_filter_bytecode *filter; | |
0475c50c DG |
90 | }; |
91 | ||
92 | /* | |
93 | * Top level data structure in a UST session containing JUL event name created | |
94 | * for it. | |
95 | */ | |
96 | struct jul_domain { | |
3c6a091f DG |
97 | /* |
98 | * This indicates if that domain is being used meaning if at least one | |
99 | * event has been at some point in time added to it. This is used so when | |
100 | * listing domains for a session, we can tell or not if the JUL is actually | |
101 | * enabled. | |
102 | */ | |
103 | unsigned int being_used:1; | |
0475c50c DG |
104 | /* |
105 | * Contains JUL event indexed by name. | |
106 | */ | |
107 | struct lttng_ht *events; | |
108 | }; | |
109 | ||
f20baf8e DG |
110 | /* Initialize JUL domain subsystem. */ |
111 | int jul_init(void); | |
112 | ||
113 | /* Initialize an already allocated JUL domain. */ | |
0475c50c | 114 | int jul_init_domain(struct jul_domain *dom); |
f20baf8e DG |
115 | void jul_destroy_domain(struct jul_domain *dom); |
116 | ||
117 | /* JUL event API. */ | |
7923a38c DG |
118 | struct jul_event *jul_create_event(const char *name, |
119 | struct lttng_filter_bytecode *filter); | |
0475c50c | 120 | void jul_add_event(struct jul_event *event, struct jul_domain *dom); |
4a4ab2c3 DG |
121 | struct jul_event *jul_find_event(const char *name, |
122 | enum lttng_loglevel_jul loglevel, struct jul_domain *dom); | |
123 | struct jul_event *jul_find_event_by_name(const char *name, | |
124 | struct jul_domain *dom); | |
0475c50c DG |
125 | void jul_delete_event(struct jul_event *event, struct jul_domain *dom); |
126 | void jul_destroy_event(struct jul_event *event); | |
f20baf8e DG |
127 | |
128 | /* JUL app API. */ | |
129 | struct jul_app *jul_create_app(pid_t pid, struct lttcomm_sock *sock); | |
130 | void jul_add_app(struct jul_app *app); | |
131 | void jul_delete_app(struct jul_app *app); | |
132 | struct jul_app *jul_find_app_by_sock(int sock); | |
f20baf8e | 133 | void jul_destroy_app(struct jul_app *app); |
1b500e7a | 134 | int jul_send_registration_done(struct jul_app *app); |
f20baf8e DG |
135 | |
136 | /* JUL action API */ | |
137 | int jul_enable_event(struct jul_event *event); | |
138 | int jul_disable_event(struct jul_event *event); | |
139 | void jul_update(struct jul_domain *domain, int sock); | |
3c6a091f | 140 | int jul_list_events(struct lttng_event **events); |
0475c50c | 141 | |
96090c92 | 142 | #endif /* LTTNG_SESSIOND_JUL_H */ |