1 #define _GNU_SOURCE /* See feature_test_macros(7) */
10 #define event_list "lttng_statedump_start,lttng_statedump_end," \
11 "lttng_statedump_process_state,lttng_statedump_file_descriptor," \
12 "lttng_statedump_vm_map,lttng_statedump_network_interface," \
13 "lttng_statedump_interrupt,sched_process_free," \
14 "sched_switch,sched_process_fork"
15 #define context_list "-t pid -t procname -t tid -t ppid "
18 int check_or_start_sessiond()
23 ret
= system("pgrep -u root lttng-sessiond >/dev/null");
28 fprintf(stderr
, "Trying to start lttng-sessiond with sudo\n");
29 ret
= system("sudo -l lttng-sessiond >/dev/null");
31 fprintf(stderr
, "[error] You are not root and not "
32 "allowed by sudo to start lttng-sessiond\n");
36 ret
= system("sudo -l lttng >/dev/null");
38 fprintf(stderr
, "[error] You are not root and not "
39 "allowed by sudo to use lttng\n");
47 ret
= system("sudo lttng-sessiond -d");
49 ret
= system("lttng-sessiond -d");
52 fprintf(stderr
, "Error starting lttng-sessiond as root\n");
62 int check_or_start_relayd()
66 ret
= system("pgrep lttng-relayd >/dev/null");
70 ret
= system("lttng-relayd -d");
72 fprintf(stderr
, "Error starting lttng-relayd\n");
82 * Return 0 if in tracing group or root, 1 if sudo is needed (and working),
83 * a negative value on error.
86 int check_tracing_group()
94 ret
= system("groups|grep tracing >/dev/null");
99 ret
= system("sudo lttng --version >/dev/null");
101 fprintf(stderr
, "Error executing lttng with sudo, you need to "
102 "be root or in the \"tracing\" group to start "
115 int check_lttng_modules(int sudo
)
120 ret
= system("sudo lttng list -k | grep sched_switch >/dev/null");
122 ret
= system("lttng list -k | grep sched_switch >/dev/null");
125 fprintf(stderr
, "Error listing kernel events, "
126 "lttng-modules might not be installed\n");
135 int check_requirements(int *sudo
)
139 ret
= check_or_start_sessiond();
142 ret
= check_or_start_relayd();
145 ret
= check_tracing_group();
151 ret
= check_lttng_modules(*sudo
);
159 * Allocate a random string, must be freed by the caller.
162 char *random_session_name()
168 FILE *f
= fopen( "/dev/urandom", "r");
174 ret
= fread(&id
, 1, sizeof(uint64_t), f
);
175 if (ret
< sizeof(id
)) {
180 ret
= asprintf(&str
, "lttngtop-%" PRIu64
, id
);
182 fprintf(stderr
, "Error allocating session name");
198 int check_session_name(char *name
, int sudo
)
203 ret
= sprintf(cmd
, "%s lttng list | grep %s >/dev/null",
204 (sudo
) ? "sudo" : " ", name
);
206 fprintf(stderr
, "Allocating cmd\n");
212 fprintf(stderr
, "Error: session %s already exist, either we "
213 "are not random enough or something is "
214 "really wrong\n", name
);
224 int local_session(char *name
, int sudo
)
229 ret
= sprintf(cmd
, "%s lttng create %s >/dev/null",
230 (sudo
) ? "sudo" : " ", name
);
232 fprintf(stderr
, "Allocating cmd\n");
237 fprintf(stderr
, "Error: creating the session\n");
247 int live_local_session(char *name
, int sudo
)
252 ret
= sprintf(cmd
, "%s lttng create %s --live 1000000 -U net://localhost >/dev/null",
253 (sudo
) ? "sudo" : " ", name
);
255 fprintf(stderr
, "Allocating cmd\n");
260 fprintf(stderr
, "Error: creating the session\n");
270 int enable_events(char *name
, int sudo
)
275 ret
= sprintf(cmd
, "%s lttng enable-event -s %s -k %s >/dev/null;"
276 "lttng enable-event -k --syscall -a -s %s >/dev/null",
277 (sudo
) ? "sudo" : " ", name
, event_list
, name
);
279 fprintf(stderr
, "Allocating cmd\n");
285 fprintf(stderr
, "Error: enabling events\n");
295 int add_contexts(char *name
, int sudo
)
300 ret
= sprintf(cmd
, "%s lttng add-context -s %s -k %s >/dev/null",
301 (sudo
) ? "sudo" : " ", name
, context_list
);
303 fprintf(stderr
, "allocating cmd\n");
309 fprintf(stderr
, "error: adding contexts\n");
319 int start(char *name
, int sudo
, int local
, int print
)
324 ret
= sprintf(cmd
, "%s lttng start %s >/dev/null",
325 (sudo
) ? "sudo" : " ", name
);
327 fprintf(stderr
, "allocating cmd\n");
333 fprintf(stderr
, "error: starting the session %s\n", name
);
342 ret
= sprintf(cmd
, "%s lttng list|grep %s|cut -d'(' -f2|cut -d ')' -f1",
343 (sudo
) ? "sudo" : " ", name
);
345 ret
= sprintf(cmd
, "babeltrace -i lttng-live net://localhost|grep %s|cut -d' ' -f1",
349 fprintf(stderr
, "allocating cmd\n");
352 fprintf(stderr
, "%s session started : ",
353 (local
) ? "Local" : "Live");
356 fprintf(stderr
, "error: listing the sessions\n");
366 char *live_path(char *name
)
374 ret
= sprintf(cmd
, "lttngtop -r net://localhost|grep %s|cut -d' ' -f1",
377 fprintf(stderr
, "allocating cmd\n");
381 fp
= popen(cmd
, "r");
383 printf("Failed to run command\n" );
387 /* Read the output a line at a time - output it. */
388 out
= fgets(path
, sizeof(path
)-1, fp
);
400 int destroy(char *name
)
406 ret
= system("groups|grep tracing >/dev/null");
407 if (ret
!= 0 && getuid() != 0) {
408 ret
= system("sudo -l lttng >/dev/null");
410 fprintf(stderr
, "[error] You are not root and not "
411 "allowed by sudo to use lttng\n");
418 ret
= sprintf(cmd
, "%s lttng destroy %s >/dev/null",
419 (sudo
) ? "sudo" : " ", name
);
421 fprintf(stderr
, "allocating cmd\n");
427 fprintf(stderr
, "error: destroying the session %s\n", name
);
436 int create_local_session()
442 ret
= check_requirements(&sudo
);
444 name
= random_session_name();
450 ret
= check_session_name(name
, sudo
);
455 ret
= local_session(name
, sudo
);
460 ret
= enable_events(name
, sudo
);
465 ret
= add_contexts(name
, sudo
);
470 ret
= start(name
, sudo
, 1, 1);
481 int destroy_live_local_session(char *name
)
483 return destroy(name
);
486 int create_live_local_session(char **session_path
, char **session_name
, int print
)
492 ret
= check_requirements(&sudo
);
494 name
= random_session_name();
500 ret
= check_session_name(name
, sudo
);
505 ret
= live_local_session(name
, sudo
);
510 ret
= enable_events(name
, sudo
);
515 ret
= add_contexts(name
, sudo
);
520 ret
= start(name
, sudo
, 0, print
);
526 *session_path
= live_path(name
);
528 *session_name
= name
;
This page took 0.040514 seconds and 4 git commands to generate.