mirror of
https://github.com/systemd/systemd.git
synced 2025-02-28 05:57:33 +03:00
manager: print ephemeral information about running jobs' timeouts
Produces output like: [ *** ] (1 of 2) A start job is running for slow.service (33s / 1min 30s) The first nubmer is the time since job start, the second is the job timeout.
This commit is contained in:
parent
68db7a3bd9
commit
2cba2e0352
@ -860,11 +860,14 @@ static int job_dispatch_timer(sd_event_source *s, uint64_t monotonic, void *user
|
||||
int job_start_timer(Job *j) {
|
||||
int r;
|
||||
|
||||
if (j->unit->job_timeout <= 0 || j->timer_event_source)
|
||||
if (j->timer_event_source)
|
||||
return 0;
|
||||
|
||||
j->begin_usec = now(CLOCK_MONOTONIC);
|
||||
|
||||
if (j->unit->job_timeout <= 0)
|
||||
return 0;
|
||||
|
||||
r = sd_event_add_monotonic(j->manager->event, j->begin_usec + j->unit->job_timeout, 0, job_dispatch_timer, j, &j->timer_event_source);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -143,6 +143,8 @@ static void manager_print_jobs_in_progress(Manager *m) {
|
||||
unsigned counter = 0, print_nr;
|
||||
char cylon[6 + CYLON_BUFFER_EXTRA + 1];
|
||||
unsigned cylon_pos;
|
||||
char time[FORMAT_TIMESPAN_MAX], limit[FORMAT_TIMESPAN_MAX] = "no limit";
|
||||
uint64_t x;
|
||||
|
||||
assert(m);
|
||||
|
||||
@ -162,14 +164,23 @@ static void manager_print_jobs_in_progress(Manager *m) {
|
||||
cylon_pos = 14 - cylon_pos;
|
||||
draw_cylon(cylon, sizeof(cylon), 6, cylon_pos);
|
||||
|
||||
m->jobs_in_progress_iteration++;
|
||||
|
||||
if (m->n_running_jobs > 1)
|
||||
if (asprintf(&job_of_n, "(%u of %u) ", counter, m->n_running_jobs) < 0)
|
||||
job_of_n = NULL;
|
||||
|
||||
manager_status_printf(m, true, cylon, "%sA %s job is running for %s",
|
||||
strempty(job_of_n), job_type_to_string(j->type), unit_description(j->unit));
|
||||
format_timespan(time, sizeof(time), now(CLOCK_MONOTONIC) - j->begin_usec, 1*USEC_PER_SEC);
|
||||
if (job_get_timeout(j, &x) > 0)
|
||||
format_timespan(limit, sizeof(limit), x - j->begin_usec, 1*USEC_PER_SEC);
|
||||
|
||||
manager_status_printf(m, true, cylon,
|
||||
"%sA %s job is running for %s (%s / %s)",
|
||||
strempty(job_of_n),
|
||||
job_type_to_string(j->type),
|
||||
unit_description(j->unit),
|
||||
time, limit);
|
||||
|
||||
m->jobs_in_progress_iteration++;
|
||||
}
|
||||
|
||||
static int manager_watch_idle_pipe(Manager *m) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user