1*6777b538SAndroid Build Coastguard Worker// Copyright 2022 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker// found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Workerimport {assert} from 'chrome://resources/js/assert.js'; 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Workerimport type {LogEvent} from './browser_proxy.js'; 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker/** 10*6777b538SAndroid Build Coastguard Worker * Helper function to convert undefined UMA log types to "Unknown" string. 11*6777b538SAndroid Build Coastguard Worker * @param type The UMA log's type (i.e., ongoing, independent, or stability). 12*6777b538SAndroid Build Coastguard Worker * @returns The UMA log's type. "Unknown" if type is undefined. 13*6777b538SAndroid Build Coastguard Worker */ 14*6777b538SAndroid Build Coastguard Workerexport function umaLogTypeToString(type: string|undefined) { 15*6777b538SAndroid Build Coastguard Worker if (!type) { 16*6777b538SAndroid Build Coastguard Worker return 'Unknown'; 17*6777b538SAndroid Build Coastguard Worker } 18*6777b538SAndroid Build Coastguard Worker return type; 19*6777b538SAndroid Build Coastguard Worker} 20*6777b538SAndroid Build Coastguard Worker 21*6777b538SAndroid Build Coastguard Worker/** 22*6777b538SAndroid Build Coastguard Worker * Converts a given Unix timestamp into a human-readable string. 23*6777b538SAndroid Build Coastguard Worker * @param timestampSeconds The timestamp string (seconds since Epoch). 24*6777b538SAndroid Build Coastguard Worker * @return A human-readable representation of the timestamp (e.g "01/01/1970, 25*6777b538SAndroid Build Coastguard Worker * 12:00:00 AM"). 26*6777b538SAndroid Build Coastguard Worker */ 27*6777b538SAndroid Build Coastguard Workerexport function timestampToString(timestampSeconds: string) { 28*6777b538SAndroid Build Coastguard Worker if (!timestampSeconds.length) { 29*6777b538SAndroid Build Coastguard Worker // This case should not normally happen, but can happen when the table is 30*6777b538SAndroid Build Coastguard Worker // empty (a dummy log |EMPTY_LOG| is added, which has an empty timestamp). 31*6777b538SAndroid Build Coastguard Worker return 'N/A'; 32*6777b538SAndroid Build Coastguard Worker } 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker const timestampInt = parseInt(timestampSeconds); 35*6777b538SAndroid Build Coastguard Worker assert(!isNaN(timestampInt)); 36*6777b538SAndroid Build Coastguard Worker // Multiply by 1000 since the constructor expects milliseconds, but the 37*6777b538SAndroid Build Coastguard Worker // timestamps are in seconds. 38*6777b538SAndroid Build Coastguard Worker return new Date(timestampInt * 1000).toLocaleString(); 39*6777b538SAndroid Build Coastguard Worker} 40*6777b538SAndroid Build Coastguard Worker 41*6777b538SAndroid Build Coastguard Worker/** 42*6777b538SAndroid Build Coastguard Worker * Converts the size of a log to a human-readable string. 43*6777b538SAndroid Build Coastguard Worker * @param size The size of the log in bytes. 44*6777b538SAndroid Build Coastguard Worker * @returns The size of the log in KiB as a string. 45*6777b538SAndroid Build Coastguard Worker */ 46*6777b538SAndroid Build Coastguard Workerexport function sizeToString(size: number) { 47*6777b538SAndroid Build Coastguard Worker if (size < 0) { 48*6777b538SAndroid Build Coastguard Worker // This case should not normally happen, but can happen when the table is 49*6777b538SAndroid Build Coastguard Worker // empty (a dummy log |EMPTY_LOG| is added, which has size -1). 50*6777b538SAndroid Build Coastguard Worker return 'N/A'; 51*6777b538SAndroid Build Coastguard Worker } 52*6777b538SAndroid Build Coastguard Worker return `${(size / 1024).toFixed(2)} KiB`; 53*6777b538SAndroid Build Coastguard Worker} 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker/** 56*6777b538SAndroid Build Coastguard Worker * Converts a log event to a human-readable string. 57*6777b538SAndroid Build Coastguard Worker * @param event The log event. 58*6777b538SAndroid Build Coastguard Worker * @returns A human-readable string of the log event. 59*6777b538SAndroid Build Coastguard Worker */ 60*6777b538SAndroid Build Coastguard Workerexport function logEventToString(event: LogEvent) { 61*6777b538SAndroid Build Coastguard Worker let result = `[${new Date(event.timestampMs).toISOString()}] ${event.event}`; 62*6777b538SAndroid Build Coastguard Worker if (event.message) { 63*6777b538SAndroid Build Coastguard Worker result += ` (${event.message})`; 64*6777b538SAndroid Build Coastguard Worker } 65*6777b538SAndroid Build Coastguard Worker return result; 66*6777b538SAndroid Build Coastguard Worker} 67*6777b538SAndroid Build Coastguard Worker 68*6777b538SAndroid Build Coastguard Worker/** 69*6777b538SAndroid Build Coastguard Worker * Gets the string to display when the events div of a log are collapsed. 70*6777b538SAndroid Build Coastguard Worker * @param events The list of events of the log. 71*6777b538SAndroid Build Coastguard Worker * @returns A human-readable string of the last event that occurred. 72*6777b538SAndroid Build Coastguard Worker */ 73*6777b538SAndroid Build Coastguard Workerexport function getEventsPeekString(events: LogEvent[]) { 74*6777b538SAndroid Build Coastguard Worker if (!events.length) { 75*6777b538SAndroid Build Coastguard Worker return 'N/A'; 76*6777b538SAndroid Build Coastguard Worker } 77*6777b538SAndroid Build Coastguard Worker // Need to assert that last element exists, otherwise the call to 78*6777b538SAndroid Build Coastguard Worker // logEventToString() fails to compile. 79*6777b538SAndroid Build Coastguard Worker const lastEvent = events[events.length - 1]; 80*6777b538SAndroid Build Coastguard Worker assert(lastEvent); 81*6777b538SAndroid Build Coastguard Worker return logEventToString(lastEvent); 82*6777b538SAndroid Build Coastguard Worker} 83