Merge pull request #3713 from Rabson/fix/diagnostics-totalsize-undefined
fix: (diagnostics) derive Mongo totalSize when dbStats omits it (Atlas shared tier)
This commit is contained in:
2 files changed
+40
-4
No files matched your search
@@ -87,9 +87,9 @@ export class DiagnosticService implements IDiagnosticService {
|
||||
const entry: CollectionDiagnostics = {
|
||||
name: collection.collectionName,
|
||||
documentCount,
|
||||
storageSize: stats.storageSize,
|
||||
totalIndexSize: stats.totalIndexSize,
|
||||
totalSize: stats.totalSize,
|
||||
storageSize: stats.storageSize ?? 0,
|
||||
totalIndexSize: stats.totalIndexSize ?? 0,
|
||||
totalSize: stats.totalSize ?? (stats.storageSize ?? 0) + (stats.totalIndexSize ?? 0),
|
||||
};
|
||||
if (stats.timeseries?.bucketCount !== undefined) {
|
||||
entry.bucketCount = stats.timeseries.bucketCount;
|
||||
@@ -103,7 +103,7 @@ export class DiagnosticService implements IDiagnosticService {
|
||||
host: mongo.connection.host,
|
||||
port: mongo.connection.port,
|
||||
dbName: mongo.connection.name,
|
||||
totalSize: dbStats.totalSize,
|
||||
totalSize: dbStats.totalSize ?? (dbStats.storageSize ?? 0) + (dbStats.indexSize ?? 0),
|
||||
collections,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -147,6 +147,42 @@ describe("DiagnosticService", () => {
|
||||
});
|
||||
});
|
||||
|
||||
it("derives mongoStats.totalSize from storageSize + indexSize when the server omits it (e.g. Atlas shared tier)", async () => {
|
||||
const db = makeDb({
|
||||
collections: [{ collectionName: "monitors" }],
|
||||
dbStats: { storageSize: 376832, indexSize: 1155072 },
|
||||
});
|
||||
const service = new DiagnosticService(db);
|
||||
const promise = service.getSystemStats();
|
||||
jest.advanceTimersByTime(1000);
|
||||
await jest.advanceTimersByTimeAsync(10);
|
||||
const result = await promise;
|
||||
|
||||
expect(result.mongoStats.totalSize).toBe(376832 + 1155072);
|
||||
expect(Number.isFinite(result.mongoStats.totalSize)).toBe(true);
|
||||
});
|
||||
|
||||
it("derives collection totalSize and defaults missing size fields to 0 when collStats omits them", async () => {
|
||||
const db = makeDb({
|
||||
collections: [{ collectionName: "checks" }],
|
||||
collStats: { storageSize: 200 },
|
||||
});
|
||||
const service = new DiagnosticService(db);
|
||||
const promise = service.getSystemStats();
|
||||
jest.advanceTimersByTime(1000);
|
||||
await jest.advanceTimersByTimeAsync(10);
|
||||
const result = await promise;
|
||||
|
||||
const coll = result.mongoStats.collections[0];
|
||||
expect(coll).toMatchObject({
|
||||
name: "checks",
|
||||
storageSize: 200,
|
||||
totalIndexSize: 0,
|
||||
totalSize: 200, // storageSize (200) + totalIndexSize (0)
|
||||
});
|
||||
expect(Number.isFinite(coll?.totalSize)).toBe(true);
|
||||
});
|
||||
|
||||
it("includes bucketCount on timeseries collections, omits it elsewhere", async () => {
|
||||
const db = makeDb({
|
||||
collections: [{ collectionName: "checks" }],
|
||||
|
||||
Reference in new issue
Block a user