Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions platform/src/components/cloudflare/ssr-site.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ export type Plan = {

export interface SsrSiteArgs extends BaseSsrSiteArgs {
domain?: WorkerArgs["domain"];
/**
* Configure [Cloudflare Workers observability](https://developers.cloudflare.com/workers/observability/)
* for the underlying Worker. See `WorkerArgs.observability` for details.
*/
observability?: WorkerArgs["observability"];
/**
* The Cloudflare account ID to use for this SsrSite.
* Overrides the default account ID set via `CLOUDFLARE_DEFAULT_ACCOUNT_ID`.
Expand Down Expand Up @@ -244,6 +249,7 @@ export abstract class SsrSite extends Component implements Link.Linkable {
url: true,
dev: false,
domain: args.domain,
observability: args.observability,
handler: all([outputPath, plan.server]).apply(
([outputPath, server]) => path.join(outputPath, server),
),
Expand Down
6 changes: 6 additions & 0 deletions platform/src/components/cloudflare/static-site-v2.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,11 @@ export interface StaticSiteV2Args extends Omit<BaseStaticSiteArgs, "vite"> {
* @default `"single-page-application"`
*/
notFound?: Input<"single-page-application" | "404">;
/**
* Configure [Cloudflare Workers observability](https://developers.cloudflare.com/workers/observability/)
* for the underlying Worker. See `WorkerArgs.observability` for details.
*/
observability?: WorkerArgs["observability"];
/** @deprecated */
indexPage?: string;
/** @deprecated */
Expand Down Expand Up @@ -367,6 +372,7 @@ export class StaticSiteV2 extends Component implements Link.Linkable {
url: true,
dev: false,
domain: args.domain,
observability: args.observability,
assets: {
directory: outputPath,
htmlHandling,
Expand Down
59 changes: 59 additions & 0 deletions platform/src/components/cloudflare/worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {
all,
jsonStringify,
interpolate,
Output,
} from "@pulumi/pulumi";
import * as cf from "@pulumi/cloudflare";
import type { Loader } from "esbuild";
Expand Down Expand Up @@ -384,6 +385,49 @@ export interface WorkerArgs {
host?: Input<string>;
hostname?: Input<string>;
}>;
/**
* Configure [Cloudflare Workers observability](https://developers.cloudflare.com/workers/observability/)
* for your Worker. Lets you enable logs and traces with optional sampling rates.
*
* @example
*
* #### Traces only
* ```js
* {
* observability: {
* traces: { enabled: true, headSamplingRate: 0.1 }
* }
* }
* ```
*
* #### Logs and traces
* ```js
* {
* observability: {
* logs: { enabled: true, headSamplingRate: 0.5 },
* traces: { enabled: true, headSamplingRate: 0.1 }
* }
* }
* ```
*/
observability?: Input<{
/**
* Capture `console.*` output and invocation metadata for the Worker.
*/
logs?: Input<{
enabled?: Input<boolean>;
headSamplingRate?: Input<number>;
invocationLogs?: Input<boolean>;
}>;
/**
* Capture platform operations (fetch, KV, R2, Durable Object, Queue) and any
* custom spans added in Worker code via `ctx.tracing`.
*/
traces?: Input<{
enabled?: Input<boolean>;
headSamplingRate?: Input<number>;
}>;
}>;
/**
* [Transform](/docs/components/#transform) how this component creates its underlying
* resources.
Expand Down Expand Up @@ -483,6 +527,7 @@ export class Worker extends Component implements Link.Linkable {
const urlEnabled = normalizeUrl();
const compatibility = normalizeCompatibility(args);
const domain = normalizeDomain();
const observability = normalizeObservability();

const bindings = buildBindings();
const iamCredentials = createAwsCredentials();
Expand Down Expand Up @@ -582,6 +627,17 @@ export class Worker extends Component implements Link.Linkable {
};
}

function normalizeObservability() {
if (!args.observability) return undefined;
return output(args.observability).apply((v) => ({
enabled: true,
logs: v.logs
? { enabled: true, invocationLogs: true, ...v.logs }
: undefined,
traces: v.traces ? { enabled: true, ...v.traces } : undefined,
}));
}

function buildBindings() {
const result = [
{
Expand Down Expand Up @@ -882,6 +938,9 @@ export class Worker extends Component implements Link.Linkable {
})),
],
),
observability: observability as
| Output<cf.types.input.WorkersScriptObservability>
| undefined,
},
{ parent, ignoreChanges: ["scriptName"] },
),
Expand Down
6 changes: 6 additions & 0 deletions platform/src/components/cloudflare/workflow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,11 @@ export interface WorkflowArgs {
* ```
*/
environment?: Input<Record<string, Input<string>>>;
/**
* Configure [Cloudflare Workers observability](https://developers.cloudflare.com/workers/observability/)
* for the underlying Worker. See `WorkerArgs.observability` for details.
*/
observability?: WorkerArgs["observability"];
/**
* The Cloudflare account ID to use for this Workflow.
* Overrides the default account ID set via `CLOUDFLARE_DEFAULT_ACCOUNT_ID`.
Expand Down Expand Up @@ -218,6 +223,7 @@ export class Workflow extends Component implements Link.Linkable {
handler: args.handler,
link: args.link,
environment: args.environment,
observability: args.observability,
},
{ parent },
),
Expand Down