1
2 /**
3 * Copyright (C) 2018-present MongoDB, Inc.
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the Server Side Public License, version 1,
7 * as published by MongoDB, Inc.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * Server Side Public License for more details.
13 *
14 * You should have received a copy of the Server Side Public License
15 * along with this program. If not, see
16 * <http://www.mongodb.com/licensing/server-side-public-license>.
17 *
18 * As a special exception, the copyright holders give permission to link the
19 * code of portions of this program with the OpenSSL library under certain
20 * conditions as described in each individual source file and distribute
21 * linked combinations including the program with the OpenSSL library. You
22 * must comply with the Server Side Public License in all respects for
23 * all of the code used other than as permitted herein. If you modify file(s)
24 * with this exception, you may extend this exception to your version of the
25 * file(s), but you are not obligated to do so. If you do not wish to do so,
26 * delete this exception statement from your version. If you delete this
27 * exception statement from all source files in the program, then also delete
28 * it in the license file.
29 */
30
31 #include "mongo/platform/basic.h"
32
33 #include "mongo/db/ftdc/ftdc_mongod.h"
34
35 #include <boost/filesystem.hpp>
36
37 #include "mongo/db/ftdc/constants.h"
38 #include "mongo/db/ftdc/controller.h"
39 #include "mongo/db/ftdc/ftdc_server.h"
40 #include "mongo/db/repl/replication_coordinator.h"
41 #include "mongo/db/repl/replication_coordinator_global.h"
42 #include "mongo/db/storage/storage_options.h"
43
44 namespace mongo {
45
46 namespace {
registerMongoDCollectors(FTDCController * controller)47 void registerMongoDCollectors(FTDCController* controller) {
48 // These metrics are only collected if replication is enabled
49 if (repl::getGlobalReplicationCoordinator()->getReplicationMode() !=
50 repl::ReplicationCoordinator::modeNone) {
51 // CmdReplSetGetStatus
52 controller->addPeriodicCollector(stdx::make_unique<FTDCSimpleInternalCommandCollector>(
53 "replSetGetStatus", "replSetGetStatus", "", BSON("replSetGetStatus" << 1)));
54
55 // CollectionStats
56 controller->addPeriodicCollector(
57 stdx::make_unique<FTDCSimpleInternalCommandCollector>("collStats",
58 "local.oplog.rs.stats",
59 "local",
60 BSON("collStats"
61 << "oplog.rs")));
62 }
63 }
64
65 } // namespace
66
startMongoDFTDC()67 void startMongoDFTDC() {
68 boost::filesystem::path dir(storageGlobalParams.dbpath);
69 dir /= kFTDCDefaultDirectory.toString();
70
71 startFTDC(dir, FTDCStartMode::kStart, registerMongoDCollectors);
72 }
73
stopMongoDFTDC()74 void stopMongoDFTDC() {
75 stopFTDC();
76 }
77
78 } // namespace mongo
79