summaryrefslogtreecommitdiff
path: root/jstests/noPassthrough/ftdc_collection_stats.js
blob: 922ad7b54686b6d9ca1e697d9d8cbf4cb2736937 (plain)
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
// 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 = verifyGetDiagnosticData(adminDb);
assert.eq(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);
})();