Merge commit 'refs/merge-requests/2' of git://gitorious.org/procps/procps into merge-requests/2
Conflicts: uptime.c
This commit is contained in:
commit
5e4d9d5a92
1
AUTHORS
1
AUTHORS
@ -43,6 +43,7 @@ George Bonser <george@captech.com>
|
||||
uptime:
|
||||
Larry Greenfield <greenfie@gauss.rutgers.edu>
|
||||
Michael K. Johnson <johnsonm@sunsite.unc.edu>
|
||||
David Cantrell <david.l.cantrell@gmail.com>
|
||||
|
||||
vmstat:
|
||||
Henry Ware <al172@yfn.ysu.edu>.
|
||||
|
110
proc/whattime.c
110
proc/whattime.c
@ -41,10 +41,11 @@
|
||||
static char buf[128];
|
||||
static double av[3];
|
||||
|
||||
char *sprint_uptime(void) {
|
||||
char *sprint_uptime(int human_readable) {
|
||||
struct utmp *utmpstruct;
|
||||
int upminutes, uphours, updays;
|
||||
int upminutes, uphours, updays, upweeks, upyears, updecades;
|
||||
int pos;
|
||||
int comma;
|
||||
struct tm *realtime;
|
||||
time_t realseconds;
|
||||
int numuser;
|
||||
@ -52,50 +53,107 @@ char *sprint_uptime(void) {
|
||||
|
||||
/* first get the current time */
|
||||
|
||||
time(&realseconds);
|
||||
realtime = localtime(&realseconds);
|
||||
pos = sprintf(buf, " %02d:%02d:%02d ",
|
||||
realtime->tm_hour, realtime->tm_min, realtime->tm_sec);
|
||||
if (!human_readable) {
|
||||
time(&realseconds);
|
||||
realtime = localtime(&realseconds);
|
||||
pos = sprintf(buf, " %02d:%02d:%02d ",
|
||||
realtime->tm_hour, realtime->tm_min, realtime->tm_sec);
|
||||
}
|
||||
|
||||
/* read and calculate the amount of uptime */
|
||||
|
||||
uptime(&uptime_secs, &idle_secs);
|
||||
|
||||
updays = (int) uptime_secs / (60*60*24);
|
||||
if (human_readable) {
|
||||
updecades = (int) uptime_secs / (60*60*24*365*10);
|
||||
upyears = ((int) uptime_secs / (60*60*24*365)) % 10;
|
||||
upweeks = ((int) uptime_secs / (60*60*24*7)) % 52;
|
||||
updays = ((int) uptime_secs / (60*60*24)) % 7;
|
||||
}
|
||||
else
|
||||
updays = (int) uptime_secs / (60*60*24);
|
||||
|
||||
strcat (buf, "up ");
|
||||
pos += 3;
|
||||
if (updays)
|
||||
pos += sprintf(buf + pos, "%d day%s, ", updays, (updays != 1) ? "s" : "");
|
||||
|
||||
if (!human_readable) {
|
||||
if (updays)
|
||||
pos += sprintf(buf + pos, "%d day%s, ", updays, (updays != 1) ? "s" : "");
|
||||
}
|
||||
|
||||
upminutes = (int) uptime_secs / 60;
|
||||
uphours = upminutes / 60;
|
||||
uphours = uphours % 24;
|
||||
upminutes = upminutes % 60;
|
||||
if(uphours)
|
||||
pos += sprintf(buf + pos, "%2d:%02d, ", uphours, upminutes);
|
||||
else
|
||||
pos += sprintf(buf + pos, "%d min, ", upminutes);
|
||||
|
||||
if (!human_readable) {
|
||||
if(uphours)
|
||||
pos += sprintf(buf + pos, "%2d:%02d, ", uphours, upminutes);
|
||||
else
|
||||
pos += sprintf(buf + pos, "%d min, ", upminutes);
|
||||
|
||||
/* count the number of users */
|
||||
|
||||
numuser = 0;
|
||||
setutent();
|
||||
while ((utmpstruct = getutent())) {
|
||||
if ((utmpstruct->ut_type == USER_PROCESS) &&
|
||||
(utmpstruct->ut_name[0] != '\0'))
|
||||
numuser++;
|
||||
numuser = 0;
|
||||
setutent();
|
||||
while ((utmpstruct = getutent())) {
|
||||
if ((utmpstruct->ut_type == USER_PROCESS) &&
|
||||
(utmpstruct->ut_name[0] != '\0'))
|
||||
numuser++;
|
||||
}
|
||||
endutent();
|
||||
|
||||
pos += sprintf(buf + pos, "%2d user%s, ", numuser, numuser == 1 ? "" : "s");
|
||||
|
||||
loadavg(&av[0], &av[1], &av[2]);
|
||||
|
||||
pos += sprintf(buf + pos, " load average: %.2f, %.2f, %.2f",
|
||||
av[0], av[1], av[2]);
|
||||
}
|
||||
endutent();
|
||||
|
||||
pos += sprintf(buf + pos, "%2d user%s, ", numuser, numuser == 1 ? "" : "s");
|
||||
if (human_readable) {
|
||||
comma = 0;
|
||||
|
||||
loadavg(&av[0], &av[1], &av[2]);
|
||||
if (updecades) {
|
||||
pos += sprintf(buf + pos, "%d %s", updecades,
|
||||
updecades > 1 ? "decades" : "decade");
|
||||
comma += 1;
|
||||
}
|
||||
|
||||
pos += sprintf(buf + pos, " load average: %.2f, %.2f, %.2f",
|
||||
av[0], av[1], av[2]);
|
||||
if (upyears) {
|
||||
pos += sprintf(buf + pos, "%s%d %s", comma > 0 ? ", " : "", upyears,
|
||||
upyears > 1 ? "years" : "year");
|
||||
comma += 1;
|
||||
}
|
||||
|
||||
if (upweeks) {
|
||||
pos += sprintf(buf + pos, "%s%d %s", comma > 0 ? ", " : "", upweeks,
|
||||
upweeks > 1 ? "weeks" : "week");
|
||||
comma += 1;
|
||||
}
|
||||
|
||||
if (updays) {
|
||||
pos += sprintf(buf + pos, "%s%d %s", comma > 0 ? ", " : "", updays,
|
||||
updays > 1 ? "days" : "day");
|
||||
comma += 1;
|
||||
}
|
||||
|
||||
if (uphours) {
|
||||
pos += sprintf(buf + pos, "%s%d %s", comma > 0 ? ", " : "", uphours,
|
||||
uphours > 1 ? "hours" : "hour");
|
||||
comma += 1;
|
||||
}
|
||||
|
||||
if (upminutes) {
|
||||
pos += sprintf(buf + pos, "%s%d %s", comma > 0 ? ", " : "", upminutes,
|
||||
upminutes > 1 ? "minutes" : "minute");
|
||||
comma += 1;
|
||||
}
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
void print_uptime(void) {
|
||||
printf("%s\n", sprint_uptime());
|
||||
void print_uptime(int human_readable) {
|
||||
printf("%s\n", sprint_uptime(human_readable));
|
||||
}
|
||||
|
@ -5,8 +5,8 @@
|
||||
|
||||
EXTERN_C_BEGIN
|
||||
|
||||
extern void print_uptime(void);
|
||||
extern char *sprint_uptime(void);
|
||||
extern void print_uptime(int human_readable);
|
||||
extern char *sprint_uptime(int human_readable);
|
||||
|
||||
EXTERN_C_END
|
||||
|
||||
|
@ -4997,10 +4997,10 @@ static void summary_show (void) {
|
||||
// Display Uptime and Loadavg
|
||||
if (isROOM(View_LOADAV, 1)) {
|
||||
if (!Rc.mode_altscr)
|
||||
show_special(0, fmtmk(LOADAV_line, Myname, sprint_uptime()));
|
||||
show_special(0, fmtmk(LOADAV_line, Myname, sprint_uptime(0)));
|
||||
else
|
||||
show_special(0, fmtmk(CHKw(w, Show_TASKON)? LOADAV_line_alt : LOADAV_line
|
||||
, w->grpname, sprint_uptime()));
|
||||
, w->grpname, sprint_uptime(0)));
|
||||
Msg_row += 1;
|
||||
} // end: View_LOADAV
|
||||
|
||||
|
3
uptime.1
3
uptime.1
@ -25,6 +25,9 @@ is loaded all the time while on a 4 CPU system it means it was idle 75% of
|
||||
the time.
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
\fB\-p\fR, \fB\-\-pretty\fR
|
||||
show uptime in pretty format
|
||||
.TP
|
||||
\fB\-h\fR, \fB\-\-help\fR
|
||||
display this help text
|
||||
.TP
|
||||
|
11
uptime.c
11
uptime.c
@ -58,6 +58,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out)
|
||||
fputs(USAGE_HEADER, out);
|
||||
fprintf(out, _(" %s [options]\n"), program_invocation_short_name);
|
||||
fputs(USAGE_OPTIONS, out);
|
||||
fputs(_(" -p, --pretty show uptime in pretty format\n"), out);
|
||||
fputs(USAGE_HELP, out);
|
||||
fputs(_(" -s, --since system up since\n"), out);
|
||||
fputs(USAGE_VERSION, out);
|
||||
@ -68,9 +69,10 @@ static void __attribute__ ((__noreturn__)) usage(FILE * out)
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int c;
|
||||
int c, p = 0;
|
||||
|
||||
static const struct option longopts[] = {
|
||||
{"pretty", no_argument, NULL, 'p'},
|
||||
{"help", no_argument, NULL, 'h'},
|
||||
{"since", no_argument, NULL, 's'},
|
||||
{"version", no_argument, NULL, 'V'},
|
||||
@ -85,8 +87,11 @@ int main(int argc, char **argv)
|
||||
textdomain(PACKAGE);
|
||||
atexit(close_stdout);
|
||||
|
||||
while ((c = getopt_long(argc, argv, "hsV", longopts, NULL)) != -1)
|
||||
while ((c = getopt_long(argc, argv, "phsV", longopts, NULL)) != -1)
|
||||
switch (c) {
|
||||
case 'p':
|
||||
p = 1;
|
||||
break;
|
||||
case 'h':
|
||||
usage(stdout);
|
||||
case 's':
|
||||
@ -99,6 +104,6 @@ int main(int argc, char **argv)
|
||||
usage(stderr);
|
||||
}
|
||||
|
||||
print_uptime();
|
||||
print_uptime(p);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user