From 5f5790b9dad9f2c87138b8a7bceccb5aee915388 Mon Sep 17 00:00:00 2001 From: Aditya Choudhari Date: Sat, 27 Sep 2025 16:01:44 -0400 Subject: [PATCH 1/3] chore: add tracing to all events --- .../src/events/deployment-variables.ts | 184 +++++++++++++----- .../src/events/deployment-versions.ts | 96 ++++++--- apps/event-queue/src/events/deployments.ts | 64 +++--- apps/event-queue/src/events/environments.ts | 68 ++++--- apps/event-queue/src/events/job.ts | 23 ++- apps/event-queue/src/events/policy.ts | 64 +++--- .../event-queue/src/events/release-targets.ts | 24 ++- apps/event-queue/src/events/resources.ts | 122 ++++++++---- 8 files changed, 427 insertions(+), 218 deletions(-) diff --git a/apps/event-queue/src/events/deployment-variables.ts b/apps/event-queue/src/events/deployment-variables.ts index 4e93b2bcf..0fe165196 100644 --- a/apps/event-queue/src/events/deployment-variables.ts +++ b/apps/event-queue/src/events/deployment-variables.ts @@ -1,65 +1,141 @@ import type { Event } from "@ctrlplane/events"; +import { makeWithSpan, trace } from "@ctrlplane/logger"; + import type { Handler } from "."; import { OperationPipeline } from "../workspace/pipeline.js"; import { WorkspaceManager } from "../workspace/workspace.js"; -export const newDeploymentVariable: Handler< - Event.DeploymentVariableCreated -> = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.update(ws) - .deploymentVariable(event.payload) - .dispatch(); -}; +const newDeploymentVariableTracer = trace.getTracer("new-deployment-variable"); +const withNewDeploymentVariableSpan = makeWithSpan(newDeploymentVariableTracer); + +export const newDeploymentVariable: Handler = + withNewDeploymentVariableSpan( + "new-deployment-variable", + async (span, event) => { + span.setAttribute("deployment-variable.id", event.payload.id); + span.setAttribute("deployment.id", event.payload.deploymentId); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.update(ws) + .deploymentVariable(event.payload) + .dispatch(); + }, + ); + +const updatedDeploymentVariableTracer = trace.getTracer( + "updated-deployment-variable", +); +const withUpdatedDeploymentVariableSpan = makeWithSpan( + updatedDeploymentVariableTracer, +); + +export const updatedDeploymentVariable: Handler = + withUpdatedDeploymentVariableSpan( + "updated-deployment-variable", + async (span, event) => { + span.setAttribute("deployment-variable.id", event.payload.current.id); + span.setAttribute("deployment.id", event.payload.current.deploymentId); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.update(ws) + .deploymentVariable(event.payload.current) + .dispatch(); + }, + ); + +const deletedDeploymentVariableTracer = trace.getTracer( + "deleted-deployment-variable", +); +const withDeletedDeploymentVariableSpan = makeWithSpan( + deletedDeploymentVariableTracer, +); + +export const deletedDeploymentVariable: Handler = + withDeletedDeploymentVariableSpan( + "deleted-deployment-variable", + async (span, event) => { + span.setAttribute("deployment-variable.id", event.payload.id); + span.setAttribute("deployment.id", event.payload.deploymentId); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.update(ws) + .deploymentVariable(event.payload) + .dispatch(); + }, + ); + +const newDeploymentVariableValueTracer = trace.getTracer( + "new-deployment-variable-value", +); +const withNewDeploymentVariableValueSpan = makeWithSpan( + newDeploymentVariableValueTracer, +); -export const updatedDeploymentVariable: Handler< - Event.DeploymentVariableUpdated -> = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.update(ws) - .deploymentVariable(event.payload.current) - .dispatch(); -}; +export const newDeploymentVariableValue: Handler = + withNewDeploymentVariableValueSpan( + "new-deployment-variable-value", + async (span, event) => { + span.setAttribute("deployment-variable-value.id", event.payload.id); + span.setAttribute("deployment-variable.id", event.payload.variableId); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.update(ws) + .deploymentVariableValue(event.payload) + .dispatch(); + }, + ); -export const deletedDeploymentVariable: Handler< - Event.DeploymentVariableDeleted -> = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.update(ws) - .deploymentVariable(event.payload) - .dispatch(); -}; +const updatedDeploymentVariableValueTracer = trace.getTracer( + "updated-deployment-variable-value", +); +const withUpdatedDeploymentVariableValueSpan = makeWithSpan( + updatedDeploymentVariableValueTracer, +); -export const newDeploymentVariableValue: Handler< - Event.DeploymentVariableValueCreated -> = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.update(ws) - .deploymentVariableValue(event.payload) - .dispatch(); -}; +export const updatedDeploymentVariableValue: Handler = + withUpdatedDeploymentVariableValueSpan( + "updated-deployment-variable-value", + async (span, event) => { + span.setAttribute( + "deployment-variable-value.id", + event.payload.current.id, + ); + span.setAttribute( + "deployment-variable.id", + event.payload.current.variableId, + ); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.update(ws) + .deploymentVariableValue(event.payload.current) + .dispatch(); + }, + ); -export const updatedDeploymentVariableValue: Handler< - Event.DeploymentVariableValueUpdated -> = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.update(ws) - .deploymentVariableValue(event.payload.current) - .dispatch(); -}; +const deletedDeploymentVariableValueTracer = trace.getTracer( + "deleted-deployment-variable-value", +); +const withDeletedDeploymentVariableValueSpan = makeWithSpan( + deletedDeploymentVariableValueTracer, +); -export const deletedDeploymentVariableValue: Handler< - Event.DeploymentVariableValueDeleted -> = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.update(ws) - .deploymentVariableValue(event.payload) - .dispatch(); -}; +export const deletedDeploymentVariableValue: Handler = + withDeletedDeploymentVariableValueSpan( + "deleted-deployment-variable-value", + async (span, event) => { + span.setAttribute("deployment-variable-value.id", event.payload.id); + span.setAttribute("deployment-variable.id", event.payload.variableId); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.update(ws) + .deploymentVariableValue(event.payload) + .dispatch(); + }, + ); diff --git a/apps/event-queue/src/events/deployment-versions.ts b/apps/event-queue/src/events/deployment-versions.ts index f480da748..bf87e3887 100644 --- a/apps/event-queue/src/events/deployment-versions.ts +++ b/apps/event-queue/src/events/deployment-versions.ts @@ -1,10 +1,15 @@ import type * as schema from "@ctrlplane/db/schema"; import type { Event } from "@ctrlplane/events"; +import { makeWithSpan, trace } from "@ctrlplane/logger"; + import type { Handler } from "."; import { OperationPipeline } from "../workspace/pipeline.js"; import { WorkspaceManager } from "../workspace/workspace.js"; +const newDeploymentVersionTracer = trace.getTracer("new-deployment-version"); +const withNewDeploymentVersionSpan = makeWithSpan(newDeploymentVersionTracer); + const getDeploymentVersionWithDates = ( deploymentVersion: schema.DeploymentVersion, ) => { @@ -12,37 +17,66 @@ const getDeploymentVersionWithDates = ( return { ...deploymentVersion, createdAt }; }; -export const newDeploymentVersion: Handler< - Event.DeploymentVersionCreated -> = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - const deploymentVersion = getDeploymentVersionWithDates(event.payload); - await OperationPipeline.update(ws) - .deploymentVersion(deploymentVersion) - .dispatch(); -}; +export const newDeploymentVersion: Handler = + withNewDeploymentVersionSpan( + "new-deployment-version", + async (span, event) => { + span.setAttribute("deployment-version.id", event.payload.id); + span.setAttribute("deployment.id", event.payload.deploymentId); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + const deploymentVersion = getDeploymentVersionWithDates(event.payload); + await OperationPipeline.update(ws) + .deploymentVersion(deploymentVersion) + .dispatch(); + }, + ); + +const updatedDeploymentVersionTracer = trace.getTracer( + "updated-deployment-version", +); +const withUpdatedDeploymentVersionSpan = makeWithSpan( + updatedDeploymentVersionTracer, +); -export const updatedDeploymentVersion: Handler< - Event.DeploymentVersionUpdated -> = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - const deploymentVersion = getDeploymentVersionWithDates( - event.payload.current, +export const updatedDeploymentVersion: Handler = + withUpdatedDeploymentVersionSpan( + "updated-deployment-version", + async (span, event) => { + span.setAttribute("deployment-version.id", event.payload.current.id); + span.setAttribute("deployment.id", event.payload.current.deploymentId); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + const deploymentVersion = getDeploymentVersionWithDates( + event.payload.current, + ); + await OperationPipeline.update(ws) + .deploymentVersion(deploymentVersion) + .dispatch(); + }, ); - await OperationPipeline.update(ws) - .deploymentVersion(deploymentVersion) - .dispatch(); -}; -export const deletedDeploymentVersion: Handler< - Event.DeploymentVersionDeleted -> = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - const deploymentVersion = getDeploymentVersionWithDates(event.payload); - await OperationPipeline.delete(ws) - .deploymentVersion(deploymentVersion) - .dispatch(); -}; +const deletedDeploymentVersionTracer = trace.getTracer( + "deleted-deployment-version", +); +const withDeletedDeploymentVersionSpan = makeWithSpan( + deletedDeploymentVersionTracer, +); + +export const deletedDeploymentVersion: Handler = + withDeletedDeploymentVersionSpan( + "deleted-deployment-version", + async (span, event) => { + span.setAttribute("deployment-version.id", event.payload.id); + span.setAttribute("deployment.id", event.payload.deploymentId); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + const deploymentVersion = getDeploymentVersionWithDates(event.payload); + await OperationPipeline.delete(ws) + .deploymentVersion(deploymentVersion) + .dispatch(); + }, + ); diff --git a/apps/event-queue/src/events/deployments.ts b/apps/event-queue/src/events/deployments.ts index 43c093a58..43e4933f7 100644 --- a/apps/event-queue/src/events/deployments.ts +++ b/apps/event-queue/src/events/deployments.ts @@ -1,31 +1,45 @@ import type { Event } from "@ctrlplane/events"; +import { makeWithSpan, trace } from "@ctrlplane/logger"; + import type { Handler } from "."; import { OperationPipeline } from "../workspace/pipeline.js"; import { WorkspaceManager } from "../workspace/workspace.js"; -export const newDeployment: Handler = async ( - event, -) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.update(ws).deployment(event.payload).dispatch(); -}; - -export const updatedDeployment: Handler = async ( - event, -) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.update(ws) - .deployment(event.payload.current) - .dispatch(); -}; - -export const deletedDeployment: Handler = async ( - event, -) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.delete(ws).deployment(event.payload).dispatch(); -}; +const newDeploymentTracer = trace.getTracer("new-deployment"); +const withNewDeploymentSpan = makeWithSpan(newDeploymentTracer); + +export const newDeployment: Handler = + withNewDeploymentSpan("new-deployment", async (span, event) => { + span.setAttribute("deployment.id", event.payload.id); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.update(ws).deployment(event.payload).dispatch(); + }); + +const updatedDeploymentTracer = trace.getTracer("updated-deployment"); +const withUpdatedDeploymentSpan = makeWithSpan(updatedDeploymentTracer); + +export const updatedDeployment: Handler = + withUpdatedDeploymentSpan("updated-deployment", async (span, event) => { + span.setAttribute("deployment.id", event.payload.current.id); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.update(ws) + .deployment(event.payload.current) + .dispatch(); + }); + +const deletedDeploymentTracer = trace.getTracer("deleted-deployment"); +const withDeletedDeploymentSpan = makeWithSpan(deletedDeploymentTracer); + +export const deletedDeployment: Handler = + withDeletedDeploymentSpan("deleted-deployment", async (span, event) => { + span.setAttribute("deployment.id", event.payload.id); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.delete(ws).deployment(event.payload).dispatch(); + }); diff --git a/apps/event-queue/src/events/environments.ts b/apps/event-queue/src/events/environments.ts index f1456562b..cf288c76f 100644 --- a/apps/event-queue/src/events/environments.ts +++ b/apps/event-queue/src/events/environments.ts @@ -1,33 +1,47 @@ import type { Event } from "@ctrlplane/events"; +import { makeWithSpan, trace } from "@ctrlplane/logger"; + import type { Handler } from "."; import { OperationPipeline } from "../workspace/pipeline.js"; import { WorkspaceManager } from "../workspace/workspace.js"; -export const newEnvironment: Handler = async ( - event, -) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - const createdAt = new Date(event.payload.createdAt); - const environment = { ...event.payload, createdAt }; - await OperationPipeline.update(ws).environment(environment).dispatch(); -}; - -export const updatedEnvironment: Handler = async ( - event, -) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - const createdAt = new Date(event.payload.current.createdAt); - const environment = { ...event.payload.current, createdAt }; - await OperationPipeline.update(ws).environment(environment).dispatch(); -}; - -export const deletedEnvironment: Handler = async ( - event, -) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.delete(ws).environment(event.payload).dispatch(); -}; +const newEnvironmentTracer = trace.getTracer("new-environment"); +const withNewEnvironmentSpan = makeWithSpan(newEnvironmentTracer); + +export const newEnvironment: Handler = + withNewEnvironmentSpan("new-environment", async (span, event) => { + span.setAttribute("environment.id", event.payload.id); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + const createdAt = new Date(event.payload.createdAt); + const environment = { ...event.payload, createdAt }; + await OperationPipeline.update(ws).environment(environment).dispatch(); + }); + +const updatedEnvironmentTracer = trace.getTracer("updated-environment"); +const withUpdatedEnvironmentSpan = makeWithSpan(updatedEnvironmentTracer); + +export const updatedEnvironment: Handler = + withUpdatedEnvironmentSpan("updated-environment", async (span, event) => { + span.setAttribute("environment.id", event.payload.current.id); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + const createdAt = new Date(event.payload.current.createdAt); + const environment = { ...event.payload.current, createdAt }; + await OperationPipeline.update(ws).environment(environment).dispatch(); + }); + +const deletedEnvironmentTracer = trace.getTracer("deleted-environment"); +const withDeletedEnvironmentSpan = makeWithSpan(deletedEnvironmentTracer); + +export const deletedEnvironment: Handler = + withDeletedEnvironmentSpan("deleted-environment", async (span, event) => { + span.setAttribute("environment.id", event.payload.id); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.delete(ws).environment(event.payload).dispatch(); + }); diff --git a/apps/event-queue/src/events/job.ts b/apps/event-queue/src/events/job.ts index e2ae0fafa..c1e9335e5 100644 --- a/apps/event-queue/src/events/job.ts +++ b/apps/event-queue/src/events/job.ts @@ -1,6 +1,8 @@ import type * as schema from "@ctrlplane/db/schema"; import type { Event } from "@ctrlplane/events"; +import { makeWithSpan, trace } from "@ctrlplane/logger"; + import type { Handler } from "."; import { OperationPipeline } from "../workspace/pipeline.js"; import { WorkspaceManager } from "../workspace/workspace.js"; @@ -14,10 +16,17 @@ const getJobWithDates = (job: schema.Job) => { return { ...job, createdAt, updatedAt, startedAt, completedAt }; }; -export const updateJob: Handler = async (event) => { - const { current } = event.payload; - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - const job = getJobWithDates(current); - await OperationPipeline.update(ws).job(job).dispatch(); -}; +const updatedJobTracer = trace.getTracer("updated-job"); +const withUpdatedJobSpan = makeWithSpan(updatedJobTracer); + +export const updateJob: Handler = withUpdatedJobSpan( + "updated-job", + async (span, event) => { + span.setAttribute("job.id", event.payload.current.id); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + const job = getJobWithDates(event.payload.current); + await OperationPipeline.update(ws).job(job).dispatch(); + }, +); diff --git a/apps/event-queue/src/events/policy.ts b/apps/event-queue/src/events/policy.ts index b870ece64..aa8c2e6a0 100644 --- a/apps/event-queue/src/events/policy.ts +++ b/apps/event-queue/src/events/policy.ts @@ -1,5 +1,7 @@ import type { Event, FullPolicy } from "@ctrlplane/events"; +import { makeWithSpan, trace } from "@ctrlplane/logger"; + import type { Handler } from "."; import { OperationPipeline } from "../workspace/pipeline.js"; import { WorkspaceManager } from "../workspace/workspace.js"; @@ -27,30 +29,42 @@ const getPolicyWithDates = (policy: FullPolicy) => { }; }; -export const newPolicy: Handler = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - const policy = getPolicyWithDates(event.payload); - await OperationPipeline.update(ws).policy(policy).dispatch(); -}; +const newPolicyTracer = trace.getTracer("new-policy"); +const withNewPolicySpan = makeWithSpan(newPolicyTracer); -export const updatedPolicy: Handler = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - const policy = getPolicyWithDates(event.payload.current); - await Promise.all( - event.payload.previous.targets.map((target) => - ws.selectorManager.policyTargetReleaseTargetSelector.removeSelector( - target, - ), - ), - ); - await OperationPipeline.update(ws).policy(policy).dispatch(); -}; +export const newPolicy: Handler = withNewPolicySpan( + "new-policy", + async (span, event) => { + span.setAttribute("policy.id", event.payload.id); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + const policy = getPolicyWithDates(event.payload); + await OperationPipeline.update(ws).policy(policy).dispatch(); + }, +); -export const deletedPolicy: Handler = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - const policy = getPolicyWithDates(event.payload); - await OperationPipeline.delete(ws).policy(policy).dispatch(); -}; +const updatedPolicyTracer = trace.getTracer("updated-policy"); +const withUpdatedPolicySpan = makeWithSpan(updatedPolicyTracer); + +export const updatedPolicy: Handler = + withUpdatedPolicySpan("updated-policy", async (span, event) => { + span.setAttribute("policy.id", event.payload.current.id); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + const policy = getPolicyWithDates(event.payload.current); + await OperationPipeline.update(ws).policy(policy).dispatch(); + }); + +const deletedPolicyTracer = trace.getTracer("deleted-policy"); +const withDeletedPolicySpan = makeWithSpan(deletedPolicyTracer); + +export const deletedPolicy: Handler = + withDeletedPolicySpan("deleted-policy", async (span, event) => { + span.setAttribute("policy.id", event.payload.id); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.delete(ws).policy(event.payload).dispatch(); + }); diff --git a/apps/event-queue/src/events/release-targets.ts b/apps/event-queue/src/events/release-targets.ts index bbe05d74f..9421967fc 100644 --- a/apps/event-queue/src/events/release-targets.ts +++ b/apps/event-queue/src/events/release-targets.ts @@ -1,15 +1,21 @@ import type { Event } from "@ctrlplane/events"; +import { makeWithSpan, trace } from "@ctrlplane/logger"; + import type { Handler } from "."; import { OperationPipeline } from "../workspace/pipeline.js"; import { WorkspaceManager } from "../workspace/workspace.js"; -export const evaluateReleaseTarget: Handler< - Event.EvaluateReleaseTarget -> = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.evaluate(ws) - .releaseTargets([event.payload.releaseTarget], event.payload.opts) - .dispatch(); -}; +const evaluateReleaseTargetTracer = trace.getTracer("evaluate-release-target"); +const withSpan = makeWithSpan(evaluateReleaseTargetTracer); + +export const evaluateReleaseTarget: Handler = + withSpan("evaluate-release-target", async (span, event) => { + span.setAttribute("releaseTarget.id", event.payload.releaseTarget.id); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.evaluate(ws) + .releaseTargets([event.payload.releaseTarget], event.payload.opts) + .dispatch(); + }); diff --git a/apps/event-queue/src/events/resources.ts b/apps/event-queue/src/events/resources.ts index 1d3dbcbb8..6d59b5c2c 100644 --- a/apps/event-queue/src/events/resources.ts +++ b/apps/event-queue/src/events/resources.ts @@ -19,12 +19,13 @@ const getResourceWithDates = (resource: FullResource) => { }; const newResourceTracer = trace.getTracer("new-resource"); -const withSpan = makeWithSpan(newResourceTracer); +const withNewResourceSpan = makeWithSpan(newResourceTracer); -export const newResource: Handler = withSpan( +export const newResource: Handler = withNewResourceSpan( "new-resource", async (span, event) => { span.setAttribute("resource.id", event.payload.id); + span.setAttribute("workspace.id", event.workspaceId); const ws = await WorkspaceManager.getOrLoad(event.workspaceId); if (ws == null) return; const resource = getResourceWithDates(event.payload); @@ -32,45 +33,86 @@ export const newResource: Handler = withSpan( }, ); -export const updatedResource: Handler = async ( - event, -) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - const current = getResourceWithDates(event.payload.current); - await OperationPipeline.update(ws).resource(current).dispatch(); -}; +const updatedResourceTracer = trace.getTracer("updated-resource"); +const withUpdatedResourceSpan = makeWithSpan(updatedResourceTracer); -export const deletedResource: Handler = async ( - event, -) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.delete(ws).resource(event.payload).dispatch(); -}; +export const updatedResource: Handler = + withUpdatedResourceSpan("updated-resource", async (span, event) => { + span.setAttribute("resource.id", event.payload.current.id); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + const current = getResourceWithDates(event.payload.current); + await OperationPipeline.update(ws).resource(current).dispatch(); + }); -export const newResourceVariable: Handler< - Event.ResourceVariableCreated -> = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.update(ws).resourceVariable(event.payload).dispatch(); -}; +const deletedResourceTracer = trace.getTracer("deleted-resource"); +const withDeletedResourceSpan = makeWithSpan(deletedResourceTracer); -export const updatedResourceVariable: Handler< - Event.ResourceVariableUpdated -> = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.update(ws) - .resourceVariable(event.payload.current) - .dispatch(); -}; +export const deletedResource: Handler = + withDeletedResourceSpan("deleted-resource", async (span, event) => { + span.setAttribute("resource.id", event.payload.id); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.delete(ws).resource(event.payload).dispatch(); + }); -export const deletedResourceVariable: Handler< - Event.ResourceVariableDeleted -> = async (event) => { - const ws = await WorkspaceManager.getOrLoad(event.workspaceId); - if (ws == null) return; - await OperationPipeline.delete(ws).resourceVariable(event.payload).dispatch(); -}; +const newResourceVariableTracer = trace.getTracer("new-resource-variable"); +const withNewResourceVariableSpan = makeWithSpan(newResourceVariableTracer); + +export const newResourceVariable: Handler = + withNewResourceVariableSpan("new-resource-variable", async (span, event) => { + span.setAttribute("resource-variable.id", event.payload.id); + span.setAttribute("resource.id", event.payload.resourceId); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.update(ws) + .resourceVariable(event.payload) + .dispatch(); + }); + +const updatedResourceVariableTracer = trace.getTracer( + "updated-resource-variable", +); +const withUpdatedResourceVariableSpan = makeWithSpan( + updatedResourceVariableTracer, +); + +export const updatedResourceVariable: Handler = + withUpdatedResourceVariableSpan( + "updated-resource-variable", + async (span, event) => { + span.setAttribute("resource-variable.id", event.payload.current.id); + span.setAttribute("resource.id", event.payload.current.resourceId); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.update(ws) + .resourceVariable(event.payload.current) + .dispatch(); + }, + ); + +const deletedResourceVariableTracer = trace.getTracer( + "deleted-resource-variable", +); +const withDeletedResourceVariableSpan = makeWithSpan( + deletedResourceVariableTracer, +); + +export const deletedResourceVariable: Handler = + withDeletedResourceVariableSpan( + "deleted-resource-variable", + async (span, event) => { + span.setAttribute("resource-variable.id", event.payload.id); + span.setAttribute("resource.id", event.payload.resourceId); + span.setAttribute("workspace.id", event.workspaceId); + const ws = await WorkspaceManager.getOrLoad(event.workspaceId); + if (ws == null) return; + await OperationPipeline.delete(ws) + .resourceVariable(event.payload) + .dispatch(); + }, + ); From dacf583257539be7f8f34145e5363bf59c30ab22 Mon Sep 17 00:00:00 2001 From: Aditya Choudhari Date: Sat, 27 Sep 2025 16:07:24 -0400 Subject: [PATCH 2/3] event type attribute --- apps/event-queue/src/events/deployment-variables.ts | 5 +++++ apps/event-queue/src/events/deployment-versions.ts | 3 +++ apps/event-queue/src/events/deployments.ts | 3 +++ apps/event-queue/src/events/environments.ts | 3 +++ apps/event-queue/src/events/job.ts | 1 + apps/event-queue/src/events/policy.ts | 3 +++ apps/event-queue/src/events/release-targets.ts | 1 + apps/event-queue/src/events/resources.ts | 3 +++ 8 files changed, 22 insertions(+) diff --git a/apps/event-queue/src/events/deployment-variables.ts b/apps/event-queue/src/events/deployment-variables.ts index 0fe165196..7e2b74174 100644 --- a/apps/event-queue/src/events/deployment-variables.ts +++ b/apps/event-queue/src/events/deployment-variables.ts @@ -13,6 +13,7 @@ export const newDeploymentVariable: Handler = withNewDeploymentVariableSpan( "new-deployment-variable", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("deployment-variable.id", event.payload.id); span.setAttribute("deployment.id", event.payload.deploymentId); span.setAttribute("workspace.id", event.workspaceId); @@ -35,6 +36,7 @@ export const updatedDeploymentVariable: Handler withUpdatedDeploymentVariableSpan( "updated-deployment-variable", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("deployment-variable.id", event.payload.current.id); span.setAttribute("deployment.id", event.payload.current.deploymentId); span.setAttribute("workspace.id", event.workspaceId); @@ -57,6 +59,7 @@ export const deletedDeploymentVariable: Handler withDeletedDeploymentVariableSpan( "deleted-deployment-variable", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("deployment-variable.id", event.payload.id); span.setAttribute("deployment.id", event.payload.deploymentId); span.setAttribute("workspace.id", event.workspaceId); @@ -101,6 +104,7 @@ export const updatedDeploymentVariableValue: Handler { + span.setAttribute("event.type", event.eventType); span.setAttribute( "deployment-variable-value.id", event.payload.current.id, @@ -129,6 +133,7 @@ export const deletedDeploymentVariableValue: Handler { + span.setAttribute("event.type", event.eventType); span.setAttribute("deployment-variable-value.id", event.payload.id); span.setAttribute("deployment-variable.id", event.payload.variableId); span.setAttribute("workspace.id", event.workspaceId); diff --git a/apps/event-queue/src/events/deployment-versions.ts b/apps/event-queue/src/events/deployment-versions.ts index bf87e3887..bda2ebcdd 100644 --- a/apps/event-queue/src/events/deployment-versions.ts +++ b/apps/event-queue/src/events/deployment-versions.ts @@ -21,6 +21,7 @@ export const newDeploymentVersion: Handler = withNewDeploymentVersionSpan( "new-deployment-version", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("deployment-version.id", event.payload.id); span.setAttribute("deployment.id", event.payload.deploymentId); span.setAttribute("workspace.id", event.workspaceId); @@ -44,6 +45,7 @@ export const updatedDeploymentVersion: Handler = withUpdatedDeploymentVersionSpan( "updated-deployment-version", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("deployment-version.id", event.payload.current.id); span.setAttribute("deployment.id", event.payload.current.deploymentId); span.setAttribute("workspace.id", event.workspaceId); @@ -69,6 +71,7 @@ export const deletedDeploymentVersion: Handler = withDeletedDeploymentVersionSpan( "deleted-deployment-version", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("deployment-version.id", event.payload.id); span.setAttribute("deployment.id", event.payload.deploymentId); span.setAttribute("workspace.id", event.workspaceId); diff --git a/apps/event-queue/src/events/deployments.ts b/apps/event-queue/src/events/deployments.ts index 43e4933f7..ef9858647 100644 --- a/apps/event-queue/src/events/deployments.ts +++ b/apps/event-queue/src/events/deployments.ts @@ -11,6 +11,7 @@ const withNewDeploymentSpan = makeWithSpan(newDeploymentTracer); export const newDeployment: Handler = withNewDeploymentSpan("new-deployment", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("deployment.id", event.payload.id); span.setAttribute("workspace.id", event.workspaceId); const ws = await WorkspaceManager.getOrLoad(event.workspaceId); @@ -23,6 +24,7 @@ const withUpdatedDeploymentSpan = makeWithSpan(updatedDeploymentTracer); export const updatedDeployment: Handler = withUpdatedDeploymentSpan("updated-deployment", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("deployment.id", event.payload.current.id); span.setAttribute("workspace.id", event.workspaceId); const ws = await WorkspaceManager.getOrLoad(event.workspaceId); @@ -37,6 +39,7 @@ const withDeletedDeploymentSpan = makeWithSpan(deletedDeploymentTracer); export const deletedDeployment: Handler = withDeletedDeploymentSpan("deleted-deployment", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("deployment.id", event.payload.id); span.setAttribute("workspace.id", event.workspaceId); const ws = await WorkspaceManager.getOrLoad(event.workspaceId); diff --git a/apps/event-queue/src/events/environments.ts b/apps/event-queue/src/events/environments.ts index cf288c76f..f5cfb049f 100644 --- a/apps/event-queue/src/events/environments.ts +++ b/apps/event-queue/src/events/environments.ts @@ -11,6 +11,7 @@ const withNewEnvironmentSpan = makeWithSpan(newEnvironmentTracer); export const newEnvironment: Handler = withNewEnvironmentSpan("new-environment", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("environment.id", event.payload.id); span.setAttribute("workspace.id", event.workspaceId); const ws = await WorkspaceManager.getOrLoad(event.workspaceId); @@ -25,6 +26,7 @@ const withUpdatedEnvironmentSpan = makeWithSpan(updatedEnvironmentTracer); export const updatedEnvironment: Handler = withUpdatedEnvironmentSpan("updated-environment", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("environment.id", event.payload.current.id); span.setAttribute("workspace.id", event.workspaceId); const ws = await WorkspaceManager.getOrLoad(event.workspaceId); @@ -39,6 +41,7 @@ const withDeletedEnvironmentSpan = makeWithSpan(deletedEnvironmentTracer); export const deletedEnvironment: Handler = withDeletedEnvironmentSpan("deleted-environment", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("environment.id", event.payload.id); span.setAttribute("workspace.id", event.workspaceId); const ws = await WorkspaceManager.getOrLoad(event.workspaceId); diff --git a/apps/event-queue/src/events/job.ts b/apps/event-queue/src/events/job.ts index c1e9335e5..6e3559791 100644 --- a/apps/event-queue/src/events/job.ts +++ b/apps/event-queue/src/events/job.ts @@ -22,6 +22,7 @@ const withUpdatedJobSpan = makeWithSpan(updatedJobTracer); export const updateJob: Handler = withUpdatedJobSpan( "updated-job", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("job.id", event.payload.current.id); span.setAttribute("workspace.id", event.workspaceId); const ws = await WorkspaceManager.getOrLoad(event.workspaceId); diff --git a/apps/event-queue/src/events/policy.ts b/apps/event-queue/src/events/policy.ts index aa8c2e6a0..ff10217df 100644 --- a/apps/event-queue/src/events/policy.ts +++ b/apps/event-queue/src/events/policy.ts @@ -35,6 +35,7 @@ const withNewPolicySpan = makeWithSpan(newPolicyTracer); export const newPolicy: Handler = withNewPolicySpan( "new-policy", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("policy.id", event.payload.id); span.setAttribute("workspace.id", event.workspaceId); const ws = await WorkspaceManager.getOrLoad(event.workspaceId); @@ -49,6 +50,7 @@ const withUpdatedPolicySpan = makeWithSpan(updatedPolicyTracer); export const updatedPolicy: Handler = withUpdatedPolicySpan("updated-policy", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("policy.id", event.payload.current.id); span.setAttribute("workspace.id", event.workspaceId); const ws = await WorkspaceManager.getOrLoad(event.workspaceId); @@ -62,6 +64,7 @@ const withDeletedPolicySpan = makeWithSpan(deletedPolicyTracer); export const deletedPolicy: Handler = withDeletedPolicySpan("deleted-policy", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("policy.id", event.payload.id); span.setAttribute("workspace.id", event.workspaceId); const ws = await WorkspaceManager.getOrLoad(event.workspaceId); diff --git a/apps/event-queue/src/events/release-targets.ts b/apps/event-queue/src/events/release-targets.ts index 9421967fc..63d4c68aa 100644 --- a/apps/event-queue/src/events/release-targets.ts +++ b/apps/event-queue/src/events/release-targets.ts @@ -11,6 +11,7 @@ const withSpan = makeWithSpan(evaluateReleaseTargetTracer); export const evaluateReleaseTarget: Handler = withSpan("evaluate-release-target", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("releaseTarget.id", event.payload.releaseTarget.id); span.setAttribute("workspace.id", event.workspaceId); const ws = await WorkspaceManager.getOrLoad(event.workspaceId); diff --git a/apps/event-queue/src/events/resources.ts b/apps/event-queue/src/events/resources.ts index 6d59b5c2c..4974a0d92 100644 --- a/apps/event-queue/src/events/resources.ts +++ b/apps/event-queue/src/events/resources.ts @@ -63,6 +63,7 @@ const withNewResourceVariableSpan = makeWithSpan(newResourceVariableTracer); export const newResourceVariable: Handler = withNewResourceVariableSpan("new-resource-variable", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("resource-variable.id", event.payload.id); span.setAttribute("resource.id", event.payload.resourceId); span.setAttribute("workspace.id", event.workspaceId); @@ -84,6 +85,7 @@ export const updatedResourceVariable: Handler = withUpdatedResourceVariableSpan( "updated-resource-variable", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("resource-variable.id", event.payload.current.id); span.setAttribute("resource.id", event.payload.current.resourceId); span.setAttribute("workspace.id", event.workspaceId); @@ -106,6 +108,7 @@ export const deletedResourceVariable: Handler = withDeletedResourceVariableSpan( "deleted-resource-variable", async (span, event) => { + span.setAttribute("event.type", event.eventType); span.setAttribute("resource-variable.id", event.payload.id); span.setAttribute("resource.id", event.payload.resourceId); span.setAttribute("workspace.id", event.workspaceId); From 6d3e2609a11e99578c5dde265ad3889bfeb899f3 Mon Sep 17 00:00:00 2001 From: Aditya Choudhari Date: Sat, 27 Sep 2025 16:11:17 -0400 Subject: [PATCH 3/3] fix --- apps/event-queue/src/events/deployment-variables.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/event-queue/src/events/deployment-variables.ts b/apps/event-queue/src/events/deployment-variables.ts index 7e2b74174..1afa49911 100644 --- a/apps/event-queue/src/events/deployment-variables.ts +++ b/apps/event-queue/src/events/deployment-variables.ts @@ -65,7 +65,7 @@ export const deletedDeploymentVariable: Handler span.setAttribute("workspace.id", event.workspaceId); const ws = await WorkspaceManager.getOrLoad(event.workspaceId); if (ws == null) return; - await OperationPipeline.update(ws) + await OperationPipeline.delete(ws) .deploymentVariable(event.payload) .dispatch(); }, @@ -139,7 +139,7 @@ export const deletedDeploymentVariableValue: Handler