authorgravatar for julius0216@outlook.comJulius Marminge <julius0216@outlook.com> 2026-09-08 01:11:09-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-09-08 01:11:09-07:00
log77d9ffc822ac4c1f3600dc6c97e92fc94e9e12a3
tree9b012e4a798040c97b2f2ecf144c0eb2966e08c1
parent161715b1e4fa6d20fe3eb1cb9c91904bf83ca4c1
signature Signed by PGP key B5690EEEBB952194

refactor(server): classify telemetry exports (#10277)


16 files changed, 20 insertions(+), 12 deletions(-)

apps/server/integration/NetworkTransferMeasurement.integration.ts+3-3
......@@ -120,7 +120,7 @@ function rawDataBytes(data: NodeSocket.NodeWS.RawData): number {
120120 return data.byteLength;
121121}
122122
123export function makeWebSocketTransferRecorder(): WebSocketTransferRecorder {
123function makeWebSocketTransferRecorder(): WebSocketTransferRecorder {
124124 let socket: NodeWebSocketWithTransport | null = null;
125125 // Held separately from the WebSocket so wire totals survive a close, which
126126 // is when a reconnect measurement reads them.
......@@ -176,7 +176,7 @@ export function transferDelta(
176176 };
177177}
178178
179export function countingWsRpcProtocolLayer(input: {
179function countingWsRpcProtocolLayer(input: {
180180 readonly url: string;
181181 readonly cookie: string;
182182 readonly recorder: WebSocketTransferRecorder;
......@@ -194,7 +194,7 @@ export function countingWsRpcProtocolLayer(input: {
194194 );
195195}
196196
197export const makeCountingWsRpcClient = RpcClient.make(WsRpcGroup);
197const makeCountingWsRpcClient = RpcClient.make(WsRpcGroup);
198198export type CountingWsRpcClient = Effect.Success<typeof makeCountingWsRpcClient>;
199199
200200export interface MeasuredWsClient {
apps/server/integration/TransferBudgetReport.integration.ts+1-1
......@@ -56,7 +56,7 @@ const TRANSFER_BUDGET = {
5656 measuredTurnWebSocketMessages: 21,
5757} satisfies ProviderTransferBudget;
5858
59export const TRANSFER_BUDGETS: Readonly<Record<string, ProviderTransferBudget>> = {
59const TRANSFER_BUDGETS: Readonly<Record<string, ProviderTransferBudget>> = {
6060 codex: TRANSFER_BUDGET,
6161 claudeAgent: TRANSFER_BUDGET,
6262};
apps/server/integration/TransferBudgetScenario.integration.ts+1-1
......@@ -26,7 +26,7 @@ import {
2626 TRANSFER_HISTORY_TURN_COUNT,
2727} from "./fixtures/transferBudget.ts";
2828
29export const TRANSFER_PROJECT_ID = ProjectId.make("transfer-budget-project");
29const TRANSFER_PROJECT_ID = ProjectId.make("transfer-budget-project");
3030export const TRANSFER_THREAD_ID = ThreadId.make("transfer-budget-thread");
3131export const TRANSFER_MEASURED_TURN_INDEX = TRANSFER_HISTORY_TURN_COUNT;
3232
apps/server/src/diagnostics/ProcessDiagnostics.ts+1
......@@ -54,6 +54,7 @@ function canSignalCategory(category: ResourceTelemetryProcessCategory): boolean
5454 );
5555}
5656
57/** @public Service construction is part of the canonical Effect module API. */
5758export const make = Effect.fn("makeProcessDiagnostics")(function* () {
5859 const telemetry = yield* ResourceTelemetry.ResourceTelemetry;
5960 const refreshedTelemetry = telemetry.refresh.pipe(Effect.catch(() => telemetry.latest));
apps/server/src/diagnostics/ProcessResourceMonitor.ts+1
......@@ -28,6 +28,7 @@ function isLegacyBackendCategory(category: ResourceTelemetryProcessCategory): bo
2828 );
2929}
3030
31/** @public Service construction is part of the canonical Effect module API. */
3132export const make = Effect.fn("makeProcessResourceMonitor")(function* () {
3233 const telemetry = yield* ResourceTelemetry.ResourceTelemetry;
3334 const readHistory: ProcessResourceMonitor["Service"]["readHistory"] = (input) =>
apps/server/src/diagnostics/TraceDiagnostics.ts+1
......@@ -411,6 +411,7 @@ function readTraceFile(
411411 );
412412}
413413
414/** @public Service construction is part of the canonical Effect module API. */
414415export const make = Effect.gen(function* () {
415416 const fileSystem = yield* FileSystem.FileSystem;
416417
apps/server/src/resourceTelemetry/DesktopTelemetryReceiver.ts+1
......@@ -327,6 +327,7 @@ export function requireDesktopTelemetryWriteProgress(
327327 : Effect.fail(new DesktopTelemetryControlStalled({ fd, remainingBytes }));
328328}
329329
330/** @public Service construction is part of the canonical Effect module API. */
330331export const make = Effect.fn("resourceTelemetry.desktopTelemetryReceiver.make")(function* () {
331332 const config = yield* ServerConfig;
332333 const serverSettings = yield* ServerSettingsService;
apps/server/src/resourceTelemetry/Model.ts+1-1
......@@ -68,7 +68,7 @@ export interface MergeProcessesResult {
6868 readonly deltas: ReadonlyArray<ProcessDelta>;
6969}
7070
71export const emptyGroupCounters = (): GroupCounters => ({
71const emptyGroupCounters = (): GroupCounters => ({
7272 cpuTimeMs: 0,
7373 ioReadBytes: 0,
7474 ioWriteBytes: 0,
apps/server/src/resourceTelemetry/NativeTelemetryClient.ts+1
......@@ -360,6 +360,7 @@ export function canCommandNativeTelemetrySidecar(
360360 return hasHandle && (status === "healthy" || status === "degraded");
361361}
362362
363/** @public Service construction is part of the canonical Effect module API. */
363364export const make = Effect.fn("resourceTelemetry.nativeTelemetryClient.make")(function* () {
364365 const binary = yield* ResourceMonitorBinary.ResourceMonitorBinary;
365366 const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
apps/server/src/resourceTelemetry/ResourceMonitorBinary.ts+2-2
......@@ -90,7 +90,7 @@ export const ResourceMonitorHostLinuxLibc = Context.Reference<ResourceMonitorLin
9090 },
9191);
9292
93export function resourceMonitorPlatformKey(
93function resourceMonitorPlatformKey(
9494 platform: NodeJS.Platform,
9595 architecture: NodeJS.Architecture,
9696): string | undefined {
......@@ -103,7 +103,7 @@ export function resourceMonitorPlatformKey(
103103 return `${platform}-${architecture}`;
104104}
105105
106export function resourceMonitorRustTarget(
106function resourceMonitorRustTarget(
107107 platform: NodeJS.Platform,
108108 architecture: NodeJS.Architecture,
109109 linuxLibc?: ResourceMonitorLinuxLibc,
apps/server/src/resourceTelemetry/ResourceTelemetry.ts+1
......@@ -142,6 +142,7 @@ function buildHealth(input: {
142142 };
143143}
144144
145/** @public Service construction is part of the canonical Effect module API. */
145146export const make = Effect.fn("resourceTelemetry.resourceTelemetry.make")(function* () {
146147 const nativeClient = yield* NativeTelemetryClient.NativeTelemetryClient;
147148 const desktopReceiver = yield* DesktopTelemetryReceiver.DesktopTelemetryReceiver;
apps/server/src/telemetry/AnalyticsService.ts+2-1
......@@ -67,7 +67,7 @@ export class AnalyticsService extends Context.Service<
6767 );
6868}
6969
70export function serverOsFromNodePlatform(platform: string): ClientOs {
70function serverOsFromNodePlatform(platform: string): ClientOs {
7171 switch (platform) {
7272 case "darwin":
7373 return "macOS";
......@@ -82,6 +82,7 @@ export function serverOsFromNodePlatform(platform: string): ClientOs {
8282 }
8383}
8484
85/** @public Service construction is part of the canonical Effect module API. */
8586export const make = Effect.gen(function* () {
8687 const telemetryConfig = yield* TelemetryEnvConfig;
8788 const httpClient = yield* HttpClient.HttpClient;
apps/server/src/usage/UsageLimitSources.ts+1
......@@ -60,6 +60,7 @@ function sourceLabel(id: string, config: UsageLimitSourceConfig): string {
6060 }
6161}
6262
63/** @public Service construction is part of the canonical Effect module API. */
6364export const make = Effect.gen(function* () {
6465 const api = yield* makeCliproxyApi;
6566 const settingsService = yield* ServerSettingsService;
apps/server/src/usage/usageAggregation.ts+1-1
......@@ -23,7 +23,7 @@ import { cacheSavingsUsd, priceUsage, type RateTable } from "./usagePricing.ts";
2323 * `en-CA` yields ISO-ordered parts, which is why it is used here rather than
2424 * assembling the day from `Date` getters (those are host-local only).
2525 */
26export function makeDayFormatter(timeZone: string): (timestampMs: number) => string {
26function makeDayFormatter(timeZone: string): (timestampMs: number) => string {
2727 let format: Intl.DateTimeFormat;
2828 try {
2929 format = new Intl.DateTimeFormat("en-CA", {
apps/server/src/usage/usageScanCache.ts+1-1
......@@ -26,7 +26,7 @@ import type { CodexScanState, UsageRecord } from "./usageTranscripts.ts";
2626// entries would keep serving double-counted records forever.
2727// v3: entries carry the parse position and reducer state so a grown file
2828// re-parses only its appended bytes instead of starting over.
29export const USAGE_SCAN_CACHE_VERSION = 3 as const;
29const USAGE_SCAN_CACHE_VERSION = 3 as const;
3030
3131export interface CachedFile {
3232 readonly size: number;
apps/server/src/usage/usageTranscripts.ts+1-1
......@@ -79,7 +79,7 @@ export function mightCarryUsage(line: string, provider: UsageProviderKind): bool
7979 */
8080export const GROK_COST_USD_TICKS_PER_DOLLAR = 10_000_000_000;
8181
82export function grokCostTicksToUsd(ticks: unknown): number | null {
82function grokCostTicksToUsd(ticks: unknown): number | null {
8383 if (typeof ticks !== "number" || !Number.isFinite(ticks) || ticks < 0) return null;
8484 return ticks / GROK_COST_USD_TICKS_PER_DOLLAR;
8585}