Add support for relative timestamps

Submitted by Sagar Tewari on April 9, 2019, 12:38 a.m.

Details

Message ID CAHLa8=ww2_puaCYbrMAGu78OMyVKCi7toGCe73NiBOrFtgK54A@mail.gmail.com
State New
Series "Add support for relative timestamps"
Headers show

Commit Message

Sagar Tewari April 9, 2019, 12:38 a.m.
This patch adds support for relative timestamps in log. Fixes #341 on
github. It's incomplete right now. The decision to print relative
timestamps is handed over to flags. For 'criu' command line tool, the flag
could be tied to an argument. How should 'compel' set that flag?

From 09831c02b4807c1167d46a5b2474d0a7d1aec76f Mon Sep 17 00:00:00 2001
From: Sagar Tewari <sagartewari01@gmail.com>
Date: Tue, 9 Apr 2019 04:50:42 +0530
Subject: [PATCH] added relative timestamps, flag TODO

Signed-off-by: Sagar Tewari <sagartewari01@gmail.com>
---
 compel/plugins/std/log.c | 15 +++++++++++++--
 criu/log.c               | 12 +++++++++++-
 2 files changed, 24 insertions(+), 3 deletions(-)

  buffer[TS_BUF_OFF - 1] = ' '; /* kill the '\0' produced by snprintf */

Patch hide | download patch | download mbox

diff --git a/compel/plugins/std/log.c b/compel/plugins/std/log.c
index 403ea46f..d1408737 100644
--- a/compel/plugins/std/log.c
+++ b/compel/plugins/std/log.c
@@ -13,6 +13,8 @@  struct simple_buf {
  void (*flush)(struct simple_buf *b);
 };

+int print_ts_diffs = 1;
+
 static int logfd = -1;
 static int cur_loglevel = COMPEL_DEFAULT_LOGLEVEL;
 static struct timeval start;
@@ -41,6 +43,7 @@  static inline void pad_num(char **s, int *n, int nr)

 static void sbuf_log_init(struct simple_buf *b)
 {
+    static struct timeval last_t;
  char pbuf[12], *s;
  int n;

@@ -51,11 +54,19 @@  static void sbuf_log_init(struct simple_buf *b)
  */
  b->bp = b->buf;

- if (start.tv_sec != 0) {
+ if (start.tv_sec != 0 || print_ts_diffs) {
  struct timeval now;

  sys_gettimeofday(&now, NULL);
- timediff(&start, &now);
+        struct timeval *pivot = print_ts_diffs ? &last_t : &start;
+        struct timeval curr = now;
+        timediff(pivot, &now);
+        if (now.tv_sec == curr.tv_sec && now.tv_usec == curr.tv_usec) {
+            // first entry will be zero
+            now.tv_sec = 0;
+            now.tv_usec = 0;
+        }
+        if (print_ts_diffs) last_t = curr;

  /* Seconds */
  n = std_vprint_num(pbuf, sizeof(pbuf), (unsigned)now.tv_sec, &s);
diff --git a/criu/log.c b/criu/log.c
index 060d1ee6..575ab863 100644
--- a/criu/log.c
+++ b/criu/log.c
@@ -26,6 +26,7 @@ 
 #include "../soccr/soccr.h"
 #include "compel/log.h"

+int print_ts_diffs = 1;

 #define DEFAULT_LOGFD STDERR_FILENO
 /* Enable timestamps if verbosity is increased from default */
@@ -67,10 +68,19 @@  static void timediff(struct timeval *from, struct
timeval *to)

 static void print_ts(void)
 {
+    static struct timeval last_t;
  struct timeval t;

  gettimeofday(&t, NULL);
- timediff(&start, &t);
+    struct timeval *pivot = print_ts_diffs ? &last_t : &start;
+    struct timeval curr = t;
+ timediff(pivot, &t);
+ if (t.tv_sec == curr.tv_sec && t.tv_usec == curr.tv_usec) {
+     // first entry will be zero
+     t.tv_sec = 0;
+     t.tv_usec = 0;
+ }
+ if (print_ts_diffs) last_t = curr;
  snprintf(buffer, TS_BUF_OFF,
  "(%02u.%06u)", (unsigned)t.tv_sec, (unsigned)t.tv_usec);