6bf8bebf51
CI / Test and Build (push) Failing after 1s
CI / Migrate Dev DB (push) Has been skipped
CI / Migrate DB (push) Has been skipped
CodeQL / Analyze actions (push) Has been cancelled
CodeQL / Analyze javascript-typescript (push) Has been cancelled
CI / Detect Version (push) Has been cancelled
CI / Detect Desktop Changes (push) Has been cancelled
CI / Build AMD64 (blacksmith-2vcpu-ubuntu-2404, ./docker/cron.Dockerfile, ubuntu-latest, ghcr.io/simstudioai/cron) (push) Has been cancelled
CI / Build AMD64 (blacksmith-2vcpu-ubuntu-2404, ./docker/db.Dockerfile, ECR_MIGRATIONS, ubuntu-latest, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build AMD64 (blacksmith-4vcpu-ubuntu-2404, ./docker/pii.Dockerfile, ECR_PII, ubuntu-latest, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build AMD64 (blacksmith-4vcpu-ubuntu-2404, ./docker/realtime.Dockerfile, ECR_REALTIME, ubuntu-latest, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build AMD64 (blacksmith-8vcpu-ubuntu-2404, ./docker/app.Dockerfile, ECR_APP, linux-x64-8-core, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (blacksmith-4vcpu-ubuntu-2404-arm, ./docker/cron.Dockerfile, ubuntu-24.04-arm, ghcr.io/simstudioai/cron) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (blacksmith-4vcpu-ubuntu-2404-arm, ./docker/db.Dockerfile, ubuntu-24.04-arm, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (blacksmith-4vcpu-ubuntu-2404-arm, ./docker/pii.Dockerfile, ubuntu-24.04-arm, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (blacksmith-4vcpu-ubuntu-2404-arm, ./docker/realtime.Dockerfile, ubuntu-24.04-arm, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (blacksmith-8vcpu-ubuntu-2404-arm, ./docker/app.Dockerfile, linux-arm64-8-core, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Check Docs Changes (push) Has been cancelled
Publish CLI Package / publish-npm (push) Has been cancelled
Publish Python SDK / publish-pypi (push) Has been cancelled
CI / Deploy Trigger.dev (Dev) (push) Has been cancelled
Helm Chart / Lint, test, and validate chart (push) Has been cancelled
Helm Chart / Chart version bumped (push) Has been cancelled
Publish TypeScript SDK / publish-npm (push) Has been cancelled
CI / Build Dev ECR (blacksmith-8vcpu-ubuntu-2404, ./docker/app.Dockerfile, ECR_APP, linux-x64-8-core) (push) Has been cancelled
CI / Promote Images (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/cron) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build Dev ECR (blacksmith-2vcpu-ubuntu-2404, ./docker/db.Dockerfile, ECR_MIGRATIONS, ubuntu-latest) (push) Has been cancelled
CI / Build Dev ECR (blacksmith-4vcpu-ubuntu-2404, ./docker/pii.Dockerfile, ECR_PII, ubuntu-latest) (push) Has been cancelled
CI / Build Dev ECR (blacksmith-4vcpu-ubuntu-2404, ./docker/realtime.Dockerfile, ECR_REALTIME, ubuntu-latest) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Process Docs (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled
CI / Check Desktop Signing Secrets (push) Has been cancelled
CI / Desktop Release (push) Has been cancelled
CI / Create Desktop Prerelease (push) Has been cancelled
CI / Desktop Prerelease Build (push) Has been cancelled
CI / Publish Desktop Prerelease (push) Has been cancelled
CI / Prune Desktop Prereleases (push) Has been cancelled
Helm Chart / Install on kind and run helm test (push) Has been cancelled
112 lines
3.9 KiB
TypeScript
112 lines
3.9 KiB
TypeScript
import { type Counter, type Histogram, metrics } from '@opentelemetry/api'
|
|
|
|
export type ExecutionTimeoutSource =
|
|
| 'plan_default'
|
|
| 'enterprise_metadata'
|
|
| 'async_request_override'
|
|
| 'unbounded'
|
|
|
|
export type ExecutionCancellationBackend = 'trigger_dev' | 'database' | 'in_process'
|
|
export type ExecutionCancellationResult = 'cancelled' | 'not_found' | 'error'
|
|
|
|
interface ExecutionTimeoutInstruments {
|
|
resolutions: Counter
|
|
effectiveDuration: Histogram
|
|
cancellations: Counter
|
|
sandboxProviderLimits: Counter
|
|
sandboxTeardownFailures: Counter
|
|
sandboxImageCleanupFailures: Counter
|
|
sandboxCliBuildFailures: Counter
|
|
}
|
|
|
|
let cached: ExecutionTimeoutInstruments | undefined
|
|
|
|
function instruments(): ExecutionTimeoutInstruments {
|
|
if (cached) return cached
|
|
const meter = metrics.getMeter('sim-execution')
|
|
cached = {
|
|
resolutions: meter.createCounter('sim.execution.timeout.resolutions'),
|
|
effectiveDuration: meter.createHistogram('sim.execution.timeout.effective', {
|
|
unit: 's',
|
|
advice: {
|
|
explicitBucketBoundaries: [60, 300, 1800, 3600, 5400, 10800, 43200, 86400, 259200, 604800],
|
|
},
|
|
}),
|
|
cancellations: meter.createCounter('sim.execution.cancellation.backend.results'),
|
|
sandboxProviderLimits: meter.createCounter('sim.execution.sandbox.provider_limit'),
|
|
sandboxTeardownFailures: meter.createCounter('sim.execution.sandbox.teardown.failures'),
|
|
sandboxImageCleanupFailures: meter.createCounter(
|
|
'sim.execution.sandbox.image_cleanup.failures'
|
|
),
|
|
sandboxCliBuildFailures: meter.createCounter('sim.execution.sandbox.cli_build.failures'),
|
|
}
|
|
return cached
|
|
}
|
|
|
|
/** Emits one bounded-cardinality result for an execution cancellation backend attempt. */
|
|
export function recordExecutionCancellationBackendResult(params: {
|
|
backend: ExecutionCancellationBackend
|
|
result: ExecutionCancellationResult
|
|
}): void {
|
|
instruments().cancellations.add(1, {
|
|
'execution.cancellation.backend': params.backend,
|
|
'execution.cancellation.result': params.result,
|
|
})
|
|
}
|
|
|
|
/** Emits when a sandbox operation reaches a provider's bounded continuous-run limit. */
|
|
export function recordSandboxProviderLimit(params: {
|
|
provider: 'e2b' | 'daytona'
|
|
operation: 'code' | 'command'
|
|
}): void {
|
|
instruments().sandboxProviderLimits.add(1, {
|
|
'sandbox.provider': params.provider,
|
|
'sandbox.operation': params.operation,
|
|
})
|
|
}
|
|
|
|
/** Emits when best-effort sandbox teardown fails after a run or abort. */
|
|
export function recordSandboxTeardownFailure(params: {
|
|
provider: 'e2b' | 'daytona'
|
|
reason: 'cleanup' | 'cancellation' | 'timeout'
|
|
}): void {
|
|
instruments().sandboxTeardownFailures.add(1, {
|
|
'sandbox.provider': params.provider,
|
|
'sandbox.teardown.reason': params.reason,
|
|
})
|
|
}
|
|
|
|
/** Emits when best-effort cleanup cannot remove a retired provider image family. */
|
|
export function recordSandboxImageCleanupFailure(params: {
|
|
provider: 'e2b' | 'daytona'
|
|
reason: 'failed_candidate' | 'lost_claim' | 'superseded'
|
|
}): void {
|
|
instruments().sandboxImageCleanupFailures.add(1, {
|
|
'sandbox.provider': params.provider,
|
|
'sandbox.image_cleanup.reason': params.reason,
|
|
})
|
|
}
|
|
|
|
/** Emits when a prebuilt image containing curated CLI tools fails to build. */
|
|
export function recordSandboxCliBuildFailure(params: { provider: 'e2b' | 'daytona' }): void {
|
|
instruments().sandboxCliBuildFailures.add(1, {
|
|
'sandbox.provider': params.provider,
|
|
})
|
|
}
|
|
|
|
/** Emits one bounded-cardinality observation for a resolved execution budget. */
|
|
export function recordExecutionTimeoutResolution(params: {
|
|
source: ExecutionTimeoutSource
|
|
executionType: 'sync' | 'async'
|
|
effectiveTimeoutMs: number
|
|
}): void {
|
|
const attributes = {
|
|
'execution.timeout.source': params.source,
|
|
'execution.type': params.executionType,
|
|
'execution.timeout.bounded': params.effectiveTimeoutMs > 0,
|
|
}
|
|
const { resolutions, effectiveDuration } = instruments()
|
|
resolutions.add(1, attributes)
|
|
effectiveDuration.record(Math.max(0, params.effectiveTimeoutMs / 1000), attributes)
|
|
}
|