@dxos/random-access-storage 0.1.57-main.e87098f → 0.1.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs +194 -222
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +7 -3
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/types/src/browser/web-fs.d.ts +30 -16
- package/dist/types/src/browser/web-fs.d.ts.map +1 -1
- package/dist/types/src/common/directory.d.ts +3 -1
- package/dist/types/src/common/directory.d.ts.map +1 -1
- package/package.json +9 -8
- package/src/browser/web-fs.ts +172 -93
- package/src/common/directory.ts +5 -0
- package/dist/types/src/monitor.d.ts +0 -41
- package/dist/types/src/monitor.d.ts.map +0 -1
- package/src/monitor.ts +0 -140
package/src/monitor.ts
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2023 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { unrefTimeout } from '@dxos/async';
|
|
6
|
-
|
|
7
|
-
export type StorageOperation = {
|
|
8
|
-
resource: string;
|
|
9
|
-
type: 'read' | 'write' | 'stat' | 'delete' | 'truncate';
|
|
10
|
-
size?: number;
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export type OpHandle = {
|
|
14
|
-
end: () => void;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export type StatsBucket = {
|
|
18
|
-
resource: string;
|
|
19
|
-
beginTime: number;
|
|
20
|
-
endTime: number;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Fraction of time spent in storage operations.
|
|
24
|
-
*/
|
|
25
|
-
usage: number;
|
|
26
|
-
|
|
27
|
-
readOps: number;
|
|
28
|
-
readBytes: number;
|
|
29
|
-
readTime: number;
|
|
30
|
-
|
|
31
|
-
writeOps: number;
|
|
32
|
-
writeBytes: number;
|
|
33
|
-
writeTime: number;
|
|
34
|
-
|
|
35
|
-
otherOps: number;
|
|
36
|
-
otherTime: number;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
const BUCKET_COLLECTION_INTERVAL = 1_000;
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Storage performance metrics.
|
|
43
|
-
*/
|
|
44
|
-
export class StorageMonitor {
|
|
45
|
-
private _enabled = false;
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* By resource.
|
|
49
|
-
*/
|
|
50
|
-
private readonly _buckets = new Map<string, StatsBucket>();
|
|
51
|
-
|
|
52
|
-
enable() {
|
|
53
|
-
this._enabled = true;
|
|
54
|
-
|
|
55
|
-
const timer = setInterval(() => {
|
|
56
|
-
this._finalizeBuckets();
|
|
57
|
-
}, BUCKET_COLLECTION_INTERVAL);
|
|
58
|
-
unrefTimeout(timer);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
beginOp(op: StorageOperation): OpHandle {
|
|
62
|
-
if (!this._enabled) {
|
|
63
|
-
return {
|
|
64
|
-
end: () => {},
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const beginTime = performance.now();
|
|
69
|
-
return {
|
|
70
|
-
end: () => {
|
|
71
|
-
const endTime = performance.now();
|
|
72
|
-
const duration = endTime - beginTime;
|
|
73
|
-
|
|
74
|
-
const bucket = this._getOrInitBucket(op.resource);
|
|
75
|
-
switch (op.type) {
|
|
76
|
-
case 'read':
|
|
77
|
-
bucket.readOps++;
|
|
78
|
-
bucket.readBytes += op.size ?? 0;
|
|
79
|
-
bucket.readTime += duration;
|
|
80
|
-
break;
|
|
81
|
-
case 'write':
|
|
82
|
-
bucket.writeOps++;
|
|
83
|
-
bucket.writeBytes += op.size ?? 0;
|
|
84
|
-
bucket.writeTime += duration;
|
|
85
|
-
break;
|
|
86
|
-
default:
|
|
87
|
-
bucket.otherOps++;
|
|
88
|
-
bucket.otherTime += duration;
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
private _getOrInitBucket(resource: string): StatsBucket {
|
|
95
|
-
const bucket = this._buckets.get(resource);
|
|
96
|
-
if (bucket) {
|
|
97
|
-
return bucket;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const newBucket = {
|
|
101
|
-
resource,
|
|
102
|
-
beginTime: performance.now(),
|
|
103
|
-
endTime: 0,
|
|
104
|
-
usage: 0,
|
|
105
|
-
readOps: 0,
|
|
106
|
-
readBytes: 0,
|
|
107
|
-
readTime: 0,
|
|
108
|
-
writeOps: 0,
|
|
109
|
-
writeBytes: 0,
|
|
110
|
-
writeTime: 0,
|
|
111
|
-
otherOps: 0,
|
|
112
|
-
otherTime: 0,
|
|
113
|
-
};
|
|
114
|
-
this._buckets.set(resource, newBucket);
|
|
115
|
-
return newBucket;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
private _finalizeBuckets() {
|
|
119
|
-
const now = performance.now();
|
|
120
|
-
const toEmit = [];
|
|
121
|
-
for (const bucket of this._buckets.values()) {
|
|
122
|
-
bucket.endTime = now;
|
|
123
|
-
bucket.usage = (bucket.readTime + bucket.writeTime + bucket.otherTime) / (bucket.endTime - bucket.beginTime);
|
|
124
|
-
toEmit.push(bucket);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// Clear the buckets.
|
|
128
|
-
this._buckets.clear();
|
|
129
|
-
for (const bucket of toEmit) {
|
|
130
|
-
this._getOrInitBucket(bucket.resource);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
((globalThis as any).__STORAGE_METRICS ??= []).push(...toEmit);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export const STORAGE_MONITOR = new StorageMonitor();
|
|
138
|
-
|
|
139
|
-
// TODO(dmaretskyi): Disabled due to performance concerns.
|
|
140
|
-
// STORAGE_MONITOR.enable();
|