@gobing-ai/ts-infra 0.3.5 → 0.3.7
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/README.md +95 -60
- package/dist/application/index.d.ts +16 -18
- package/dist/application/index.d.ts.map +1 -1
- package/dist/application/index.js +59 -96
- package/dist/application/plugins/builtins.d.ts +64 -0
- package/dist/application/plugins/builtins.d.ts.map +1 -0
- package/dist/application/plugins/builtins.js +146 -0
- package/dist/application/plugins/host.d.ts +61 -0
- package/dist/application/plugins/host.d.ts.map +1 -0
- package/dist/application/plugins/host.js +131 -0
- package/dist/application/plugins/index.d.ts +3 -0
- package/dist/application/plugins/index.d.ts.map +1 -0
- package/dist/application/plugins/index.js +2 -0
- package/dist/application/plugins/types.d.ts +69 -0
- package/dist/application/plugins/types.d.ts.map +1 -0
- package/dist/application/plugins/types.js +10 -0
- package/dist/application/types.d.ts +7 -0
- package/dist/application/types.d.ts.map +1 -1
- package/dist/application-node.d.ts.map +1 -1
- package/dist/application-node.js +40 -57
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/scheduler/cloudflare.d.ts.map +1 -1
- package/dist/scheduler/cloudflare.js +9 -2
- package/dist/scheduler/factory.d.ts +4 -8
- package/dist/scheduler/factory.d.ts.map +1 -1
- package/dist/scheduler/factory.js +12 -22
- package/dist/scheduler/index.d.ts +1 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +1 -1
- package/dist/scheduler/wrap-handler.d.ts +8 -4
- package/dist/scheduler/wrap-handler.d.ts.map +1 -1
- package/dist/scheduler/wrap-handler.js +8 -4
- package/dist/telemetry/index.d.ts +1 -2
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +1 -2
- package/dist/telemetry/metrics.d.ts +9 -1
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +22 -1
- package/dist/telemetry/sdk.d.ts +33 -1
- package/dist/telemetry/sdk.d.ts.map +1 -1
- package/dist/telemetry/sdk.js +14 -1
- package/package.json +5 -5
- package/src/application/index.ts +72 -102
- package/src/application/plugins/builtins.ts +178 -0
- package/src/application/plugins/host.ts +143 -0
- package/src/application/plugins/index.ts +3 -0
- package/src/application/plugins/types.ts +86 -0
- package/src/application/types.ts +7 -0
- package/src/application-node.ts +43 -61
- package/src/index.ts +0 -2
- package/src/scheduler/cloudflare.ts +16 -5
- package/src/scheduler/factory.ts +15 -26
- package/src/scheduler/index.ts +1 -1
- package/src/scheduler/wrap-handler.ts +8 -4
- package/src/telemetry/index.ts +9 -2
- package/src/telemetry/metrics.ts +22 -1
- package/src/telemetry/sdk.ts +51 -2
- package/dist/telemetry/config.d.ts +0 -41
- package/dist/telemetry/config.d.ts.map +0 -1
- package/dist/telemetry/config.js +0 -21
- package/src/telemetry/config.ts +0 -59
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,6 @@ export { attachDefaultObservers, attachFileObserver, attachLogObserver, attachTe
|
|
|
3
3
|
export type { ApiClientEvents, ApiRequestErrorDetail, DbConnectionErrorDetail, DbEvents, InfraEvents, QueueEvents, QueueJobFailedDetail, QueueJobRetryingDetail, SchedulerEvents, SchedulerJobExecutedDetail, } from './events';
|
|
4
4
|
export type { EnqueueOptions, Job, JobHandler, JobQueue, QueueConsumer, QueueConsumerConfig, QueueStats, } from './job-queue/index';
|
|
5
5
|
export { getLogger, type InitLoggerOptions, initializeLogger, type Logger, type LogLevel, setLoggerMuted, } from './logger';
|
|
6
|
-
export { ActionRegistry, type CreateDefaultRegistryOptions, createDefaultRegistry,
|
|
6
|
+
export { ActionRegistry, type CreateDefaultRegistryOptions, createDefaultRegistry, HealthPingAction, type HealthPingWriter, initScheduler, LogAction, NoopSchedulerAdapter, QueueStatsAction, type QueueStatsDaoProvider, type ScheduledAction, type SchedulerAction, type SchedulerAdapter, toScheduledAction, wrapScheduledHandler, } from './scheduler/index';
|
|
7
7
|
export { addSpanAttributes, addSpanEvent, extractSqlOperation, getActiveSpan, getEventbusEmitsTotal, getEventbusErrorsTotal, getHttpClientRequestDuration, getHttpClientRequestErrors, getHttpClientRequestTotal, getQueueJobCompletedTotal, getQueueJobEnqueuedTotal, getQueueJobFailedTotal, getQueueJobProcessingDuration, getSchedulerJobDuration, getSchedulerJobExecutedTotal, getSchedulerJobFailedTotal, getTelemetryConfig, getTracer, initMetrics, initTelemetry, isTelemetryEnabled, sanitizeSql, shutdownMetrics, shutdownTelemetry, type TelemetryConfig, type TelemetryConfigPartial, traceAsync, traceSync, withSpan, } from './telemetry/index';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9F,OAAO,EACH,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,QAAQ,EACR,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACR,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,QAAQ,EACR,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,0BAA0B,GAC7B,MAAM,UAAU,CAAC;AAElB,YAAY,EACR,cAAc,EACd,GAAG,EACH,UAAU,EACV,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,UAAU,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACH,SAAS,EACT,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,cAAc,GACjB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACH,cAAc,EACd,KAAK,4BAA4B,EACjC,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9F,OAAO,EACH,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,QAAQ,EACR,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EACR,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,QAAQ,EACR,WAAW,EACX,WAAW,EACX,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,EACf,0BAA0B,GAC7B,MAAM,UAAU,CAAC;AAElB,YAAY,EACR,cAAc,EACd,GAAG,EACH,UAAU,EACV,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,UAAU,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACH,SAAS,EACT,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,cAAc,GACjB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACH,cAAc,EACd,KAAK,4BAA4B,EACjC,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,iBAAiB,EACjB,oBAAoB,GACvB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACH,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAC5B,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,EACvB,4BAA4B,EAC5B,0BAA0B,EAC1B,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,UAAU,EACV,SAAS,EACT,QAAQ,GACX,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,6 @@ export { attachDefaultObservers, attachFileObserver, attachLogObserver, attachTe
|
|
|
5
5
|
// Logger
|
|
6
6
|
export { getLogger, initializeLogger, setLoggerMuted, } from './logger.js';
|
|
7
7
|
// Scheduler
|
|
8
|
-
export { ActionRegistry, createDefaultRegistry,
|
|
8
|
+
export { ActionRegistry, createDefaultRegistry, HealthPingAction, initScheduler, LogAction, NoopSchedulerAdapter, QueueStatsAction, toScheduledAction, wrapScheduledHandler, } from './scheduler/index.js';
|
|
9
9
|
// Telemetry
|
|
10
10
|
export { addSpanAttributes, addSpanEvent, extractSqlOperation, getActiveSpan, getEventbusEmitsTotal, getEventbusErrorsTotal, getHttpClientRequestDuration, getHttpClientRequestErrors, getHttpClientRequestTotal, getQueueJobCompletedTotal, getQueueJobEnqueuedTotal, getQueueJobFailedTotal, getQueueJobProcessingDuration, getSchedulerJobDuration, getSchedulerJobExecutedTotal, getSchedulerJobFailedTotal, getTelemetryConfig, getTracer, initMetrics, initTelemetry, isTelemetryEnabled, sanitizeSql, shutdownMetrics, shutdownTelemetry, traceAsync, traceSync, withSpan, } from './telemetry/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/scheduler/cloudflare.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/scheduler/cloudflare.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEjE,UAAU,gBAAgB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9C;AAED,UAAU,cAAc;IACpB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAC9C;AAED;;;;;GAKG;AACH,qBAAa,0BAA2B,YAAW,gBAAgB;IAC/D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;;IAI9D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IAI/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;;OAGG;IACH,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,cAAc,GAAG,IAAI;CAmB3E"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Cloudflare Workers scheduler adapter using Cron Triggers.
|
|
3
3
|
* Uses minimal local type declarations — no @cloudflare/workers-types dependency.
|
|
4
4
|
*/
|
|
5
|
-
import { getSchedulerJobExecutedTotal, getSchedulerJobFailedTotal } from '../telemetry/metrics.js';
|
|
5
|
+
import { getSchedulerJobDuration, getSchedulerJobExecutedTotal, getSchedulerJobFailedTotal, } from '../telemetry/metrics.js';
|
|
6
6
|
/**
|
|
7
7
|
* Scheduler adapter for Cloudflare Workers Cron Triggers.
|
|
8
8
|
*
|
|
@@ -29,10 +29,17 @@ export class CloudflareSchedulerAdapter {
|
|
|
29
29
|
handleScheduledEvent(event, ctx) {
|
|
30
30
|
const action = this.entries.get(event.cron);
|
|
31
31
|
if (action) {
|
|
32
|
+
const startMs = performance.now();
|
|
32
33
|
getSchedulerJobExecutedTotal().add(1, { cron: event.cron });
|
|
33
|
-
ctx.waitUntil(action()
|
|
34
|
+
ctx.waitUntil(action()
|
|
35
|
+
.catch((error) => {
|
|
34
36
|
getSchedulerJobFailedTotal().add(1, { cron: event.cron });
|
|
35
37
|
throw error;
|
|
38
|
+
})
|
|
39
|
+
.finally(() => {
|
|
40
|
+
// Duration parity with NodeSchedulerAdapter — record the job
|
|
41
|
+
// duration metric keyed by cron for both runtimes.
|
|
42
|
+
getSchedulerJobDuration().record(performance.now() - startMs, { cron: event.cron });
|
|
36
43
|
}));
|
|
37
44
|
}
|
|
38
45
|
}
|
|
@@ -1,10 +1,4 @@
|
|
|
1
1
|
import type { ScheduledAction, SchedulerAdapter } from './types';
|
|
2
|
-
/** Set the runtime scheduler adapter. Call before {@link initScheduler}. */
|
|
3
|
-
export declare function setSchedulerAdapter(adapter: SchedulerAdapter): void;
|
|
4
|
-
/** Reset the scheduler adapter singleton. For testing. */
|
|
5
|
-
export declare function resetSchedulerAdapter(): void;
|
|
6
|
-
/** Get the currently configured scheduler adapter, or `undefined` if not set. */
|
|
7
|
-
export declare function getSchedulerAdapter(): SchedulerAdapter | undefined;
|
|
8
2
|
/**
|
|
9
3
|
* Initialize the scheduler adapter and register cron entries.
|
|
10
4
|
*
|
|
@@ -12,7 +6,9 @@ export declare function getSchedulerAdapter(): SchedulerAdapter | undefined;
|
|
|
12
6
|
* running, newly registered entries will NOT be started until the next
|
|
13
7
|
* `start()` call.
|
|
14
8
|
*
|
|
15
|
-
*
|
|
9
|
+
* @param adapter - Adapter to use. Defaults to a {@link NoopSchedulerAdapter}.
|
|
10
|
+
* @param cronEntries - `[cron, action]` pairs to register on the adapter.
|
|
11
|
+
* @returns The configured adapter.
|
|
16
12
|
*/
|
|
17
|
-
export declare function initScheduler(cronEntries?: Array<[string, ScheduledAction]>): SchedulerAdapter;
|
|
13
|
+
export declare function initScheduler(adapter?: SchedulerAdapter, cronEntries?: Array<[string, ScheduledAction]>): SchedulerAdapter;
|
|
18
14
|
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/scheduler/factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/scheduler/factory.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CACzB,OAAO,CAAC,EAAE,gBAAgB,EAC1B,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,GAC/C,gBAAgB,CAUlB"}
|
|
@@ -1,20 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Scheduler factory —
|
|
2
|
+
* Scheduler factory — initializes an adapter and registers cron entries.
|
|
3
|
+
*
|
|
4
|
+
* The adapter is passed in explicitly (dependency injection); there is no
|
|
5
|
+
* process-global adapter state. Callers that don't supply one get a
|
|
6
|
+
* {@link NoopSchedulerAdapter}.
|
|
3
7
|
*/
|
|
4
8
|
import { NoopSchedulerAdapter } from './noop.js';
|
|
5
|
-
let runtimeAdapter;
|
|
6
|
-
/** Set the runtime scheduler adapter. Call before {@link initScheduler}. */
|
|
7
|
-
export function setSchedulerAdapter(adapter) {
|
|
8
|
-
runtimeAdapter = adapter;
|
|
9
|
-
}
|
|
10
|
-
/** Reset the scheduler adapter singleton. For testing. */
|
|
11
|
-
export function resetSchedulerAdapter() {
|
|
12
|
-
runtimeAdapter = undefined;
|
|
13
|
-
}
|
|
14
|
-
/** Get the currently configured scheduler adapter, or `undefined` if not set. */
|
|
15
|
-
export function getSchedulerAdapter() {
|
|
16
|
-
return runtimeAdapter;
|
|
17
|
-
}
|
|
18
9
|
/**
|
|
19
10
|
* Initialize the scheduler adapter and register cron entries.
|
|
20
11
|
*
|
|
@@ -22,17 +13,16 @@ export function getSchedulerAdapter() {
|
|
|
22
13
|
* running, newly registered entries will NOT be started until the next
|
|
23
14
|
* `start()` call.
|
|
24
15
|
*
|
|
25
|
-
*
|
|
16
|
+
* @param adapter - Adapter to use. Defaults to a {@link NoopSchedulerAdapter}.
|
|
17
|
+
* @param cronEntries - `[cron, action]` pairs to register on the adapter.
|
|
18
|
+
* @returns The configured adapter.
|
|
26
19
|
*/
|
|
27
|
-
export function initScheduler(cronEntries) {
|
|
28
|
-
|
|
29
|
-
if (!runtimeAdapter) {
|
|
30
|
-
runtimeAdapter = new NoopSchedulerAdapter();
|
|
31
|
-
}
|
|
20
|
+
export function initScheduler(adapter, cronEntries) {
|
|
21
|
+
const resolved = adapter ?? new NoopSchedulerAdapter();
|
|
32
22
|
if (cronEntries) {
|
|
33
23
|
for (const [cron, action] of cronEntries) {
|
|
34
|
-
|
|
24
|
+
resolved.register(cron, action);
|
|
35
25
|
}
|
|
36
26
|
}
|
|
37
|
-
return
|
|
27
|
+
return resolved;
|
|
38
28
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { ActionRegistry, type CreateDefaultRegistryOptions, createDefaultRegistry, HealthPingAction, type HealthPingWriter, LogAction, QueueStatsAction, type QueueStatsDaoProvider, type SchedulerAction, toScheduledAction, } from './action';
|
|
2
|
-
export {
|
|
2
|
+
export { initScheduler } from './factory';
|
|
3
3
|
export { NoopSchedulerAdapter } from './noop';
|
|
4
4
|
export type { ScheduledAction, SchedulerAdapter } from './types';
|
|
5
5
|
export { wrapScheduledHandler } from './wrap-handler';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,KAAK,4BAA4B,EACjC,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,SAAS,EACT,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,iBAAiB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,KAAK,4BAA4B,EACjC,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,SAAS,EACT,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACpB,iBAAiB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/scheduler/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { ActionRegistry, createDefaultRegistry, HealthPingAction, LogAction, QueueStatsAction, toScheduledAction, } from './action.js';
|
|
2
|
-
export {
|
|
2
|
+
export { initScheduler } from './factory.js';
|
|
3
3
|
export { NoopSchedulerAdapter } from './noop.js';
|
|
4
4
|
export { wrapScheduledHandler } from './wrap-handler.js';
|
|
@@ -5,10 +5,14 @@ import type { ScheduledAction } from './types';
|
|
|
5
5
|
* Wrap a scheduled action with OTel tracing, duration measurement, and
|
|
6
6
|
* `scheduler.job.executed` event emission.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* Observability is split by design across two axes, not duplicated:
|
|
9
|
+
* - The adapters (`NodeSchedulerAdapter`, `CloudflareSchedulerAdapter`) record
|
|
10
|
+
* executed/failed/duration **metrics keyed by `cron`** for aggregate dashboards.
|
|
11
|
+
* - This opt-in wrapper adds a named **tracing span + lifecycle event keyed by
|
|
12
|
+
* the human `name`**, for per-job diagnosis. Its timer measures the inner action
|
|
13
|
+
* scope; the adapter's measures the full tick — nested, not double-counted.
|
|
14
|
+
*
|
|
15
|
+
* Wrap an action before registering it when you want the named span/event.
|
|
12
16
|
*
|
|
13
17
|
* @param name - Job name, surfaced as `scheduler.job_name` on the span/event.
|
|
14
18
|
* @param action - The action to wrap (new no-arg `ScheduledAction` signature).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap-handler.d.ts","sourceRoot":"","sources":["../../src/scheduler/wrap-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C
|
|
1
|
+
{"version":3,"file":"wrap-handler.d.ts","sourceRoot":"","sources":["../../src/scheduler/wrap-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,EACvB,SAAS,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,IAAI,GAC7C,eAAe,CA2BjB"}
|
|
@@ -3,10 +3,14 @@ import { addSpanAttributes, addSpanEvent, traceAsync } from '../telemetry/tracin
|
|
|
3
3
|
* Wrap a scheduled action with OTel tracing, duration measurement, and
|
|
4
4
|
* `scheduler.job.executed` event emission.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* Observability is split by design across two axes, not duplicated:
|
|
7
|
+
* - The adapters (`NodeSchedulerAdapter`, `CloudflareSchedulerAdapter`) record
|
|
8
|
+
* executed/failed/duration **metrics keyed by `cron`** for aggregate dashboards.
|
|
9
|
+
* - This opt-in wrapper adds a named **tracing span + lifecycle event keyed by
|
|
10
|
+
* the human `name`**, for per-job diagnosis. Its timer measures the inner action
|
|
11
|
+
* scope; the adapter's measures the full tick — nested, not double-counted.
|
|
12
|
+
*
|
|
13
|
+
* Wrap an action before registering it when you want the named span/event.
|
|
10
14
|
*
|
|
11
15
|
* @param name - Job name, surfaced as `scheduler.job_name` on the span/event.
|
|
12
16
|
* @param action - The action to wrap (new no-arg `ScheduledAction` signature).
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
export { getTelemetryConfig, type TelemetryConfig, type TelemetryConfigPartial } from './config';
|
|
2
1
|
export { extractSqlOperation, sanitizeSql } from './db-sanitize';
|
|
3
2
|
export { type Counter, getEventbusEmitsTotal, getEventbusErrorsTotal, getHttpClientRequestDuration, getHttpClientRequestErrors, getHttpClientRequestTotal, getQueueJobCompletedTotal, getQueueJobEnqueuedTotal, getQueueJobFailedTotal, getQueueJobProcessingDuration, getSchedulerJobDuration, getSchedulerJobExecutedTotal, getSchedulerJobFailedTotal, type Histogram, initMetrics, shutdownMetrics, } from './metrics';
|
|
4
|
-
export { getTracer, initTelemetry, isTelemetryEnabled, shutdownTelemetry } from './sdk';
|
|
3
|
+
export { getTelemetryConfig, getTracer, initTelemetry, isTelemetryEnabled, shutdownTelemetry, type TelemetryConfig, type TelemetryConfigPartial, } from './sdk';
|
|
5
4
|
export type { Span, SpanOptions, Tracer } from './tracing';
|
|
6
5
|
export { addSpanAttributes, addSpanEvent, getActiveSpan, traceAsync, traceSync, withSpan } from './tracing';
|
|
7
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EACH,KAAK,OAAO,EACZ,qBAAqB,EACrB,sBAAsB,EACtB,4BAA4B,EAC5B,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,6BAA6B,EAC7B,uBAAuB,EACvB,4BAA4B,EAC5B,0BAA0B,EAC1B,KAAK,SAAS,EACd,WAAW,EACX,eAAe,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EACH,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,sBAAsB,GAC9B,MAAM,OAAO,CAAC;AACf,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/telemetry/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
export { getTelemetryConfig } from './config.js';
|
|
2
1
|
export { extractSqlOperation, sanitizeSql } from './db-sanitize.js';
|
|
3
2
|
export { getEventbusEmitsTotal, getEventbusErrorsTotal, getHttpClientRequestDuration, getHttpClientRequestErrors, getHttpClientRequestTotal, getQueueJobCompletedTotal, getQueueJobEnqueuedTotal, getQueueJobFailedTotal, getQueueJobProcessingDuration, getSchedulerJobDuration, getSchedulerJobExecutedTotal, getSchedulerJobFailedTotal, initMetrics, shutdownMetrics, } from './metrics.js';
|
|
4
|
-
export { getTracer, initTelemetry, isTelemetryEnabled, shutdownTelemetry } from './sdk.js';
|
|
3
|
+
export { getTelemetryConfig, getTracer, initTelemetry, isTelemetryEnabled, shutdownTelemetry, } from './sdk.js';
|
|
5
4
|
export { addSpanAttributes, addSpanEvent, getActiveSpan, traceAsync, traceSync, withSpan } from './tracing.js';
|
|
@@ -30,7 +30,15 @@ export declare function getSchedulerJobExecutedTotal(): Counter;
|
|
|
30
30
|
export declare function getSchedulerJobDuration(): Histogram;
|
|
31
31
|
/** Counter for failed scheduled job executions. */
|
|
32
32
|
export declare function getSchedulerJobFailedTotal(): Counter;
|
|
33
|
-
/**
|
|
33
|
+
/**
|
|
34
|
+
* Pre-warm every instrument against the currently-registered meter and mark the
|
|
35
|
+
* subsystem initialized. Idempotent.
|
|
36
|
+
*
|
|
37
|
+
* Instruments are otherwise created lazily on first getter call (so metrics keep
|
|
38
|
+
* working even if this is never called — see the module contract). Calling this
|
|
39
|
+
* during bootstrap eagerly materializes them, so `isMetricsInitialized()` reflects
|
|
40
|
+
* real wiring rather than being a flag that gates nothing.
|
|
41
|
+
*/
|
|
34
42
|
export declare function initMetrics(): void;
|
|
35
43
|
/** Clear the instrument cache and mark metrics as uninitialized. */
|
|
36
44
|
export declare function shutdownMetrics(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,oBAAoB,CAAC;AAE3E,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI7D,kFAAkF;AAClF,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AA8BD,kFAAkF;AAClF,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,oEAAoE;AACpE,wBAAgB,4BAA4B,IAAI,SAAS,CAExD;AAED,8DAA8D;AAC9D,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAID,yCAAyC;AACzC,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED,4CAA4C;AAC5C,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAID,uCAAuC;AACvC,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED,qDAAqD;AACrD,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,8DAA8D;AAC9D,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,6DAA6D;AAC7D,wBAAgB,6BAA6B,IAAI,SAAS,CAEzD;AAID,kDAAkD;AAClD,wBAAgB,4BAA4B,IAAI,OAAO,CAEtD;AAED,sEAAsE;AACtE,wBAAgB,uBAAuB,IAAI,SAAS,CAEnD;AAED,mDAAmD;AACnD,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAID
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/telemetry/metrics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,oBAAoB,CAAC;AAE3E,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI7D,kFAAkF;AAClF,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AA8BD,kFAAkF;AAClF,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,oEAAoE;AACpE,wBAAgB,4BAA4B,IAAI,SAAS,CAExD;AAED,8DAA8D;AAC9D,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAID,yCAAyC;AACzC,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAED,4CAA4C;AAC5C,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAID,uCAAuC;AACvC,wBAAgB,wBAAwB,IAAI,OAAO,CAElD;AAED,qDAAqD;AACrD,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,8DAA8D;AAC9D,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,6DAA6D;AAC7D,wBAAgB,6BAA6B,IAAI,SAAS,CAEzD;AAID,kDAAkD;AAClD,wBAAgB,4BAA4B,IAAI,OAAO,CAEtD;AAED,sEAAsE;AACtE,wBAAgB,uBAAuB,IAAI,SAAS,CAEnD;AAED,mDAAmD;AACnD,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAID;;;;;;;;GAQG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAgBlC;AAED,oEAAoE;AACpE,wBAAgB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAS/C;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAMpC"}
|
|
@@ -81,10 +81,31 @@ export function getSchedulerJobFailedTotal() {
|
|
|
81
81
|
return getOrCreateCounter('schedFail', 'scheduler.jobs.failed', 'Failed scheduled jobs', '{failure}');
|
|
82
82
|
}
|
|
83
83
|
// ── Lifecycle ───────────────────────────────────────────────────────
|
|
84
|
-
/**
|
|
84
|
+
/**
|
|
85
|
+
* Pre-warm every instrument against the currently-registered meter and mark the
|
|
86
|
+
* subsystem initialized. Idempotent.
|
|
87
|
+
*
|
|
88
|
+
* Instruments are otherwise created lazily on first getter call (so metrics keep
|
|
89
|
+
* working even if this is never called — see the module contract). Calling this
|
|
90
|
+
* during bootstrap eagerly materializes them, so `isMetricsInitialized()` reflects
|
|
91
|
+
* real wiring rather than being a flag that gates nothing.
|
|
92
|
+
*/
|
|
85
93
|
export function initMetrics() {
|
|
86
94
|
if (metricsInitialized)
|
|
87
95
|
return;
|
|
96
|
+
// Eagerly materialize all instruments against the live meter.
|
|
97
|
+
getHttpClientRequestTotal();
|
|
98
|
+
getHttpClientRequestDuration();
|
|
99
|
+
getHttpClientRequestErrors();
|
|
100
|
+
getEventbusEmitsTotal();
|
|
101
|
+
getEventbusErrorsTotal();
|
|
102
|
+
getQueueJobEnqueuedTotal();
|
|
103
|
+
getQueueJobCompletedTotal();
|
|
104
|
+
getQueueJobFailedTotal();
|
|
105
|
+
getQueueJobProcessingDuration();
|
|
106
|
+
getSchedulerJobExecutedTotal();
|
|
107
|
+
getSchedulerJobDuration();
|
|
108
|
+
getSchedulerJobFailedTotal();
|
|
88
109
|
metricsInitialized = true;
|
|
89
110
|
}
|
|
90
111
|
/** Clear the instrument cache and mark metrics as uninitialized. */
|
package/dist/telemetry/sdk.d.ts
CHANGED
|
@@ -8,7 +8,39 @@
|
|
|
8
8
|
* keeps the main barrel free of any SDK runtime dependency.
|
|
9
9
|
*/
|
|
10
10
|
import { type Tracer } from '@opentelemetry/api';
|
|
11
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Full telemetry configuration: master enable switch, service name,
|
|
13
|
+
* environment, and debug-level DB statement capture.
|
|
14
|
+
*/
|
|
15
|
+
export interface TelemetryConfig {
|
|
16
|
+
/** Master switch — when false, all tracing degrades to no-ops. */
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
/** Logical service name emitted on every span. */
|
|
19
|
+
serviceName: string;
|
|
20
|
+
/** Deployment environment (development, staging, production). */
|
|
21
|
+
environment: string;
|
|
22
|
+
/**
|
|
23
|
+
* Debug-only DB statement capture.
|
|
24
|
+
*
|
|
25
|
+
* When true, DB spans may include sanitized SQL text in a `db.statement`
|
|
26
|
+
* attribute. SQL text is redacted — parameter values, literals, and
|
|
27
|
+
* identifiers are stripped before capture.
|
|
28
|
+
*
|
|
29
|
+
* Default: `false`. Controlled by `OTEL_DB_STATEMENT_DEBUG` env var.
|
|
30
|
+
*/
|
|
31
|
+
dbStatementDebug: boolean;
|
|
32
|
+
}
|
|
33
|
+
/** Partial telemetry config from the centralized config system. */
|
|
34
|
+
export interface TelemetryConfigPartial {
|
|
35
|
+
enabled?: boolean | undefined;
|
|
36
|
+
serviceName?: string | undefined;
|
|
37
|
+
environment?: string | undefined;
|
|
38
|
+
dbStatementDebug?: boolean | undefined;
|
|
39
|
+
/** Deployment environment fallback (from app.env). */
|
|
40
|
+
appEnv?: string | undefined;
|
|
41
|
+
}
|
|
42
|
+
/** Resolve the full telemetry config by merging a partial override with defaults. */
|
|
43
|
+
export declare function getTelemetryConfig(configPartial?: TelemetryConfigPartial): TelemetryConfig;
|
|
12
44
|
/** Get the resolved telemetry configuration (defaults + overrides). */
|
|
13
45
|
export declare function getResolvedConfig(): TelemetryConfig;
|
|
14
46
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/telemetry/sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,KAAK,MAAM,EAAS,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/telemetry/sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,KAAK,MAAM,EAAS,MAAM,oBAAoB,CAAC;AAIxD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC5B,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;;;OAQG;IACH,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAED,mEAAmE;AACnE,MAAM,WAAW,sBAAsB;IACnC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAQD,qFAAqF;AACrF,wBAAgB,kBAAkB,CAAC,aAAa,GAAE,sBAA2B,GAAG,eAAe,CAO9F;AAQD,uEAAuE;AACvE,wBAAgB,iBAAiB,IAAI,eAAe,CAEnD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAIrE;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAGjD;AAED,gFAAgF;AAChF,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,oDAAoD;AACpD,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AAED,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/telemetry/sdk.js
CHANGED
|
@@ -8,7 +8,20 @@
|
|
|
8
8
|
* keeps the main barrel free of any SDK runtime dependency.
|
|
9
9
|
*/
|
|
10
10
|
import { trace } from '@opentelemetry/api';
|
|
11
|
-
|
|
11
|
+
const CONFIG_DEFAULTS = {
|
|
12
|
+
enabled: true,
|
|
13
|
+
serviceName: 'ts-libs',
|
|
14
|
+
environment: 'development',
|
|
15
|
+
};
|
|
16
|
+
/** Resolve the full telemetry config by merging a partial override with defaults. */
|
|
17
|
+
export function getTelemetryConfig(configPartial = {}) {
|
|
18
|
+
return {
|
|
19
|
+
enabled: configPartial.enabled ?? CONFIG_DEFAULTS.enabled,
|
|
20
|
+
serviceName: configPartial.serviceName ?? CONFIG_DEFAULTS.serviceName,
|
|
21
|
+
environment: configPartial.environment ?? configPartial.appEnv ?? CONFIG_DEFAULTS.environment,
|
|
22
|
+
dbStatementDebug: configPartial.dbStatementDebug ?? false,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
12
25
|
const TRACER_NAME = '@gobing-ai/ts-infra';
|
|
13
26
|
const TRACER_VERSION = '0.1.0';
|
|
14
27
|
let telemetryInitialized = false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gobing-ai/ts-infra",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.7",
|
|
4
4
|
"description": "@gobing-ai/ts-infra — Infrastructure backbone: event bus, job queue, scheduler, telemetry, API client, and logging.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -77,8 +77,8 @@
|
|
|
77
77
|
"@logtape/logtape": "^2.0.0"
|
|
78
78
|
},
|
|
79
79
|
"peerDependencies": {
|
|
80
|
-
"@gobing-ai/ts-db": "^0.3.
|
|
81
|
-
"@gobing-ai/ts-runtime": "^0.3.
|
|
80
|
+
"@gobing-ai/ts-db": "^0.3.7",
|
|
81
|
+
"@gobing-ai/ts-runtime": "^0.3.7",
|
|
82
82
|
"@opentelemetry/api": "^1.9.0",
|
|
83
83
|
"@opentelemetry/sdk-trace-node": "^2.0.0",
|
|
84
84
|
"@opentelemetry/sdk-metrics": "^2.0.0",
|
|
@@ -111,8 +111,8 @@
|
|
|
111
111
|
}
|
|
112
112
|
},
|
|
113
113
|
"devDependencies": {
|
|
114
|
-
"@gobing-ai/ts-db": "^0.3.
|
|
115
|
-
"@gobing-ai/ts-runtime": "^0.3.
|
|
114
|
+
"@gobing-ai/ts-db": "^0.3.7",
|
|
115
|
+
"@gobing-ai/ts-runtime": "^0.3.7",
|
|
116
116
|
"@types/bun": "1.3.14",
|
|
117
117
|
"@opentelemetry/api": "^1.9.0",
|
|
118
118
|
"@opentelemetry/sdk-trace-node": "^2.0.0",
|