]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
scriptreplay: add --summary
authorKarel Zak <kzak@redhat.com>
Fri, 28 Jun 2019 08:19:40 +0000 (10:19 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 8 Oct 2019 11:11:53 +0000 (13:11 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
term-utils/scriptreplay.1
term-utils/scriptreplay.c

index 70181a6cf5b6ccb94bb26124d61c58bd8de4098e..f0593a27d8df69c35d70f775e479d340e7f489bb 100644 (file)
@@ -77,6 +77,12 @@ Set the maximum delay between transcript updates to
 of seconds.  The argument is a floating point number.  This can be used to
 avoid long pauses in the transcript replay.
 .TP
+.BR " \-\-summary "
+Display details about session recorded in the specified timing file and exit.  The session has 
+to be recorded by "advanced" format (see
+.B script (1)
+option \fB\-\-logging\-format\fR for more details).
+.TP
 .BR \-x , " \-\-stream " \fItype\fR
 Forces scriptreplay to print only specified stream.  The supported stream types
 are 'in' or 'out'.  This option is recommended for multi-stream logs (e.g. --log-io)
index 1aaf6753bbb446b5c81f761df0cb8793d4dd5de5..0693c1719067b929fc3f5009728a87c76ded6940 100644 (file)
@@ -342,7 +342,7 @@ static int replay_get_next_step(struct replay_setup *stp, char *streams, struct
 
        assert(stp);
        assert(stp->timing_fp);
-       assert(xstep && *xstep);
+       assert(xstep);
 
        step = &stp->step;
        *xstep = NULL;
@@ -434,7 +434,7 @@ static int replay_emit_step_data(struct replay_setup *stp, struct replay_step *s
                assert(step->name);
                assert(step->value);
                dprintf(fd, "%10s: %s\n", step->name, step->value);
-               DBG(LOG, ul_debug("log signal emited"));
+               DBG(LOG, ul_debug("log header emited"));
                return 0;
        default:
                break;          /* continue with real data */
@@ -518,6 +518,7 @@ usage(void)
        fputs(_(" -s, --typescript <file> deprecated alist to -O\n"), out);
 
        fputs(USAGE_SEPARATOR, out);
+       fputs(_("     --summary           display overview about recorded session and exit\n"), out);
        fputs(_(" -d, --divisor <num>     speed up or slow down execution with time divisor\n"), out);
        fputs(_(" -m, --maxdelay <num>    wait at most this many seconds between updates\n"), out);
        fputs(_(" -x, --stream <name>     stream type (out, in, signal or info)\n"), out);
@@ -580,7 +581,7 @@ int
 main(int argc, char *argv[])
 {
        struct replay_setup setup = { .nlogs = 0 };
-       struct replay_step *step;
+       struct replay_step *step = NULL;
        char streams[6] = {0};          /* IOSI - in, out, signal,info */
        const char *log_out = NULL,
                   *log_in = NULL,
@@ -588,7 +589,10 @@ main(int argc, char *argv[])
                   *log_tm = NULL;
        double divi = 1, maxdelay = 0;
        int diviopt = FALSE, maxdelayopt = FALSE, idx;
-       int ch, rc, crmode = REPLAY_CRMODE_AUTO;
+       int ch, rc, crmode = REPLAY_CRMODE_AUTO, summary = 0;
+       enum {
+               OPT_SUMMARY = CHAR_MAX + 1
+       };
 
        static const struct option longopts[] = {
                { "cr-mode",    required_argument,      0, 'c' },
@@ -600,6 +604,7 @@ main(int argc, char *argv[])
                { "divisor",    required_argument,      0, 'd' },
                { "maxdelay",   required_argument,      0, 'm' },
                { "stream",     required_argument,      0, 'x' },
+               { "summary",    no_argument,            0, OPT_SUMMARY },
                { "version",    no_argument,            0, 'V' },
                { "help",       no_argument,            0, 'h' },
                { NULL,         0, 0, 0 }
@@ -670,6 +675,9 @@ main(int argc, char *argv[])
                        else
                                errx(EXIT_FAILURE, _("unsupported stream name: '%s'"), optarg);
                        break;
+               case OPT_SUMMARY:
+                       summary = 1;
+                       break;
                case 'V':
                        print_version(EXIT_SUCCESS);
                case 'h':
@@ -682,6 +690,9 @@ main(int argc, char *argv[])
        argv += optind;
        idx = 0;
 
+       if (summary)
+               streams[0] = 'H', streams[1] = '\0';
+
        if (!log_tm && idx < argc)
                log_tm = argv[idx++];
        if (!log_out && !log_in && !log_io)
@@ -726,11 +737,13 @@ main(int argc, char *argv[])
                if (rc)
                        break;
 
-               step->delay /= divi;
-               if (maxdelayopt && step->delay > maxdelay)
-                       step->delay = maxdelay;
-               if (step->delay > SCRIPT_MIN_DELAY)
-                       delay_for(step->delay);
+               if (!summary) {
+                       step->delay /= divi;
+                       if (maxdelayopt && step->delay > maxdelay)
+                               step->delay = maxdelay;
+                       if (step->delay > SCRIPT_MIN_DELAY)
+                               delay_for(step->delay);
+               }
 
                rc = replay_emit_step_data(&setup, step, STDOUT_FILENO);
        } while (rc == 0);