diff options
Diffstat (limited to 'lib/librpc/rpcsvc/rstat.c')
-rw-r--r-- | lib/librpc/rpcsvc/rstat.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/lib/librpc/rpcsvc/rstat.c b/lib/librpc/rpcsvc/rstat.c new file mode 100644 index 0000000..fe83ae5 --- /dev/null +++ b/lib/librpc/rpcsvc/rstat.c @@ -0,0 +1,85 @@ +/* @(#)rstat.c 2.3 88/11/30 4.0 RPCSRC */ +/* + * Simple program that prints the status of a remote host, in a format + * similar to that used by the 'w' command, using the rstat.x service. + */ + +#include <stdio.h> +#include <sys/param.h> +#include <rpc/rpc.h> /* include <sys/time.h> */ +#include "rstat.h" + +main(argc, argv) +int argc; +char **argv; +{ + + char *host; + CLIENT *rstat_clnt; + statstime *host_stat; + struct tm *tmp_time; + struct tm host_time; + struct tm host_uptime; + char days_buf[16]; + char hours_buf[16]; + + if (argc != 2) + { + fprintf(stderr, "usage: %s \"host\"\n", argv[0]); + exit(1); + } + + host = argv[1]; + + /* client handle to rstat */ + rstat_clnt = clnt_create(host, RSTATPROG, RSTATVERS_TIME, "udp"); + if (rstat_clnt == NULL) + { + clnt_pcreateerror(argv[0]); + exit(1); + } + + host_stat = rstatproc_stats_3(NULL, rstat_clnt); + if (host_stat == NULL) + { + clnt_perror(rstat_clnt, argv[0]); + exit(1); + } + + tmp_time = localtime(&host_stat->curtime.tv_sec); + host_time = *tmp_time; + + host_stat->curtime.tv_sec -= host_stat->boottime.tv_sec; + + tmp_time = gmtime(&host_stat->curtime.tv_sec); + host_uptime = *tmp_time; + + if (host_uptime.tm_yday != 0) + sprintf(days_buf, "%d day%s, ", host_uptime.tm_yday, + (host_uptime.tm_yday > 1) ? "s" : ""); + else + days_buf[0] = '\0'; + + if (host_uptime.tm_hour != 0) + sprintf(hours_buf, "%2d:%02d,", + host_uptime.tm_hour, host_uptime.tm_min); + else + if (host_uptime.tm_min != 0) + sprintf(hours_buf, "%2d mins,", host_uptime.tm_min); + else + hours_buf[0] = '\0'; + + printf(" %2d:%02d%cm up %s%s load average: %.2f %.2f %.2f\n", + (host_time.tm_hour > 12) ? host_time.tm_hour - 12 + : host_time.tm_hour, + host_time.tm_min, + (host_time.tm_hour >= 12) ? 'p' + : 'a', + days_buf, + hours_buf, + (double)host_stat->avenrun[0]/FSCALE, + (double)host_stat->avenrun[1]/FSCALE, + (double)host_stat->avenrun[2]/FSCALE); + + exit(0); +} |