xref: /aosp_15_r20/external/cronet/components/metrics/debug/log_utils.ts (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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