]> granicus.if.org Git - sysstat/commitdiff
sadf: New option -t added.
authorSebastien <seb@kluane.home>
Sun, 22 Jul 2012 12:58:10 +0000 (14:58 +0200)
committerSebastien <seb@kluane.home>
Sun, 22 Jul 2012 12:58:10 +0000 (14:58 +0200)
First, this patch renames sadf option '-T' into '-U', and
sadf option '-t' into '-T'.
It then adds a new option: -t. This option tells sadc to display
the timestamps in the local time of the data file creator
instead of UTC. The same option already exists for sar.
The FAQ is also updated: Tell that options -s and -e are always
expressed in local time.

CHANGES
FAQ
common.c
format.c
man/sadf.in
man/sar.in
sa.h
sa_common.c
sadf.c
sadf.h

diff --git a/CHANGES b/CHANGES
index 7ff7357f7974888d6dc3ab685cffef40fbe26eea..4fcab950f88c495f227f52d4b3329a5d0a37f36f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,18 +5,22 @@ xxxx/xx/xx: Version 10.1.1 - Sebastien Godard (sysstat <at> orange.fr)
        * [Peter Schiffer]: Persistent device names support added to
          sar and iostat (option -j).
        * [Peter Schiffer]: Make sysstat disk counters consistent
-         with those from latest kernel (3.5). Warning: This breaks
-         compatibility with older sar data files format for disk
-         activity.
+         with those from latest kernel (3.5).
+         WARNING: This breaks compatibility with older sar data
+         files format for disk activity.
        * [Peter Schiffer]: sar: Use /sys/dev/block/major:minor links
          to determine devices real name.
        * Part of 'sadf -H' output was written to stderr instead of
          stdout. This is now fixed.
-       * Warning: sadf: Option '-T' has been renamed into '-U', and
-         optin '-t' has been renamed into '-T'.
+       * WARNING: sadf: Option '-T' has been renamed into '-U', and
+         option '-t' has been renamed into '-T'.
+       * sadf: New option -t added. This option tells sadc to display
+         the timestamps in the local time of the data file creator
+         instead of UTC. The same option exists for sar.
        * [Peter Schiffer]: Various cosmetic changes in manual pages
          and usage messages displayed by sysstat commands.
-       * sar and iostat manual pages updated.
+       * FAQ updated.
+       * sar, sadf and iostat manual pages updated.
 
 2012/05/16: Version 10.0.5 - Sebastien Godard (sysstat <at> orange.fr)
        * [Alain Chereau]: Options -g and -T added to iostat. These
diff --git a/FAQ b/FAQ
index d315eaa5ac05e0e34d1fa25bf8bc7ca6aa45a16a..d58cfd324925c371bad8db69ead18b00ae457aaa 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -32,8 +32,8 @@ Also tell me what version your kernel is).
 2.7. The "Average:" results from the sar command are just rubbish...
 2.8. My database (e.g. MySQL) doesn't appear to understand the time zone
      displayed by 'sadf -d'...
-2.9. I tried to use the -p option of the sadf command, together with the
-     options -s and -e. Unfortunately, I have nothing displayed at all.
+2.9. I tried to use options -s and -e with sadf. Unfortunately, I have
+     nothing displayed at all.
 2.10. I cannot see all my disks when I use the sar -d command...
 2.11. Do you know a tool which can graphically plot the data collected by sar?
 2.12. When I launch sadc, I get the error message:
@@ -309,17 +309,15 @@ to strip the "UTC" characters from the data being loaded into the database.
 
 ~~~
 
-2.9. I tried to use the -p option of the sadf command, together with the
-options -s and -e. Unfortunately, I have nothing displayed at all.
+2.9. I tried to use options -s and -e with sadf. Unfortunately, I have
+nothing displayed at all.
 
 This is because no data belong to the specified time interval!
-With versions older than 7.0.1, the time specified by options -s or -e
-may be considered as given in UTC (Coordinated Universal Time) or local
-time depending on whether sadf displays its output in UTC or local time.
-Option -p makes sadf display its timestamp in UTC, as indicated in the
-manual page. The UTC value may be different from the value that sar
-(or sadf without option -p) displays. The same remark applies to the
-use of -d option.
+The time specified with options -s and -e is now always considered as
+being given in local time to be consistent with sar default output.
+Remember that timestamps are displayed by sadf in UTC (Coordinated
+Universal Time) by default. Use option -T to tell sadf to display them
+in local time.
 
 ~~~
 
index 97d59072093647eb18d5a3dc24b1137f82ab95c7..101650476942dafd8dec2c8f6b40bff84178874b 100644 (file)
--- a/common.c
+++ b/common.c
@@ -315,7 +315,7 @@ unsigned int get_devmap_major(void)
  * Print banner.
  *
  * IN:
- * @rectime    Date and time to display.
+ * @rectime    Date to display (don't use time fields).
  * @sysname    System name to display.
  * @release    System release number to display.
  * @nodename   Hostname to display.
index 15b4dd22584d6bf19d36bf8f2eb8cad2b3cc9792..074116adec82de109c973a249c56e8fcb236e998 100644 (file)
--- a/format.c
+++ b/format.c
@@ -1,6 +1,6 @@
 /*
  * format.c: Output format definitions for sadf
- * (C) 2011 by Sebastien GODARD (sysstat <at> orange.fr)
+ * (C) 2011-2012 by Sebastien GODARD (sysstat <at> orange.fr)
  *
  ***************************************************************************
  * This program is free software; you can redistribute it and/or modify it *
@@ -46,7 +46,7 @@ struct report_format hdr_fmt = {
  */
 struct report_format db_fmt = {
        .id             = F_DB_OUTPUT,
-       .options        = FO_GROUPED_STATS + FO_TRUE_TIME + FO_HORIZONTALLY +
+       .options        = FO_GROUPED_STATS + FO_LOCAL_TIME + FO_HORIZONTALLY +
                          FO_SEC_EPOCH + FO_FIELD_LIST,
        .f_header       = NULL,
        .f_statistics   = NULL,
@@ -60,7 +60,7 @@ struct report_format db_fmt = {
  */
 struct report_format ppc_fmt = {
        .id             = F_PPC_OUTPUT,
-       .options        = FO_GROUPED_STATS + FO_TRUE_TIME + FO_SEC_EPOCH,
+       .options        = FO_GROUPED_STATS + FO_LOCAL_TIME + FO_SEC_EPOCH,
        .f_header       = NULL,
        .f_statistics   = NULL,
        .f_timestamp    = NULL,
@@ -73,7 +73,7 @@ struct report_format ppc_fmt = {
  */
 struct report_format xml_fmt = {
        .id             = F_XML_OUTPUT,
-       .options        = FO_HEADER_ONLY + FO_TRUE_TIME,
+       .options        = FO_HEADER_ONLY + FO_LOCAL_TIME,
        .f_header       = print_xml_header,
        .f_statistics   = print_xml_statistics,
        .f_timestamp    = print_xml_timestamp,
@@ -86,7 +86,7 @@ struct report_format xml_fmt = {
  */
 struct report_format json_fmt = {
        .id             = F_JSON_OUTPUT,
-       .options        = FO_HEADER_ONLY + FO_TRUE_TIME,
+       .options        = FO_HEADER_ONLY + FO_LOCAL_TIME,
        .f_header       = print_json_header,
        .f_statistics   = print_json_statistics,
        .f_timestamp    = print_json_timestamp,
index 577f0bb2b82ca7070193fbfcfc739027f2dfbc22..a6722202035dde31a45a7f2084e39999f47d9bb4 100644 (file)
@@ -2,7 +2,7 @@
 .SH NAME
 sadf \- Display data collected by sar in multiple formats.
 .SH SYNOPSIS
-.B sadf [ -C ] [ -d | -j | -p | -x ] [ -H ] [ -h ] [ -T ] [ -U ] [ -V ] [ -P {
+.B sadf [ -C ] [ -d | -j | -p | -x ] [ -H ] [ -h ] [ -T | -t | -U ] [ -V ] [ -P {
 .I cpu
 .B [,...] | ALL } ] [ -s [
 .I hh:mm:ss
@@ -83,7 +83,7 @@ most databases, and additional semicolon separated data fields as specified
 by
 .I sar_options
 command line options.
-Note that timestamp output can be controlled by options -T and -t.
+Note that timestamp output can be controlled by options -T and -U.
 .IP "-e [ hh:mm:ss ]"
 Set the ending time of the report, given in local time. The default ending
 time is 18:00:00. Hours must be given in 24-hour format.
@@ -95,7 +95,7 @@ When used in conjunction with option -d, all activities
 will be displayed horizontally on a single line.
 .IP -j
 Print the contents of the data file in JSON (JavaScript Object Notation)
-format. Timestamps can be controlled by option -t.
+format. Timestamps can be controlled by option -T.
 .IP "-P { cpu [,...] | ALL }"
 Tell
 .B sadf
@@ -112,7 +112,7 @@ hostname of the host where the file was created, the interval value
 (or -1 if not applicable), the timestamp,
 the device name (or - if not applicable),
 the field name and its value.
-Note that timestamp output can be controlled by options -T and -t.
+Note that timestamp output can be controlled by options -T and -U.
 .IP "-s [ hh:mm:ss ]"
 Set the starting time of the data (given in local time), causing the
 .B sadf
@@ -121,6 +121,9 @@ specified. The default starting time is 08:00:00.
 Hours must be given in 24-hour format.
 .IP -T
 Display timestamp in local time instead of UTC (Coordinated Universal Time).
+.IP -t
+Display timestamp in the original local time of the data file creator
+instead of UTC (Coordinated Universal Time).
 .IP -U
 Display timestamp (UTC - Coordinated Universal Time) in seconds from
 the epoch.
@@ -128,7 +131,7 @@ the epoch.
 Print version number then exit.
 .IP -x
 Print the contents of the data file in XML format.
-Timestamps can be controlled by option -t.
+Timestamps can be controlled by option -T.
 The corresponding
 DTD (Document Type Definition) and XML Schema are included in the sysstat
 source package. They are also available at
index 5f9375b7722145b1b49e60bb3c0f9f4cf4dfa88a..39d65594b00c65fa093247417e6e87c8a8880dd8 100644 (file)
@@ -1832,7 +1832,7 @@ used only when data are read from a file (option
 .IP -t
 When reading data from a daily data file, indicate that
 .B sar
-should display the timestamps in the original locale time of
+should display the timestamps in the original local time of
 the data file creator. Without this option, the
 .B sar
 command displays the timestamps in the user's locale time.
diff --git a/sa.h b/sa.h
index 72ec784bd5a2c7949e324f204cfc4357055ea93d..54e7a4e20e4e2e36015527a602f121ed6f07c044 100644 (file)
--- a/sa.h
+++ b/sa.h
@@ -87,6 +87,7 @@
 #define S_F_HORIZONTALLY       0x00000800
 #define S_F_COMMENT            0x00001000
 #define S_F_PERSIST_NAME       0x00002000
+#define S_F_LOCAL_TIME         0x00004000
 
 #define WANT_SINCE_BOOT(m)             (((m) & S_F_SINCE_BOOT)   == S_F_SINCE_BOOT)
 #define WANT_SA_ROTAT(m)               (((m) & S_F_SA_ROTAT)     == S_F_SA_ROTAT)
 #define DISPLAY_HORIZONTALLY(m)                (((m) & S_F_HORIZONTALLY) == S_F_HORIZONTALLY)
 #define DISPLAY_COMMENT(m)             (((m) & S_F_COMMENT)      == S_F_COMMENT)
 #define DISPLAY_PERSIST_NAME_S(m)      (((m) & S_F_PERSIST_NAME) == S_F_PERSIST_NAME)
+#define PRINT_LOCAL_TIME(m)            (((m) & S_F_LOCAL_TIME)   == S_F_LOCAL_TIME)
 
 #define AO_F_NULL              0x00000000
 
index 67f12150853a359906eeee0634055ae8b82c9f96..b077de9835aac340f364900caaa0b81aa67bd04d 100644 (file)
@@ -405,7 +405,8 @@ void get_itv_value(struct record_header *record_hdr_curr,
  * @file_hdr   System activity file standard header.
  *
  * OUT:
- * @rectime    Date and time from file header.
+ * @rectime    Date (and possibly time) from file header. Only the date,
+ *             not the time, should be used by the caller.
  ***************************************************************************
  */
 void get_file_timestamp_struct(unsigned int flags, struct tm *rectime,
@@ -414,7 +415,7 @@ void get_file_timestamp_struct(unsigned int flags, struct tm *rectime,
        struct tm *loc_t;
 
        if (PRINT_TRUE_TIME(flags)) {
-               /* Get local time. This is just to fill HH:MM:SS fields */
+               /* Get local time. This is just to fill fields with a default value. */
                get_time(rectime, 0);
 
                rectime->tm_mday = file_hdr->sa_day;
@@ -1338,6 +1339,12 @@ int parse_sar_opt(char *argv[], int *opt, struct activity *act[],
                        break;
 
                case 't':
+                       /*
+                        * Check sar option -t here (as it can be combined
+                        * with other ones, eg. "sar -rtu ..."
+                        * But sadf option -t is check in sadf.c as it won't
+                        * be entered as a sar option after "--".
+                        */
                        if (caller == C_SAR) {
                                *flags |= S_F_TRUE_TIME;
                        }
diff --git a/sadf.c b/sadf.c
index 4525ad6218bbca5cdc07241eb4994cb1ae80d7e1..8fd8cd6204a958eacc388fa6f7b9ccce13f1e0a0 100644 (file)
--- a/sadf.c
+++ b/sadf.c
@@ -87,7 +87,7 @@ void usage(char *progname)
                progname);
 
        fprintf(stderr, _("Options are:\n"
-                         "[ -C ] [ -d | -j | -p | -x ] [ -H ] [ -h ] [ -T ] [ -U ] [ -V ]\n"
+                         "[ -C ] [ -d | -j | -p | -x ] [ -H ] [ -h ] [ -T | -t | -U ] [ -V ]\n"
                          "[ -P { <cpu> [,...] | ALL } ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]\n"
                          "[ -- <sar_options> ]\n"));
        exit(1);
@@ -166,9 +166,9 @@ void check_format_options(void)
                /* Remove option -h */
                flags &= ~S_F_HORIZONTALLY;
        }
-       if (!ACCEPT_TRUE_TIME(fmt[f_position]->options)) {
-               /* Remove option -T */
-               flags &= ~S_F_TRUE_TIME;
+       if (!ACCEPT_LOCAL_TIME(fmt[f_position]->options)) {
+               /* Remove options -T and -t */
+               flags &= ~(S_F_LOCAL_TIME + S_F_TRUE_TIME);
        }
        if (!ACCEPT_SEC_EPOCH(fmt[f_position]->options)) {
                /* Remove option -U */
@@ -182,19 +182,22 @@ void check_format_options(void)
  * time, based on current record's "number of seconds since the epoch" saved
  * in file.
  * The resulting timestamp is expressed in UTC or in local time, depending
- * on whether option -T has been used or not.
+ * on whether options -T or -t have been used or not.
  *
  * IN:
  * @curr       Index in array for current sample statistics.
  * @rectime    Structure where timestamp (expressed in local time or in UTC
- *             depending on whether option -T has been used or not) can be
- *             saved for current record.
+ *             depending on whether options -T or -t have been used or not)
+ *             can be saved for current record.
  * @loctime    Structure where timestamp (expressed in local time) can be
  *             saved for current record.
  *
  * OUT:
- * @rectime    Structure where timestamp for current record has been saved.
- * @loctime    Structure where timestamp for current record has been saved.
+ * @rectime    Structure where timestamp for current record has been saved
+ *             (in local time or in UTC depending on options used).
+ * @loctime    Structure where timestamp for current record has been saved
+ *             (expressed in local time). This field will be used for time
+ *             comparison if options -s and/or -e have been used.
  ***************************************************************************
 */
 void sadf_get_record_timestamp_struct(int curr, struct tm *rectime, struct tm *loctime)
@@ -205,21 +208,28 @@ void sadf_get_record_timestamp_struct(int curr, struct tm *rectime, struct tm *l
                *loctime = *ltm;
        }
 
-       if (!PRINT_TRUE_TIME(flags)) {
-               /* Option -T not used: Display timestamp in UTC */
+       if (!PRINT_LOCAL_TIME(flags) && !PRINT_TRUE_TIME(flags)) {
+               /* Options -T and -t not used: Display timestamp in UTC */
                ltm = gmtime((const time_t *) &record_hdr[curr].ust_time);
        }
 
        if (ltm) {
                *rectime = *ltm;
        }
+       
+       if (PRINT_TRUE_TIME(flags)) {
+               /* Option -t */
+               rectime->tm_hour = record_hdr[curr].hour;
+               rectime->tm_min  = record_hdr[curr].minute;
+               rectime->tm_sec  = record_hdr[curr].second;
+       }
 }
 
 /*
  ***************************************************************************
  * Set current record's timestamp strings (date and time). This timestamp is
- * expressed in UTC or in local time, depending on whether option -T has
- * been used or not.
+ * expressed in UTC or in local time, depending on whether options -T or -t
+ * have been used or not.
  *
  * IN:
  * @curr       Index in array for current sample statistics.
@@ -227,8 +237,8 @@ void sadf_get_record_timestamp_struct(int curr, struct tm *rectime, struct tm *l
  * @cur_time   String where timestamp's time will be saved.
  * @len                Maximum length of timestamp strings.
  * @rectime    Structure with current timestamp (expressed in local time or
- *             in UTC depending on whether option -T has been used or not)
- *             that should be broken down in date and time strings.
+ *             in UTC depending on whether options -T or -t have been used
+ *             or not) that should be broken down in date and time strings.
  *
  * OUT:
  * @cur_date   Timestamp's date string.
@@ -246,8 +256,8 @@ void set_record_timestamp_string(int curr, char *cur_date, char *cur_time, int l
        }
        else {
                /*
-                * If PRINT_TRUE_TIME(flags) is true (ie. option -T has been used) then
-                * cur_time is expressed in local time. Else it is expressed in UTC.
+                * If options -T or -t have been used then cur_time is
+                * expressed in local time. Else it is expressed in UTC.
                 */
                strftime(cur_date, len, "%Y-%m-%d", rectime);
                strftime(cur_time, len, "%H:%M:%S", rectime);
@@ -327,8 +337,8 @@ void xprintf(int nr_tab, const char *fmtf, ...)
  * @use_tm_end         Set to TRUE if option -e has been used.
  * @tab                        Number of tabulations to print.
  * @rectime            Structure where timestamp (expressed in local time
- *                     or in UTC depending on whether option -T has been
- *                     used or not) can be saved for current record.
+ *                     or in UTC depending on whether options -T/-t have
+ *                     been used or not) can be saved for current record.
  * @loctime            Structure where timestamp (expressed in local time)
  *                     can be saved for current record.
  *
@@ -356,6 +366,7 @@ void write_textual_restarts(int curr, int use_tm_start, int use_tm_end, int tab,
 
        if (*fmt[f_position]->f_restart) {
                (*fmt[f_position]->f_restart)(&tab, F_MAIN, cur_date, cur_time,
+                                             !PRINT_LOCAL_TIME(flags) &&
                                              !PRINT_TRUE_TIME(flags), &file_hdr);
        }
 }
@@ -371,8 +382,8 @@ void write_textual_restarts(int curr, int use_tm_start, int use_tm_end, int tab,
  * @tab                        Number of tabulations to print.
  * @ifd                        Input file descriptor.
  * @rectime            Structure where timestamp (expressed in local time
- *                     or in UTC depending on whether option -T has been
- *                     used or not) can be saved for current record.
+ *                     or in UTC depending on whether options -T/-t have
+ *                     been used or not) can be saved for current record.
  * @loctime            Structure where timestamp (expressed in local time)
  *                     can be saved for current record.
  *
@@ -404,6 +415,7 @@ void write_textual_comments(int curr, int use_tm_start, int use_tm_end, int tab,
 
        if (*fmt[f_position]->f_comment) {
                (*fmt[f_position]->f_comment)(&tab, F_MAIN, cur_date, cur_time,
+                                             !PRINT_LOCAL_TIME(flags) &&
                                              !PRINT_TRUE_TIME(flags), file_comment,
                                              &file_hdr);
        }
@@ -490,7 +502,8 @@ void write_mech_stats(int curr, unsigned long dt, unsigned long long itv,
                strcpy(temp, pre);
        }
        snprintf(pre, 80, "%s%s%s", temp, cur_time,
-                strlen(cur_date) && !PRINT_TRUE_TIME(flags) ? " UTC" : "");
+                strlen(cur_date) && !PRINT_LOCAL_TIME(flags) &&
+                !PRINT_TRUE_TIME(flags) ? " UTC" : "");
        pre[79] = '\0';
 
        if (DISPLAY_HORIZONTALLY(flags)) {
@@ -526,8 +539,8 @@ void write_mech_stats(int curr, unsigned long dt, unsigned long long itv,
  * @act_id             Activities to display.
  * @cpu_nr             Number of processors for current activity data file.
  * @rectime            Structure where timestamp (expressed in local time
- *                     or in UTC depending on whether option -T has been
- *                     used or not) can be saved for current record.
+ *                     or in UTC depending on whether options -T/-t have
+ *                     been used or not) can be saved for current record.
  * @loctime            Structure where timestamp (expressed in local time)
  *                     can be saved for current record.
  *
@@ -621,8 +634,8 @@ int write_parsable_stats(int curr, int reset, long *cnt, int use_tm_start,
  * @tab                        Number of tabulations to print.
  * @cpu_nr             Number of processors.
  * @rectime            Structure where timestamp (expressed in local time
- *                     or in UTC depending on whether option -T has been
- *                     used or not) can be saved for current record.
+ *                     or in UTC depending on whether options -T/-t have
+ *                     been used or not) can be saved for current record.
  * @loctime            Structure where timestamp (expressed in local time)
  *                     can be saved for current record.
  *
@@ -701,6 +714,7 @@ int write_textual_stats(int curr, int use_tm_start, int use_tm_end, int reset,
 
        if (*fmt[f_position]->f_timestamp) {
                (*fmt[f_position]->f_timestamp)(&tab, F_BEGIN, cur_date, cur_time,
+                                               !PRINT_LOCAL_TIME(flags) &&
                                                !PRINT_TRUE_TIME(flags), dt);
        }
        if (format == F_XML_OUTPUT) {
@@ -721,6 +735,7 @@ int write_textual_stats(int curr, int use_tm_start, int use_tm_end, int reset,
 
                                        if (*fmt[f_position]->f_timestamp) {
                                                (*fmt[f_position]->f_timestamp)(&tab, F_MAIN, cur_date, cur_time,
+                                                                               !PRINT_LOCAL_TIME(flags) &&
                                                                                !PRINT_TRUE_TIME(flags), dt);
                                        }
                                }
@@ -740,6 +755,7 @@ int write_textual_stats(int curr, int use_tm_start, int use_tm_end, int reset,
 
        if (*fmt[f_position]->f_timestamp) {
                (*fmt[f_position]->f_timestamp)(&tab, F_END, cur_date, cur_time,
+                                               !PRINT_LOCAL_TIME(flags) &&
                                                !PRINT_TRUE_TIME(flags), dt);
        }
 
@@ -757,8 +773,8 @@ int write_textual_stats(int curr, int use_tm_start, int use_tm_end, int reset,
  * @rtype              Record type (RESTART or COMMENT).
  * @ifd                        Input file descriptor.
  * @rectime            Structure where timestamp (expressed in local time
- *                     or in UTC depending on whether option -T has been
- *                     used or not) can be saved for current record.
+ *                     or in UTC depending on whether options -T/-t have
+ *                     been used or not) can be saved for current record.
  * @loctime            Structure where timestamp (expressed in local time)
  *                     can be saved for current record.
  ***************************************************************************
@@ -787,6 +803,7 @@ void sadf_print_special(int curr, int use_tm_start, int use_tm_end, int rtype, i
 
                if (*fmt[f_position]->f_restart) {
                        (*fmt[f_position]->f_restart)(NULL, F_MAIN, cur_date, cur_time,
+                                                     !PRINT_LOCAL_TIME(flags) &&
                                                      !PRINT_TRUE_TIME(flags), &file_hdr);
                }
        }
@@ -801,6 +818,7 @@ void sadf_print_special(int curr, int use_tm_start, int use_tm_end, int rtype, i
 
                if (*fmt[f_position]->f_comment) {
                        (*fmt[f_position]->f_comment)(NULL, F_MAIN, cur_date, cur_time,
+                                                     !PRINT_LOCAL_TIME(flags) &&
                                                      !PRINT_TRUE_TIME(flags), file_comment,
                                                      &file_hdr);
                }
@@ -819,8 +837,8 @@ void sadf_print_special(int curr, int use_tm_start, int use_tm_end, int rtype, i
  * @file_actlst        List of (known or unknown) activities in file.
  * @cpu_nr     Number of processors for current activity data file.
  * @rectime    Structure where timestamp (expressed in local time or in UTC
- *             depending on whether option -T has been used or not) can be
- *             saved for current record.
+ *             depending on whether options -T/-t have been used or not) can
+ *             be saved for current record.
  * @loctime    Structure where timestamp (expressed in local time) can be
  *             saved for current record.
  *
@@ -911,8 +929,8 @@ void rw_curr_act_stats(int ifd, off_t fpos, int *curr, long *cnt, int *eosaf,
  * @file_magic System activity file magic header.
  * @cpu_nr     Number of processors for current activity data file.
  * @rectime    Structure where timestamp (expressed in local time or in UTC
- *             depending on whether option -T has been used or not) can be
- *             saved for current record.
+ *             depending on whether options -T/-t have been used or not) can
+ *             be saved for current record.
  * @loctime    Structure where timestamp (expressed in local time) can be
  *             saved for current record.
  ***************************************************************************
@@ -1139,8 +1157,8 @@ void textual_display_loop(int ifd, struct file_activity *file_actlst, char *dfil
  * @file_actlst        List of (known or unknown) activities in file.
  * @cpu_nr     Number of processors for current activity data file.
  * @rectime    Structure where timestamp (expressed in local time or in UTC
- *             depending on whether option -T has been used or not) can be
- *             saved for current record.
+ *             depending on whether options -T/-t have been used or not) can
+ *             be saved for current record.
  * @loctime    Structure where timestamp (expressed in local time) can be
  *             saved for current record.
  ***************************************************************************
@@ -1472,6 +1490,10 @@ int main(int argc, char **argv)
                                                break;
 
                                        case 'T':
+                                               flags |= S_F_LOCAL_TIME;
+                                               break;
+
+                                       case 't':
                                                flags |= S_F_TRUE_TIME;
                                                break;
                                        
@@ -1565,6 +1587,12 @@ int main(int argc, char **argv)
                dm_major = get_devmap_major();
        }
 
+       /* Options -T, -t and -U are mutually exclusive */
+       if ((PRINT_LOCAL_TIME(flags) + PRINT_TRUE_TIME(flags) +
+           PRINT_SEC_EPOCH(flags)) > 1) {
+               usage(argv[0]);
+       }
+       
        /*
         * Display all the contents of the daily data file if the count parameter
         * was not set on the command line.
diff --git a/sadf.h b/sadf.h
index 9c9f20b39369f75ff2716f474fdcb14019536093..c25a1467ff04f305b3422ec651ab804084bceee2 100644 (file)
--- a/sadf.h
+++ b/sadf.h
@@ -71,9 +71,9 @@
 
 /*
  * Indicate that timestamp can be displayed in local time instead of UTC
- * if option -T has been used.
+ * if option -T or -t has been used.
  */
-#define FO_TRUE_TIME           0x08
+#define FO_LOCAL_TIME          0x08
 
 /*
  * Indicate that all activities will be displayed horizontally
@@ -96,7 +96,7 @@
 #define DISPLAY_GROUPED_STATS(m)       (((m) & FO_GROUPED_STATS)       == FO_GROUPED_STATS)
 #define ACCEPT_HEADER_ONLY(m)          (((m) & FO_HEADER_ONLY)         == FO_HEADER_ONLY)
 #define ACCEPT_BAD_FILE_FORMAT(m)      (((m) & FO_BAD_FILE_FORMAT)     == FO_BAD_FILE_FORMAT)
-#define ACCEPT_TRUE_TIME(m)            (((m) & FO_TRUE_TIME)           == FO_TRUE_TIME)
+#define ACCEPT_LOCAL_TIME(m)           (((m) & FO_LOCAL_TIME)          == FO_LOCAL_TIME)
 #define ACCEPT_HORIZONTALLY(m)         (((m) & FO_HORIZONTALLY)        == FO_HORIZONTALLY)
 #define ACCEPT_SEC_EPOCH(m)            (((m) & FO_SEC_EPOCH)           == FO_SEC_EPOCH)
 #define DISPLAY_FIELD_LIST(m)          (((m) & FO_FIELD_LIST)          == FO_FIELD_LIST)