1 #define _GNU_SOURCE /* See feature_test_macros(7) */
9 #define event_list "lttng_statedump_start,lttng_statedump_end," \
10 "lttng_statedump_process_state,lttng_statedump_file_descriptor," \
11 "lttng_statedump_vm_map,lttng_statedump_network_interface," \
12 "lttng_statedump_interrupt,sched_process_free," \
13 "sched_switch,sched_process_fork"
14 #define context_list "-t pid -t procname -t tid -t ppid "
17 int check_or_start_sessiond()
22 ret
= system("pgrep -u root lttng-sessiond >/dev/null");
27 fprintf(stderr
, "Trying to start lttng-sessiond with sudo\n");
28 ret
= system("sudo -l lttng-sessiond >/dev/null");
30 fprintf(stderr
, "[error] You are not root and not "
31 "allowed by sudo to start lttng-sessiond\n");
39 ret
= system("sudo lttng-sessiond -d");
41 ret
= system("lttng-sessiond -d");
44 fprintf(stderr
, "Error starting lttng-sessiond as root\n");
54 int check_or_start_relayd()
58 ret
= system("pgrep lttng-relayd >/dev/null");
62 ret
= system("lttng-relayd -d");
64 fprintf(stderr
, "Error starting lttng-relayd\n");
74 * Return 0 if in tracing group or root, 1 if sudo is needed (and working),
75 * a negative value on error.
78 int check_tracing_group()
86 ret
= system("groups|grep tracing >/dev/null");
91 ret
= system("sudo lttng --version >/dev/null");
93 fprintf(stderr
, "Error executing lttng with sudo, you need to "
94 "be root or in the \"tracing\" group to start "
107 int check_lttng_modules(int sudo
)
112 ret
= system("sudo lttng list -k | grep sched_switch >/dev/null");
114 ret
= system("lttng list -k | grep sched_switch >/dev/null");
117 fprintf(stderr
, "Error listing kernel events, "
118 "lttng-modules might not be installed\n");
127 int check_requirements(int *sudo
)
131 ret
= check_or_start_sessiond();
134 ret
= check_or_start_relayd();
137 ret
= check_tracing_group();
143 ret
= check_lttng_modules(*sudo
);
151 * Allocate a random string, must be freed by the caller.
154 char *random_session_name()
160 FILE *f
= fopen( "/dev/urandom", "r");
166 ret
= fread(&id
, 1, sizeof(uint64_t), f
);
167 if (ret
< sizeof(id
)) {
172 ret
= asprintf(&str
, "lttngtop-%" PRIu64
, id
);
174 fprintf(stderr
, "Error allocating session name");
190 int check_session_name(char *name
, int sudo
)
195 ret
= sprintf(cmd
, "%s lttng list | grep %s >/dev/null",
196 (sudo
) ? "sudo" : " ", name
);
198 fprintf(stderr
, "Allocating cmd\n");
204 fprintf(stderr
, "Error: session %s already exist, either we "
205 "are not random enough or something is "
206 "really wrong\n", name
);
216 int local_session(char *name
, int sudo
)
221 ret
= sprintf(cmd
, "%s lttng create %s >/dev/null",
222 (sudo
) ? "sudo" : " ", name
);
224 fprintf(stderr
, "Allocating cmd\n");
229 fprintf(stderr
, "Error: creating the session\n");
239 int enable_event(char *name
, int sudo
)
244 ret
= sprintf(cmd
, "%s lttng enable-event -s %s -k %s >/dev/null",
245 (sudo
) ? "sudo" : " ", name
, event_list
);
247 fprintf(stderr
, "Allocating cmd\n");
253 fprintf(stderr
, "Error: enabling events\n");
263 int add_contexts(char *name
, int sudo
)
268 ret
= sprintf(cmd
, "%s lttng add-context -s %s -k %s >/dev/null",
269 (sudo
) ? "sudo" : " ", name
, context_list
);
271 fprintf(stderr
, "allocating cmd\n");
277 fprintf(stderr
, "error: adding contexts\n");
287 int start(char *name
, int sudo
)
292 ret
= sprintf(cmd
, "%s lttng start %s >/dev/null",
293 (sudo
) ? "sudo" : " ", name
);
295 fprintf(stderr
, "allocating cmd\n");
301 fprintf(stderr
, "error: starting the session %s\n", name
);
306 ret
= sprintf(cmd
, "%s lttng list|grep %s|cut -d'(' -f2|cut -d ')' -f1",
307 (sudo
) ? "sudo" : " ", name
);
309 fprintf(stderr
, "allocating cmd\n");
312 fprintf(stderr
, "Local session started in ");
315 fprintf(stderr
, "error: listing the sessions\n");
325 int destroy(char *name
, int sudo
)
330 ret
= sprintf(cmd
, "%s lttng destroy %s >/dev/null",
331 (sudo
) ? "sudo" : " ", name
);
333 fprintf(stderr
, "allocating cmd\n");
339 fprintf(stderr
, "error: destroying the session %s\n", name
);
348 int create_local_session()
354 ret
= check_requirements(&sudo
);
356 name
= random_session_name();
362 ret
= check_session_name(name
, sudo
);
367 ret
= local_session(name
, sudo
);
372 ret
= enable_event(name
, sudo
);
377 ret
= add_contexts(name
, sudo
);
382 ret
= start(name
, sudo
);
393 int destroy_local_session(char *name
, int sudo
)
395 return destroy(name
, sudo
);
399 int create_live_local_session();
400 int destroy_live_local_session();
This page took 0.081916 seconds and 5 git commands to generate.