summaryrefslogtreecommitdiffstats
path: root/lib/librpc/rpcsvc/rstat.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/librpc/rpcsvc/rstat.c')
-rw-r--r--lib/librpc/rpcsvc/rstat.c85
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);
+}
OpenPOWER on IntegriCloud