X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=lib%2Ftable.c;h=46281703fedc23134bd965750fac4fe4a63b1096;hb=0ef165ecb57943e17a8ee8270df68ffb8d032e29;hp=86366d0dca90cdaf2bf3e6f1e5771901f585a01b;hpb=c6a4125250b97d41d18dbeeea13043a86e9b8f55;p=sliver-openvswitch.git diff --git a/lib/table.c b/lib/table.c index 86366d0dc..46281703f 100644 --- a/lib/table.c +++ b/lib/table.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, 2011 Nicira Networks. + * Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,11 +18,11 @@ #include "table.h" -#include - #include "dynamic-string.h" #include "json.h" #include "ovsdb-data.h" +#include "ovsdb-error.h" +#include "timeval.h" #include "util.h" struct column { @@ -54,6 +54,7 @@ cell_to_text(struct cell *cell, const struct table_style *style) cell->text = ds_steal_cstr(&s); } else { cell->text = json_to_string(cell->json, JSSF_SORT); + ovsdb_error_destroy(error); } } } else { @@ -121,6 +122,14 @@ table_set_caption(struct table *table, char *caption) table->caption = caption; } +/* Turns printing a timestamp along with 'table' on or off, according to + * 'timestamp'. */ +void +table_set_timestamp(struct table *table, bool timestamp) +{ + table->timestamp = timestamp; +} + /* Adds a new column to 'table' just to the right of any existing column, with * 'heading' as a title for the column. 'heading' must be a valid printf() * format specifier. @@ -132,7 +141,7 @@ table_add_column(struct table *table, const char *heading, ...) struct column *column; va_list args; - assert(!table->n_rows); + ovs_assert(!table->n_rows); if (table->n_columns >= table->allocated_columns) { table->columns = x2nrealloc(table->columns, &table->allocated_columns, sizeof *table->columns); @@ -193,8 +202,8 @@ table_add_cell(struct table *table) { size_t x, y; - assert(table->n_rows > 0); - assert(table->current_column < table->n_columns); + ovs_assert(table->n_rows > 0); + ovs_assert(table->current_column < table->n_columns); x = table->current_column++; y = table->n_rows - 1; @@ -209,6 +218,22 @@ table_print_table_line__(struct ds *line) ds_clear(line); } +static char * +table_format_timestamp__(void) +{ + return xastrftime_msec("%Y-%m-%d %H:%M:%S.###", time_wall_msec(), true); +} + +static void +table_print_timestamp__(const struct table *table) +{ + if (table->timestamp) { + char *s = table_format_timestamp__(); + puts(s); + free(s); + } +} + static void table_print_table__(const struct table *table, const struct table_style *style) { @@ -221,6 +246,8 @@ table_print_table__(const struct table *table, const struct table_style *style) putchar('\n'); } + table_print_timestamp__(table); + if (table->caption) { puts(table->caption); } @@ -284,6 +311,8 @@ table_print_list__(const struct table *table, const struct table_style *style) putchar('\n'); } + table_print_timestamp__(table); + if (table->caption) { puts(table->caption); } @@ -355,6 +384,8 @@ table_print_html__(const struct table *table, const struct table_style *style) { size_t x, y; + table_print_timestamp__(table); + fputs("\n", stdout); if (table->caption) { @@ -425,6 +456,8 @@ table_print_csv__(const struct table *table, const struct table_style *style) putchar('\n'); } + table_print_timestamp__(table); + if (table->caption) { puts(table->caption); } @@ -463,6 +496,11 @@ table_print_json__(const struct table *table, const struct table_style *style) if (table->caption) { json_object_put_string(json, "caption", table->caption); } + if (table->timestamp) { + char *s = table_format_timestamp__(); + json_object_put_string(json, "time", s); + free(s); + } headings = json_array_create_empty(); for (x = 0; x < table->n_columns; x++) { @@ -478,8 +516,10 @@ table_print_json__(const struct table *table, const struct table_style *style) const struct cell *cell = table_cell__(table, y, x); if (cell->text) { json_array_add(row, json_string_create(cell->text)); - } else { + } else if (cell->json) { json_array_add(row, json_clone(cell->json)); + } else { + json_array_add(row, json_null_create()); } } json_array_add(data, row);