|
|
1.1 root 1: /* x_uptime.c - x_uptime */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <network.h>
6: #include <rwho.h>
7:
8: /*------------------------------------------------------------------------
9: * x_uptime - (command uptime or ruptime) print remote machine status
10: *------------------------------------------------------------------------
11: */
12: COMMAND x_uptime(stdin, stdout, stderr, nargs, args)
13: int stdin, stdout, stderr, nargs;
14: char *args[];
15: {
16: int i, j;
17: struct rwent *rwptr;
18: long tottim;
19: int hours, days, mins;
20: Bool up;
21: Bool found, all;
22: long now;
23: char mach[32];
24: char str[80];
25:
26: switch (nargs) {
27:
28: case 1:
29: if (strcmp(args[0],"ruptime") == 0) {
30: all = TRUE;
31: break;
32: }
33: getname(mach); /* called as "uptime" */
34: args[1] = mach;
35: /* fall through */
36: case 2:
37: all = FALSE;
38: break;
39: default:
40: fprintf(stderr, "use: %s [host]\n", args[0]);
41: return(SYSERR);
42: }
43: gettime(&now);
44: found = FALSE;
45: for (i=0 ; i<Rwho.rwnent ; i++) {
46: rwptr = &Rwho.rwcache[i];
47: if (!all && strcmp(rwptr->rwmach,args[1])!=0)
48: continue;
49: found = TRUE;
50: sprintf(str,"%-14s", rwptr->rwmach);
51: tottim = now - rwptr->rwlast;
52: if (up = (tottim < RWCDOWN))
53: tottim = rwptr->rwslast - rwptr->rwboot + 59;
54: days = tottim / (24L * 60L * 60L);
55: tottim %= (24L * 60L * 60L);
56: hours = tottim / (60L * 60L);
57: tottim %= (60L * 60L);
58: mins = tottim / 60L;
59: sprintf(&str[strlen(str)], "%s", up?"up " : "down");
60: if (days > 0)
61: sprintf(&str[strlen(str)], " %2d +", days);
62: else
63: strcat(str, " ");
64: sprintf(&str[strlen(str)], " %2d:%02d", hours, mins);
65: if (!up) {
66: strcat(str, "\n");
67: write(stdout, str, strlen(str));
68: continue;
69: }
70: sprintf(&str[strlen(str)],
71: " %2d users, load ", (int)rwptr->rwusers);
72: for (j=0 ; j<RWNLOAD ; j++) {
73: if (j >0)
74: strcat(str, ", ");
75: sprintf(&str[strlen(str)], "%2d.%02d",
76: rwptr->rwload[j] / 100,
77: rwptr->rwload[j] % 100);
78: }
79: strcat(str, "\n");
80: write(stdout, str, strlen(str));
81: }
82: if (!found && !all)
83: fprintf(stderr, "%s ???\n", args[1]);
84: return(OK);
85: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.