@blokjs/runner 0.6.21 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Blok.d.ts +2 -0
- package/dist/Blok.js +42 -110
- package/dist/Blok.js.map +1 -1
- package/dist/DefaultLogger.d.ts +13 -0
- package/dist/DefaultLogger.js +25 -0
- package/dist/DefaultLogger.js.map +1 -1
- package/dist/RunnerSteps.d.ts +23 -0
- package/dist/RunnerSteps.js +128 -87
- package/dist/RunnerSteps.js.map +1 -1
- package/dist/SubworkflowNode.js +19 -0
- package/dist/SubworkflowNode.js.map +1 -1
- package/dist/TriggerBase.d.ts +12 -0
- package/dist/TriggerBase.js +216 -181
- package/dist/TriggerBase.js.map +1 -1
- package/dist/adapters/grpc/GrpcRuntimeAdapter.d.ts +9 -0
- package/dist/adapters/grpc/GrpcRuntimeAdapter.js +76 -6
- package/dist/adapters/grpc/GrpcRuntimeAdapter.js.map +1 -1
- package/dist/index.d.ts +4 -39
- package/dist/index.js +7 -32
- package/dist/index.js.map +1 -1
- package/dist/monitoring/JanitorMetrics.d.ts +3 -0
- package/dist/monitoring/JanitorMetrics.js +11 -0
- package/dist/monitoring/JanitorMetrics.js.map +1 -1
- package/dist/monitoring/ProcessErrorMetrics.d.ts +32 -0
- package/dist/monitoring/ProcessErrorMetrics.js +43 -0
- package/dist/monitoring/ProcessErrorMetrics.js.map +1 -0
- package/dist/monitoring/PrometheusMetricsBridge.d.ts +7 -0
- package/dist/monitoring/PrometheusMetricsBridge.js +8 -2
- package/dist/monitoring/PrometheusMetricsBridge.js.map +1 -1
- package/dist/monitoring/SubworkflowMetrics.d.ts +25 -0
- package/dist/monitoring/SubworkflowMetrics.js +38 -0
- package/dist/monitoring/SubworkflowMetrics.js.map +1 -0
- package/dist/observability/ErrorSink.d.ts +23 -0
- package/dist/observability/ErrorSink.js +32 -0
- package/dist/observability/ErrorSink.js.map +1 -0
- package/dist/observability/SentryIntegration.d.ts +9 -0
- package/dist/observability/SentryIntegration.js +31 -0
- package/dist/observability/SentryIntegration.js.map +1 -0
- package/dist/scheduling/DebounceCoordinator.d.ts +7 -53
- package/dist/scheduling/DebounceCoordinator.js +8 -207
- package/dist/scheduling/DebounceCoordinator.js.map +1 -1
- package/dist/tracing/InMemoryRunStore.d.ts +5 -1
- package/dist/tracing/InMemoryRunStore.js +14 -0
- package/dist/tracing/InMemoryRunStore.js.map +1 -1
- package/dist/tracing/Janitor.js +3 -0
- package/dist/tracing/Janitor.js.map +1 -1
- package/dist/tracing/PostgresRunStore.d.ts +4 -1
- package/dist/tracing/PostgresRunStore.js +73 -3
- package/dist/tracing/PostgresRunStore.js.map +1 -1
- package/dist/tracing/RunStore.d.ts +17 -1
- package/dist/tracing/RunTracker.d.ts +13 -34
- package/dist/tracing/RunTracker.js +62 -32
- package/dist/tracing/RunTracker.js.map +1 -1
- package/dist/tracing/SqliteRunStore.d.ts +4 -1
- package/dist/tracing/SqliteRunStore.js +60 -0
- package/dist/tracing/SqliteRunStore.js.map +1 -1
- package/dist/tracing/TraceRouter.d.ts +13 -0
- package/dist/tracing/TraceRouter.js +43 -11
- package/dist/tracing/TraceRouter.js.map +1 -1
- package/dist/tracing/TracingLogger.js +22 -0
- package/dist/tracing/TracingLogger.js.map +1 -1
- package/dist/tracing/createStore.js +51 -22
- package/dist/tracing/createStore.js.map +1 -1
- package/dist/tracing/types.d.ts +22 -0
- package/dist/types/GlobalOptions.d.ts +5 -7
- package/dist/workflow/WorkflowNormalizer.js +63 -0
- package/dist/workflow/WorkflowNormalizer.js.map +1 -1
- package/package.json +7 -4
- package/dist/cache/NodeResultCache.d.ts +0 -286
- package/dist/cache/NodeResultCache.js +0 -506
- package/dist/cache/NodeResultCache.js.map +0 -1
- package/dist/cache/index.d.ts +0 -1
- package/dist/cache/index.js +0 -2
- package/dist/cache/index.js.map +0 -1
- package/dist/concurrency/ConcurrencyBackend.d.ts +0 -61
- package/dist/concurrency/ConcurrencyBackend.js +0 -20
- package/dist/concurrency/ConcurrencyBackend.js.map +0 -1
- package/dist/concurrency/NatsKvConcurrencyBackend.d.ts +0 -64
- package/dist/concurrency/NatsKvConcurrencyBackend.js +0 -310
- package/dist/concurrency/NatsKvConcurrencyBackend.js.map +0 -1
- package/dist/concurrency/RedisConcurrencyBackend.d.ts +0 -64
- package/dist/concurrency/RedisConcurrencyBackend.js +0 -374
- package/dist/concurrency/RedisConcurrencyBackend.js.map +0 -1
- package/dist/concurrency/createConcurrencyBackend.d.ts +0 -24
- package/dist/concurrency/createConcurrencyBackend.js +0 -38
- package/dist/concurrency/createConcurrencyBackend.js.map +0 -1
- package/dist/graphql/GraphQLSchemaGenerator.d.ts +0 -129
- package/dist/graphql/GraphQLSchemaGenerator.js +0 -425
- package/dist/graphql/GraphQLSchemaGenerator.js.map +0 -1
- package/dist/integrations/APMIntegration.d.ts +0 -141
- package/dist/integrations/APMIntegration.js +0 -212
- package/dist/integrations/APMIntegration.js.map +0 -1
- package/dist/integrations/AzureMonitorIntegration.d.ts +0 -118
- package/dist/integrations/AzureMonitorIntegration.js +0 -254
- package/dist/integrations/AzureMonitorIntegration.js.map +0 -1
- package/dist/integrations/CloudWatchIntegration.d.ts +0 -135
- package/dist/integrations/CloudWatchIntegration.js +0 -293
- package/dist/integrations/CloudWatchIntegration.js.map +0 -1
- package/dist/integrations/SentryIntegration.d.ts +0 -153
- package/dist/integrations/SentryIntegration.js +0 -200
- package/dist/integrations/SentryIntegration.js.map +0 -1
- package/dist/integrations/index.d.ts +0 -19
- package/dist/integrations/index.js +0 -16
- package/dist/integrations/index.js.map +0 -1
- package/dist/marketplace/RuntimeAutoScaler.d.ts +0 -148
- package/dist/marketplace/RuntimeAutoScaler.js +0 -366
- package/dist/marketplace/RuntimeAutoScaler.js.map +0 -1
- package/dist/marketplace/RuntimeCatalog.d.ts +0 -180
- package/dist/marketplace/RuntimeCatalog.js +0 -339
- package/dist/marketplace/RuntimeCatalog.js.map +0 -1
- package/dist/marketplace/RuntimeDiscovery.d.ts +0 -86
- package/dist/marketplace/RuntimeDiscovery.js +0 -231
- package/dist/marketplace/RuntimeDiscovery.js.map +0 -1
- package/dist/marketplace/RuntimeHealthMonitor.d.ts +0 -100
- package/dist/marketplace/RuntimeHealthMonitor.js +0 -241
- package/dist/marketplace/RuntimeHealthMonitor.js.map +0 -1
- package/dist/marketplace/RuntimeMetricsDashboard.d.ts +0 -113
- package/dist/marketplace/RuntimeMetricsDashboard.js +0 -293
- package/dist/marketplace/RuntimeMetricsDashboard.js.map +0 -1
- package/dist/openapi/OpenAPIGenerator.d.ts +0 -192
- package/dist/openapi/OpenAPIGenerator.js +0 -378
- package/dist/openapi/OpenAPIGenerator.js.map +0 -1
- package/dist/openapi/index.d.ts +0 -20
- package/dist/openapi/index.js +0 -20
- package/dist/openapi/index.js.map +0 -1
- package/dist/scheduling/DebounceBackend.d.ts +0 -108
- package/dist/scheduling/DebounceBackend.js +0 -23
- package/dist/scheduling/DebounceBackend.js.map +0 -1
- package/dist/scheduling/NatsKvDebounceBackend.d.ts +0 -53
- package/dist/scheduling/NatsKvDebounceBackend.js +0 -334
- package/dist/scheduling/NatsKvDebounceBackend.js.map +0 -1
- package/dist/scheduling/RedisDebounceBackend.d.ts +0 -49
- package/dist/scheduling/RedisDebounceBackend.js +0 -356
- package/dist/scheduling/RedisDebounceBackend.js.map +0 -1
- package/dist/scheduling/createDebounceBackend.d.ts +0 -25
- package/dist/scheduling/createDebounceBackend.js +0 -39
- package/dist/scheduling/createDebounceBackend.js.map +0 -1
- package/dist/security/ABAC.d.ts +0 -224
- package/dist/security/ABAC.js +0 -380
- package/dist/security/ABAC.js.map +0 -1
- package/dist/security/AuditLogger.d.ts +0 -242
- package/dist/security/AuditLogger.js +0 -317
- package/dist/security/AuditLogger.js.map +0 -1
- package/dist/security/AuthMiddleware.d.ts +0 -162
- package/dist/security/AuthMiddleware.js +0 -289
- package/dist/security/AuthMiddleware.js.map +0 -1
- package/dist/security/EncryptionAtRest.d.ts +0 -206
- package/dist/security/EncryptionAtRest.js +0 -236
- package/dist/security/EncryptionAtRest.js.map +0 -1
- package/dist/security/OAuthProvider.d.ts +0 -334
- package/dist/security/OAuthProvider.js +0 -719
- package/dist/security/OAuthProvider.js.map +0 -1
- package/dist/security/PIIDetector.d.ts +0 -233
- package/dist/security/PIIDetector.js +0 -354
- package/dist/security/PIIDetector.js.map +0 -1
- package/dist/security/RBAC.d.ts +0 -143
- package/dist/security/RBAC.js +0 -285
- package/dist/security/RBAC.js.map +0 -1
- package/dist/security/SecretManager.d.ts +0 -652
- package/dist/security/SecretManager.js +0 -1147
- package/dist/security/SecretManager.js.map +0 -1
- package/dist/security/TLSConfig.d.ts +0 -305
- package/dist/security/TLSConfig.js +0 -550
- package/dist/security/TLSConfig.js.map +0 -1
- package/dist/security/index.d.ts +0 -81
- package/dist/security/index.js +0 -82
- package/dist/security/index.js.map +0 -1
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AWS CloudWatch Integration for Blok
|
|
3
|
-
*
|
|
4
|
-
* Sends metrics to CloudWatch Metrics and logs to CloudWatch Logs.
|
|
5
|
-
* Traces are exported via OTLP to the AWS Distro for OpenTelemetry (ADOT)
|
|
6
|
-
* Collector, which forwards them to AWS X-Ray.
|
|
7
|
-
*
|
|
8
|
-
* Uses lazy dynamic imports so AWS SDK packages are optional peer
|
|
9
|
-
* dependencies. If the SDK is not installed the integration silently
|
|
10
|
-
* degrades (init returns false).
|
|
11
|
-
*
|
|
12
|
-
* Supported transports:
|
|
13
|
-
* - **Metrics** – CloudWatch PutMetricData (via @aws-sdk/client-cloudwatch)
|
|
14
|
-
* - **Logs** – CloudWatch Logs PutLogEvents (via @aws-sdk/client-cloudwatch-logs)
|
|
15
|
-
* - **Traces** – OTLP → ADOT Collector → X-Ray (reuses TracingBootstrap)
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```typescript
|
|
19
|
-
* import { CloudWatchIntegration } from "@blokjs/runner";
|
|
20
|
-
*
|
|
21
|
-
* const cw = new CloudWatchIntegration({
|
|
22
|
-
* region: "us-east-1",
|
|
23
|
-
* serviceName: "blok-http",
|
|
24
|
-
* logGroupName: "/blok/workflows",
|
|
25
|
-
* namespace: "Blok",
|
|
26
|
-
* });
|
|
27
|
-
*
|
|
28
|
-
* await cw.init();
|
|
29
|
-
*
|
|
30
|
-
* // Send a custom metric
|
|
31
|
-
* await cw.putMetric("WorkflowDuration", 42, "Milliseconds");
|
|
32
|
-
*
|
|
33
|
-
* // Send a structured log entry
|
|
34
|
-
* await cw.putLog({ level: "info", message: "workflow completed", workflowName: "get-user" });
|
|
35
|
-
*
|
|
36
|
-
* // Enable OTLP traces via ADOT Collector
|
|
37
|
-
* const cw = new CloudWatchIntegration({
|
|
38
|
-
* region: "us-east-1",
|
|
39
|
-
* serviceName: "blok-http",
|
|
40
|
-
* enableTracing: true,
|
|
41
|
-
* adotEndpoint: "http://localhost:4318/v1/traces",
|
|
42
|
-
* });
|
|
43
|
-
* ```
|
|
44
|
-
*/
|
|
45
|
-
export interface CloudWatchConfig {
|
|
46
|
-
/** AWS region (e.g. "us-east-1"). Falls back to AWS_REGION env var. */
|
|
47
|
-
region?: string;
|
|
48
|
-
/** Blok service name (used in metric dimensions and log metadata) */
|
|
49
|
-
serviceName: string;
|
|
50
|
-
/** Service version */
|
|
51
|
-
serviceVersion?: string;
|
|
52
|
-
/** Environment label */
|
|
53
|
-
environment?: string;
|
|
54
|
-
/** CloudWatch Logs log group name (default: "/blok/workflows") */
|
|
55
|
-
logGroupName?: string;
|
|
56
|
-
/** CloudWatch Logs log stream name (default: serviceName-<date>) */
|
|
57
|
-
logStreamName?: string;
|
|
58
|
-
/** CloudWatch Metrics namespace (default: "Blok") */
|
|
59
|
-
namespace?: string;
|
|
60
|
-
/** Enable OTLP trace export via ADOT Collector → X-Ray */
|
|
61
|
-
enableTracing?: boolean;
|
|
62
|
-
/** ADOT Collector OTLP endpoint (default: http://localhost:4318/v1/traces) */
|
|
63
|
-
adotEndpoint?: string;
|
|
64
|
-
/** Trace sampling ratio (0.0 – 1.0, default: 1.0) */
|
|
65
|
-
samplingRatio?: number;
|
|
66
|
-
/** Enable debug logging */
|
|
67
|
-
debug?: boolean;
|
|
68
|
-
}
|
|
69
|
-
/** Supported CloudWatch metric units */
|
|
70
|
-
export type CloudWatchUnit = "Seconds" | "Microseconds" | "Milliseconds" | "Bytes" | "Kilobytes" | "Megabytes" | "Gigabytes" | "Bits" | "Percent" | "Count" | "Count/Second" | "None";
|
|
71
|
-
export interface CloudWatchLogEntry {
|
|
72
|
-
level: "debug" | "info" | "warn" | "error" | "fatal";
|
|
73
|
-
message: string;
|
|
74
|
-
[key: string]: unknown;
|
|
75
|
-
}
|
|
76
|
-
export interface CloudWatchStats {
|
|
77
|
-
initialized: boolean;
|
|
78
|
-
metricsPublished: number;
|
|
79
|
-
logsPublished: number;
|
|
80
|
-
metricErrors: number;
|
|
81
|
-
logErrors: number;
|
|
82
|
-
tracingEnabled: boolean;
|
|
83
|
-
}
|
|
84
|
-
export declare class CloudWatchIntegration {
|
|
85
|
-
private config;
|
|
86
|
-
private cwClient;
|
|
87
|
-
private cwLogsClient;
|
|
88
|
-
private initialized;
|
|
89
|
-
private tracingInitialized;
|
|
90
|
-
private tracingShutdown;
|
|
91
|
-
private sequenceToken;
|
|
92
|
-
private PutMetricDataCommand;
|
|
93
|
-
private PutLogEventsCommand;
|
|
94
|
-
private CreateLogGroupCommand;
|
|
95
|
-
private CreateLogStreamCommand;
|
|
96
|
-
private metricsPublished;
|
|
97
|
-
private logsPublished;
|
|
98
|
-
private metricErrors;
|
|
99
|
-
private logErrors;
|
|
100
|
-
constructor(config: CloudWatchConfig);
|
|
101
|
-
/**
|
|
102
|
-
* Initialize CloudWatch clients.
|
|
103
|
-
* Returns false if AWS SDK packages are not installed.
|
|
104
|
-
*/
|
|
105
|
-
init(): Promise<boolean>;
|
|
106
|
-
/**
|
|
107
|
-
* Publish a custom metric to CloudWatch.
|
|
108
|
-
*/
|
|
109
|
-
putMetric(metricName: string, value: number, unit?: CloudWatchUnit, dimensions?: Record<string, string>): Promise<boolean>;
|
|
110
|
-
/**
|
|
111
|
-
* Publish workflow execution metrics (duration + error count).
|
|
112
|
-
*/
|
|
113
|
-
recordWorkflowExecution(workflowName: string, durationMs: number, success: boolean): Promise<void>;
|
|
114
|
-
/**
|
|
115
|
-
* Send a structured log entry to CloudWatch Logs.
|
|
116
|
-
*/
|
|
117
|
-
putLog(entry: CloudWatchLogEntry): Promise<boolean>;
|
|
118
|
-
/**
|
|
119
|
-
* Log a workflow error to CloudWatch Logs.
|
|
120
|
-
*/
|
|
121
|
-
logWorkflowError(error: Error, context: {
|
|
122
|
-
workflowName: string;
|
|
123
|
-
workflowPath: string;
|
|
124
|
-
requestId?: string;
|
|
125
|
-
nodeName?: string;
|
|
126
|
-
}): Promise<boolean>;
|
|
127
|
-
private initTracing;
|
|
128
|
-
isInitialized(): boolean;
|
|
129
|
-
isTracingEnabled(): boolean;
|
|
130
|
-
getStats(): CloudWatchStats;
|
|
131
|
-
shutdown(): Promise<void>;
|
|
132
|
-
flush(): Promise<void>;
|
|
133
|
-
private getLogStreamName;
|
|
134
|
-
private ensureLogDestination;
|
|
135
|
-
}
|
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AWS CloudWatch Integration for Blok
|
|
3
|
-
*
|
|
4
|
-
* Sends metrics to CloudWatch Metrics and logs to CloudWatch Logs.
|
|
5
|
-
* Traces are exported via OTLP to the AWS Distro for OpenTelemetry (ADOT)
|
|
6
|
-
* Collector, which forwards them to AWS X-Ray.
|
|
7
|
-
*
|
|
8
|
-
* Uses lazy dynamic imports so AWS SDK packages are optional peer
|
|
9
|
-
* dependencies. If the SDK is not installed the integration silently
|
|
10
|
-
* degrades (init returns false).
|
|
11
|
-
*
|
|
12
|
-
* Supported transports:
|
|
13
|
-
* - **Metrics** – CloudWatch PutMetricData (via @aws-sdk/client-cloudwatch)
|
|
14
|
-
* - **Logs** – CloudWatch Logs PutLogEvents (via @aws-sdk/client-cloudwatch-logs)
|
|
15
|
-
* - **Traces** – OTLP → ADOT Collector → X-Ray (reuses TracingBootstrap)
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```typescript
|
|
19
|
-
* import { CloudWatchIntegration } from "@blokjs/runner";
|
|
20
|
-
*
|
|
21
|
-
* const cw = new CloudWatchIntegration({
|
|
22
|
-
* region: "us-east-1",
|
|
23
|
-
* serviceName: "blok-http",
|
|
24
|
-
* logGroupName: "/blok/workflows",
|
|
25
|
-
* namespace: "Blok",
|
|
26
|
-
* });
|
|
27
|
-
*
|
|
28
|
-
* await cw.init();
|
|
29
|
-
*
|
|
30
|
-
* // Send a custom metric
|
|
31
|
-
* await cw.putMetric("WorkflowDuration", 42, "Milliseconds");
|
|
32
|
-
*
|
|
33
|
-
* // Send a structured log entry
|
|
34
|
-
* await cw.putLog({ level: "info", message: "workflow completed", workflowName: "get-user" });
|
|
35
|
-
*
|
|
36
|
-
* // Enable OTLP traces via ADOT Collector
|
|
37
|
-
* const cw = new CloudWatchIntegration({
|
|
38
|
-
* region: "us-east-1",
|
|
39
|
-
* serviceName: "blok-http",
|
|
40
|
-
* enableTracing: true,
|
|
41
|
-
* adotEndpoint: "http://localhost:4318/v1/traces",
|
|
42
|
-
* });
|
|
43
|
-
* ```
|
|
44
|
-
*/
|
|
45
|
-
export class CloudWatchIntegration {
|
|
46
|
-
config;
|
|
47
|
-
cwClient = null;
|
|
48
|
-
cwLogsClient = null;
|
|
49
|
-
initialized = false;
|
|
50
|
-
tracingInitialized = false;
|
|
51
|
-
tracingShutdown = null;
|
|
52
|
-
sequenceToken;
|
|
53
|
-
// SDK constructors (loaded lazily)
|
|
54
|
-
PutMetricDataCommand = null;
|
|
55
|
-
PutLogEventsCommand = null;
|
|
56
|
-
CreateLogGroupCommand = null;
|
|
57
|
-
CreateLogStreamCommand = null;
|
|
58
|
-
// stats
|
|
59
|
-
metricsPublished = 0;
|
|
60
|
-
logsPublished = 0;
|
|
61
|
-
metricErrors = 0;
|
|
62
|
-
logErrors = 0;
|
|
63
|
-
constructor(config) {
|
|
64
|
-
this.config = {
|
|
65
|
-
region: process.env.AWS_REGION || "us-east-1",
|
|
66
|
-
serviceVersion: "0.0.1",
|
|
67
|
-
environment: process.env.NODE_ENV || "development",
|
|
68
|
-
logGroupName: "/blok/workflows",
|
|
69
|
-
namespace: "Blok",
|
|
70
|
-
enableTracing: false,
|
|
71
|
-
adotEndpoint: "http://localhost:4318/v1/traces",
|
|
72
|
-
samplingRatio: 1.0,
|
|
73
|
-
debug: false,
|
|
74
|
-
...config,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Initialize CloudWatch clients.
|
|
79
|
-
* Returns false if AWS SDK packages are not installed.
|
|
80
|
-
*/
|
|
81
|
-
async init() {
|
|
82
|
-
if (this.initialized)
|
|
83
|
-
return true;
|
|
84
|
-
try {
|
|
85
|
-
// Dynamically load AWS SDK v3 packages
|
|
86
|
-
// @ts-expect-error: optional peer dependency
|
|
87
|
-
const cwMod = await import("@aws-sdk/client-cloudwatch");
|
|
88
|
-
// @ts-expect-error: optional peer dependency
|
|
89
|
-
const cwLogsMod = await import("@aws-sdk/client-cloudwatch-logs");
|
|
90
|
-
const regionConfig = { region: this.config.region };
|
|
91
|
-
this.cwClient = new cwMod.CloudWatchClient(regionConfig);
|
|
92
|
-
this.cwLogsClient = new cwLogsMod.CloudWatchLogsClient(regionConfig);
|
|
93
|
-
this.PutMetricDataCommand = cwMod.PutMetricDataCommand;
|
|
94
|
-
this.PutLogEventsCommand = cwLogsMod.PutLogEventsCommand;
|
|
95
|
-
this.CreateLogGroupCommand = cwLogsMod.CreateLogGroupCommand;
|
|
96
|
-
this.CreateLogStreamCommand = cwLogsMod.CreateLogStreamCommand;
|
|
97
|
-
// Ensure log group & stream exist
|
|
98
|
-
await this.ensureLogDestination();
|
|
99
|
-
this.initialized = true;
|
|
100
|
-
// Optionally bootstrap OTLP tracing for X-Ray via ADOT
|
|
101
|
-
if (this.config.enableTracing) {
|
|
102
|
-
await this.initTracing();
|
|
103
|
-
}
|
|
104
|
-
return true;
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
// AWS SDK packages not installed — degrade gracefully
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/* ------------------------------------------------------------------ */
|
|
112
|
-
/* Metrics */
|
|
113
|
-
/* ------------------------------------------------------------------ */
|
|
114
|
-
/**
|
|
115
|
-
* Publish a custom metric to CloudWatch.
|
|
116
|
-
*/
|
|
117
|
-
async putMetric(metricName, value, unit = "None", dimensions) {
|
|
118
|
-
if (!this.cwClient || !this.PutMetricDataCommand)
|
|
119
|
-
return false;
|
|
120
|
-
try {
|
|
121
|
-
const dims = {
|
|
122
|
-
Service: this.config.serviceName,
|
|
123
|
-
Environment: this.config.environment || "development",
|
|
124
|
-
...dimensions,
|
|
125
|
-
};
|
|
126
|
-
const command = new this.PutMetricDataCommand({
|
|
127
|
-
Namespace: this.config.namespace,
|
|
128
|
-
MetricData: [
|
|
129
|
-
{
|
|
130
|
-
MetricName: metricName,
|
|
131
|
-
Value: value,
|
|
132
|
-
Unit: unit,
|
|
133
|
-
Timestamp: new Date(),
|
|
134
|
-
Dimensions: Object.entries(dims).map(([Name, Value]) => ({
|
|
135
|
-
Name,
|
|
136
|
-
Value,
|
|
137
|
-
})),
|
|
138
|
-
},
|
|
139
|
-
],
|
|
140
|
-
});
|
|
141
|
-
await this.cwClient.send(command);
|
|
142
|
-
this.metricsPublished++;
|
|
143
|
-
return true;
|
|
144
|
-
}
|
|
145
|
-
catch {
|
|
146
|
-
this.metricErrors++;
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Publish workflow execution metrics (duration + error count).
|
|
152
|
-
*/
|
|
153
|
-
async recordWorkflowExecution(workflowName, durationMs, success) {
|
|
154
|
-
await this.putMetric("WorkflowDuration", durationMs, "Milliseconds", {
|
|
155
|
-
Workflow: workflowName,
|
|
156
|
-
});
|
|
157
|
-
if (!success) {
|
|
158
|
-
await this.putMetric("WorkflowErrors", 1, "Count", {
|
|
159
|
-
Workflow: workflowName,
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
/* ------------------------------------------------------------------ */
|
|
164
|
-
/* Logs */
|
|
165
|
-
/* ------------------------------------------------------------------ */
|
|
166
|
-
/**
|
|
167
|
-
* Send a structured log entry to CloudWatch Logs.
|
|
168
|
-
*/
|
|
169
|
-
async putLog(entry) {
|
|
170
|
-
if (!this.cwLogsClient || !this.PutLogEventsCommand)
|
|
171
|
-
return false;
|
|
172
|
-
try {
|
|
173
|
-
const event = {
|
|
174
|
-
timestamp: Date.now(),
|
|
175
|
-
message: JSON.stringify({
|
|
176
|
-
...entry,
|
|
177
|
-
service: this.config.serviceName,
|
|
178
|
-
version: this.config.serviceVersion,
|
|
179
|
-
environment: this.config.environment,
|
|
180
|
-
}),
|
|
181
|
-
};
|
|
182
|
-
const command = new this.PutLogEventsCommand({
|
|
183
|
-
logGroupName: this.config.logGroupName,
|
|
184
|
-
logStreamName: this.getLogStreamName(),
|
|
185
|
-
logEvents: [event],
|
|
186
|
-
sequenceToken: this.sequenceToken,
|
|
187
|
-
});
|
|
188
|
-
const result = await this.cwLogsClient.send(command);
|
|
189
|
-
this.sequenceToken = result?.nextSequenceToken;
|
|
190
|
-
this.logsPublished++;
|
|
191
|
-
return true;
|
|
192
|
-
}
|
|
193
|
-
catch {
|
|
194
|
-
this.logErrors++;
|
|
195
|
-
return false;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Log a workflow error to CloudWatch Logs.
|
|
200
|
-
*/
|
|
201
|
-
async logWorkflowError(error, context) {
|
|
202
|
-
return this.putLog({
|
|
203
|
-
level: "error",
|
|
204
|
-
message: error.message,
|
|
205
|
-
errorName: error.name,
|
|
206
|
-
stack: error.stack,
|
|
207
|
-
...context,
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
/* ------------------------------------------------------------------ */
|
|
211
|
-
/* Tracing (OTLP → ADOT → X-Ray) */
|
|
212
|
-
/* ------------------------------------------------------------------ */
|
|
213
|
-
async initTracing() {
|
|
214
|
-
try {
|
|
215
|
-
const { bootstrapTracing } = await import("../monitoring/TracingBootstrap");
|
|
216
|
-
const result = await bootstrapTracing({
|
|
217
|
-
serviceName: this.config.serviceName,
|
|
218
|
-
serviceVersion: this.config.serviceVersion,
|
|
219
|
-
exporter: "otlp",
|
|
220
|
-
endpoint: this.config.adotEndpoint || "http://localhost:4318/v1/traces",
|
|
221
|
-
headers: {},
|
|
222
|
-
samplingRatio: this.config.samplingRatio,
|
|
223
|
-
});
|
|
224
|
-
if (!result)
|
|
225
|
-
return false;
|
|
226
|
-
this.tracingShutdown = result.shutdown;
|
|
227
|
-
this.tracingInitialized = true;
|
|
228
|
-
return true;
|
|
229
|
-
}
|
|
230
|
-
catch {
|
|
231
|
-
return false;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
/* ------------------------------------------------------------------ */
|
|
235
|
-
/* Lifecycle */
|
|
236
|
-
/* ------------------------------------------------------------------ */
|
|
237
|
-
isInitialized() {
|
|
238
|
-
return this.initialized;
|
|
239
|
-
}
|
|
240
|
-
isTracingEnabled() {
|
|
241
|
-
return this.tracingInitialized;
|
|
242
|
-
}
|
|
243
|
-
getStats() {
|
|
244
|
-
return {
|
|
245
|
-
initialized: this.initialized,
|
|
246
|
-
metricsPublished: this.metricsPublished,
|
|
247
|
-
logsPublished: this.logsPublished,
|
|
248
|
-
metricErrors: this.metricErrors,
|
|
249
|
-
logErrors: this.logErrors,
|
|
250
|
-
tracingEnabled: this.tracingInitialized,
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
async shutdown() {
|
|
254
|
-
if (this.tracingShutdown) {
|
|
255
|
-
await this.tracingShutdown();
|
|
256
|
-
}
|
|
257
|
-
this.initialized = false;
|
|
258
|
-
this.tracingInitialized = false;
|
|
259
|
-
}
|
|
260
|
-
async flush() {
|
|
261
|
-
// CloudWatch SDK calls are fire-and-forget; nothing buffered to flush.
|
|
262
|
-
// Tracing flush is handled by TracingBootstrap.
|
|
263
|
-
}
|
|
264
|
-
/* ------------------------------------------------------------------ */
|
|
265
|
-
/* Internal helpers */
|
|
266
|
-
/* ------------------------------------------------------------------ */
|
|
267
|
-
getLogStreamName() {
|
|
268
|
-
if (this.config.logStreamName)
|
|
269
|
-
return this.config.logStreamName;
|
|
270
|
-
const date = new Date().toISOString().slice(0, 10); // YYYY-MM-DD
|
|
271
|
-
return `${this.config.serviceName}-${date}`;
|
|
272
|
-
}
|
|
273
|
-
async ensureLogDestination() {
|
|
274
|
-
if (!this.cwLogsClient || !this.CreateLogGroupCommand || !this.CreateLogStreamCommand)
|
|
275
|
-
return;
|
|
276
|
-
try {
|
|
277
|
-
await this.cwLogsClient.send(new this.CreateLogGroupCommand({ logGroupName: this.config.logGroupName }));
|
|
278
|
-
}
|
|
279
|
-
catch {
|
|
280
|
-
// ResourceAlreadyExistsException is expected
|
|
281
|
-
}
|
|
282
|
-
try {
|
|
283
|
-
await this.cwLogsClient.send(new this.CreateLogStreamCommand({
|
|
284
|
-
logGroupName: this.config.logGroupName,
|
|
285
|
-
logStreamName: this.getLogStreamName(),
|
|
286
|
-
}));
|
|
287
|
-
}
|
|
288
|
-
catch {
|
|
289
|
-
// ResourceAlreadyExistsException is expected
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
//# sourceMappingURL=CloudWatchIntegration.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CloudWatchIntegration.js","sourceRoot":"","sources":["../../src/integrations/CloudWatchIntegration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sentry Error Tracking Integration for Blok
|
|
3
|
-
*
|
|
4
|
-
* Provides error tracking and performance monitoring via Sentry.
|
|
5
|
-
* Captures workflow execution errors, node failures, and trigger issues
|
|
6
|
-
* with full context (workflow name, node, request ID, etc.).
|
|
7
|
-
*
|
|
8
|
-
* Uses a lightweight adapter pattern so Sentry SDK is loaded lazily
|
|
9
|
-
* and the framework doesn't hard-depend on @sentry/node.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* import { SentryIntegration } from "@blokjs/runner";
|
|
14
|
-
*
|
|
15
|
-
* const sentry = new SentryIntegration({
|
|
16
|
-
* dsn: process.env.SENTRY_DSN!,
|
|
17
|
-
* environment: process.env.NODE_ENV || "development",
|
|
18
|
-
* release: "blok@1.0.0",
|
|
19
|
-
* tracesSampleRate: 0.1,
|
|
20
|
-
* });
|
|
21
|
-
*
|
|
22
|
-
* await sentry.init();
|
|
23
|
-
*
|
|
24
|
-
* // In error handler
|
|
25
|
-
* sentry.captureWorkflowError(error, {
|
|
26
|
-
* workflowName: "get-user",
|
|
27
|
-
* workflowPath: "/users/:id",
|
|
28
|
-
* requestId: ctx.id,
|
|
29
|
-
* });
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
export interface SentryConfig {
|
|
33
|
-
/** Sentry DSN (Data Source Name) */
|
|
34
|
-
dsn: string;
|
|
35
|
-
/** Environment (e.g., "production", "staging", "development") */
|
|
36
|
-
environment?: string;
|
|
37
|
-
/** Release version */
|
|
38
|
-
release?: string;
|
|
39
|
-
/** Server name */
|
|
40
|
-
serverName?: string;
|
|
41
|
-
/** Sample rate for error events (0.0 to 1.0, default: 1.0) */
|
|
42
|
-
sampleRate?: number;
|
|
43
|
-
/** Sample rate for performance/transaction traces (0.0 to 1.0, default: 0.1) */
|
|
44
|
-
tracesSampleRate?: number;
|
|
45
|
-
/** Tags to add to all events */
|
|
46
|
-
tags?: Record<string, string>;
|
|
47
|
-
/** Enable debug mode */
|
|
48
|
-
debug?: boolean;
|
|
49
|
-
}
|
|
50
|
-
export interface WorkflowErrorContext {
|
|
51
|
-
workflowName: string;
|
|
52
|
-
workflowPath: string;
|
|
53
|
-
workflowVersion?: string;
|
|
54
|
-
requestId?: string;
|
|
55
|
-
nodeName?: string;
|
|
56
|
-
nodeType?: string;
|
|
57
|
-
triggerType?: string;
|
|
58
|
-
durationMs?: number;
|
|
59
|
-
userId?: string;
|
|
60
|
-
}
|
|
61
|
-
export interface SentryClient {
|
|
62
|
-
captureException(error: Error, context?: Record<string, unknown>): string;
|
|
63
|
-
captureMessage(message: string, level: "info" | "warning" | "error" | "fatal"): string;
|
|
64
|
-
setTag(key: string, value: string): void;
|
|
65
|
-
setUser(user: {
|
|
66
|
-
id: string;
|
|
67
|
-
email?: string;
|
|
68
|
-
username?: string;
|
|
69
|
-
} | null): void;
|
|
70
|
-
startTransaction(context: {
|
|
71
|
-
name: string;
|
|
72
|
-
op: string;
|
|
73
|
-
}): SentryTransaction;
|
|
74
|
-
flush(timeout: number): Promise<boolean>;
|
|
75
|
-
}
|
|
76
|
-
export interface SentryTransaction {
|
|
77
|
-
setTag(key: string, value: string): void;
|
|
78
|
-
setData(key: string, value: unknown): void;
|
|
79
|
-
finish(): void;
|
|
80
|
-
startChild(context: {
|
|
81
|
-
op: string;
|
|
82
|
-
description: string;
|
|
83
|
-
}): SentrySpan;
|
|
84
|
-
}
|
|
85
|
-
export interface SentrySpan {
|
|
86
|
-
setTag(key: string, value: string): void;
|
|
87
|
-
setData(key: string, value: unknown): void;
|
|
88
|
-
setStatus(status: string): void;
|
|
89
|
-
finish(): void;
|
|
90
|
-
}
|
|
91
|
-
export declare class SentryIntegration {
|
|
92
|
-
private config;
|
|
93
|
-
private client;
|
|
94
|
-
private initialized;
|
|
95
|
-
private eventCount;
|
|
96
|
-
private errorCount;
|
|
97
|
-
constructor(config: SentryConfig);
|
|
98
|
-
/**
|
|
99
|
-
* Initialize Sentry SDK (lazy-loads @sentry/node)
|
|
100
|
-
*/
|
|
101
|
-
init(): Promise<boolean>;
|
|
102
|
-
/**
|
|
103
|
-
* Set a custom Sentry client (useful for testing)
|
|
104
|
-
*/
|
|
105
|
-
setClient(client: SentryClient): void;
|
|
106
|
-
/**
|
|
107
|
-
* Capture a workflow execution error
|
|
108
|
-
*/
|
|
109
|
-
captureWorkflowError(error: Error, context: WorkflowErrorContext): string | null;
|
|
110
|
-
/**
|
|
111
|
-
* Capture a node execution error
|
|
112
|
-
*/
|
|
113
|
-
captureNodeError(error: Error, nodeName: string, nodeType: string, context?: {
|
|
114
|
-
workflowName?: string;
|
|
115
|
-
requestId?: string;
|
|
116
|
-
}): string | null;
|
|
117
|
-
/**
|
|
118
|
-
* Capture a trigger error
|
|
119
|
-
*/
|
|
120
|
-
captureTriggerError(error: Error, triggerType: string, context?: Record<string, unknown>): string | null;
|
|
121
|
-
/**
|
|
122
|
-
* Capture a warning message
|
|
123
|
-
*/
|
|
124
|
-
captureWarning(message: string, context?: Record<string, unknown>): string | null;
|
|
125
|
-
/**
|
|
126
|
-
* Set current user context
|
|
127
|
-
*/
|
|
128
|
-
setUser(user: {
|
|
129
|
-
id: string;
|
|
130
|
-
email?: string;
|
|
131
|
-
username?: string;
|
|
132
|
-
} | null): void;
|
|
133
|
-
/**
|
|
134
|
-
* Add a tag to all future events
|
|
135
|
-
*/
|
|
136
|
-
setTag(key: string, value: string): void;
|
|
137
|
-
/**
|
|
138
|
-
* Flush pending events to Sentry
|
|
139
|
-
*/
|
|
140
|
-
flush(timeoutMs?: number): Promise<boolean>;
|
|
141
|
-
/**
|
|
142
|
-
* Check if Sentry is initialized
|
|
143
|
-
*/
|
|
144
|
-
isInitialized(): boolean;
|
|
145
|
-
/**
|
|
146
|
-
* Get stats about captured events
|
|
147
|
-
*/
|
|
148
|
-
getStats(): {
|
|
149
|
-
initialized: boolean;
|
|
150
|
-
eventCount: number;
|
|
151
|
-
errorCount: number;
|
|
152
|
-
};
|
|
153
|
-
}
|