@effect-app/infra 4.0.0-beta.209 → 4.0.0-beta.210
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 +55 -0
- package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
- package/dist/Model/Repository/internal/internal.js +28 -21
- package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
- package/dist/QueueMaker/SQLQueue.js +37 -14
- package/dist/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.js +37 -14
- package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/QueueMaker/sbqueue.js +28 -13
- package/dist/RequestContext.d.ts +6 -6
- package/dist/RequestContext.js +7 -7
- package/dist/Store/Cosmos.d.ts.map +1 -1
- package/dist/Store/Cosmos.js +80 -66
- package/dist/Store/Disk.d.ts.map +1 -1
- package/dist/Store/Disk.js +48 -14
- package/dist/Store/Memory.d.ts.map +1 -1
- package/dist/Store/Memory.js +60 -35
- package/dist/Store/SQL/Pg.d.ts.map +1 -1
- package/dist/Store/SQL/Pg.js +80 -38
- package/dist/Store/SQL.d.ts.map +1 -1
- package/dist/Store/SQL.js +160 -77
- package/dist/adapters/SQL/Model.d.ts +4 -1
- package/dist/adapters/SQL/Model.d.ts.map +1 -1
- package/dist/adapters/SQL/Model.js +28 -37
- package/dist/api/internal/events.js +2 -2
- package/dist/api/routing/middleware/middleware.js +3 -3
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +12 -2
- package/dist/otel.d.ts +66 -0
- package/dist/otel.d.ts.map +1 -0
- package/dist/otel.js +56 -0
- package/package.json +6 -2
- package/src/Model/Repository/internal/internal.ts +82 -71
- package/src/QueueMaker/SQLQueue.ts +35 -13
- package/src/QueueMaker/memQueue.ts +35 -13
- package/src/QueueMaker/sbqueue.ts +26 -12
- package/src/RequestContext.ts +6 -6
- package/src/Store/Cosmos.ts +81 -66
- package/src/Store/Disk.ts +50 -16
- package/src/Store/Memory.ts +59 -34
- package/src/Store/SQL/Pg.ts +74 -40
- package/src/Store/SQL.ts +149 -83
- package/src/adapters/SQL/Model.ts +31 -36
- package/src/api/internal/events.ts +1 -1
- package/src/api/routing/middleware/middleware.ts +2 -2
- package/src/api/routing.ts +11 -1
- package/src/otel.ts +141 -0
|
@@ -4,6 +4,7 @@ import { pretty } from "effect-app/utils";
|
|
|
4
4
|
import { Receiver, Sender } from "../adapters/ServiceBus.js";
|
|
5
5
|
import { getRequestContext, setupRequestContextWithCustomSpan } from "../api/setupRequest.js";
|
|
6
6
|
import { InfraLogger } from "../logger.js";
|
|
7
|
+
import { messagingSpanArgs } from "../otel.js";
|
|
7
8
|
import { reportNonInterruptedFailure, reportNonInterruptedFailureCause, reportQueueError } from "./errors.js";
|
|
8
9
|
import { QueueMeta } from "./service.js";
|
|
9
10
|
export function makeServiceBusQueue(schema, drainSchema) {
|
|
@@ -32,15 +33,21 @@ export function makeServiceBusQueue(schema, drainSchema) {
|
|
|
32
33
|
.logDebug(`[${receiver.name}] Processing incoming message`)
|
|
33
34
|
.pipe(Effect.annotateLogs({ body: pretty(body), meta: pretty(meta) }), Effect.andThen(handleEvent(body)), Effect.orDie,
|
|
34
35
|
// we silenceAndReportError here, so that the error is reported, and moves into the Exit.
|
|
35
|
-
silenceAndReportError, (_) =>
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
silenceAndReportError, (_) => {
|
|
37
|
+
const args = messagingSpanArgs({
|
|
38
|
+
operation: "process",
|
|
39
|
+
system: "servicebus",
|
|
40
|
+
destination: receiver.name,
|
|
41
|
+
messageId: body.id,
|
|
42
|
+
conversationId: sessionId,
|
|
43
|
+
extra: { "messaging.message.type": body._tag, "messaging.message.body": body }
|
|
44
|
+
}, "consumer");
|
|
45
|
+
return setupRequestContextWithCustomSpan(_, meta, args.name, {
|
|
46
|
+
captureStackTrace: false,
|
|
47
|
+
kind: args.kind,
|
|
48
|
+
attributes: args.attributes
|
|
49
|
+
});
|
|
50
|
+
});
|
|
44
51
|
if (meta.span) {
|
|
45
52
|
effect = Effect.withParentSpan(effect, Tracer.externalSpan(meta.span));
|
|
46
53
|
}
|
|
@@ -55,10 +62,18 @@ export function makeServiceBusQueue(schema, drainSchema) {
|
|
|
55
62
|
}, sessionId)
|
|
56
63
|
.pipe(Effect.andThen(Effect.never));
|
|
57
64
|
},
|
|
58
|
-
publish: Effect.fn(
|
|
59
|
-
kind: "producer"
|
|
65
|
+
publish: Effect.fn(`publish ${sender.name}`, {
|
|
66
|
+
kind: "producer",
|
|
67
|
+
attributes: {
|
|
68
|
+
"messaging.system": "servicebus",
|
|
69
|
+
"messaging.operation.name": "publish",
|
|
70
|
+
"messaging.destination.name": sender.name
|
|
71
|
+
}
|
|
60
72
|
})(function* (...messages) {
|
|
61
|
-
yield* Effect.annotateCurrentSpan({
|
|
73
|
+
yield* Effect.annotateCurrentSpan({
|
|
74
|
+
"messaging.batch.message_count": messages.length,
|
|
75
|
+
"messaging.message.types": messages.map((_) => _._tag)
|
|
76
|
+
});
|
|
62
77
|
const requestContext = yield* getRequestContext;
|
|
63
78
|
const msgs = yield* Effect.forEach(messages, (m) => encodePublish({ body: m, meta: requestContext }).pipe(Effect.orDie, Effect.map((body) => ({
|
|
64
79
|
body,
|
|
@@ -72,4 +87,4 @@ export function makeServiceBusQueue(schema, drainSchema) {
|
|
|
72
87
|
return queue;
|
|
73
88
|
});
|
|
74
89
|
}
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2JxdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9RdWV1ZU1ha2VyL3NicXVldWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQThCLENBQUMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUUvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUM3RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM5QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsZ0NBQWdDLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV4QyxNQUFNLFVBQVUsbUJBQW1CLENBTWpDLE1BQTBCLEVBQzFCLFdBQXlDO0lBRXpDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxFQUFFLE1BQU07UUFDWixJQUFJLEVBQUUsU0FBUztLQUNoQixDQUFDLENBQUE7SUFDRixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQTtJQUNsRSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0lBQ3BELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFB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
|
package/dist/RequestContext.d.ts
CHANGED
|
@@ -87,12 +87,12 @@ export declare class RequestContext extends RequestContext_base {
|
|
|
87
87
|
};
|
|
88
88
|
}
|
|
89
89
|
export declare const spanAttributes: (ctx: Pick<RequestContext, "locale" | "namespace"> & Partial<RequestContext>) => {
|
|
90
|
-
"
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
95
|
-
"
|
|
90
|
+
"code.function.name": NonEmptyString255 | undefined;
|
|
91
|
+
"app.locale": "de" | "en";
|
|
92
|
+
"app.tenant.id": string & S.NonEmptyString255Brand;
|
|
93
|
+
"client.id"?: NonEmptyString255;
|
|
94
|
+
"user.id"?: UserProfileId;
|
|
95
|
+
"user.roles"?: unknown;
|
|
96
96
|
};
|
|
97
97
|
export declare namespace RequestContext {
|
|
98
98
|
interface Encoded extends S.StructNestedEncoded<typeof RequestContext> {
|
package/dist/RequestContext.js
CHANGED
|
@@ -26,16 +26,16 @@ export class RequestContext extends S.Opaque()(S.Struct({
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
export const spanAttributes = (ctx) => ({
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
...ctx.sourceId ? { "
|
|
29
|
+
"code.function.name": ctx.name,
|
|
30
|
+
"app.locale": ctx.locale,
|
|
31
|
+
"app.tenant.id": ctx.namespace,
|
|
32
|
+
...ctx.sourceId ? { "client.id": ctx.sourceId } : {},
|
|
33
33
|
...(ctx.userProfile?.sub
|
|
34
34
|
? {
|
|
35
|
-
"
|
|
35
|
+
"user.id": ctx
|
|
36
36
|
.userProfile
|
|
37
37
|
.sub,
|
|
38
|
-
"
|
|
38
|
+
"user.roles": "roles" in ctx
|
|
39
39
|
.userProfile
|
|
40
40
|
? ctx.userProfile.roles
|
|
41
41
|
: undefined
|
|
@@ -45,4 +45,4 @@ export const spanAttributes = (ctx) => ({
|
|
|
45
45
|
//
|
|
46
46
|
// codegen:end
|
|
47
47
|
//
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVxdWVzdENvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUmVxdWVzdENvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXJELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7QUFHOUMsTUFBTSxPQUFPLFNBQVUsU0FBUSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztDQUFHO0FBRW5HLE1BQU0sT0FBTyxjQUFlLFNBQVEsQ0FBQyxDQUFDLE1BQU0sRUFHekMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ1gsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDYixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU07UUFDakIsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQ2hCLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTztLQUNuQixDQUFDO0lBQ0YsSUFBSSxFQUFFLGlCQUFpQjtJQUN2QixNQUFNLEVBQUUsTUFBTTtJQUNkLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUTtJQUNqRCxTQUFTLEVBQUUsaUJBQWlCO0lBQzVCLGtCQUFrQjtJQUNsQixXQUFXLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO0NBQzdELENBQUMsQ0FBQztJQUNELDZDQUE2QztJQUU3QyxNQUFNLENBQUMsWUFBWSxDQUFhLElBQW9CO1FBQ2xELE9BQU87WUFDTCxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDeEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3BCLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUEyRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlHLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxJQUFJO0lBQzlCLFlBQVksRUFBRSxHQUFHLENBQUMsTUFBTTtJQUN4QixlQUFlLEVBQUUsR0FBRyxDQUFDLFNBQVM7SUFDOUIsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7SUFDcEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRztRQUN0QixDQUFDLENBQUM7WUFDQSxTQUFTLEVBQUUsR0FBRztpQkFDWCxXQUFXO2lCQUNYLEdBQUc7WUFDTixZQUFZLEVBQUUsT0FBTyxJQUFJLEdBQUc7aUJBQ3ZCLFdBQVc7Z0JBQ2QsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSztnQkFDdkIsQ0FBQyxDQUFDLFNBQVM7U0FDZDtRQUNELENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDUixDQUFDLENBQUE7QUFPRixFQUFFO0FBQ0YsY0FBYztBQUNkLEVBQUUifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cosmos.d.ts","sourceRoot":"","sources":["../../src/Store/Cosmos.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,EAA8D,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"Cosmos.d.ts","sourceRoot":"","sources":["../../src/Store/Cosmos.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,EAA8D,MAAM,YAAY,CAAA;AAWvH,OAAO,EAA8C,KAAK,aAAa,EAAgC,UAAU,EAAE,MAAM,cAAc,CAAA;AAukBvI,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,yCAIlD"}
|
package/dist/Store/Cosmos.js
CHANGED
|
@@ -5,6 +5,7 @@ import { dropUndefinedT, mutable } from "effect-app/utils";
|
|
|
5
5
|
import { CosmosClient, CosmosClientLayer } from "../adapters/cosmos-client.js";
|
|
6
6
|
import { OptimisticConcurrencyException } from "../errors.js";
|
|
7
7
|
import { InfraLogger } from "../logger.js";
|
|
8
|
+
import { annotateCosmosResponse, withDbSpan } from "../otel.js";
|
|
8
9
|
import { buildWhereCosmosQuery3, logQuery } from "./Cosmos/query.js";
|
|
9
10
|
import { storeId } from "./Memory.js";
|
|
10
11
|
import { StoreMaker } from "./service.js";
|
|
@@ -22,14 +23,15 @@ class CosmosDbOperationError {
|
|
|
22
23
|
}
|
|
23
24
|
} // TODO: Retry operation when running into RU limit.
|
|
24
25
|
const respBytes = (resp) => resp.diagnostics?.clientSideRequestStatistics?.totalResponsePayloadLengthInBytes ?? 0;
|
|
25
|
-
const annotateFeed = (resp) =>
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
const annotateFeed = (resp) => annotateCosmosResponse({
|
|
27
|
+
requestCharge: resp.requestCharge,
|
|
28
|
+
returnedRows: resp.resources.length,
|
|
29
|
+
responseBytes: respBytes(resp)
|
|
29
30
|
});
|
|
30
|
-
const annotateItem = (resp) =>
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
const annotateItem = (resp) => annotateCosmosResponse({
|
|
32
|
+
requestCharge: resp.requestCharge,
|
|
33
|
+
statusCode: resp.statusCode,
|
|
34
|
+
responseBytes: respBytes(resp)
|
|
33
35
|
});
|
|
34
36
|
const makeCosmosStore = Effect.fnUntraced(function* ({ prefix }) {
|
|
35
37
|
const { db } = yield* CosmosClient;
|
|
@@ -87,7 +89,13 @@ const makeCosmosStore = Effect.fnUntraced(function* ({ prefix }) {
|
|
|
87
89
|
id: markerId,
|
|
88
90
|
ttl: -1
|
|
89
91
|
}))), Effect.provide(ctx), Effect.orDie);
|
|
90
|
-
}), Effect.withLogSpan(`Cosmos.seedCheck ${name} in ${ns} [effect-app/infra/Store]`),
|
|
92
|
+
}), Effect.withLogSpan(`Cosmos.seedCheck ${name} in ${ns} [effect-app/infra/Store]`), withDbSpan({
|
|
93
|
+
operation: "seed",
|
|
94
|
+
system: "cosmosdb",
|
|
95
|
+
collection: containerId,
|
|
96
|
+
namespace: ns,
|
|
97
|
+
entity: name
|
|
98
|
+
}));
|
|
91
99
|
};
|
|
92
100
|
const seedNamespace = Effect.fn("seedNamespace")(function* (ns) {
|
|
93
101
|
if (!seed)
|
|
@@ -163,9 +171,13 @@ const makeCosmosStore = Effect.fnUntraced(function* ({ prefix }) {
|
|
|
163
171
|
}))));
|
|
164
172
|
return batchResult.flat();
|
|
165
173
|
})
|
|
166
|
-
.pipe(
|
|
167
|
-
|
|
168
|
-
|
|
174
|
+
.pipe(withDbSpan({
|
|
175
|
+
operation: "bulkSet",
|
|
176
|
+
system: "cosmosdb",
|
|
177
|
+
collection: containerId,
|
|
178
|
+
namespace: ns,
|
|
179
|
+
entity: name
|
|
180
|
+
}));
|
|
169
181
|
const bulkSet = (items) => resolveNamespace.pipe(Effect.flatMap((ns) => bulkSetInternal(items, ns)));
|
|
170
182
|
const batchSet = (items) => {
|
|
171
183
|
return resolveNamespace
|
|
@@ -217,14 +229,13 @@ const makeCosmosStore = Effect.fnUntraced(function* ({ prefix }) {
|
|
|
217
229
|
}));
|
|
218
230
|
})));
|
|
219
231
|
})
|
|
220
|
-
.pipe(
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
}, { captureStackTrace: false }))));
|
|
232
|
+
.pipe(withDbSpan({
|
|
233
|
+
operation: "batchSet",
|
|
234
|
+
system: "cosmosdb",
|
|
235
|
+
collection: containerId,
|
|
236
|
+
namespace: ns,
|
|
237
|
+
entity: name
|
|
238
|
+
}))));
|
|
228
239
|
};
|
|
229
240
|
const s = {
|
|
230
241
|
seedNamespace: (ns) => seedNamespace(ns),
|
|
@@ -236,13 +247,14 @@ const makeCosmosStore = Effect.fnUntraced(function* ({ prefix }) {
|
|
|
236
247
|
yield* annotateFeed(response);
|
|
237
248
|
return response.resources.map((_) => ({ ...defaultValues, ...mapReverseId(_) }));
|
|
238
249
|
})
|
|
239
|
-
.pipe(
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
250
|
+
.pipe(withDbSpan({
|
|
251
|
+
operation: "queryRaw",
|
|
252
|
+
system: "cosmosdb",
|
|
253
|
+
collection: containerId,
|
|
254
|
+
namespace: ns,
|
|
255
|
+
entity: name,
|
|
256
|
+
query: q.query
|
|
257
|
+
})))),
|
|
246
258
|
batchRemove: (ids, partitionKey) => resolveNamespace.pipe(Effect.flatMap((ns) => Effect
|
|
247
259
|
.promise(() => execBatch(mutable(ids.map((id) => dropUndefinedT({
|
|
248
260
|
operationType: "Delete",
|
|
@@ -250,13 +262,13 @@ const makeCosmosStore = Effect.fnUntraced(function* ({ prefix }) {
|
|
|
250
262
|
// don't use this or we get an error that the request and some item partition key dont match - makese no sense
|
|
251
263
|
// partitionKey: config?.partitionValue({ [idKey]: id } as Encoded)
|
|
252
264
|
}))), partitionKey ?? nsBasePartitionKey(ns)))
|
|
253
|
-
.pipe(
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
}
|
|
265
|
+
.pipe(withDbSpan({
|
|
266
|
+
operation: "batchRemove",
|
|
267
|
+
system: "cosmosdb",
|
|
268
|
+
collection: containerId,
|
|
269
|
+
namespace: ns,
|
|
270
|
+
entity: name
|
|
271
|
+
})))),
|
|
260
272
|
all: Effect
|
|
261
273
|
.all({
|
|
262
274
|
q: Effect.sync(() => ({
|
|
@@ -271,13 +283,14 @@ const makeCosmosStore = Effect.fnUntraced(function* ({ prefix }) {
|
|
|
271
283
|
yield* annotateFeed(response);
|
|
272
284
|
return response.resources.map((_) => ({ ...defaultValues, ...mapReverseId(_) }));
|
|
273
285
|
})
|
|
274
|
-
.pipe(
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
286
|
+
.pipe(withDbSpan({
|
|
287
|
+
operation: "all",
|
|
288
|
+
system: "cosmosdb",
|
|
289
|
+
collection: containerId,
|
|
290
|
+
namespace: ns,
|
|
291
|
+
entity: name,
|
|
292
|
+
query: q.query
|
|
293
|
+
})))),
|
|
281
294
|
/**
|
|
282
295
|
* May return duplicate results for "join_find", when matching more than once.
|
|
283
296
|
*/
|
|
@@ -305,13 +318,14 @@ const makeCosmosStore = Effect.fnUntraced(function* ({ prefix }) {
|
|
|
305
318
|
yield* annotateFeed(response);
|
|
306
319
|
return response.resources.map(({ f }) => ({ ...defaultValues, ...mapReverseId(f) }));
|
|
307
320
|
})
|
|
308
|
-
.pipe(
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
321
|
+
.pipe(withDbSpan({
|
|
322
|
+
operation: "filter",
|
|
323
|
+
system: "cosmosdb",
|
|
324
|
+
collection: containerId,
|
|
325
|
+
namespace: ns,
|
|
326
|
+
entity: name,
|
|
327
|
+
query: q.query
|
|
328
|
+
}))));
|
|
315
329
|
},
|
|
316
330
|
find: (id) => resolveNamespace.pipe(Effect.flatMap((ns) => Effect
|
|
317
331
|
.gen(function* () {
|
|
@@ -321,16 +335,17 @@ const makeCosmosStore = Effect.fnUntraced(function* ({ prefix }) {
|
|
|
321
335
|
yield* annotateItem(response);
|
|
322
336
|
return Option.fromNullishOr(response.resource).pipe(Option.map((_) => ({ ...defaultValues, ...mapReverseId(_) })));
|
|
323
337
|
})
|
|
324
|
-
.pipe(
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
id
|
|
338
|
+
.pipe(withDbSpan({
|
|
339
|
+
operation: "find",
|
|
340
|
+
system: "cosmosdb",
|
|
341
|
+
collection: containerId,
|
|
342
|
+
namespace: ns,
|
|
343
|
+
entity: name,
|
|
344
|
+
extra: {
|
|
345
|
+
"azure.cosmosdb.operation.partition_key": nsPartitionValue(ns, { [idKey]: id }),
|
|
346
|
+
"app.entity.id": id
|
|
332
347
|
}
|
|
333
|
-
}
|
|
348
|
+
})))),
|
|
334
349
|
set: (e) => resolveNamespace.pipe(Effect.flatMap((ns) => Option
|
|
335
350
|
.match(Option
|
|
336
351
|
.fromNullishOr(e._etag), {
|
|
@@ -357,15 +372,14 @@ const makeCosmosStore = Effect.fnUntraced(function* ({ prefix }) {
|
|
|
357
372
|
...e,
|
|
358
373
|
_etag: x.etag
|
|
359
374
|
}));
|
|
360
|
-
}),
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
}, { captureStackTrace: false })))),
|
|
375
|
+
}), withDbSpan({
|
|
376
|
+
operation: "set",
|
|
377
|
+
system: "cosmosdb",
|
|
378
|
+
collection: containerId,
|
|
379
|
+
namespace: ns,
|
|
380
|
+
entity: name,
|
|
381
|
+
extra: { "app.entity.id": e[idKey] }
|
|
382
|
+
})))),
|
|
369
383
|
batchSet,
|
|
370
384
|
bulkSet
|
|
371
385
|
};
|
|
@@ -380,4 +394,4 @@ export function CosmosStoreLayer(cfg) {
|
|
|
380
394
|
.toLayer(makeCosmosStore(cfg))
|
|
381
395
|
.pipe(Layer.provide(CosmosClientLayer(Redacted.value(cfg.url), cfg.dbName)));
|
|
382
396
|
}
|
|
383
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29zbW9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL0Nvc21vcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBOEIsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3ZILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUcxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNyQyxPQUFPLEVBQWdHLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV2SSxNQUFNLFNBQVMsR0FDYixDQUEyRCxLQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9HLEdBQUcsQ0FBQztJQUNKLEVBQUU7Q0FDSCxDQUFDLENBQUE7QUFDSixNQUFNLGdCQUFnQixHQUNwQixDQUEyRCxLQUFZLEVBQUUsRUFBRSxDQUMzRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUErRCxFQUFFLEVBQUUsQ0FDNUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENB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
|
|
397
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29zbW9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL0Nvc21vcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBOEIsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3ZILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUcxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQy9ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3JDLE9BQU8sRUFBZ0csVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXZJLE1BQU0sU0FBUyxHQUNiLENBQTJELEtBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0csR0FBRyxDQUFDO0lBQ0osRUFBRTtDQUNILENBQUMsQ0FBQTtBQUNKLE1BQU0sZ0JBQWdCLEdBQ3BCLENBQTJELEtBQVksRUFBRSxFQUFFLENBQzNFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxD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
|
package/dist/Store/Disk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Disk.d.ts","sourceRoot":"","sources":["../../src/Store/Disk.ts"],"names":[],"mappings":"AAKA,OAAO,EAAW,MAAM,EAAmB,MAAM,YAAY,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"Disk.d.ts","sourceRoot":"","sources":["../../src/Store/Disk.ts"],"names":[],"mappings":"AAKA,OAAO,EAAW,MAAM,EAAmB,MAAM,YAAY,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAG3D,OAAO,EAAE,KAAK,oBAAoB,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,KAAK,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAqJtH;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM;WAM5B,KAAK,SAAS,MAAM,OAAO,EAAE,OAAO,SAAS,WAAW,EAAE,CAAC,EAAE,CAAC;iBA6DrG;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,0DAEhE"}
|
package/dist/Store/Disk.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import * as fu from "../fileUtil.js";
|
|
3
3
|
import fs from "fs";
|
|
4
4
|
import { Console, Effect, flow, Semaphore } from "effect-app";
|
|
5
|
+
import { withDbSpan } from "../otel.js";
|
|
5
6
|
import { makeMemoryStoreInt, storeId } from "./Memory.js";
|
|
6
7
|
import { StoreMaker } from "./service.js";
|
|
7
8
|
function makeDiskStoreInt(prefix, idKey, namespace, dir, name, seed, defaultValues) {
|
|
@@ -13,26 +14,59 @@ function makeDiskStoreInt(prefix, idKey, namespace, dir, name, seed, defaultValu
|
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
const file = dir + "/" + prefix + name + ".json";
|
|
17
|
+
const fileExtra = { "disk.file.path": file };
|
|
16
18
|
const fsStore = {
|
|
17
19
|
get: fu
|
|
18
20
|
.readTextFile(file)
|
|
19
|
-
.pipe(
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
.pipe(withDbSpan({
|
|
22
|
+
operation: "read.readFile",
|
|
23
|
+
system: "disk",
|
|
24
|
+
collection: name,
|
|
25
|
+
namespace,
|
|
26
|
+
entity: name,
|
|
27
|
+
extra: fileExtra
|
|
28
|
+
}), Effect.flatMap((x) => Effect.sync(() => JSON.parse(x)).pipe(withDbSpan({
|
|
29
|
+
operation: "read.parse",
|
|
30
|
+
system: "disk",
|
|
31
|
+
collection: name,
|
|
32
|
+
namespace,
|
|
33
|
+
entity: name,
|
|
34
|
+
extra: fileExtra
|
|
35
|
+
}))), Effect.orDie, withDbSpan({
|
|
36
|
+
operation: "read",
|
|
37
|
+
system: "disk",
|
|
38
|
+
collection: name,
|
|
39
|
+
namespace,
|
|
40
|
+
entity: name,
|
|
41
|
+
extra: fileExtra
|
|
42
|
+
})),
|
|
22
43
|
setRaw: (v) => Effect
|
|
23
44
|
.sync(() => JSON.stringify([...v], undefined, 2))
|
|
24
|
-
.pipe(
|
|
25
|
-
|
|
26
|
-
|
|
45
|
+
.pipe(withDbSpan({
|
|
46
|
+
operation: "stringify",
|
|
47
|
+
system: "disk",
|
|
48
|
+
collection: name,
|
|
49
|
+
namespace,
|
|
50
|
+
entity: name,
|
|
51
|
+
extra: fileExtra
|
|
52
|
+
}), Effect
|
|
27
53
|
.flatMap((json) => fu
|
|
28
54
|
.writeTextFile(file, json)
|
|
29
|
-
.pipe(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
55
|
+
.pipe(withDbSpan({
|
|
56
|
+
operation: "write.writeFile",
|
|
57
|
+
system: "disk",
|
|
58
|
+
collection: name,
|
|
59
|
+
namespace,
|
|
60
|
+
entity: name,
|
|
61
|
+
extra: { ...fileExtra, "disk.file.size": json.length }
|
|
62
|
+
}))), withDbSpan({
|
|
63
|
+
operation: "write",
|
|
64
|
+
system: "disk",
|
|
65
|
+
collection: name,
|
|
66
|
+
namespace,
|
|
67
|
+
entity: name,
|
|
68
|
+
extra: fileExtra
|
|
69
|
+
}))
|
|
36
70
|
};
|
|
37
71
|
// lock file for cross-process coordination during initialization
|
|
38
72
|
// wrap initialization in file lock to prevent race conditions in multi-worker setups
|
|
@@ -115,4 +149,4 @@ export function makeDiskStore({ prefix }, dir) {
|
|
|
115
149
|
export function DiskStoreLayer(config, dir) {
|
|
116
150
|
return StoreMaker.toLayer(makeDiskStore(config, dir));
|
|
117
151
|
}
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9TdG9yZS9EaXNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRXBDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQTtBQUVuQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRTdELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN6RCxPQUFPLEVBQStFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV0SCxTQUFTLGdCQUFnQixDQUN2QixNQUFjLEVBQ2QsS0FBWSxFQUNaLFNBQWlCLEVBQ2pCLEdBQVcsRUFDWCxJQUFZLEVBQ1osSUFBNkMsRUFDN0MsYUFBZ0M7SUFHaEMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN6QixJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxTQUFTLENBQUE7WUFDM0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNuQixDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUE7UUFDaEQsTUFBTSxTQUFTLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUM1QyxNQUFNLE9BQU8sR0FBRztZQUNkLEdBQUcsRUFBRSxFQUFFO2lCQUNK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
|