From 268bb4bfa3c2e33aaedb456885475f61ca8b0845 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Thu, 5 Mar 2026 18:06:39 -0800 Subject: [PATCH] simplify layers --- .../OrchestrationEngineHarness.integration.ts | 14 ++------ .../providerService.integration.test.ts | 5 +-- apps/server/src/main.test.ts | 5 +-- .../provider/Layers/ProviderService.test.ts | 13 +++---- .../src/telemetry/Layers/AnalyticsService.ts | 36 ++++++++++--------- 5 files changed, 27 insertions(+), 46 deletions(-) diff --git a/apps/server/integration/OrchestrationEngineHarness.integration.ts b/apps/server/integration/OrchestrationEngineHarness.integration.ts index 90197f009cd0e29755d43384637f27a6721d2571..4129739503982c2bccb197e9e4b7bb00d8336c5f 100644 --- a/apps/server/integration/OrchestrationEngineHarness.integration.ts +++ b/apps/server/integration/OrchestrationEngineHarness.integration.ts @@ -253,22 +253,12 @@ export const makeOrchestrationIntegrationHarness = ( ? makeProviderServiceLive().pipe( Layer.provide(providerSessionDirectoryLayer), Layer.provide(realCodexRegistry), - Layer.provide( - Layer.succeed(AnalyticsService, { - record: () => Effect.void, - flush: Effect.void, - }), - ), + Layer.provide(AnalyticsService.layerTest), ) : makeProviderServiceLive().pipe( Layer.provide(providerSessionDirectoryLayer), Layer.provide(fakeRegistry!), - Layer.provide( - Layer.succeed(AnalyticsService, { - record: () => Effect.void, - flush: Effect.void, - }), - ), + Layer.provide(AnalyticsService.layerTest), ); const runtimeServicesLayer = Layer.mergeAll( diff --git a/apps/server/integration/providerService.integration.test.ts b/apps/server/integration/providerService.integration.test.ts index 7c0aceebd8fca0fa9a5251e0129ccba0cd7ed98c..53b4f30a80c1211072289b1a275566ed5fbfbe9b 100644 --- a/apps/server/integration/providerService.integration.test.ts +++ b/apps/server/integration/providerService.integration.test.ts @@ -60,10 +60,7 @@ const makeIntegrationFixture = Effect.gen(function* () { const shared = Layer.mergeAll( directoryLayer, Layer.succeed(ProviderAdapterRegistry, registry), - Layer.succeed(AnalyticsService, { - record: () => Effect.void, - flush: Effect.void, - }), + AnalyticsService.layerTest, ).pipe(Layer.provide(SqlitePersistenceMemory)); const layer = makeProviderServiceLive().pipe(Layer.provide(shared)); diff --git a/apps/server/src/main.test.ts b/apps/server/src/main.test.ts index 613655fe5e0340174dee62fbe31e4593be7e8c20..15e363d07ceba85943ec4f63fc17fe9a3ebc1796 100644 --- a/apps/server/src/main.test.ts +++ b/apps/server/src/main.test.ts @@ -49,10 +49,7 @@ const testLayer = Layer.mergeAll( openBrowser: (_target: string) => Effect.void, openInEditor: () => Effect.void, } satisfies OpenShape), - Layer.succeed(AnalyticsService, { - record: () => Effect.void, - flush: Effect.void, - }), + AnalyticsService.layerTest, FetchHttpClient.layer, NodeServices.layer, ); diff --git a/apps/server/src/provider/Layers/ProviderService.test.ts b/apps/server/src/provider/Layers/ProviderService.test.ts index e3a2fb1ec310fe1355ae388546ac66df88ac4c40..255c6fca05a392ff1673c324c2ac1f50c91970df 100644 --- a/apps/server/src/provider/Layers/ProviderService.test.ts +++ b/apps/server/src/provider/Layers/ProviderService.test.ts @@ -215,11 +215,6 @@ function makeFakeCodexAdapter(provider: ProviderKind = "codex") { const sleep = (ms: number) => Effect.promise(() => new Promise((resolve) => setTimeout(resolve, ms))); -const noopAnalyticsLayer = Layer.succeed(AnalyticsService, { - record: () => Effect.void, - flush: Effect.void, -}); - function makeProviderServiceLayer() { const codex = makeFakeCodexAdapter(); const registry: typeof ProviderAdapterRegistry.Service = { @@ -241,7 +236,7 @@ function makeProviderServiceLayer() { makeProviderServiceLive().pipe( Layer.provide(providerAdapterLayer), Layer.provide(directoryLayer), - Layer.provideMerge(noopAnalyticsLayer), + Layer.provideMerge(AnalyticsService.layerTest), ), directoryLayer, @@ -288,7 +283,7 @@ it.effect("ProviderServiceLive keeps persisted resumable sessions on startup", ( const providerLayer = makeProviderServiceLive().pipe( Layer.provide(Layer.succeed(ProviderAdapterRegistry, registry)), Layer.provide(directoryLayer), - Layer.provide(noopAnalyticsLayer), + Layer.provide(AnalyticsService.layerTest), ); yield* Effect.gen(function* () { @@ -347,7 +342,7 @@ it.effect( const firstProviderLayer = makeProviderServiceLive().pipe( Layer.provide(Layer.succeed(ProviderAdapterRegistry, firstRegistry)), Layer.provide(firstDirectoryLayer), - Layer.provide(noopAnalyticsLayer), + Layer.provide(AnalyticsService.layerTest), ); const startedSession = yield* Effect.gen(function* () { @@ -390,7 +385,7 @@ it.effect( const secondProviderLayer = makeProviderServiceLive().pipe( Layer.provide(Layer.succeed(ProviderAdapterRegistry, secondRegistry)), Layer.provide(secondDirectoryLayer), - Layer.provide(noopAnalyticsLayer), + Layer.provide(AnalyticsService.layerTest), ); secondCodex.startSession.mockClear(); diff --git a/apps/server/src/telemetry/Layers/AnalyticsService.ts b/apps/server/src/telemetry/Layers/AnalyticsService.ts index 83e5496e4f0f91f86a15259a9e968d87378253a8..9881e910d9ceb4fcd76860385ea2e7936fb0197f 100644 --- a/apps/server/src/telemetry/Layers/AnalyticsService.ts +++ b/apps/server/src/telemetry/Layers/AnalyticsService.ts @@ -96,26 +96,28 @@ const makeAnalyticsService = Effect.gen(function* () { }); const flush: AnalyticsServiceShape["flush"] = Effect.gen(function* () { - const batch = yield* Ref.modify(bufferRef, (current) => { - if (current.length === 0) { - return [[] as ReadonlyArray, current] as const; + while (true) { + const batch = yield* Ref.modify(bufferRef, (current) => { + if (current.length === 0) { + return [[] as ReadonlyArray, current] as const; + } + const nextBatch = current.slice(0, telemetryConfig.flushBatchSize); + const remaining = current.slice(nextBatch.length); + return [nextBatch, remaining] as const; + }); + + if (batch.length === 0) { + return; } - const nextBatch = current.slice(0, telemetryConfig.flushBatchSize); - const remaining = current.slice(nextBatch.length); - return [nextBatch, remaining] as const; - }); - if (batch.length === 0) { - return; - } - - yield* sendBatch(batch).pipe( - Effect.catch((error) => - Ref.update(bufferRef, (current) => [...batch, ...current]).pipe( - Effect.flatMap(() => Effect.fail(error)), + yield* sendBatch(batch).pipe( + Effect.catch((error) => + Ref.update(bufferRef, (current) => [...batch, ...current]).pipe( + Effect.flatMap(() => Effect.fail(error)), + ), ), - ), - ); + ); + } }).pipe(Effect.catch((cause) => Effect.logError("Failed to flush telemetry", { cause }))); const record: AnalyticsServiceShape["record"] = Effect.fnUntraced(function* (event, properties) { -- 2.54.0