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");
35 ret
= system("sudo -l lttng >/dev/null");
37 fprintf(stderr
, "[error] You are not root and not "
38 "allowed by sudo to use lttng\n");
46 ret
= system("sudo lttng-sessiond -d");
48 ret
= system("lttng-sessiond -d");
51 fprintf(stderr
, "Error starting lttng-sessiond as root\n");
61 int check_or_start_relayd()
65 ret
= system("pgrep lttng-relayd >/dev/null");
69 ret
= system("lttng-relayd -d");
71 fprintf(stderr
, "Error starting lttng-relayd\n");
81 * Return 0 if in tracing group or root, 1 if sudo is needed (and working),
82 * a negative value on error.
85 int check_tracing_group()
93 ret
= system("groups|grep tracing >/dev/null");
98 ret
= system("sudo lttng --version >/dev/null");
100 fprintf(stderr
, "Error executing lttng with sudo, you need to "
101 "be root or in the \"tracing\" group to start "
114 int check_lttng_modules(int sudo
)
119 ret
= system("sudo lttng list -k | grep sched_switch >/dev/null");
121 ret
= system("lttng list -k | grep sched_switch >/dev/null");
124 fprintf(stderr
, "Error listing kernel events, "
125 "lttng-modules might not be installed\n");
134 int check_requirements(int *sudo
)
138 ret
= check_or_start_sessiond();
141 ret
= check_or_start_relayd();
144 ret
= check_tracing_group();
150 ret
= check_lttng_modules(*sudo
);
158 * Allocate a random string, must be freed by the caller.
161 char *random_session_name()
167 FILE *f
= fopen( "/dev/urandom", "r");
173 ret
= fread(&id
, 1, sizeof(uint64_t), f
);
174 if (ret
< sizeof(id
)) {
179 ret
= asprintf(&str
, "lttngtop-%" PRIu64
, id
);
181 fprintf(stderr
, "Error allocating session name");
197 int check_session_name(char *name
, int sudo
)
202 ret
= sprintf(cmd
, "%s lttng list | grep %s >/dev/null",
203 (sudo
) ? "sudo" : " ", name
);
205 fprintf(stderr
, "Allocating cmd\n");
211 fprintf(stderr
, "Error: session %s already exist, either we "
212 "are not random enough or something is "
213 "really wrong\n", name
);
223 int local_session(char *name
, int sudo
)
228 ret
= sprintf(cmd
, "%s lttng create %s >/dev/null",
229 (sudo
) ? "sudo" : " ", name
);
231 fprintf(stderr
, "Allocating cmd\n");
236 fprintf(stderr
, "Error: creating the session\n");
246 int live_local_session(char *name
, int sudo
)
251 ret
= sprintf(cmd
, "%s lttng create %s --live 1000000 -U net://localhost >/dev/null",
252 (sudo
) ? "sudo" : " ", name
);
254 fprintf(stderr
, "Allocating cmd\n");
259 fprintf(stderr
, "Error: creating the session\n");
269 int enable_events(char *name
, int sudo
)
274 ret
= sprintf(cmd
, "%s lttng enable-event -s %s -k %s >/dev/null",
275 (sudo
) ? "sudo" : " ", name
, event_list
);
277 fprintf(stderr
, "Allocating cmd\n");
283 fprintf(stderr
, "Error: enabling events\n");
293 int add_contexts(char *name
, int sudo
)
298 ret
= sprintf(cmd
, "%s lttng add-context -s %s -k %s >/dev/null",
299 (sudo
) ? "sudo" : " ", name
, context_list
);
301 fprintf(stderr
, "allocating cmd\n");
307 fprintf(stderr
, "error: adding contexts\n");
317 int start(char *name
, int sudo
, int local
)
322 ret
= sprintf(cmd
, "%s lttng start %s >/dev/null",
323 (sudo
) ? "sudo" : " ", name
);
325 fprintf(stderr
, "allocating cmd\n");
331 fprintf(stderr
, "error: starting the session %s\n", name
);
337 ret
= sprintf(cmd
, "%s lttng list|grep %s|cut -d'(' -f2|cut -d ')' -f1",
338 (sudo
) ? "sudo" : " ", name
);
340 ret
= sprintf(cmd
, "lttngtop -r net://localhost|grep %s|cut -d' ' -f1",
344 fprintf(stderr
, "allocating cmd\n");
347 fprintf(stderr
, "%s session started : ",
348 (local
) ? "Local" : "Live");
351 fprintf(stderr
, "error: listing the sessions\n");
361 int destroy(char *name
)
368 ret
= system("sudo -l lttng >/dev/null");
370 fprintf(stderr
, "[error] You are not root and not "
371 "allowed by sudo to use lttng\n");
378 ret
= sprintf(cmd
, "%s lttng destroy %s >/dev/null",
379 (sudo
) ? "sudo" : " ", name
);
381 fprintf(stderr
, "allocating cmd\n");
387 fprintf(stderr
, "error: destroying the session %s\n", name
);
396 int create_local_session()
402 ret
= check_requirements(&sudo
);
404 name
= random_session_name();
410 ret
= check_session_name(name
, sudo
);
415 ret
= local_session(name
, sudo
);
420 ret
= enable_events(name
, sudo
);
425 ret
= add_contexts(name
, sudo
);
430 ret
= start(name
, sudo
, 1);
441 int destroy_session(char *name
)
443 return destroy(name
);
446 int create_live_local_session()
452 ret
= check_requirements(&sudo
);
454 name
= random_session_name();
460 ret
= check_session_name(name
, sudo
);
465 ret
= live_local_session(name
, sudo
);
470 ret
= enable_events(name
, sudo
);
475 ret
= add_contexts(name
, sudo
);
480 ret
= start(name
, sudo
, 0);
492 int create_live_local_session();
493 int destroy_live_local_session();
This page took 0.038904 seconds and 4 git commands to generate.