History

Wire telemetry in main and store anonymous ID in state dir

- move `AnalyticsServiceLayerLive` from CLI runtime setup into `main` server layer - persist telemetry `anonymous-id` under configured `stateDir` instead of home directory - add `FetchHttpClient.layer` to `main.test.ts` test layer wiring

Julius Marminge committed 8 months ago

Commit 477b4f91 parent d5d88274 files · +7 −3Browse files

Unified · Split

4 files
  1. apps/server/src/index.ts +0 −2
  2. apps/server/src/main.test.ts +2 −0
  3. apps/server/src/main.ts +2 −0
  4. apps/server/src/telemetry/Identify.ts +3 −1
apps/server/src/index.ts+0−2
@@ -9,12 +9,10 @@ import { Command } from "effect/unstable/cli"; · 8 unmodified lines
99 import { version } from "../package.json" with { type: "json" };
1010 import { ServerLive } from "./wsServer";
1111 import { NetService } from "@t3tools/shared/Net";
12−import { AnalyticsServiceLayerLive } from "./telemetry/Layers/AnalyticsService";
1312 import { FetchHttpClient } from "effect/unstable/http";
1413
1514 const RuntimeLayer = Layer.empty.pipe(
1615 Layer.provideMerge(CliConfig.layer),
17− Layer.provideMerge(AnalyticsServiceLayerLive),
1816 Layer.provideMerge(ServerLive),
1917 Layer.provideMerge(OpenLive),
2018 Layer.provideMerge(NetService.layer),
apps/server/src/main.test.ts+2−0
@@ -5,6 +5,7 @@ import * as ConfigProvider from "effect/ConfigProvider"; · 4 unmodified lines
55 import * as Effect from "effect/Effect";
66 import * as Layer from "effect/Layer";
77 import * as Command from "effect/unstable/cli/Command";
8+import { FetchHttpClient } from "effect/unstable/http";
89 import { beforeEach } from "vitest";
910 import { NetService } from "@t3tools/shared/Net";
1011
@@ -52,6 +53,7 @@ const testLayer = Layer.mergeAll( · 41 unmodified lines
5253 record: () => Effect.void,
5354 flush: Effect.void,
5455 }),
56+ FetchHttpClient.layer,
5557 NodeServices.layer,
5658 );
5759
apps/server/src/main.ts+2−0
@@ -23,6 +23,7 @@ import { makeServerProviderLayer, makeServerRuntimeServicesLayer } from "./serve · 22 unmodified lines
2323 import { ProviderHealthLive } from "./provider/Layers/ProviderHealth";
2424 import { Server } from "./wsServer";
2525 import { ServerLoggerLive } from "./serverLogger";
26+import { AnalyticsServiceLayerLive } from "./telemetry/Layers/AnalyticsService";
2627
2728 export class StartupError extends Data.TaggedError("StartupError")<{
2829 readonly message: string;
@@ -197,6 +198,7 @@ const LayerLive = (input: CliInput) => · 168 unmodified lines
197198 Layer.provideMerge(ProviderHealthLive),
198199 Layer.provideMerge(SqlitePersistence.layerConfig),
199200 Layer.provideMerge(ServerLoggerLive),
201+ Layer.provideMerge(AnalyticsServiceLayerLive),
200202 Layer.provideMerge(ServerConfigLive(input)),
201203 );
202204
apps/server/src/telemetry/Identify.ts+3−1
@@ -1,6 +1,7 @@
11 import { Effect, FileSystem, Path, Random, Schema } from "effect";
22 import * as Crypto from "node:crypto";
33 import { homedir } from "node:os";
4+import { ServerConfig } from "../config";
45
56 const CodexAuthJsonSchema = Schema.Struct({
67 tokens: Schema.Struct({
@@ -39,8 +40,9 @@ const getCodexAccountId = Effect.gen(function* () { · 32 unmodified lines
3940 const upsertAnonymousId = Effect.gen(function* () {
4041 const fileSystem = yield* FileSystem.FileSystem;
4142 const path = yield* Path.Path;
43+ const serverConfig = yield* ServerConfig;
4244
43− const anonymousIdPath = path.join(homedir(), ".t3", "telemetry", "anonymous-id");
45+ const anonymousIdPath = path.join(serverConfig.stateDir, "anonymous-id");
4446 const anonymousId = yield* fileSystem.readFileString(anonymousIdPath).pipe(
4547 Effect.catch(() =>
4648 Effect.gen(function* () {