From 4eafabb37af78f86beec3ce129879870b2533d2e Mon Sep 17 00:00:00 2001 From: Sven Klemm Date: Thu, 30 Jul 2020 17:25:56 +0200 Subject: [PATCH] Fix telemetry installed_time format This patch changes the telemetry code to always send the installed_time timestamp AS ISO8601. Previously it was depending on local settings leading to timestamps not processable by the telemetry receiver. --- src/telemetry/telemetry.c | 13 ++++++++++--- test/expected/telemetry.out | 14 ++++++++++++++ test/sql/telemetry.sql | 13 +++++++++++++ 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/telemetry/telemetry.c b/src/telemetry/telemetry.c index c83196ed1df..80b362893bd 100644 --- a/src/telemetry/telemetry.c +++ b/src/telemetry/telemetry.c @@ -296,6 +296,15 @@ get_pgversion_string() return buf->data; } +#define ISO8601_FORMAT "YYYY-MM-DD\"T\"HH24:MI:SSOF" + +static char * +format_iso8601(Datum value) +{ + return TextDatumGetCString( + DirectFunctionCall2(timestamptz_to_char, value, CStringGetTextDatum(ISO8601_FORMAT))); +} + static StringInfo build_version_body(void) { @@ -320,9 +329,7 @@ build_version_body(void) DirectFunctionCall1(uuid_out, ts_telemetry_metadata_get_exported_uuid()))); ts_jsonb_add_str(parse_state, REQ_INSTALL_TIME, - DatumGetCString( - DirectFunctionCall1(timestamptz_out, - ts_telemetry_metadata_get_install_timestamp()))); + format_iso8601(ts_telemetry_metadata_get_install_timestamp())); ts_jsonb_add_str(parse_state, REQ_INSTALL_METHOD, TIMESCALEDB_INSTALL_METHOD); diff --git a/test/expected/telemetry.out b/test/expected/telemetry.out index 00cc4715b0e..4c9c878009e 100644 --- a/test/expected/telemetry.out +++ b/test/expected/telemetry.out @@ -491,3 +491,17 @@ SELECT json_object_field(get_telemetry_report()::json,'num_hypertables'); "1" (1 row) +set datestyle to iso; +-- check that installed_time formatting in telemetry report does not depend on local date settings +SELECT json_object_field_text(get_telemetry_report()::json,'installed_time') as installed_time +\gset +set datestyle to sql; +SELECT json_object_field_text(get_telemetry_report()::json,'installed_time') as installed_time2 +\gset +SELECT :'installed_time' = :'installed_time2' AS equal, length(:'installed_time'), length(:'installed_time2'); + equal | length | length +-------+--------+-------- + t | 22 | 22 +(1 row) + +RESET datestyle; diff --git a/test/sql/telemetry.sql b/test/sql/telemetry.sql index 30b56f20d27..5af10115a38 100644 --- a/test/sql/telemetry.sql +++ b/test/sql/telemetry.sql @@ -187,3 +187,16 @@ CREATE TABLE device_readings ( SELECT table_name FROM create_hypertable('device_readings', 'observation_time'); SELECT json_object_field(get_telemetry_report()::json,'num_hypertables'); + +set datestyle to iso; +-- check that installed_time formatting in telemetry report does not depend on local date settings +SELECT json_object_field_text(get_telemetry_report()::json,'installed_time') as installed_time +\gset +set datestyle to sql; +SELECT json_object_field_text(get_telemetry_report()::json,'installed_time') as installed_time2 +\gset + +SELECT :'installed_time' = :'installed_time2' AS equal, length(:'installed_time'), length(:'installed_time2'); + +RESET datestyle; +