]> granicus.if.org Git - procps-ng/commitdiff
uptime: add since option
authorFrank Fesevur <fesevur@gmail.com>
Wed, 26 Dec 2012 12:14:09 +0000 (23:14 +1100)
committerCraig Small <csmall@enc.com.au>
Wed, 26 Dec 2012 12:14:09 +0000 (23:14 +1100)
The --since or -s option will show the time since the host was online.
Reference(s):
http://www.freelists.org/post/procps/Patch-Added-since-option-to-uptime

Signed-off-by: Craig Small <csmall@enc.com.au>
uptime.1
uptime.c

index 11fa036c508cdedfcd7038361da89bab82a12f53..13a9125e66612ed56c8b14de9dd2e15b7bdb0ae5 100644 (file)
--- a/uptime.1
+++ b/uptime.1
@@ -1,6 +1,6 @@
 .\"             -*-Nroff-*-
 .\"
-.TH UPTIME "1" "June 2011" "procps-ng" "User Commands"
+.TH UPTIME "1" "December 2012" "procps-ng" "User Commands"
 .SH NAME
 uptime \- Tell how long the system has been running.
 .SH SYNOPSIS
@@ -28,6 +28,9 @@ the time.
 \fB\-h\fR, \fB\-\-help\fR
 display this help text
 .TP
+\fB\-s\fR, \fB\-\-since\fR
+system up since, in yyyy-mm-dd MM:HH:SS format
+.TP
 \fB\-V\fR, \fB\-\-version\fR
 display version information and exit
 .SH FILES
index 3ea14e761c018afe9d9aa7a91e71f266e57daf69..ac4579cd9209b7789b070aa4ed555c4ae7977ae7 100644 (file)
--- a/uptime.c
+++ b/uptime.c
 #include <getopt.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include <time.h>
+#include <sys/time.h>
 
 #include "c.h"
 #include "fileutils.h"
 #include "nls.h"
+#include "proc/sysinfo.h"
 #include "proc/whattime.h"
 #include "proc/version.h"
 
+static void print_uptime_since()
+{
+       double now, uptime_secs, idle_secs;
+       time_t up_since_secs;
+       struct tm *up_since;
+       struct timeval tim;
+
+       /* Get the current time and convert it to a double */
+       gettimeofday(&tim, NULL);
+       now = tim.tv_sec + (tim.tv_usec / 1000000.0);
+
+       /* Get the uptime and calculate when that was */
+       uptime(&uptime_secs, &idle_secs);
+       up_since_secs = (time_t) ((now - uptime_secs) + 0.5);
+
+       /* Show this */
+       up_since = localtime(&up_since_secs);
+       printf("%04d-%02d-%02d %02d:%02d:%02d\n",
+               up_since->tm_year + 1900, up_since->tm_mon + 1, up_since->tm_mday,
+               up_since->tm_hour, up_since->tm_min, up_since->tm_sec);
+}
+
 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(USAGE_HELP, out);
+       fputs(_(" -s, --since    system up since\n"), out);
        fputs(USAGE_VERSION, out);
        fprintf(out, USAGE_MAN_TAIL("uptime(1)"));
 
@@ -46,6 +72,7 @@ int main(int argc, char **argv)
 
        static const struct option longopts[] = {
                {"help", no_argument, NULL, 'h'},
+               {"since", no_argument, NULL, 's'},
                {"version", no_argument, NULL, 'V'},
                {NULL, 0, NULL, 0}
        };
@@ -56,10 +83,13 @@ int main(int argc, char **argv)
        textdomain(PACKAGE);
        atexit(close_stdout);
 
-       while ((c = getopt_long(argc, argv, "hV", longopts, NULL)) != -1)
+       while ((c = getopt_long(argc, argv, "hsV", longopts, NULL)) != -1)
                switch (c) {
                case 'h':
                        usage(stdout);
+               case 's':
+                       print_uptime_since();
+                       return EXIT_SUCCESS;
                case 'V':
                        printf(PROCPS_NG_VERSION);
                        return EXIT_SUCCESS;