Add a variable for start/current time to ctdb statistics
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Wed, 2 Jun 2010 03:13:09 +0000 (13:13 +1000)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Wed, 2 Jun 2010 03:14:53 +0000 (13:14 +1000)
and print the time startistics was taken and for how long the statistics have been collected to the "ctdb statistics" output.

client/ctdb_client.c
include/ctdb_private.h
server/ctdb_control.c
tools/ctdb.c

index 4997818bca7cab524aaf605daa6a2fb08338803b..05e54a85d7e653d85be4cb2d4603a4e392cab1f5 100644 (file)
@@ -2925,6 +2925,8 @@ struct ctdb_context *ctdb_init(struct event_context *ev)
                return NULL;
        }
 
+       ctdb->statistics.statistics_start_time = timeval_current();
+
        return ctdb;
 }
 
index 27148459b29780f4ef5af8c59010378925191e56..16e5d60c89b69b5273e05694872c659eb781df03 100644 (file)
@@ -333,6 +333,8 @@ struct ctdb_statistics {
        double max_lockwait_latency;
        double max_childwrite_latency;
        uint32_t num_recoveries;
+       struct timeval statistics_start_time;
+       struct timeval statistics_current_time;
 };
 
 
index 3cd79f1ad80c9c78ed2a2fcccde84c15d3819128..0dbc0d9d0d4773e971bcd7dfc1971b390e21f0d6 100644 (file)
@@ -108,6 +108,8 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
                        }
                }
                ctdb->statistics.recovering = (ctdb->recovery_mode == CTDB_RECOVERY_ACTIVE);
+               ctdb->statistics.statistics_current_time = timeval_current();
+
                outdata->dptr = (uint8_t *)&ctdb->statistics;
                outdata->dsize = sizeof(ctdb->statistics);
                return 0;
@@ -128,6 +130,7 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
        case CTDB_CONTROL_STATISTICS_RESET: {
                CHECK_CONTROL_DATA_SIZE(0);
                ZERO_STRUCT(ctdb->statistics);
+               ctdb->statistics.statistics_start_time = timeval_current();
                return 0;
        }
 
index 69908513e3312c1bf2f59ce8b2b5e9cea653dc2f..c99fbe5230bb65d3c94fdd869558b3d8331c9e44 100644 (file)
@@ -162,6 +162,7 @@ static void show_statistics(struct ctdb_statistics *s)
        int i;
        const char *prefix=NULL;
        int preflen=0;
+       int tmp, days, hours, minutes, seconds;
        const struct {
                const char *name;
                uint32_t offset;
@@ -200,7 +201,19 @@ static void show_statistics(struct ctdb_statistics *s)
                STATISTICS_FIELD(memory_used),
                STATISTICS_FIELD(max_hop_count),
        };
+       tmp = s->statistics_current_time.tv_sec - s->statistics_start_time.tv_sec;
+       seconds = tmp%60;
+       tmp    /= 60;
+       minutes = tmp%60;
+       tmp    /= 60;
+       hours   = tmp%24;
+       tmp    /= 24;
+       days    = tmp;
+
        printf("CTDB version %u\n", CTDB_VERSION);
+       printf("Current time of statistics  :                %s", ctime(&s->statistics_start_time.tv_sec));
+       printf("Statistics collected since  : (%03d %02d:%02d:%02d) %s", days, hours, minutes, seconds, ctime(&s->statistics_start_time.tv_sec));
+
        for (i=0;i<ARRAY_SIZE(fields);i++) {
                if (strchr(fields[i].name, '.')) {
                        preflen = strcspn(fields[i].name, ".")+1;
@@ -223,6 +236,8 @@ static void show_statistics(struct ctdb_statistics *s)
        printf(" %-30s     %.6f sec\n", "max_call_latency", s->max_call_latency);
        printf(" %-30s     %.6f sec\n", "max_lockwait_latency", s->max_lockwait_latency);
        printf(" %-30s     %.6f sec\n", "max_childwrite_latency", s->max_childwrite_latency);
+       printf(" %-30s     %.6f sec\n", "max_childwrite_latency", s->max_childwrite_latency);
+
        talloc_free(tmp_ctx);
 }