Files
flipper/desktop/flipper-server-core/src/tracker.tsx
Lorenzo Blasa b11a85c4b3 Server error and endpoint metrics
Summary: Better than using logs.

Reviewed By: antonk52

Differential Revision: D50012506

fbshipit-source-id: 2f0e9bf8cb7282d35dc5619e620d005b96663fd5
2023-10-06 08:26:09 -07:00

66 lines
1.7 KiB
TypeScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
import {getLogger, CertificateExchangeMedium} from 'flipper-common';
type AppConnectionPayload = {
app: string;
os: string;
device: string;
device_id: string;
medium?: CertificateExchangeMedium;
};
type AppConnectionCertificateExchangePayload = AppConnectionPayload & {
successful: boolean;
error?: string;
};
type ServerBootstrapPerformancePayload = {
loggerInitializedMS: number;
keytarLoadedMS: number;
runningInstanceShutdownMS: number;
httpServerStartedMS: number;
serverCreatedMS: number;
companionEnvironmentInitializedMS: number;
appServerStartedMS: number;
developmentServerAttachedMS: number;
serverStartedMS: number;
launchedMS: number;
startupMS: number;
};
type TrackerEvents = {
'server-bootstrap-performance': ServerBootstrapPerformancePayload;
'server-started': {port: number};
'server-error': {code: string | undefined; message: string};
'server-endpoint-hit': {name: string};
'server-auth-token-verification': {
successful: boolean;
present: boolean;
error?: string;
};
'server-socket-already-in-use': {};
'app-connection-created': AppConnectionPayload;
'app-connection-secure-attempt': AppConnectionPayload;
'app-connection-insecure-attempt': AppConnectionPayload;
'app-connection-certificate-exchange': AppConnectionCertificateExchangePayload;
};
class ServerCoreTracker {
track<Event extends keyof TrackerEvents>(
event: Event,
payload: TrackerEvents[Event],
): void {
getLogger().track('usage', event, payload);
}
}
export const tracker = new ServerCoreTracker();