@microsoft/agents-hosting-storage-cosmos 1.5.0-beta.6.ga236d9a19c → 1.5.2

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.
@@ -0,0 +1,42 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/package.json",
3
+ "name": "@microsoft/agents-hosting-storage-cosmos",
4
+ "version": "1.5.2",
5
+ "homepage": "https://github.com/microsoft/Agents-for-js",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/microsoft/Agents-for-js.git"
9
+ },
10
+ "author": {
11
+ "name": "Microsoft",
12
+ "email": "agentssdk@microsoft.com",
13
+ "url": "https://aka.ms/Agents"
14
+ },
15
+ "description": "Microsoft 365 Agents SDK State Cosmos Storage support.",
16
+ "main": "dist/index.js",
17
+ "types": "dist/src/index.d.ts",
18
+ "dependencies": {
19
+ "@azure/cosmos": "4.9.1",
20
+ "@microsoft/agents-hosting": "1.5.2",
21
+ "@microsoft/agents-activity": "1.5.2",
22
+ "@microsoft/agents-telemetry": "1.5.2"
23
+ },
24
+ "license": "MIT",
25
+ "files": [
26
+ "README.md",
27
+ "dist/src",
28
+ "src",
29
+ "package.json"
30
+ ],
31
+ "exports": {
32
+ ".": {
33
+ "types": "./dist/src/index.d.ts",
34
+ "import": "./dist/src/index.js",
35
+ "require": "./dist/src/index.js"
36
+ },
37
+ "./package.json": "./package.json"
38
+ },
39
+ "engines": {
40
+ "node": ">=20.0.0"
41
+ }
42
+ }
@@ -8,6 +8,8 @@ const cosmosDbKeyEscape_1 = require("./cosmosDbKeyEscape");
8
8
  const documentStoreItem_1 = require("./documentStoreItem");
9
9
  const agents_activity_1 = require("@microsoft/agents-activity");
10
10
  const errorHelper_1 = require("./errorHelper");
11
+ const agents_telemetry_1 = require("@microsoft/agents-telemetry");
12
+ const observability_1 = require("./observability");
11
13
  /**
12
14
  * A utility class to ensure that a specific asynchronous task is executed only once for a given key.
13
15
  * @typeParam T The type of the result returned by the asynchronous task.
@@ -80,90 +82,99 @@ class CosmosDbPartitionedStorage {
80
82
  * @returns A promise that resolves to the read items.
81
83
  */
82
84
  async read(keys) {
83
- if (!keys) {
84
- throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.MissingReadKeys);
85
- }
86
- else if (keys.length === 0) {
87
- return {};
88
- }
89
- await this.initialize();
90
- const storeItems = {};
91
- await Promise.all(keys.map(async (k) => {
92
- try {
93
- const escapedKey = (0, cosmosDbKeyEscape_1.escapeKey)(k, this.cosmosDbStorageOptions.keySuffix, this.cosmosDbStorageOptions.compatibilityMode);
94
- const readItemResponse = await this.container
95
- .item(escapedKey, this.getPartitionKey(escapedKey))
96
- .read();
97
- const documentStoreItem = readItemResponse.resource;
98
- if (documentStoreItem) {
99
- storeItems[documentStoreItem.realId] = documentStoreItem.document;
100
- storeItems[documentStoreItem.realId].eTag = documentStoreItem._etag;
101
- }
85
+ return (0, agents_telemetry_1.trace)(observability_1.CosmosStorageTraceDefinitions.read, async ({ record }) => {
86
+ if (!keys) {
87
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.MissingReadKeys);
102
88
  }
103
- catch (err) {
104
- if (err.code === 404) {
105
- // Not Found is not an error during read operations, just skip
106
- }
107
- else if (err.code === 400) {
108
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.ContainerReadBadRequest, err);
89
+ else if (keys.length === 0) {
90
+ return {};
91
+ }
92
+ record({ keyCount: keys === null || keys === void 0 ? void 0 : keys.length });
93
+ await this.initialize();
94
+ const storeItems = {};
95
+ await Promise.all(keys.map(async (k) => {
96
+ try {
97
+ const escapedKey = (0, cosmosDbKeyEscape_1.escapeKey)(k, this.cosmosDbStorageOptions.keySuffix, this.cosmosDbStorageOptions.compatibilityMode);
98
+ const readItemResponse = await this.container
99
+ .item(escapedKey, this.getPartitionKey(escapedKey))
100
+ .read();
101
+ const documentStoreItem = readItemResponse.resource;
102
+ if (documentStoreItem) {
103
+ storeItems[documentStoreItem.realId] = documentStoreItem.document;
104
+ storeItems[documentStoreItem.realId].eTag = documentStoreItem._etag;
105
+ }
109
106
  }
110
- else {
111
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.ContainerReadError, err);
107
+ catch (err) {
108
+ if (err.code === 404) {
109
+ // Not Found is not an error during read operations, just skip
110
+ }
111
+ else if (err.code === 400) {
112
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.ContainerReadBadRequest, err);
113
+ }
114
+ else {
115
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.ContainerReadError, err);
116
+ }
112
117
  }
113
- }
114
- }));
115
- return storeItems;
118
+ }));
119
+ return storeItems;
120
+ });
116
121
  }
117
122
  /**
118
123
  * Writes items to storage.
119
124
  * @param changes The items to write.
120
125
  */
121
126
  async write(changes) {
122
- if (!changes) {
123
- throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.MissingWriteChanges);
124
- }
125
- else if (changes.length === 0) {
126
- return;
127
- }
128
- await this.initialize();
129
- await Promise.all(Object.entries(changes).map(async ([key, { eTag, ...change }]) => {
130
- const document = new documentStoreItem_1.DocumentStoreItem({
131
- id: (0, cosmosDbKeyEscape_1.escapeKey)(key, this.cosmosDbStorageOptions.keySuffix, this.cosmosDbStorageOptions.compatibilityMode),
132
- realId: key,
133
- document: change,
134
- });
135
- const accessCondition = eTag !== '*' && eTag != null && eTag.length > 0
136
- ? { accessCondition: { type: 'IfMatch', condition: eTag } }
137
- : undefined;
138
- try {
139
- await this.container.items.upsert(document, accessCondition);
127
+ return (0, agents_telemetry_1.trace)(observability_1.CosmosStorageTraceDefinitions.write, async ({ record }) => {
128
+ if (!changes) {
129
+ throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.MissingWriteChanges);
140
130
  }
141
- catch (err) {
142
- this.checkForNestingError(change, err);
143
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.DocumentUpsertError, err);
131
+ else if (changes.length === 0) {
132
+ return;
144
133
  }
145
- }));
134
+ record({ keyCount: Object.keys(changes).length });
135
+ await this.initialize();
136
+ await Promise.all(Object.entries(changes).map(async ([key, { eTag, ...change }]) => {
137
+ const document = new documentStoreItem_1.DocumentStoreItem({
138
+ id: (0, cosmosDbKeyEscape_1.escapeKey)(key, this.cosmosDbStorageOptions.keySuffix, this.cosmosDbStorageOptions.compatibilityMode),
139
+ realId: key,
140
+ document: change,
141
+ });
142
+ const accessCondition = eTag !== '*' && eTag != null && eTag.length > 0
143
+ ? { accessCondition: { type: 'IfMatch', condition: eTag } }
144
+ : undefined;
145
+ try {
146
+ await this.container.items.upsert(document, accessCondition);
147
+ }
148
+ catch (err) {
149
+ this.checkForNestingError(change, err);
150
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.DocumentUpsertError, err);
151
+ }
152
+ }));
153
+ });
146
154
  }
147
155
  /**
148
156
  * Deletes items from storage.
149
157
  * @param keys The keys of the items to delete.
150
158
  */
151
159
  async delete(keys) {
152
- await this.initialize();
153
- await Promise.all(keys.map(async (k) => {
154
- const escapedKey = (0, cosmosDbKeyEscape_1.escapeKey)(k, this.cosmosDbStorageOptions.keySuffix, this.cosmosDbStorageOptions.compatibilityMode);
155
- try {
156
- await this.container.item(escapedKey, this.getPartitionKey(escapedKey)).delete();
157
- }
158
- catch (err) {
159
- if (err.code === 404) {
160
- // Not Found is not an error during delete operations, just skip
160
+ return (0, agents_telemetry_1.trace)(observability_1.CosmosStorageTraceDefinitions.delete, async ({ record }) => {
161
+ record({ keyCount: keys === null || keys === void 0 ? void 0 : keys.length });
162
+ await this.initialize();
163
+ await Promise.all(keys.map(async (k) => {
164
+ const escapedKey = (0, cosmosDbKeyEscape_1.escapeKey)(k, this.cosmosDbStorageOptions.keySuffix, this.cosmosDbStorageOptions.compatibilityMode);
165
+ try {
166
+ await this.container.item(escapedKey, this.getPartitionKey(escapedKey)).delete();
161
167
  }
162
- else {
163
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.DocumentDeleteError, err);
168
+ catch (err) {
169
+ if (err.code === 404) {
170
+ // Not Found is not an error during delete operations, just skip
171
+ }
172
+ else {
173
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.DocumentDeleteError, err);
174
+ }
164
175
  }
165
- }
166
- }));
176
+ }));
177
+ });
167
178
  }
168
179
  /**
169
180
  * Initializes the Cosmos DB container.
@@ -1 +1 @@
1
- {"version":3,"file":"cosmosDbPartitionedStorage.js","sourceRoot":"","sources":["../../src/cosmosDbPartitionedStorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cosmosDbPartitionedStorage.js","sourceRoot":"","sources":["../../src/cosmosDbPartitionedStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './metrics';
2
+ export * from './traces';
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation. All rights reserved.
3
+ // Licensed under the MIT License.
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ __exportStar(require("./metrics"), exports);
20
+ __exportStar(require("./traces"), exports);
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/observability/index.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kCAAkC;;;;;;;;;;;;;;;;AAElC,4CAAyB;AACzB,2CAAwB"}
@@ -0,0 +1,3 @@
1
+ export declare const CosmosStorageMetrics: {
2
+ storageOperationDuration: import("@opentelemetry/api").Histogram<import("@opentelemetry/api").Attributes>;
3
+ };
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation. All rights reserved.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.CosmosStorageMetrics = void 0;
6
+ const agents_telemetry_1 = require("@microsoft/agents-telemetry");
7
+ exports.CosmosStorageMetrics = {
8
+ storageOperationDuration: agents_telemetry_1.metric.histogram(agents_telemetry_1.MetricNames.STORAGE_OPERATION_DURATION, {
9
+ unit: 'ms',
10
+ description: 'Duration of storage operations in milliseconds'
11
+ })
12
+ };
13
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/observability/metrics.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kCAAkC;;;AAElC,kEAAiE;AAEpD,QAAA,oBAAoB,GAAG;IAClC,wBAAwB,EAAE,yBAAM,CAAC,SAAS,CAAC,8BAAW,CAAC,0BAA0B,EAAE;QACjF,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,gDAAgD;KAC9D,CAAC;CACH,CAAA"}
@@ -0,0 +1,11 @@
1
+ export declare const CosmosStorageTraceDefinitions: {
2
+ read: import("@microsoft/agents-telemetry").TraceDefinition<{
3
+ keyCount: number;
4
+ }, object>;
5
+ write: import("@microsoft/agents-telemetry").TraceDefinition<{
6
+ keyCount: number;
7
+ }, object>;
8
+ delete: import("@microsoft/agents-telemetry").TraceDefinition<{
9
+ keyCount: number;
10
+ }, object>;
11
+ };
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation. All rights reserved.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.CosmosStorageTraceDefinitions = void 0;
6
+ const agents_telemetry_1 = require("@microsoft/agents-telemetry");
7
+ const metrics_1 = require("./metrics");
8
+ exports.CosmosStorageTraceDefinitions = {
9
+ read: agents_telemetry_1.trace.define({
10
+ name: agents_telemetry_1.SpanNames.STORAGE_READ,
11
+ record: {
12
+ keyCount: 0,
13
+ },
14
+ end({ span, record, duration }) {
15
+ var _a;
16
+ const attributes = {
17
+ 'storage.operation': 'read',
18
+ 'storage.key.count': (_a = record.keyCount) !== null && _a !== void 0 ? _a : 0,
19
+ };
20
+ span.setAttributes(attributes);
21
+ metrics_1.CosmosStorageMetrics.storageOperationDuration.record(duration, attributes);
22
+ }
23
+ }),
24
+ write: agents_telemetry_1.trace.define({
25
+ name: agents_telemetry_1.SpanNames.STORAGE_WRITE,
26
+ record: {
27
+ keyCount: 0,
28
+ },
29
+ end({ span, record, duration }) {
30
+ var _a;
31
+ const attributes = {
32
+ 'storage.operation': 'write',
33
+ 'storage.key.count': (_a = record.keyCount) !== null && _a !== void 0 ? _a : 0,
34
+ };
35
+ span.setAttributes(attributes);
36
+ metrics_1.CosmosStorageMetrics.storageOperationDuration.record(duration, attributes);
37
+ }
38
+ }),
39
+ delete: agents_telemetry_1.trace.define({
40
+ name: agents_telemetry_1.SpanNames.STORAGE_DELETE,
41
+ record: {
42
+ keyCount: 0,
43
+ },
44
+ end({ span, record, duration }) {
45
+ var _a;
46
+ const attributes = {
47
+ 'storage.operation': 'delete',
48
+ 'storage.key.count': (_a = record.keyCount) !== null && _a !== void 0 ? _a : 0,
49
+ };
50
+ span.setAttributes(attributes);
51
+ metrics_1.CosmosStorageMetrics.storageOperationDuration.record(duration, attributes);
52
+ }
53
+ }),
54
+ };
55
+ //# sourceMappingURL=traces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traces.js","sourceRoot":"","sources":["../../../src/observability/traces.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kCAAkC;;;AAElC,kEAA8D;AAC9D,uCAAgD;AAEnC,QAAA,6BAA6B,GAAG;IAC3C,IAAI,EAAE,wBAAK,CAAC,MAAM,CAAC;QACjB,IAAI,EAAE,4BAAS,CAAC,YAAY;QAC5B,MAAM,EAAE;YACN,QAAQ,EAAE,CAAC;SACZ;QACD,GAAG,CAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;;YAC7B,MAAM,UAAU,GAAG;gBACjB,mBAAmB,EAAE,MAAM;gBAC3B,mBAAmB,EAAE,MAAA,MAAM,CAAC,QAAQ,mCAAI,CAAC;aAC1C,CAAA;YAED,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;YAC9B,8BAAoB,CAAC,wBAAwB,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAC5E,CAAC;KACF,CAAC;IACF,KAAK,EAAE,wBAAK,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE,4BAAS,CAAC,aAAa;QAC7B,MAAM,EAAE;YACN,QAAQ,EAAE,CAAC;SACZ;QACD,GAAG,CAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;;YAC7B,MAAM,UAAU,GAAG;gBACjB,mBAAmB,EAAE,OAAO;gBAC5B,mBAAmB,EAAE,MAAA,MAAM,CAAC,QAAQ,mCAAI,CAAC;aAC1C,CAAA;YAED,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;YAC9B,8BAAoB,CAAC,wBAAwB,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAC5E,CAAC;KACF,CAAC;IACF,MAAM,EAAE,wBAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,4BAAS,CAAC,cAAc;QAC9B,MAAM,EAAE;YACN,QAAQ,EAAE,CAAC;SACZ;QACD,GAAG,CAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE;;YAC7B,MAAM,UAAU,GAAG;gBACjB,mBAAmB,EAAE,QAAQ;gBAC7B,mBAAmB,EAAE,MAAA,MAAM,CAAC,QAAQ,mCAAI,CAAC;aAC1C,CAAA;YAED,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;YAC9B,8BAAoB,CAAC,wBAAwB,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAC5E,CAAC;KACF,CAAC;CACH,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "@microsoft/agents-hosting-storage-cosmos",
4
- "version": "1.5.0-beta.6.ga236d9a19c",
4
+ "version": "1.5.2",
5
5
  "homepage": "https://github.com/microsoft/Agents-for-js",
6
6
  "repository": {
7
7
  "type": "git",
@@ -16,9 +16,10 @@
16
16
  "main": "dist/index.js",
17
17
  "types": "dist/src/index.d.ts",
18
18
  "dependencies": {
19
- "@azure/cosmos": "^4.9.1",
20
- "@microsoft/agents-hosting": "1.5.0-beta.6.ga236d9a19c",
21
- "@microsoft/agents-activity": "1.5.0-beta.6.ga236d9a19c"
19
+ "@azure/cosmos": "4.9.1",
20
+ "@microsoft/agents-hosting": "1.5.2",
21
+ "@microsoft/agents-activity": "1.5.2",
22
+ "@microsoft/agents-telemetry": "1.5.2"
22
23
  },
23
24
  "license": "MIT",
24
25
  "files": [
@@ -8,6 +8,8 @@ import { CosmosDbPartitionedStorageOptions } from './cosmosDbPartitionedStorageO
8
8
  import { Storage, StoreItems } from '@microsoft/agents-hosting'
9
9
  import { ExceptionHelper } from '@microsoft/agents-activity'
10
10
  import { Errors } from './errorHelper'
11
+ import { trace } from '@microsoft/agents-telemetry'
12
+ import { CosmosStorageTraceDefinitions } from './observability'
11
13
 
12
14
  /**
13
15
  * A utility class to ensure that a specific asynchronous task is executed only once for a given key.
@@ -113,57 +115,60 @@ export class CosmosDbPartitionedStorage implements Storage {
113
115
  * @returns A promise that resolves to the read items.
114
116
  */
115
117
  async read (keys: string[]): Promise<StoreItems> {
116
- if (!keys) {
117
- throw ExceptionHelper.generateException(
118
- ReferenceError,
119
- Errors.MissingReadKeys
120
- )
121
- } else if (keys.length === 0) {
122
- return {}
123
- }
118
+ return trace(CosmosStorageTraceDefinitions.read, async ({ record }) => {
119
+ if (!keys) {
120
+ throw ExceptionHelper.generateException(
121
+ ReferenceError,
122
+ Errors.MissingReadKeys
123
+ )
124
+ } else if (keys.length === 0) {
125
+ return {}
126
+ }
124
127
 
125
- await this.initialize()
128
+ record({ keyCount: keys?.length })
129
+ await this.initialize()
126
130
 
127
- const storeItems: StoreItems = {}
131
+ const storeItems: StoreItems = {}
128
132
 
129
- await Promise.all(
130
- keys.map(async (k: string): Promise<void> => {
131
- try {
132
- const escapedKey = escapeKey(
133
- k,
134
- this.cosmosDbStorageOptions.keySuffix,
135
- this.cosmosDbStorageOptions.compatibilityMode
136
- )
137
-
138
- const readItemResponse = await this.container
139
- .item(escapedKey, this.getPartitionKey(escapedKey))
140
- .read<DocumentStoreItem>()
141
- const documentStoreItem = readItemResponse.resource
142
- if (documentStoreItem) {
143
- storeItems[documentStoreItem.realId] = documentStoreItem.document
144
- storeItems[documentStoreItem.realId].eTag = documentStoreItem._etag
145
- }
146
- } catch (err: any) {
147
- if (err.code === 404) {
148
- // Not Found is not an error during read operations, just skip
149
- } else if (err.code === 400) {
150
- throw ExceptionHelper.generateException(
151
- Error,
152
- Errors.ContainerReadBadRequest,
153
- err
154
- )
155
- } else {
156
- throw ExceptionHelper.generateException(
157
- Error,
158
- Errors.ContainerReadError,
159
- err
133
+ await Promise.all(
134
+ keys.map(async (k: string): Promise<void> => {
135
+ try {
136
+ const escapedKey = escapeKey(
137
+ k,
138
+ this.cosmosDbStorageOptions.keySuffix,
139
+ this.cosmosDbStorageOptions.compatibilityMode
160
140
  )
141
+
142
+ const readItemResponse = await this.container
143
+ .item(escapedKey, this.getPartitionKey(escapedKey))
144
+ .read<DocumentStoreItem>()
145
+ const documentStoreItem = readItemResponse.resource
146
+ if (documentStoreItem) {
147
+ storeItems[documentStoreItem.realId] = documentStoreItem.document
148
+ storeItems[documentStoreItem.realId].eTag = documentStoreItem._etag
149
+ }
150
+ } catch (err: any) {
151
+ if (err.code === 404) {
152
+ // Not Found is not an error during read operations, just skip
153
+ } else if (err.code === 400) {
154
+ throw ExceptionHelper.generateException(
155
+ Error,
156
+ Errors.ContainerReadBadRequest,
157
+ err
158
+ )
159
+ } else {
160
+ throw ExceptionHelper.generateException(
161
+ Error,
162
+ Errors.ContainerReadError,
163
+ err
164
+ )
165
+ }
161
166
  }
162
- }
163
- })
164
- )
167
+ })
168
+ )
165
169
 
166
- return storeItems
170
+ return storeItems
171
+ })
167
172
  }
168
173
 
169
174
  /**
@@ -171,46 +176,50 @@ export class CosmosDbPartitionedStorage implements Storage {
171
176
  * @param changes The items to write.
172
177
  */
173
178
  async write (changes: StoreItems): Promise<void> {
174
- if (!changes) {
175
- throw ExceptionHelper.generateException(
176
- ReferenceError,
177
- Errors.MissingWriteChanges
178
- )
179
- } else if (changes.length === 0) {
180
- return
181
- }
182
-
183
- await this.initialize()
179
+ return trace(CosmosStorageTraceDefinitions.write, async ({ record }) => {
180
+ if (!changes) {
181
+ throw ExceptionHelper.generateException(
182
+ ReferenceError,
183
+ Errors.MissingWriteChanges
184
+ )
185
+ } else if (changes.length === 0) {
186
+ return
187
+ }
184
188
 
185
- await Promise.all(
186
- Object.entries(changes).map(async ([key, { eTag, ...change }]): Promise<void> => {
187
- const document = new DocumentStoreItem({
188
- id: escapeKey(
189
- key,
190
- this.cosmosDbStorageOptions.keySuffix,
191
- this.cosmosDbStorageOptions.compatibilityMode
192
- ),
193
- realId: key,
194
- document: change,
189
+ record({ keyCount: Object.keys(changes).length })
190
+
191
+ await this.initialize()
192
+
193
+ await Promise.all(
194
+ Object.entries(changes).map(async ([key, { eTag, ...change }]): Promise<void> => {
195
+ const document = new DocumentStoreItem({
196
+ id: escapeKey(
197
+ key,
198
+ this.cosmosDbStorageOptions.keySuffix,
199
+ this.cosmosDbStorageOptions.compatibilityMode
200
+ ),
201
+ realId: key,
202
+ document: change,
203
+ })
204
+
205
+ const accessCondition =
206
+ eTag !== '*' && eTag != null && eTag.length > 0
207
+ ? { accessCondition: { type: 'IfMatch', condition: eTag } }
208
+ : undefined
209
+
210
+ try {
211
+ await this.container.items.upsert(document, accessCondition)
212
+ } catch (err: any) {
213
+ this.checkForNestingError(change, err)
214
+ throw ExceptionHelper.generateException(
215
+ Error,
216
+ Errors.DocumentUpsertError,
217
+ err
218
+ )
219
+ }
195
220
  })
196
-
197
- const accessCondition =
198
- eTag !== '*' && eTag != null && eTag.length > 0
199
- ? { accessCondition: { type: 'IfMatch', condition: eTag } }
200
- : undefined
201
-
202
- try {
203
- await this.container.items.upsert(document, accessCondition)
204
- } catch (err: any) {
205
- this.checkForNestingError(change, err)
206
- throw ExceptionHelper.generateException(
207
- Error,
208
- Errors.DocumentUpsertError,
209
- err
210
- )
211
- }
212
- })
213
- )
221
+ )
222
+ })
214
223
  }
215
224
 
216
225
  /**
@@ -218,30 +227,33 @@ export class CosmosDbPartitionedStorage implements Storage {
218
227
  * @param keys The keys of the items to delete.
219
228
  */
220
229
  async delete (keys: string[]): Promise<void> {
221
- await this.initialize()
222
-
223
- await Promise.all(
224
- keys.map(async (k: string): Promise<void> => {
225
- const escapedKey = escapeKey(
226
- k,
227
- this.cosmosDbStorageOptions.keySuffix,
228
- this.cosmosDbStorageOptions.compatibilityMode
229
- )
230
- try {
231
- await this.container.item(escapedKey, this.getPartitionKey(escapedKey)).delete()
232
- } catch (err: any) {
233
- if (err.code === 404) {
234
- // Not Found is not an error during delete operations, just skip
235
- } else {
236
- throw ExceptionHelper.generateException(
237
- Error,
238
- Errors.DocumentDeleteError,
239
- err
240
- )
230
+ return trace(CosmosStorageTraceDefinitions.delete, async ({ record }) => {
231
+ record({ keyCount: keys?.length })
232
+ await this.initialize()
233
+
234
+ await Promise.all(
235
+ keys.map(async (k: string): Promise<void> => {
236
+ const escapedKey = escapeKey(
237
+ k,
238
+ this.cosmosDbStorageOptions.keySuffix,
239
+ this.cosmosDbStorageOptions.compatibilityMode
240
+ )
241
+ try {
242
+ await this.container.item(escapedKey, this.getPartitionKey(escapedKey)).delete()
243
+ } catch (err: any) {
244
+ if (err.code === 404) {
245
+ // Not Found is not an error during delete operations, just skip
246
+ } else {
247
+ throw ExceptionHelper.generateException(
248
+ Error,
249
+ Errors.DocumentDeleteError,
250
+ err
251
+ )
252
+ }
241
253
  }
242
- }
243
- })
244
- )
254
+ })
255
+ )
256
+ })
245
257
  }
246
258
 
247
259
  /**
@@ -0,0 +1,5 @@
1
+ // Copyright (c) Microsoft Corporation. All rights reserved.
2
+ // Licensed under the MIT License.
3
+
4
+ export * from './metrics'
5
+ export * from './traces'
@@ -0,0 +1,11 @@
1
+ // Copyright (c) Microsoft Corporation. All rights reserved.
2
+ // Licensed under the MIT License.
3
+
4
+ import { metric, MetricNames } from '@microsoft/agents-telemetry'
5
+
6
+ export const CosmosStorageMetrics = {
7
+ storageOperationDuration: metric.histogram(MetricNames.STORAGE_OPERATION_DURATION, {
8
+ unit: 'ms',
9
+ description: 'Duration of storage operations in milliseconds'
10
+ })
11
+ }
@@ -0,0 +1,53 @@
1
+ // Copyright (c) Microsoft Corporation. All rights reserved.
2
+ // Licensed under the MIT License.
3
+
4
+ import { SpanNames, trace } from '@microsoft/agents-telemetry'
5
+ import { CosmosStorageMetrics } from './metrics'
6
+
7
+ export const CosmosStorageTraceDefinitions = {
8
+ read: trace.define({
9
+ name: SpanNames.STORAGE_READ,
10
+ record: {
11
+ keyCount: 0,
12
+ },
13
+ end ({ span, record, duration }) {
14
+ const attributes = {
15
+ 'storage.operation': 'read',
16
+ 'storage.key.count': record.keyCount ?? 0,
17
+ }
18
+
19
+ span.setAttributes(attributes)
20
+ CosmosStorageMetrics.storageOperationDuration.record(duration, attributes)
21
+ }
22
+ }),
23
+ write: trace.define({
24
+ name: SpanNames.STORAGE_WRITE,
25
+ record: {
26
+ keyCount: 0,
27
+ },
28
+ end ({ span, record, duration }) {
29
+ const attributes = {
30
+ 'storage.operation': 'write',
31
+ 'storage.key.count': record.keyCount ?? 0,
32
+ }
33
+
34
+ span.setAttributes(attributes)
35
+ CosmosStorageMetrics.storageOperationDuration.record(duration, attributes)
36
+ }
37
+ }),
38
+ delete: trace.define({
39
+ name: SpanNames.STORAGE_DELETE,
40
+ record: {
41
+ keyCount: 0,
42
+ },
43
+ end ({ span, record, duration }) {
44
+ const attributes = {
45
+ 'storage.operation': 'delete',
46
+ 'storage.key.count': record.keyCount ?? 0,
47
+ }
48
+
49
+ span.setAttributes(attributes)
50
+ CosmosStorageMetrics.storageOperationDuration.record(duration, attributes)
51
+ }
52
+ }),
53
+ }