On 2014年07月10日 19:52, Hitoshi Mitake wrote:
At Mon,  7 Jul 2014 20:42:52 +0800,
Ruoyu wrote:
As title.

Signed-off-by: Ruoyu <lian...@ucweb.com>
---
  dog/dog.c      |  7 +++++++
  include/util.h |  4 ++++
  lib/util.c     | 25 +++++++++++++++++++++++++
  3 files changed, 36 insertions(+)
This patch lets dog print elapsed time unconditionally. It breaks
existing software e.g. OpenStack Cinder because they have assumption
about the format of dog's output. Could you add a new option for
printing elapsed time?

e.g. dog -t vdi list, -t means dog should print elapsed time
Thanks for you advise.

Thanks,
Hitoshi

diff --git a/dog/dog.c b/dog/dog.c
index 7d1153d..46992ec 100644
--- a/dog/dog.c
+++ b/dog/dog.c
@@ -453,6 +453,9 @@ int main(int argc, char **argv)
        const struct sd_option *sd_opts;
        uint8_t sdhost[16];
        int sdport;
+       struct timespec start, end;
+
+       start = get_time_tick();
log_dog_operation(argc, argv); @@ -565,5 +568,9 @@ int main(int argc, char **argv)
        ret = command_fn(argc, argv);
        if (ret == EXIT_USAGE)
                subcommand_usage(argv[1], argv[2], EXIT_USAGE);
+
+       end = get_time_tick();
+       printf("\nElapsed time: %.3lf seconds\n",
+                       get_time_interval(&start, &end));
        return ret;
  }
diff --git a/include/util.h b/include/util.h
index c7a1921..d230f7f 100644
--- a/include/util.h
+++ b/include/util.h
@@ -125,6 +125,10 @@ int atomic_create_and_write(const char *path, const char 
*buf, size_t len,
  void find_zero_blocks(const void *buf, uint64_t *poffset, uint32_t *plen);
  void trim_zero_blocks(void *buf, uint64_t *poffset, uint32_t *plen);
+struct timespec get_time_tick(void);
+double get_time_interval(const struct timespec *start,
+                                                const struct timespec *end);
+
  /* a type safe version of qsort() */
  #define xqsort(base, nmemb, compar)                                   \
  ({                                                                    \
diff --git a/lib/util.c b/lib/util.c
index 408fc19..9a3adcd 100644
--- a/lib/util.c
+++ b/lib/util.c
@@ -806,3 +806,28 @@ void trim_zero_blocks(void *buf, uint64_t *poffset, 
uint32_t *plen)
        if (orig_offset < *poffset)
                memmove(p, p + *poffset - orig_offset, *plen);
  }
+
+struct timespec get_time_tick(void)
+{
+       struct timespec ts;
+       int ret;
+
+       ts.tv_sec = 0;
+       ts.tv_nsec = 0;
+
+       ret = clock_gettime(CLOCK_MONOTONIC, &ts);
+       if (ret < 0)
+               sd_err("clock_gettime failure: %m");
+
+       return ts;
+}
+
+double get_time_interval(const struct timespec *start,
+                                                const struct timespec *end)
+{
+       assert(start);
+       assert(end);
+
+       return ((end->tv_nsec - start->tv_nsec) * 0.000000001)
+                       + end->tv_sec - start->tv_sec;
+}
--
1.8.3.2


--
sheepdog mailing list
sheepdog@lists.wpkg.org
http://lists.wpkg.org/mailman/listinfo/sheepdog


--
sheepdog mailing list
sheepdog@lists.wpkg.org
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to