X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fjul.h;h=1bcd5ef795edb190af64aa635ce7c0b12177cdc9;hp=1f7f6cdcd8e0a176e31095526882c20f51fc528d;hb=b2064f542c84041bf0b991d7d83f9e85db8adc19;hpb=0475c50c4d3d2cea973fe4d1f17875d231dea96c diff --git a/src/bin/lttng-sessiond/jul.h b/src/bin/lttng-sessiond/jul.h index 1f7f6cdcd..1bcd5ef79 100644 --- a/src/bin/lttng-sessiond/jul.h +++ b/src/bin/lttng-sessiond/jul.h @@ -15,12 +15,49 @@ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef _JUL_H -#define _JUL_H +#ifndef LTTNG_SESSIOND_JUL_H +#define LTTNG_SESSIOND_JUL_H + +#define _GNU_SOURCE +#include #include #include +/* + * Hash table that contains the JUL app created upon registration indexed by + * socket. + */ +struct lttng_ht *jul_apps_ht_by_sock; + +/* + * Registration message payload from a JUL application. The PID is used to find + * back the corresponding UST app object so both socket can be linked. + */ +struct jul_register_msg { + uint32_t pid; +}; + +/* + * JUL application object created after a successful registration. This + * object is linked to its associated UST app by their PID through hash + * table lookups. + */ +struct jul_app { + /* + * PID sent during registration of a JUL application. + */ + pid_t pid; + + /* + * JUL TCP socket that was created upon registration. + */ + struct lttcomm_sock *sock; + + /* Initialized with the JUL sock value. */ + struct lttng_ht_node_ulong node; +}; + /* * Java Util Logging event representation. */ @@ -30,6 +67,8 @@ struct jul_event { * the JUL API. */ char name[LTTNG_SYMBOL_NAME_LEN]; + enum lttng_loglevel_jul loglevel; + enum lttng_loglevel_type loglevel_type; /* * Tells if the event is enabled or not on the JUL Agent. @@ -47,18 +86,44 @@ struct jul_event { * for it. */ struct jul_domain { + /* + * This indicates if that domain is being used meaning if at least one + * event has been at some point in time added to it. This is used so when + * listing domains for a session, we can tell or not if the JUL is actually + * enabled. + */ + unsigned int being_used:1; /* * Contains JUL event indexed by name. */ struct lttng_ht *events; }; +/* Initialize JUL domain subsystem. */ +int jul_init(void); + +/* Initialize an already allocated JUL domain. */ int jul_init_domain(struct jul_domain *dom); +void jul_destroy_domain(struct jul_domain *dom); + +/* JUL event API. */ struct jul_event *jul_create_event(const char *name); void jul_add_event(struct jul_event *event, struct jul_domain *dom); struct jul_event *jul_find_by_name(const char *name, struct jul_domain *dom); void jul_delete_event(struct jul_event *event, struct jul_domain *dom); void jul_destroy_event(struct jul_event *event); -void jul_destroy_domain(struct jul_domain *dom); -#endif /* _JUL_H */ +/* JUL app API. */ +struct jul_app *jul_create_app(pid_t pid, struct lttcomm_sock *sock); +void jul_add_app(struct jul_app *app); +void jul_delete_app(struct jul_app *app); +struct jul_app *jul_find_app_by_sock(int sock); +void jul_destroy_app(struct jul_app *app); + +/* JUL action API */ +int jul_enable_event(struct jul_event *event); +int jul_disable_event(struct jul_event *event); +void jul_update(struct jul_domain *domain, int sock); +int jul_list_events(struct lttng_event **events); + +#endif /* LTTNG_SESSIOND_JUL_H */