mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
* feat(tracing): add OpenTelemetry dependencies and --import preload flag * feat(enterprise): add distributed_tracing feature gate * feat(tracing): add SDK bootstrap with enterprise gating * fix(tracing): correct test coverage for enterprise-unavailable path and prevent double-init Test 2 now mocks @snapotter/enterprise to throw an import error, exercising the catch block in the preload. Test 3 imports with no endpoint so the preload is a no-op, avoiding leaked SDK from double-initialization. Added idempotency guard to initTracing() as a safety net. * feat(tracing): add Pino trace mixin and shared logger When OTel tracing is active, every Pino log line now includes traceId, spanId, and traceFlags fields for log-to-trace correlation. The mixin is a no-op when no SDK is registered (community users). * feat(tracing): add _otel to ToolJobData and inject trace context at enqueue Add optional _otel carrier field to ToolJobData for W3C trace context propagation across BullMQ job boundaries. When an active OTel span exists, propagation.inject() writes traceparent/tracestate into the job data before queue.add(). When no SDK is registered (community edition), the carrier stays empty and _otel remains undefined -- zero overhead. * feat(tracing): extract trace context and create spans in BullMQ worker * feat(tracing): inject trace context into Python sidecar calls * feat(tracing): add trace context extraction to Python sidecar * feat(tracing): add shutdownTracing to graceful shutdown sequence * feat(tracing): enrich HTTP spans with tool_id and user_id attributes * docs: add OpenTelemetry env var documentation to .env.example * test(tracing): add lifecycle integration tests for trace propagation * fix(tracing): inject trace context into pipeline and batch flow jobs * fix(tracing): add sidecar.execute Node-side span and remove unnecessary comment Wraps PythonDispatcher.run() with a sidecar.execute span on the Node side so traces show the full round-trip (Node span -> Python span). Also removes an obvious comment from logger.ts.
92 lines
3.0 KiB
Bash
92 lines
3.0 KiB
Bash
# Server
|
|
PORT=1349
|
|
AUTH_ENABLED=true
|
|
DEFAULT_USERNAME=admin
|
|
DEFAULT_PASSWORD=admin
|
|
STORAGE_MODE=local
|
|
|
|
# Cleanup
|
|
FILE_MAX_AGE_HOURS=72
|
|
CLEANUP_INTERVAL_MINUTES=60
|
|
|
|
# Upload & Batch (0 = unlimited)
|
|
MAX_UPLOAD_SIZE_MB=0
|
|
MAX_BATCH_SIZE=0
|
|
CONCURRENT_JOBS=0
|
|
MAX_MEGAPIXELS=0
|
|
|
|
# Rate limiting (0 = disabled)
|
|
RATE_LIMIT_PER_MIN=0
|
|
|
|
# Users (0 = unlimited)
|
|
MAX_USERS=0
|
|
|
|
# Processing (0 = auto/unlimited)
|
|
MAX_WORKER_THREADS=0
|
|
PROCESSING_TIMEOUT_S=0
|
|
MAX_PIPELINE_STEPS=0
|
|
MAX_CANVAS_PIXELS=0
|
|
MAX_SVG_SIZE_MB=0
|
|
MAX_LOGO_SIZE_KB=2048
|
|
MAX_SPLIT_GRID=100
|
|
MAX_PDF_PAGES=0
|
|
MAX_VIDEO_DURATION_S=0
|
|
MAX_AUDIO_DURATION_S=0
|
|
MAX_VIDEO_BITRATE_KBPS=0
|
|
LIBREOFFICE_TIMEOUT_S=120
|
|
# Engine binary overrides (default: $PATH lookup)
|
|
# FFMPEG_PATH=
|
|
# FFPROBE_PATH=
|
|
# QPDF_PATH=
|
|
# SOFFICE_PATH=
|
|
# PDFCPU_PATH=
|
|
# SNAPOTTER_HW_ACCEL= # nvenc|vaapi: hardware encoder family (default software)
|
|
SESSION_DURATION_HOURS=168
|
|
LOGIN_ATTEMPT_LIMIT=10
|
|
|
|
# Set to true in CI/dev to skip the forced password-change on the default admin
|
|
# SKIP_MUST_CHANGE_PASSWORD=false
|
|
# DB_PATH removed in 2.0 -- see DATABASE_URL below
|
|
WORKSPACE_PATH=./tmp/workspace
|
|
FILES_STORAGE_PATH=./data/files
|
|
DEFAULT_THEME=light
|
|
DEFAULT_LOCALE=en
|
|
APP_NAME=snapotter
|
|
|
|
# --- 2.0 foundation ---
|
|
# Postgres connection (required; this default matches docker-compose.dev.yml)
|
|
# Start the dev stack first: docker compose -f docker-compose.dev.yml up -d
|
|
DATABASE_URL=postgres://snapotter:snapotter@localhost:5432/snapotter
|
|
# Redis connection (required; this default matches docker-compose.dev.yml)
|
|
REDIS_URL=redis://localhost:6379
|
|
|
|
# Job spine tuning
|
|
SYNC_WAIT_MS=8000 # sync-response window (ms) before returning 202
|
|
JOBS_RETENTION_DAYS=30 # completed-job metadata TTL (days)
|
|
AUDIT_RETENTION_DAYS=0 # audit-log TTL (0 = keep forever)
|
|
LOG_DIR=./data/logs # rotating log ring for support bundles
|
|
# JOB_TIMEOUT_FAST_S=120 # timeout for fast pools (image), seconds
|
|
# JOB_TIMEOUT_LONG_S=7200 # timeout for long pools (ai, media), seconds
|
|
# SCRATCH_PATH= # worker scratch dir (default: OS tmpdir/snapotter-scratch)
|
|
|
|
# Prometheus metrics: GET /api/v1/metrics requires an authenticated admin
|
|
# (scrapers need a session cookie or API key with system:health permission).
|
|
|
|
# Analytics: defaults OFF. Enable only with your own PostHog/Sentry keys.
|
|
# ANALYTICS_ENABLED=false
|
|
# POSTHOG_API_KEY=
|
|
# SENTRY_DSN=
|
|
# One-time SQLite import on first boot (1.x upgrade path). Leave unset normally.
|
|
# SQLITE_MIGRATE_PATH=/data/snapotter.db
|
|
|
|
# --- OpenTelemetry Distributed Tracing (enterprise only) ---
|
|
# Requires a valid enterprise license with distributed_tracing feature.
|
|
# Set OTEL_EXPORTER_OTLP_ENDPOINT to enable. All other vars are optional.
|
|
# Docs: https://opentelemetry.io/docs/specs/otel/configuration/sdk-environment-variables/
|
|
# OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
|
|
# OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
|
|
# OTEL_EXPORTER_OTLP_HEADERS=
|
|
# OTEL_SERVICE_NAME=snapotter-api
|
|
# OTEL_TRACES_SAMPLER=parentbased_always_on
|
|
# OTEL_TRACES_EXPORTER=otlp
|