DocumentSource::GetNextResult DocumentSourceCollStats::getNext() { pExpCtx->checkForInterrupt(); if (_finished) { return GetNextResult::makeEOF(); } _finished = true; BSONObjBuilder builder; builder.append("ns", pExpCtx->ns.ns()); auto shardName = _mongod->getShardName(pExpCtx->opCtx); if (!shardName.empty()) { builder.append("shard", shardName); } builder.append("host", getHostNameCachedAndPort()); builder.appendDate("localTime", jsTime()); if (_collStatsSpec.hasField("latencyStats")) { // If the latencyStats field exists, it must have been validated as an object when parsing. bool includeHistograms = false; if (_collStatsSpec["latencyStats"].type() == BSONType::Object) { includeHistograms = _collStatsSpec["latencyStats"]["histograms"].boolean(); } _mongod->appendLatencyStats(pExpCtx->ns, includeHistograms, &builder); } if (_collStatsSpec.hasField("storageStats")) { // If the storageStats field exists, it must have been validated as an object when parsing. BSONObjBuilder storageBuilder(builder.subobjStart("storageStats")); Status status = _mongod->appendStorageStats( pExpCtx->ns, _collStatsSpec["storageStats"].Obj(), &storageBuilder); storageBuilder.doneFast(); if (!status.isOK()) { uasserted(40280, str::stream() << "Unable to retrieve storageStats in $collStats stage: " << status.reason()); } } if (_collStatsSpec.hasField("count")) { Status status = _mongod->appendRecordCount(pExpCtx->ns, &builder); if (!status.isOK()) { uasserted(40481, str::stream() << "Unable to retrieve count in $collStats stage: " << status.reason()); } } return {Document(builder.obj())}; }
std::string prettyHostName() { return (serverGlobalParams.port == ServerGlobalParams::DefaultDBPort ? getHostNameCached() : getHostNameCachedAndPort()); }