From 0782ca45d83508dbf4c09cba1495f76ae201d89d Mon Sep 17 00:00:00 2001 From: ktx-vaidehi <134508096+ktx-vaidehi@users.noreply.github.com> Date: Wed, 6 Aug 2025 15:36:07 +0530 Subject: [PATCH] fix: dashboard time conversion (#7869) (#7872) ### **User description** - #7864 ___ ### **PR Type** Bug fix ___ ### **Description** - Removed outdated timestamp converter function - Introduced inline microsecond timestamp parsing - Unified ISO string and Date handling - Formatted dates using timezone consistently ___ ### Diagram Walkthrough ```mermaid flowchart LR A["val (any)"] --> B{"16-digit micro?"} B -- yes --> C["timestamp = parseInt(val)/1000"] B -- no --> D{"string ISO?"} D -- yes --> E["timestamp = `${val}Z`"] D -- no --> F["timestamp = new Date(val).getTime()/1000"] C --> G["formatDate(toZonedTime(timestamp, timezone))"] E --> G F --> G ```

File Walkthrough

Relevant files
Bug fix
convertDataIntoUnitValue.ts
Remove convert16DigitTimestamp utility                                     

web/src/utils/dashboard/convertDataIntoUnitValue.ts
  • Removed convert16DigitTimestamp function
  • Deleted associated JSDoc comments
+0/-28   
convertTableData.ts
Inline unified timestamp conversion                                           

web/src/utils/dashboard/convertTableData.ts
  • Dropped convert16DigitTimestamp import
  • Added inline timestamp handling in data conversion
  • Branches for microseconds, ISO strings, Date objects
+42/-29 
___ --- .../dashboard/convertDataIntoUnitValue.ts | 28 -------- web/src/utils/dashboard/convertTableData.ts | 71 +++++++++++-------- 2 files changed, 42 insertions(+), 57 deletions(-) diff --git a/web/src/utils/dashboard/convertDataIntoUnitValue.ts b/web/src/utils/dashboard/convertDataIntoUnitValue.ts index 863410390d..eac353e6b4 100644 --- a/web/src/utils/dashboard/convertDataIntoUnitValue.ts +++ b/web/src/utils/dashboard/convertDataIntoUnitValue.ts @@ -307,34 +307,6 @@ export const isTimeStamp = (sample: any, treatAsNonTimestamp: any) => { } }; -/** - * Converts 16-digit microsecond timestamps to readable date format - * @param value - The value to convert (can be single value or array) - * @returns The converted value(s) in date format - */ -export const convert16DigitTimestamp = (value: any): any => { - // If value is an array, convert each element - if (Array.isArray(value)) { - return value.map((item: any) => convert16DigitTimestamp(item)); - } - - // If value is a string or number, convert it - if (typeof value === "string" || typeof value === "number") { - const strValue = value.toString(); - const microsecondsPattern = /^\d{16}$/; - - if (microsecondsPattern.test(strValue)) { - // Convert microseconds to milliseconds (divide by 1000) - const milliseconds = parseInt(strValue) / 1000; - const date = new Date(milliseconds); - return formatDate(date); - } - } - - // Return original value if not a 16-digit timestamp - return value; -}; - export function convertOffsetToSeconds( offset: string, endISOTimestamp: number, diff --git a/web/src/utils/dashboard/convertTableData.ts b/web/src/utils/dashboard/convertTableData.ts index 78216481ff..a94f192d3b 100644 --- a/web/src/utils/dashboard/convertTableData.ts +++ b/web/src/utils/dashboard/convertTableData.ts @@ -21,7 +21,6 @@ import { getUnitValue, isTimeSeries, isTimeStamp, - convert16DigitTimestamp, } from "./convertDataIntoUnitValue"; const applyValueMapping = (value: any, mappings: any) => { @@ -226,17 +225,20 @@ export const convertTableData = ( return valueMapping; } - // Check if the value is a 16-digit timestamp and convert it - const convertedVal = convert16DigitTimestamp(val); + // Handle 16-digit microsecond timestamps + let timestamp; + if (typeof val === "string" && /^\d{16}$/.test(val)) { + // 16-digit string represents microseconds, convert to milliseconds + timestamp = parseInt(val) / 1000; + } else if (typeof val === "string") { + // Regular ISO string, append Z if needed + timestamp = `${val}Z`; + } else { + // Number or Date object + timestamp = new Date(val)?.getTime() / 1000; + } - return formatDate( - toZonedTime( - typeof convertedVal === "string" - ? `${convertedVal}Z` - : new Date(convertedVal)?.getTime() / 1000, - store.state.timezone, - ), - ); + return formatDate(toZonedTime(timestamp, store.state.timezone)); }; } return obj; @@ -378,17 +380,20 @@ export const convertTableData = ( return valueMapping; } - // Check if the value is a 16-digit timestamp and convert it - const convertedVal = convert16DigitTimestamp(val); + // Handle 16-digit microsecond timestamps + let timestamp; + if (typeof val === "string" && /^\d{16}$/.test(val)) { + // 16-digit string represents microseconds, convert to milliseconds + timestamp = parseInt(val) / 1000; + } else if (typeof val === "string") { + // Regular ISO string, append Z if needed + timestamp = `${val}Z`; + } else { + // Number or Date object + timestamp = new Date(val)?.getTime() / 1000; + } - return formatDate( - toZonedTime( - typeof convertedVal === "string" - ? `${convertedVal}Z` - : new Date(convertedVal)?.getTime() / 1000, - store.state.timezone, - ), - ); + return formatDate(toZonedTime(timestamp, store.state.timezone)); }; } @@ -402,14 +407,22 @@ export const convertTableData = ( (acc: any, curr: any, reduceIndex: any) => { const value = searchQueryData[0][reduceIndex][it.alias] ?? ""; acc[curr] = histogramFields.includes(it.alias) - ? formatDate( - toZonedTime( - typeof convert16DigitTimestamp(value) === "string" - ? `${convert16DigitTimestamp(value)}Z` - : new Date(convert16DigitTimestamp(value))?.getTime() / 1000, - store.state.timezone, - ), - ) + ? (() => { + // Handle 16-digit microsecond timestamps + let timestamp; + if (typeof value === "string" && /^\d{16}$/.test(value)) { + // 16-digit string represents microseconds, convert to milliseconds + timestamp = parseInt(value) / 1000; + } else if (typeof value === "string") { + // Regular ISO string, append Z if needed + timestamp = `${value}Z`; + } else { + // Number or Date object + timestamp = new Date(value)?.getTime() / 1000; + } + + return formatDate(toZonedTime(timestamp, store.state.timezone)); + })() : value; return acc; },