Browse Source

fix(agent): use require() for Langfuse and install packages in Dockerfile

Static imports fail TS compilation since packages lack type declarations.
Use require() with try/catch and explicitly install @langfuse/otel and
@opentelemetry/sdk-node in the dist directory during Docker build.
pull/6459/head
jpwilson 1 month ago
parent
commit
314be134a2
  1. 1
      Dockerfile.railway
  2. 21
      apps/api/src/main.ts

1
Dockerfile.railway

@ -34,6 +34,7 @@ RUN npm run build:production
WORKDIR /ghostfolio/dist/apps/api WORKDIR /ghostfolio/dist/apps/api
COPY ./package-lock.json /ghostfolio/dist/apps/api/ COPY ./package-lock.json /ghostfolio/dist/apps/api/
RUN npm install RUN npm install
RUN npm install @langfuse/otel @opentelemetry/sdk-node --save 2>/dev/null || true
COPY .config /ghostfolio/dist/apps/api/.config/ COPY .config /ghostfolio/dist/apps/api/.config/
COPY prisma /ghostfolio/dist/apps/api/prisma/ COPY prisma /ghostfolio/dist/apps/api/prisma/
COPY package.json /ghostfolio/dist/apps/api/ COPY package.json /ghostfolio/dist/apps/api/

21
apps/api/src/main.ts

@ -19,16 +19,23 @@ import helmet from 'helmet';
import { AppModule } from './app/app.module'; import { AppModule } from './app/app.module';
import { environment } from './environments/environment'; import { environment } from './environments/environment';
import { NodeSDK } from '@opentelemetry/sdk-node';
import { LangfuseSpanProcessor } from '@langfuse/otel';
// Initialize Langfuse OpenTelemetry tracing (must happen before NestJS bootstrap) // Initialize Langfuse OpenTelemetry tracing (must happen before NestJS bootstrap)
if (process.env.LANGFUSE_SECRET_KEY) { if (process.env.LANGFUSE_SECRET_KEY) {
const sdk = new NodeSDK({ try {
spanProcessors: [new LangfuseSpanProcessor()] // eslint-disable-next-line @typescript-eslint/no-var-requires
}); const { NodeSDK } = require('@opentelemetry/sdk-node');
sdk.start(); // eslint-disable-next-line @typescript-eslint/no-var-requires
console.log('Langfuse tracing initialized'); const { LangfuseSpanProcessor } = require('@langfuse/otel');
const sdk = new NodeSDK({
spanProcessors: [new LangfuseSpanProcessor()]
});
sdk.start();
console.log('Langfuse tracing initialized');
} catch (error) {
console.warn('Langfuse tracing not available:', error.message);
}
} }
async function bootstrap() { async function bootstrap() {

Loading…
Cancel
Save