#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include "types.h"
#include "distcc.h"
#include "rpc.h"
#include "trace.h"
#include "exitcode.h"
#include "snprintf.h"
#include "mon.h"
const char *rs_program_name = "distccmon-text";
static void usage(void)
{
fprintf(stderr, "usage: distccmon-text [DELAY]\n"
"\n"
"Displays current compilation jobs in text form.\n"
"\n"
"If delay is specified, repeatedly updates after that many (fractional)\n"
"seconds. Otherwise, runs just once.\n");
}
int main(int argc, char *argv[])
{
struct dcc_task_state *list;
int ret;
float delay;
char *end;
dcc_set_trace_from_env();
if (argc == 1)
delay = 0.0;
else if (argc == 2) {
delay = strtod(argv[1], &end);
if (*end) {
usage();
return 1;
}
} else {
usage();
return 1;
}
setvbuf (stdout, NULL, _IOLBF, BUFSIZ);
do {
struct dcc_task_state *i;
if ((ret = dcc_mon_poll(&list)))
return ret;
for (i = list; i; i = i->next) {
#if 1
if (i->curr_phase == DCC_PHASE_DONE)
continue;
#endif
printf("%6ld %-10.10s %-30.30s %24.24s[%d]\n",
(long) i->cpid,
dcc_get_phase_name(i->curr_phase),
i->file, i->host, i->slot);
}
printf("\n");
usleep(delay * 1000000);
dcc_task_state_free(list);
} while (delay);
return 0;
}