glasswork 1.2.0 → 1.3.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/CHANGELOG.md +22 -1
- package/dist/jobs/define-job.d.ts +4 -4
- package/dist/jobs/define-job.d.ts.map +1 -1
- package/dist/jobs/drivers/mock-driver.d.ts.map +1 -1
- package/dist/jobs/drivers/mock-driver.js +11 -1
- package/dist/jobs/drivers/mock-driver.js.map +1 -1
- package/dist/jobs/index.d.ts +2 -2
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js +1 -1
- package/dist/jobs/index.js.map +1 -1
- package/dist/jobs/job-service.d.ts +6 -6
- package/dist/jobs/job-service.d.ts.map +1 -1
- package/dist/jobs/job-service.js +8 -0
- package/dist/jobs/job-service.js.map +1 -1
- package/dist/jobs/observability/emf.d.ts +5 -15
- package/dist/jobs/observability/emf.d.ts.map +1 -1
- package/dist/jobs/observability/emf.js +87 -67
- package/dist/jobs/observability/emf.js.map +1 -1
- package/dist/jobs/observability/index.d.ts +2 -4
- package/dist/jobs/observability/index.d.ts.map +1 -1
- package/dist/jobs/observability/index.js +1 -3
- package/dist/jobs/observability/index.js.map +1 -1
- package/dist/jobs/observability/types.d.ts +16 -193
- package/dist/jobs/observability/types.d.ts.map +1 -1
- package/dist/jobs/types.d.ts +4 -4
- package/dist/jobs/types.d.ts.map +1 -1
- package/dist/jobs/worker.d.ts +3 -0
- package/dist/jobs/worker.d.ts.map +1 -1
- package/dist/jobs/worker.js +71 -12
- package/dist/jobs/worker.js.map +1 -1
- package/package.json +1 -1
- package/dist/jobs/observability/client.d.ts +0 -26
- package/dist/jobs/observability/client.d.ts.map +0 -1
- package/dist/jobs/observability/client.js +0 -286
- package/dist/jobs/observability/client.js.map +0 -1
- package/dist/jobs/observability/dashboard.d.ts +0 -19
- package/dist/jobs/observability/dashboard.d.ts.map +0 -1
- package/dist/jobs/observability/dashboard.js +0 -144
- package/dist/jobs/observability/dashboard.js.map +0 -1
- package/dist/jobs/scheduler.d.ts +0 -17
- package/dist/jobs/scheduler.d.ts.map +0 -1
- package/dist/jobs/scheduler.js +0 -83
- package/dist/jobs/scheduler.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.3.0] - 2026-10-03
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Automatic per-attempt CloudWatch EMF metrics for `bootstrapWorker` in Lambda, with configurable namespaces, stable dimensions, opt-out and a synchronous test sink. Metrics use raw stdout without an AWS SDK dependency, omit payloads and error details, and never change job acknowledgements when emission fails. Dashboards and CloudWatch queries remain application-owned; the jobs documentation includes native CDK and Logs Insights examples.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Use TypeScript CDK examples as the primary deployment documentation, while retaining alternative deployment options in the Lambda deployment guide.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- Stop FIFO batches after the first failure and report all unprocessed records for retry.
|
|
23
|
+
- Infer separate job input/output types and pass schema output to worker and mock handlers; transport original validated input to avoid chained transforms.
|
|
24
|
+
- Reject unsupported driver delays without recursion.
|
|
25
|
+
|
|
26
|
+
### Removed
|
|
27
|
+
|
|
28
|
+
- Remove the unused DynamoDB scheduler and its public exports in favor of EventBridge Scheduler.
|
|
29
|
+
|
|
10
30
|
## [1.2.0] - 2026-09-29
|
|
11
31
|
|
|
12
32
|
### Added
|
|
@@ -120,7 +140,8 @@ Major release: subpath exports, dependency upgrades (CASL 7, MJML 5, Valibot 1.4
|
|
|
120
140
|
|
|
121
141
|
Last 0.x release before the 1.0 breaking changes. Earlier 0.x history is available on [GitHub releases](https://github.com/rolandboon/glasswork/releases).
|
|
122
142
|
|
|
123
|
-
[Unreleased]: https://github.com/rolandboon/glasswork/compare/v1.
|
|
143
|
+
[Unreleased]: https://github.com/rolandboon/glasswork/compare/v1.3.0...HEAD
|
|
144
|
+
[1.3.0]: https://github.com/rolandboon/glasswork/compare/v1.2.0...v1.3.0
|
|
124
145
|
[1.2.0]: https://github.com/rolandboon/glasswork/compare/v1.1.0...v1.2.0
|
|
125
146
|
[1.1.0]: https://github.com/rolandboon/glasswork/compare/v1.0.0...v1.1.0
|
|
126
147
|
[1.0.0]: https://github.com/rolandboon/glasswork/compare/v0.13.3...v1.0.0
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BaseIssue, BaseSchema, InferInput } from 'valibot';
|
|
1
|
+
import type { BaseIssue, BaseSchema, InferInput, InferOutput } from 'valibot';
|
|
2
2
|
import type { JobDefinition, RetryConfig } from './types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Define a background job with typed payload and handler.
|
|
@@ -43,9 +43,9 @@ export declare function defineJob<TSchema extends BaseSchema<unknown, unknown, B
|
|
|
43
43
|
deadLetterQueue?: string;
|
|
44
44
|
schema: TSchema;
|
|
45
45
|
retry?: RetryConfig | number | false;
|
|
46
|
-
unique?: JobDefinition<InferInput<TSchema>>['unique'];
|
|
47
|
-
handler: JobDefinition<InferInput<TSchema>>['handler'];
|
|
48
|
-
}): JobDefinition<InferInput<TSchema>>;
|
|
46
|
+
unique?: JobDefinition<InferInput<TSchema>, InferOutput<TSchema>>['unique'];
|
|
47
|
+
handler: JobDefinition<InferInput<TSchema>, InferOutput<TSchema>>['handler'];
|
|
48
|
+
}): JobDefinition<InferInput<TSchema>, InferOutput<TSchema>>;
|
|
49
49
|
export declare function defineJob<TPayload>(config: {
|
|
50
50
|
name: string;
|
|
51
51
|
queue?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-job.d.ts","sourceRoot":"","sources":["../../src/jobs/define-job.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"define-job.d.ts","sourceRoot":"","sources":["../../src/jobs/define-job.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,SAAS,CACvB,OAAO,SAAS,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,EAChE,MAAM,EAAE;IACR,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;IACrC,MAAM,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC5E,OAAO,EAAE,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;CAC9E,GAAG,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAE7D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;IACrC,MAAM,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;CAC7C,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-driver.d.ts","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mock-driver.d.ts","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EAGb,UAAU,EACV,WAAW,EACZ,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,EAAE,CAAC,EAAE,IAAI,CAAC;IACV,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAC;IAEvB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,eAAgB,YAAW,WAAW;IACjD,QAAQ,CAAC,IAAI,UAAU;IACvB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAC,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAgC;IACjE,QAAQ,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAM;IAE1C,YAAY,MAAM,GAAE,qBAA0B,EAI7C;IAED;;OAEG;IACH,eAAe,CAAC,KAAK,QAAoC,GAAG,IAAI,CAE/D;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAIZ;IAED,IAAI,OAAO,IAAI,eAAe,GAAG,SAAS,CAEzC;IAEK,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAczD;IAED,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,oBAAoB;YAMd,kBAAkB;IAyChC,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,gBAAgB;YAoBV,aAAa;IAyB3B,OAAO,CAAC,wBAAwB;IAO1B,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,CAOrE;IAEK,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAO5E;CACF"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { safeParse } from 'valibot';
|
|
2
|
+
import { InvalidJobPayloadError } from '../errors.js';
|
|
1
3
|
import { generateJobId } from '../utils.js';
|
|
2
4
|
/**
|
|
3
5
|
* In-memory queue driver for testing and local development.
|
|
@@ -89,11 +91,19 @@ export class MockQueueDriver {
|
|
|
89
91
|
jobId,
|
|
90
92
|
jobName: message.jobName,
|
|
91
93
|
});
|
|
94
|
+
let payload = message.payload;
|
|
95
|
+
if (job.schema) {
|
|
96
|
+
const result = safeParse(job.schema, payload);
|
|
97
|
+
if (!result.success) {
|
|
98
|
+
throw new InvalidJobPayloadError(job.name, result.issues);
|
|
99
|
+
}
|
|
100
|
+
payload = result.output;
|
|
101
|
+
}
|
|
92
102
|
await this.runJobHandler({
|
|
93
103
|
jobId,
|
|
94
104
|
jobName: message.jobName,
|
|
95
105
|
logger,
|
|
96
|
-
payload
|
|
106
|
+
payload,
|
|
97
107
|
handler: job.handler,
|
|
98
108
|
context,
|
|
99
109
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-driver.js","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mock-driver.js","sourceRoot":"","sources":["../../../src/jobs/drivers/mock-driver.ts"],"names":[],"mappings":"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"}
|
package/dist/jobs/index.d.ts
CHANGED
|
@@ -5,8 +5,8 @@ export { type SQSDriverConfig, SQSQueueDriver } from './drivers/sqs-driver.js';
|
|
|
5
5
|
export { InvalidJobPayloadError, PayloadTooLargeError, PermanentJobError, RetryExhaustedError, TransientJobError, } from './errors.js';
|
|
6
6
|
export { createJobRegistry, JobRegistry } from './job-registry.js';
|
|
7
7
|
export { JobService, type JobServiceConfig, type JobServiceHooks, } from './job-service.js';
|
|
8
|
+
export { createEMFJobMetric, type EMFJobMetricRecord, type EMFMetadata, type EMFMetricUnit, emitJobMetric, type JobExecutionMetricData, type JobExecutionStatus, type JobMetricsConfig, } from './observability/index.js';
|
|
8
9
|
export { definePeriodicJob } from './periodic-job.js';
|
|
9
|
-
export { createSchedulerHandler, type SchedulerConfig } from './scheduler.js';
|
|
10
10
|
export type { AnyJobDefinition, Duration, EnqueueResult, JobContext, JobDefinition, JobHandler, JobMessage, QueueDriver, RetryConfig, } from './types.js';
|
|
11
|
-
export { bootstrapWorker } from './worker.js';
|
|
11
|
+
export { bootstrapWorker, type JobExecution, type WorkerConfig } from './worker.js';
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/jobs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,KAAK,0BAA0B,EAC/B,0BAA0B,EAC1B,KAAK,cAAc,GACpB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,KAAK,eAAe,EACpB,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,KAAK,0BAA0B,EAC/B,0BAA0B,EAC1B,KAAK,cAAc,GACpB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,KAAK,eAAe,EACpB,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,aAAa,EACb,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EACV,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,UAAU,EACV,aAAa,EACb,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/jobs/index.js
CHANGED
|
@@ -5,7 +5,7 @@ export { SQSQueueDriver } from './drivers/sqs-driver.js';
|
|
|
5
5
|
export { InvalidJobPayloadError, PayloadTooLargeError, PermanentJobError, RetryExhaustedError, TransientJobError, } from './errors.js';
|
|
6
6
|
export { createJobRegistry, JobRegistry } from './job-registry.js';
|
|
7
7
|
export { JobService, } from './job-service.js';
|
|
8
|
+
export { createEMFJobMetric, emitJobMetric, } from './observability/index.js';
|
|
8
9
|
export { definePeriodicJob } from './periodic-job.js';
|
|
9
|
-
export { createSchedulerHandler } from './scheduler.js';
|
|
10
10
|
export { bootstrapWorker } from './worker.js';
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
package/dist/jobs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAEL,0BAA0B,GAE3B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEL,eAAe,GAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAwB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,UAAU,GAGX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/jobs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAEL,0BAA0B,GAE3B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAEL,eAAe,GAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAwB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EACL,UAAU,GAGX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAIlB,aAAa,GAId,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAYtD,OAAO,EAAE,eAAe,EAAwC,MAAM,aAAa,CAAC"}
|
|
@@ -7,7 +7,7 @@ export interface JobServiceConfig {
|
|
|
7
7
|
}
|
|
8
8
|
export interface JobServiceHooks {
|
|
9
9
|
/** Called after a job is successfully enqueued */
|
|
10
|
-
onEnqueued?: <TPayload>(job: JobDefinition<TPayload>, payload: TPayload, result: EnqueueResult) => Promise<void> | void;
|
|
10
|
+
onEnqueued?: <TPayload, TOutput = TPayload>(job: JobDefinition<TPayload, TOutput>, payload: TPayload, result: EnqueueResult) => Promise<void> | void;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Service responsible for enqueuing jobs.
|
|
@@ -21,20 +21,20 @@ export declare class JobService {
|
|
|
21
21
|
/**
|
|
22
22
|
* Enqueue a job for immediate processing.
|
|
23
23
|
*/
|
|
24
|
-
enqueue<TPayload>(job: JobDefinition<TPayload>, payload: TPayload): Promise<EnqueueResult>;
|
|
24
|
+
enqueue<TPayload, TOutput = TPayload>(job: JobDefinition<TPayload, TOutput>, payload: TPayload): Promise<EnqueueResult>;
|
|
25
25
|
/**
|
|
26
26
|
* Enqueue a job to run after a delay.
|
|
27
27
|
*/
|
|
28
|
-
enqueueIn<TPayload>(job: JobDefinition<TPayload>, payload: TPayload, delay: Duration): Promise<EnqueueResult>;
|
|
28
|
+
enqueueIn<TPayload, TOutput = TPayload>(job: JobDefinition<TPayload, TOutput>, payload: TPayload, delay: Duration): Promise<EnqueueResult>;
|
|
29
29
|
/**
|
|
30
30
|
* Enqueue a job to run at a specific time.
|
|
31
31
|
*/
|
|
32
|
-
enqueueAt<TPayload>(job: JobDefinition<TPayload>, payload: TPayload, at: Date): Promise<EnqueueResult>;
|
|
32
|
+
enqueueAt<TPayload, TOutput = TPayload>(job: JobDefinition<TPayload, TOutput>, payload: TPayload, at: Date): Promise<EnqueueResult>;
|
|
33
33
|
/**
|
|
34
34
|
* Enqueue multiple jobs sequentially.
|
|
35
35
|
*/
|
|
36
|
-
enqueueBatch<TPayload>(jobs: Array<{
|
|
37
|
-
job: JobDefinition<TPayload>;
|
|
36
|
+
enqueueBatch<TPayload, TOutput = TPayload>(jobs: Array<{
|
|
37
|
+
job: JobDefinition<TPayload, TOutput>;
|
|
38
38
|
payload: TPayload;
|
|
39
39
|
}>): Promise<EnqueueResult[]>;
|
|
40
40
|
private validatePayload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-service.d.ts","sourceRoot":"","sources":["../../src/jobs/job-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,QAAQ,EACR,aAAa,EACb,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,UAAU,CAAC,EAAE,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"job-service.d.ts","sourceRoot":"","sources":["../../src/jobs/job-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,QAAQ,EACR,aAAa,EACb,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAC;AAKpB,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EACxC,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,EACrC,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,aAAa,KAClB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,UAAU;IAKnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IANzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEzC,YACmB,MAAM,EAAE,WAAW,EACpC,MAAM,GAAE,gBAAqB,EACZ,KAAK,CAAC,EAAE,eAAe,YAAA,EAIzC;IAED;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EACxC,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,EACrC,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC,aAAa,CAAC,CAgBxB;IAED;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAC1C,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,EACrC,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC,aAAa,CAAC,CA4BxB;IAED;;OAEG;IACG,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAC1C,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,EACrC,OAAO,EAAE,QAAQ,EACjB,EAAE,EAAE,IAAI,GACP,OAAO,CAAC,aAAa,CAAC,CA4BxB;IAED;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAC7C,IAAI,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAAC,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC,GACxE,OAAO,CAAC,aAAa,EAAE,CAAC,CAE1B;IAED,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,QAAQ;CASjB"}
|
package/dist/jobs/job-service.js
CHANGED
|
@@ -41,6 +41,9 @@ export class JobService {
|
|
|
41
41
|
this.validatePayload(job, payload);
|
|
42
42
|
this.validatePayloadSize(payload);
|
|
43
43
|
if (!this.driver.enqueueIn) {
|
|
44
|
+
if (!this.driver.enqueueAt) {
|
|
45
|
+
throw new Error(`Queue driver "${this.driver.name}" does not support delayed jobs`);
|
|
46
|
+
}
|
|
44
47
|
const seconds = durationToSeconds(delay);
|
|
45
48
|
return this.enqueueAt(job, payload, new Date(Date.now() + seconds * 1000));
|
|
46
49
|
}
|
|
@@ -63,6 +66,9 @@ export class JobService {
|
|
|
63
66
|
this.validatePayload(job, payload);
|
|
64
67
|
this.validatePayloadSize(payload);
|
|
65
68
|
if (!this.driver.enqueueAt) {
|
|
69
|
+
if (!this.driver.enqueueIn) {
|
|
70
|
+
throw new Error(`Queue driver "${this.driver.name}" does not support delayed jobs`);
|
|
71
|
+
}
|
|
66
72
|
const delaySeconds = Math.max(0, Math.floor((at.getTime() - Date.now()) / 1000));
|
|
67
73
|
return this.enqueueIn(job, payload, delaySeconds);
|
|
68
74
|
}
|
|
@@ -85,6 +91,8 @@ export class JobService {
|
|
|
85
91
|
return Promise.all(jobs.map(({ job, payload }) => this.enqueue(job, payload)));
|
|
86
92
|
}
|
|
87
93
|
validatePayload(job, payload) {
|
|
94
|
+
// Validate input here, but transport the original input. The worker parses it
|
|
95
|
+
// independently so transforms are never applied to already transformed output.
|
|
88
96
|
if (job.schema) {
|
|
89
97
|
const result = safeParse(job.schema, payload);
|
|
90
98
|
if (!result.success) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-service.js","sourceRoot":"","sources":["../../src/jobs/job-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAQ3E,OAAO,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,yBAAyB,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ;AAkBtD;;GAEG;AACH,MAAM,OAAO,UAAU;IAKF,MAAM;IAEN,KAAK;IANP,YAAY,CAAS;IACrB,eAAe,CAAS;IAEzC,YACmB,MAAmB,EACpC,MAAM,GAAqB,EAAE,EACZ,KAAuB;sBAFvB,MAAM;qBAEN,KAAK;QAEtB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,IAAI,SAAS,CAAC;QAC5E,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,yBAAyB,CAAC;IAC7E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"job-service.js","sourceRoot":"","sources":["../../src/jobs/job-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,14 @@
|
|
|
1
1
|
import type { EMFJobMetricRecord, JobExecutionMetricData, JobMetricsConfig } from './types.js';
|
|
2
2
|
/**
|
|
3
|
-
* Build a
|
|
4
|
-
*
|
|
5
|
-
* Conforms to the AWS CloudWatch EMF specification:
|
|
3
|
+
* Build a CloudWatch EMF document without an SDK dependency or network request.
|
|
4
|
+
* Each attempt contributes one sample; identifiers and status remain searchable log fields.
|
|
6
5
|
* https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Specification.html
|
|
7
|
-
*
|
|
8
|
-
* @param data - Execution metrics for the completed or failed job.
|
|
9
|
-
* @param config - Optional configuration for namespace, dimensions, etc.
|
|
10
|
-
* @returns An object adhering to the EMF JSON schema.
|
|
11
6
|
*/
|
|
12
7
|
export declare function createEMFJobMetric(data: JobExecutionMetricData, config?: JobMetricsConfig): EMFJobMetricRecord;
|
|
13
8
|
/**
|
|
14
|
-
* Emit
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* extracts these metrics into CloudWatch Metrics with zero API overhead and zero latency.
|
|
18
|
-
*
|
|
19
|
-
* @param data - Execution metrics for the job.
|
|
20
|
-
* @param config - Optional configuration for namespace, dimensions, or custom sink.
|
|
21
|
-
* @returns The generated record or null if metrics are disabled.
|
|
9
|
+
* Emit one raw EMF JSON document. Lambda's console wrappers and application loggers can
|
|
10
|
+
* nest or prefix JSON and prevent metric extraction, so the default sink writes to stdout.
|
|
11
|
+
* Direct calls may throw; bootstrapWorker isolates telemetry failures from job processing.
|
|
22
12
|
*/
|
|
23
13
|
export declare function emitJobMetric(data: JobExecutionMetricData, config?: JobMetricsConfig): EMFJobMetricRecord | null;
|
|
24
14
|
//# sourceMappingURL=emf.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emf.d.ts","sourceRoot":"","sources":["../../../src/jobs/observability/emf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"emf.d.ts","sourceRoot":"","sources":["../../../src/jobs/observability/emf.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAiB/F;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,sBAAsB,EAC5B,MAAM,CAAC,EAAE,gBAAgB,GACxB,kBAAkB,CA6DpB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,sBAAsB,EAC5B,MAAM,CAAC,EAAE,gBAAgB,GACxB,kBAAkB,GAAG,IAAI,CAS3B"}
|
|
@@ -1,100 +1,120 @@
|
|
|
1
|
-
import { isTest } from '../../utils/environment.js';
|
|
1
|
+
import { isLambda, isTest } from '../../utils/environment.js';
|
|
2
|
+
const RESERVED_FIELDS = new Set([
|
|
3
|
+
'_aws',
|
|
4
|
+
'JobName',
|
|
5
|
+
'Status',
|
|
6
|
+
'JobId',
|
|
7
|
+
'AttemptNumber',
|
|
8
|
+
'JobCount',
|
|
9
|
+
'JobDuration',
|
|
10
|
+
'JobErrorCount',
|
|
11
|
+
'RetryCount',
|
|
12
|
+
'DeadLetterCount',
|
|
13
|
+
'QueueWaitTime',
|
|
14
|
+
'FunctionName',
|
|
15
|
+
]);
|
|
2
16
|
/**
|
|
3
|
-
* Build a
|
|
4
|
-
*
|
|
5
|
-
* Conforms to the AWS CloudWatch EMF specification:
|
|
17
|
+
* Build a CloudWatch EMF document without an SDK dependency or network request.
|
|
18
|
+
* Each attempt contributes one sample; identifiers and status remain searchable log fields.
|
|
6
19
|
* https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format_Specification.html
|
|
7
|
-
*
|
|
8
|
-
* @param data - Execution metrics for the completed or failed job.
|
|
9
|
-
* @param config - Optional configuration for namespace, dimensions, etc.
|
|
10
|
-
* @returns An object adhering to the EMF JSON schema.
|
|
11
20
|
*/
|
|
12
21
|
export function createEMFJobMetric(data, config) {
|
|
13
22
|
const namespace = config?.namespace ?? 'Glasswork/Jobs';
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
const dimensions = { ...config?.dimensions };
|
|
24
|
+
validateDimensions(dimensions);
|
|
25
|
+
validateMetricData(data);
|
|
26
|
+
if (!isMetricString(namespace, 255) ||
|
|
27
|
+
namespace.startsWith(':') ||
|
|
28
|
+
namespace.startsWith('AWS/')) {
|
|
29
|
+
throw new Error('Job metrics namespace must contain 1-255 characters outside AWS/');
|
|
30
|
+
}
|
|
31
|
+
const functionName = process.env.AWS_LAMBDA_FUNCTION_NAME;
|
|
32
|
+
if (functionName && !isMetricString(functionName, 1024)) {
|
|
33
|
+
throw new Error('Job metric function names must contain 1-1024 printable ASCII characters');
|
|
34
|
+
}
|
|
35
|
+
const dimensionValues = functionName ? { ...dimensions, FunctionName: functionName } : dimensions;
|
|
36
|
+
const dimensionKeys = Object.keys(dimensionValues);
|
|
37
|
+
if (dimensionKeys.length + 1 > 30) {
|
|
38
|
+
throw new Error('Job metrics support at most 30 dimensions including FunctionName and JobName');
|
|
39
|
+
}
|
|
28
40
|
const queueWaitTime = data.enqueuedAt
|
|
29
|
-
?
|
|
41
|
+
? data.startedAt.getTime() - data.enqueuedAt.getTime()
|
|
30
42
|
: undefined;
|
|
31
|
-
const
|
|
32
|
-
const isError = data.status !== 'success';
|
|
33
|
-
const metrics = [
|
|
34
|
-
{ Name: 'JobCount', Unit: 'Count' },
|
|
35
|
-
{ Name: 'JobDuration', Unit: 'Milliseconds' },
|
|
36
|
-
{ Name: 'JobErrorCount', Unit: 'Count' },
|
|
37
|
-
{ Name: 'RetryCount', Unit: 'Count' },
|
|
38
|
-
];
|
|
39
|
-
if (queueWaitTime !== undefined) {
|
|
40
|
-
metrics.push({ Name: 'QueueWaitTime', Unit: 'Milliseconds' });
|
|
41
|
-
}
|
|
42
|
-
const record = {
|
|
43
|
+
const metric = {
|
|
43
44
|
_aws: {
|
|
44
45
|
Timestamp: Date.now(),
|
|
45
46
|
CloudWatchMetrics: [
|
|
46
47
|
{
|
|
47
48
|
Namespace: namespace,
|
|
48
|
-
Dimensions:
|
|
49
|
-
Metrics:
|
|
49
|
+
Dimensions: [dimensionKeys, [...dimensionKeys, 'JobName']],
|
|
50
|
+
Metrics: [
|
|
51
|
+
{ Name: 'JobCount', Unit: 'Count' },
|
|
52
|
+
{ Name: 'JobDuration', Unit: 'Milliseconds' },
|
|
53
|
+
{ Name: 'JobErrorCount', Unit: 'Count' },
|
|
54
|
+
{ Name: 'RetryCount', Unit: 'Count' },
|
|
55
|
+
{ Name: 'DeadLetterCount', Unit: 'Count' },
|
|
56
|
+
],
|
|
50
57
|
},
|
|
51
58
|
],
|
|
52
59
|
},
|
|
60
|
+
...dimensionValues,
|
|
53
61
|
JobName: data.jobName,
|
|
54
62
|
Status: data.status,
|
|
55
63
|
JobId: data.jobId,
|
|
56
64
|
AttemptNumber: data.attemptNumber,
|
|
57
65
|
JobCount: 1,
|
|
58
66
|
JobDuration: data.durationMs,
|
|
59
|
-
JobErrorCount:
|
|
60
|
-
RetryCount:
|
|
61
|
-
|
|
67
|
+
JobErrorCount: data.status === 'success' ? 0 : 1,
|
|
68
|
+
RetryCount: data.attemptNumber > 1 ? 1 : 0,
|
|
69
|
+
DeadLetterCount: data.status === 'dead_letter' ? 1 : 0,
|
|
62
70
|
};
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
record.ErrorName = data.error.name || 'Error';
|
|
68
|
-
record.ErrorMessage = data.error.message;
|
|
69
|
-
if (data.error.stack) {
|
|
70
|
-
record.ErrorStack = data.error.stack;
|
|
71
|
-
}
|
|
71
|
+
// Invalid or absent producer timestamps must not create null/NaN metric targets.
|
|
72
|
+
if (queueWaitTime !== undefined && Number.isFinite(queueWaitTime)) {
|
|
73
|
+
metric.QueueWaitTime = Math.max(0, queueWaitTime);
|
|
74
|
+
metric._aws.CloudWatchMetrics[0].Metrics.push({ Name: 'QueueWaitTime', Unit: 'Milliseconds' });
|
|
72
75
|
}
|
|
73
|
-
return
|
|
76
|
+
return metric;
|
|
74
77
|
}
|
|
75
78
|
/**
|
|
76
|
-
* Emit
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* extracts these metrics into CloudWatch Metrics with zero API overhead and zero latency.
|
|
80
|
-
*
|
|
81
|
-
* @param data - Execution metrics for the job.
|
|
82
|
-
* @param config - Optional configuration for namespace, dimensions, or custom sink.
|
|
83
|
-
* @returns The generated record or null if metrics are disabled.
|
|
79
|
+
* Emit one raw EMF JSON document. Lambda's console wrappers and application loggers can
|
|
80
|
+
* nest or prefix JSON and prevent metric extraction, so the default sink writes to stdout.
|
|
81
|
+
* Direct calls may throw; bootstrapWorker isolates telemetry failures from job processing.
|
|
84
82
|
*/
|
|
85
83
|
export function emitJobMetric(data, config) {
|
|
86
|
-
const
|
|
87
|
-
if (!
|
|
84
|
+
const enabled = config?.enabled ?? (config?.sink !== undefined || (isLambda() && !isTest()));
|
|
85
|
+
if (!enabled)
|
|
88
86
|
return null;
|
|
89
|
-
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
if (config?.sink) {
|
|
87
|
+
const metric = createEMFJobMetric(data, config);
|
|
88
|
+
const json = JSON.stringify(metric);
|
|
89
|
+
if (config?.sink)
|
|
93
90
|
config.sink(json);
|
|
91
|
+
else
|
|
92
|
+
process.stdout.write(`${json}\n`);
|
|
93
|
+
return metric;
|
|
94
|
+
}
|
|
95
|
+
function validateMetricData(data) {
|
|
96
|
+
if (!isMetricString(data.jobName, 1024)) {
|
|
97
|
+
throw new Error('Job metric names must contain 1-1024 printable ASCII characters');
|
|
98
|
+
}
|
|
99
|
+
if (!Number.isFinite(data.durationMs) || data.durationMs < 0) {
|
|
100
|
+
throw new Error('Job duration must be a finite, non-negative number');
|
|
94
101
|
}
|
|
95
|
-
|
|
96
|
-
|
|
102
|
+
if (!Number.isSafeInteger(data.attemptNumber) || data.attemptNumber < 1) {
|
|
103
|
+
throw new Error('Job attempt number must be a positive safe integer');
|
|
97
104
|
}
|
|
98
|
-
|
|
105
|
+
}
|
|
106
|
+
function validateDimensions(dimensions) {
|
|
107
|
+
for (const [name, value] of Object.entries(dimensions)) {
|
|
108
|
+
if (!isMetricString(name, 250) || name.startsWith(':') || RESERVED_FIELDS.has(name)) {
|
|
109
|
+
throw new Error('Job metric dimensions must have unique, non-reserved names of 1-250 characters');
|
|
110
|
+
}
|
|
111
|
+
if (!isMetricString(value, 1024)) {
|
|
112
|
+
throw new Error('Job metric dimension values must contain 1-1024 characters');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** CloudWatch identities allow printable ASCII, with at least one non-whitespace character. */
|
|
117
|
+
function isMetricString(value, maxLength) {
|
|
118
|
+
return value.trim().length > 0 && value.length <= maxLength && /^[\x20-\x7e]+$/.test(value);
|
|
99
119
|
}
|
|
100
120
|
//# sourceMappingURL=emf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emf.js","sourceRoot":"","sources":["../../../src/jobs/observability/emf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"emf.js","sourceRoot":"","sources":["../../../src/jobs/observability/emf.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export { createEMFJobMetric, emitJobMetric, } from './emf.js';
|
|
4
|
-
export type { CloudWatchDashboardDefinition, EMFJobMetricRecord, EMFMetadata, EMFMetricUnit, FailedJobDTO, GenerateJobsDashboardOptions, GetFailedJobsOptions, GetJobSummaryOptions, GetJobsInsightsQueriesOptions, JobExecutionMetricData, JobExecutionStatus, JobMetricsConfig, JobStatsSummaryDTO, JobsInsightsQueries, JobsObservabilityClientOptions, JobTypeStatsDTO, } from './types.js';
|
|
1
|
+
export { createEMFJobMetric, emitJobMetric } from './emf.js';
|
|
2
|
+
export type { EMFJobMetricRecord, EMFMetadata, EMFMetricUnit, JobExecutionMetricData, JobExecutionStatus, JobMetricsConfig, } from './types.js';
|
|
5
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jobs/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jobs/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC7D,YAAY,EACV,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export { generateJobsDashboard, getJobsInsightsQueries, } from './dashboard.js';
|
|
3
|
-
export { createEMFJobMetric, emitJobMetric, } from './emf.js';
|
|
1
|
+
export { createEMFJobMetric, emitJobMetric } from './emf.js';
|
|
4
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jobs/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jobs/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC"}
|