( engine: ExecutionEngine<E>, analytics: AnalyticsService, context: ExecutionAnalyticsContext, )
| 28 | } |
| 29 | |
| 30 | export const withExecutionAnalytics = <E extends Cause.YieldableError>( |
| 31 | engine: ExecutionEngine<E>, |
| 32 | analytics: AnalyticsService, |
| 33 | context: ExecutionAnalyticsContext, |
| 34 | ): ExecutionEngine<E> => { |
| 35 | const completed = (ok: boolean): Effect.Effect<void> => |
| 36 | analytics.record("execution_completed", { |
| 37 | ok, |
| 38 | plane: context.plane, |
| 39 | toolkit: context.toolkit, |
| 40 | }); |
| 41 | |
| 42 | const recordOutcome = (result: ExecutionResult | null): Effect.Effect<void> => |
| 43 | result?.status === "completed" ? completed(!result.result.error) : Effect.void; |
| 44 | |
| 45 | return { |
| 46 | ...engine, |
| 47 | execute: (code, options) => |
| 48 | engine.execute(code, options).pipe( |
| 49 | Effect.tap((result) => completed(!result.error)), |
| 50 | Effect.tapError(() => completed(false)), |
| 51 | ), |
| 52 | executeWithPause: (code, options) => |
| 53 | engine.executeWithPause(code, options).pipe( |
| 54 | Effect.tap(recordOutcome), |
| 55 | Effect.tapError(() => completed(false)), |
| 56 | ), |
| 57 | resume: (executionId, response) => |
| 58 | engine.resume(executionId, response).pipe( |
| 59 | Effect.tap(recordOutcome), |
| 60 | Effect.tapError(() => completed(false)), |
| 61 | ), |
| 62 | }; |
| 63 | }; |
no test coverage detected