| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import {assert} from 'chrome://resources/js/assert.js'; |
| |
| import type {LogEvent} from './browser_proxy.js'; |
| |
| /** |
| * Helper function to convert undefined UMA log types to "Unknown" string. |
| * @param type The UMA log's type (i.e., ongoing, independent, or stability). |
| * @returns The UMA log's type. "Unknown" if type is undefined. |
| */ |
| export function umaLogTypeToString(type: string|undefined) { |
| if (!type) { |
| return 'Unknown'; |
| } |
| return type; |
| } |
| |
| /** |
| * Converts a given Unix timestamp into a human-readable string. |
| * @param timestampSeconds The timestamp string (seconds since Epoch). |
| * @return A human-readable representation of the timestamp (e.g "01/01/1970, |
| * 12:00:00 AM"). |
| */ |
| export function timestampToString(timestampSeconds: string) { |
| if (!timestampSeconds.length) { |
| // This case should not normally happen, but can happen when the table is |
| // empty (a dummy log |EMPTY_LOG| is added, which has an empty timestamp). |
| return 'N/A'; |
| } |
| |
| const timestampInt = parseInt(timestampSeconds); |
| assert(!isNaN(timestampInt)); |
| // Multiply by 1000 since the constructor expects milliseconds, but the |
| // timestamps are in seconds. |
| return new Date(timestampInt * 1000).toLocaleString(); |
| } |
| |
| /** |
| * Converts the size of a log to a human-readable string. |
| * @param size The size of the log in bytes. |
| * @returns The size of the log in KiB as a string. |
| */ |
| export function sizeToString(size: number) { |
| if (size < 0) { |
| // This case should not normally happen, but can happen when the table is |
| // empty (a dummy log |EMPTY_LOG| is added, which has size -1). |
| return 'N/A'; |
| } |
| return `${(size / 1024).toFixed(2)} KiB`; |
| } |
| |
| /** |
| * Converts a log event to a human-readable string. |
| * @param event The log event. |
| * @returns A human-readable string of the log event. |
| */ |
| export function logEventToString(event: LogEvent) { |
| let result = `[${new Date(event.timestampMs).toISOString()}] ${event.event}`; |
| if (event.message) { |
| result += ` (${event.message})`; |
| } |
| return result; |
| } |
| |
| /** |
| * Gets the string to display when the events div of a log are collapsed. |
| * @param events The list of events of the log. |
| * @returns A human-readable string of the last event that occurred. |
| */ |
| export function getEventsPeekString(events: LogEvent[]) { |
| if (!events.length) { |
| return 'N/A'; |
| } |
| // Need to assert that last element exists, otherwise the call to |
| // logEventToString() fails to compile. |
| const lastEvent = events[events.length - 1]; |
| assert(lastEvent); |
| return logEventToString(lastEvent); |
| } |