1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
// Validate FTDC can gather collStats for collections
// Scenarios that are tested
// -------------------------
// Bad namespace on startup
// Valid collections
// Bad namespace at runtime
// Missing collection
load('jstests/libs/ftdc.js');
(function() {
'use strict';
// Validate we fail at startup on bad input
let startFailed = MongoRunner.runMongod(
{waitForConnect: false, setParameter: "diagnosticDataCollectionStatsNamespaces=local"});
waitFailedToStart(startFailed.pid, 2);
let m = MongoRunner.runMongod(
{setParameter: "diagnosticDataCollectionStatsNamespaces=local.startup_log"});
let adminDb = m.getDB('admin');
assert.eq(getParameter(adminDb, "diagnosticDataCollectionStatsNamespaces"), ["local.startup_log"]);
// Validate that collection stats are collected
let doc;
assert.soon(() => {
doc = verifyGetDiagnosticData(adminDb);
return doc.collectionStats.hasOwnProperty("local.startup_log") &&
doc.collectionStats["local.startup_log"].ns == "local.startup_log";
});
// Validate that incorrect changes have no effect
assert.commandFailed(setParameter(adminDb, {"diagnosticDataCollectionStatsNamespaces": ["local"]}));
assert.eq(getParameter(adminDb, "diagnosticDataCollectionStatsNamespaces"), ["local.startup_log"]);
// Validate that collection stats are collected for runtime collections and that we do not crash
// for a non-existent collection
assert.commandWorked(setParameter(
adminDb,
{"diagnosticDataCollectionStatsNamespaces": ["admin.system.version", "admin.does_not_exist"]}));
assert.soon(() => {
let result = assert.commandWorked(adminDb.runCommand("getDiagnosticData"));
jsTestLog("Collected: " + tojson(result));
let collectionStats = result.data.collectionStats;
return collectionStats.hasOwnProperty("admin.system.version") &&
collectionStats["admin.system.version"].ns == "admin.system.version";
});
// Validate that when it is disabled, we stop collecting
assert.commandWorked(setParameter(adminDb, {"diagnosticDataCollectionStatsNamespaces": []}));
assert.eq(getParameter(adminDb, "diagnosticDataCollectionStatsNamespaces"), []);
assert.soon(() => {
let result = assert.commandWorked(adminDb.runCommand("getDiagnosticData"));
jsTestLog("Collected: " + tojson(result));
return !result.data.hasOwnProperty("collectionStats");
});
MongoRunner.stopMongod(m);
})();
|