shared/format-table: optionally print timestamps without "left"
This just adds the base functionality and some unit tests. With TABLE_TIMESTAMP_RELATIVE we print "5s ago" and "5s left", with the new TABLE_TIMESTAMP_LEFT, we print "5s ago" but "5s". This is more useful for cases where we generally only want to print timestamps in the future.
This commit is contained in:
@@ -297,6 +297,7 @@ static size_t table_data_size(TableDataType type, const void *data) {
|
||||
case TABLE_TIMESTAMP:
|
||||
case TABLE_TIMESTAMP_UTC:
|
||||
case TABLE_TIMESTAMP_RELATIVE:
|
||||
case TABLE_TIMESTAMP_LEFT:
|
||||
case TABLE_TIMESTAMP_DATE:
|
||||
case TABLE_TIMESPAN:
|
||||
case TABLE_TIMESPAN_MSEC:
|
||||
@@ -896,6 +897,7 @@ int table_add_many_internal(Table *t, TableDataType first_type, ...) {
|
||||
case TABLE_TIMESTAMP:
|
||||
case TABLE_TIMESTAMP_UTC:
|
||||
case TABLE_TIMESTAMP_RELATIVE:
|
||||
case TABLE_TIMESTAMP_LEFT:
|
||||
case TABLE_TIMESTAMP_DATE:
|
||||
case TABLE_TIMESPAN:
|
||||
case TABLE_TIMESPAN_MSEC:
|
||||
@@ -1304,6 +1306,7 @@ static int cell_data_compare(TableData *a, size_t index_a, TableData *b, size_t
|
||||
case TABLE_TIMESTAMP:
|
||||
case TABLE_TIMESTAMP_UTC:
|
||||
case TABLE_TIMESTAMP_RELATIVE:
|
||||
case TABLE_TIMESTAMP_LEFT:
|
||||
case TABLE_TIMESTAMP_DATE:
|
||||
return CMP(a->timestamp, b->timestamp);
|
||||
|
||||
@@ -1537,11 +1540,14 @@ static const char *table_data_format(Table *t, TableData *d, bool avoid_uppercas
|
||||
case TABLE_TIMESTAMP:
|
||||
case TABLE_TIMESTAMP_UTC:
|
||||
case TABLE_TIMESTAMP_RELATIVE:
|
||||
case TABLE_TIMESTAMP_LEFT:
|
||||
case TABLE_TIMESTAMP_DATE: {
|
||||
_cleanup_free_ char *p = NULL;
|
||||
char *ret;
|
||||
|
||||
p = new(char, d->type == TABLE_TIMESTAMP_RELATIVE ? FORMAT_TIMESTAMP_RELATIVE_MAX : FORMAT_TIMESTAMP_MAX);
|
||||
p = new(char,
|
||||
IN_SET(d->type, TABLE_TIMESTAMP_RELATIVE, TABLE_TIMESTAMP_LEFT) ?
|
||||
FORMAT_TIMESTAMP_RELATIVE_MAX : FORMAT_TIMESTAMP_MAX);
|
||||
if (!p)
|
||||
return NULL;
|
||||
|
||||
@@ -1552,7 +1558,9 @@ static const char *table_data_format(Table *t, TableData *d, bool avoid_uppercas
|
||||
else if (d->type == TABLE_TIMESTAMP_DATE)
|
||||
ret = format_timestamp_style(p, FORMAT_TIMESTAMP_MAX, d->timestamp, TIMESTAMP_DATE);
|
||||
else
|
||||
ret = format_timestamp_relative(p, FORMAT_TIMESTAMP_RELATIVE_MAX, d->timestamp);
|
||||
ret = format_timestamp_relative_full(
|
||||
p, FORMAT_TIMESTAMP_RELATIVE_MAX, d->timestamp,
|
||||
/* implicit_left= */ d->type == TABLE_TIMESTAMP_LEFT);
|
||||
if (!ret)
|
||||
return "-";
|
||||
|
||||
@@ -2589,6 +2597,7 @@ static int table_data_to_json(TableData *d, JsonVariant **ret) {
|
||||
case TABLE_TIMESTAMP:
|
||||
case TABLE_TIMESTAMP_UTC:
|
||||
case TABLE_TIMESTAMP_RELATIVE:
|
||||
case TABLE_TIMESTAMP_LEFT:
|
||||
case TABLE_TIMESTAMP_DATE:
|
||||
if (d->timestamp == USEC_INFINITY)
|
||||
return json_variant_new_null(ret);
|
||||
|
||||
@@ -23,6 +23,7 @@ typedef enum TableDataType {
|
||||
TABLE_TIMESTAMP,
|
||||
TABLE_TIMESTAMP_UTC,
|
||||
TABLE_TIMESTAMP_RELATIVE,
|
||||
TABLE_TIMESTAMP_LEFT,
|
||||
TABLE_TIMESTAMP_DATE,
|
||||
TABLE_TIMESPAN,
|
||||
TABLE_TIMESPAN_MSEC,
|
||||
|
||||
Reference in New Issue
Block a user