mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-04-18 17:24:03 +03:00
adopt common qlogger
Summary: Context: T210787480 I want to add a client-side qlog that will allow us to inspect client behavior during the 0rtt bug. **Design** I wan't to use this to implement my "mvfst mobile" qlogger, I think it should be managed by a `mvfst_mobile` buck target accordingly. Is there any reason we can't? Reviewed By: kvtsoy Differential Revision: D71151038 fbshipit-source-id: 3de715efa8fec688422b4f4f2d5e8d93c484b2d4
This commit is contained in:
parent
288dd2c181
commit
19bcae5080
@ -69,3 +69,13 @@ mvfst_cpp_library(
|
||||
"//quic/codec:types",
|
||||
],
|
||||
)
|
||||
|
||||
mvfst_cpp_library(
|
||||
name = "qlogger_common",
|
||||
srcs = ["QLoggerCommon.cpp"],
|
||||
headers = ["QLoggerCommon.h"],
|
||||
exported_deps = [
|
||||
":base_qlogger",
|
||||
":qlogger_constants",
|
||||
],
|
||||
)
|
||||
|
305
quic/logging/QLoggerCommon.cpp
Normal file
305
quic/logging/QLoggerCommon.cpp
Normal file
@ -0,0 +1,305 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include <quic/logging/QLoggerCommon.h>
|
||||
|
||||
namespace quic {
|
||||
|
||||
QLoggerCommon::QLoggerCommon(
|
||||
quic::VantagePoint vantagePoint,
|
||||
std::string protocolTypeIn)
|
||||
: BaseQLogger(vantagePoint, std::move(protocolTypeIn)) {}
|
||||
|
||||
void QLoggerCommon::addPacket(
|
||||
const quic::RegularQuicPacket& regularPacket,
|
||||
uint64_t packetSize) {
|
||||
logTrace(createPacketEvent(regularPacket, packetSize));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addPacket(
|
||||
const quic::VersionNegotiationPacket& versionPacket,
|
||||
uint64_t packetSize,
|
||||
bool isPacketRecvd) {
|
||||
logTrace(createPacketEvent(versionPacket, packetSize, isPacketRecvd));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addPacket(
|
||||
const quic::RetryPacket& retryPacket,
|
||||
uint64_t packetSize,
|
||||
bool isPacketRecvd) {
|
||||
logTrace(createPacketEvent(retryPacket, packetSize, isPacketRecvd));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addPacket(
|
||||
const quic::RegularQuicWritePacket& writePacket,
|
||||
uint64_t packetSize) {
|
||||
logTrace(createPacketEvent(writePacket, packetSize));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addConnectionClose(
|
||||
std::string error,
|
||||
std::string reason,
|
||||
bool drainConnection,
|
||||
bool sendCloseImmediately) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
|
||||
logTrace(std::make_unique<quic::QLogConnectionCloseEvent>(
|
||||
std::move(error),
|
||||
std::move(reason),
|
||||
drainConnection,
|
||||
sendCloseImmediately,
|
||||
refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addTransportSummary(const TransportSummaryArgs& args) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
logTrace(std::make_unique<quic::QLogTransportSummaryEvent>(
|
||||
args.totalBytesSent,
|
||||
args.totalBytesRecvd,
|
||||
args.sumCurWriteOffset,
|
||||
args.sumMaxObservedOffset,
|
||||
args.sumCurStreamBufferLen,
|
||||
args.totalBytesRetransmitted,
|
||||
args.totalStreamBytesCloned,
|
||||
args.totalBytesCloned,
|
||||
args.totalCryptoDataWritten,
|
||||
args.totalCryptoDataRecvd,
|
||||
args.currentWritableBytes,
|
||||
args.currentConnFlowControl,
|
||||
args.totalPacketsSpuriouslyMarkedLost,
|
||||
args.finalPacketLossReorderingThreshold,
|
||||
args.finalPacketLossTimeReorderingThreshDividend,
|
||||
args.usedZeroRtt,
|
||||
args.quicVersion,
|
||||
args.dsrPacketCount,
|
||||
args.alpn,
|
||||
refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addCongestionMetricUpdate(
|
||||
uint64_t bytesInFlight,
|
||||
uint64_t currentCwnd,
|
||||
std::string congestionEvent,
|
||||
std::string state,
|
||||
std::string recoveryState) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
|
||||
logTrace(std::make_unique<quic::QLogCongestionMetricUpdateEvent>(
|
||||
bytesInFlight,
|
||||
currentCwnd,
|
||||
std::move(congestionEvent),
|
||||
std::move(state),
|
||||
std::move(recoveryState),
|
||||
refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addBandwidthEstUpdate(
|
||||
uint64_t bytes,
|
||||
std::chrono::microseconds interval) {
|
||||
logTrace(std::make_unique<quic::QLogBandwidthEstUpdateEvent>(
|
||||
bytes,
|
||||
interval,
|
||||
|
||||
std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch())));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addAppLimitedUpdate() {
|
||||
logTrace(std::make_unique<quic::QLogAppLimitedUpdateEvent>(
|
||||
true,
|
||||
|
||||
std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch())));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addAppUnlimitedUpdate() {
|
||||
logTrace(std::make_unique<quic::QLogAppLimitedUpdateEvent>(
|
||||
false,
|
||||
|
||||
std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch())));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addPacketDrop(size_t packetSize, std::string dropReason) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
|
||||
logTrace(std::make_unique<quic::QLogPacketDropEvent>(
|
||||
packetSize, std::move(dropReason), refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addPacingMetricUpdate(
|
||||
uint64_t pacingBurstSizeIn,
|
||||
std::chrono::microseconds pacingIntervalIn) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
|
||||
logTrace(std::make_unique<quic::QLogPacingMetricUpdateEvent>(
|
||||
pacingBurstSizeIn, pacingIntervalIn, refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addPacingObservation(
|
||||
std::string actual,
|
||||
std::string expected,
|
||||
std::string conclusion) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
|
||||
logTrace(std::make_unique<quic::QLogPacingObservationEvent>(
|
||||
std::move(actual), std::move(expected), std::move(conclusion), refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addAppIdleUpdate(std::string idleEvent, bool idle) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
|
||||
logTrace(std::make_unique<quic::QLogAppIdleUpdateEvent>(
|
||||
std::move(idleEvent), idle, refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addDatagramReceived(uint64_t dataLen) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
|
||||
logTrace(std::make_unique<quic::QLogDatagramReceivedEvent>(dataLen, refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addLossAlarm(
|
||||
quic::PacketNum largestSent,
|
||||
uint64_t alarmCount,
|
||||
uint64_t outstandingPackets,
|
||||
std::string type) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
|
||||
logTrace(std::make_unique<quic::QLogLossAlarmEvent>(
|
||||
largestSent, alarmCount, outstandingPackets, std::move(type), refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addPacketsLost(
|
||||
quic::PacketNum largestLostPacketNum,
|
||||
uint64_t lostBytes,
|
||||
uint64_t lostPackets) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
|
||||
logTrace(std::make_unique<quic::QLogPacketsLostEvent>(
|
||||
largestLostPacketNum, lostBytes, lostPackets, refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addTransportStateUpdate(std::string update) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
|
||||
logTrace(std::make_unique<quic::QLogTransportStateUpdateEvent>(
|
||||
std::move(update), refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addPacketBuffered(
|
||||
quic::ProtectionType protectionType,
|
||||
uint64_t packetSize) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
|
||||
logTrace(std::make_unique<quic::QLogPacketBufferedEvent>(
|
||||
protectionType, packetSize, refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addMetricUpdate(
|
||||
std::chrono::microseconds latestRtt,
|
||||
std::chrono::microseconds mrtt,
|
||||
std::chrono::microseconds srtt,
|
||||
std::chrono::microseconds ackDelay) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
|
||||
logTrace(std::make_unique<quic::QLogMetricUpdateEvent>(
|
||||
latestRtt, mrtt, srtt, ackDelay, refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addStreamStateUpdate(
|
||||
quic::StreamId id,
|
||||
std::string update,
|
||||
folly::Optional<std::chrono::milliseconds> timeSinceStreamCreation) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
|
||||
logTrace(std::make_unique<quic::QLogStreamStateUpdateEvent>(
|
||||
id,
|
||||
std::move(update),
|
||||
std::move(timeSinceStreamCreation),
|
||||
vantagePoint,
|
||||
refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addConnectionMigrationUpdate(bool intentionalMigration) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
logTrace(std::make_unique<quic::QLogConnectionMigrationEvent>(
|
||||
intentionalMigration, vantagePoint, refTime));
|
||||
}
|
||||
void QLoggerCommon::addPathValidationEvent(bool success) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
logTrace(std::make_unique<quic::QLogPathValidationEvent>(
|
||||
success, vantagePoint, refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addPriorityUpdate(
|
||||
quic::StreamId streamId,
|
||||
uint8_t urgency,
|
||||
bool incremental) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
logTrace(std::make_unique<quic::QLogPriorityUpdateEvent>(
|
||||
streamId, urgency, incremental, refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addL4sWeightUpdate(
|
||||
double l4sWeight,
|
||||
uint32_t newEct1,
|
||||
uint32_t newCe) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
logTrace(std::make_unique<quic::QLogL4sWeightUpdateEvent>(
|
||||
l4sWeight, newEct1, newCe, refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::addNetworkPathModelUpdate(
|
||||
uint64_t inflightHi,
|
||||
uint64_t inflightLo,
|
||||
uint64_t bandwidthHiBytes,
|
||||
std::chrono::microseconds bandwidthHiInterval,
|
||||
uint64_t bandwidthLoBytes,
|
||||
std::chrono::microseconds bandwidthLoInterval) {
|
||||
auto refTime = std::chrono::duration_cast<std::chrono::microseconds>(
|
||||
std::chrono::steady_clock::now().time_since_epoch());
|
||||
logTrace(std::make_unique<quic::QLogNetworkPathModelUpdateEvent>(
|
||||
inflightHi,
|
||||
inflightLo,
|
||||
bandwidthHiBytes,
|
||||
bandwidthHiInterval,
|
||||
bandwidthLoBytes,
|
||||
bandwidthLoInterval,
|
||||
refTime));
|
||||
}
|
||||
|
||||
void QLoggerCommon::setDcid(folly::Optional<quic::ConnectionId> connID) {
|
||||
if (connID.hasValue()) {
|
||||
dcid = connID;
|
||||
}
|
||||
}
|
||||
void QLoggerCommon::setScid(folly::Optional<quic::ConnectionId> connID) {
|
||||
if (connID.hasValue()) {
|
||||
scid = connID;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace quic
|
105
quic/logging/QLoggerCommon.h
Normal file
105
quic/logging/QLoggerCommon.h
Normal file
@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <quic/logging/BaseQLogger.h>
|
||||
#include <quic/logging/QLoggerConstants.h>
|
||||
|
||||
namespace quic {
|
||||
|
||||
class QLoggerCommon : public quic::BaseQLogger {
|
||||
public:
|
||||
explicit QLoggerCommon(
|
||||
quic::VantagePoint vantagePoint,
|
||||
std::string protocolType = quic::kHTTP3ProtocolType);
|
||||
~QLoggerCommon() override = default;
|
||||
void addPacket(
|
||||
const quic::RegularQuicPacket& regularPacket,
|
||||
uint64_t packetSize) override;
|
||||
void addPacket(
|
||||
const quic::VersionNegotiationPacket& versionPacket,
|
||||
uint64_t packetSize,
|
||||
bool isPacketRecvd) override;
|
||||
void addPacket(
|
||||
const quic::RetryPacket& retryPacket,
|
||||
uint64_t packetSize,
|
||||
bool isPacketRecvd) override;
|
||||
void addPacket(
|
||||
const quic::RegularQuicWritePacket& writePacket,
|
||||
uint64_t packetSize) override;
|
||||
void addConnectionClose(
|
||||
std::string error,
|
||||
std::string reason,
|
||||
bool drainConnection,
|
||||
bool sendCloseImmediately) override;
|
||||
void addTransportSummary(const TransportSummaryArgs& args) override;
|
||||
void addCongestionMetricUpdate(
|
||||
uint64_t bytesInFlight,
|
||||
uint64_t currentCwnd,
|
||||
std::string congestionEvent,
|
||||
std::string state,
|
||||
std::string recoveryState) override;
|
||||
void addBandwidthEstUpdate(uint64_t bytes, std::chrono::microseconds interval)
|
||||
override;
|
||||
void addAppLimitedUpdate() override;
|
||||
void addAppUnlimitedUpdate() override;
|
||||
void addPacingMetricUpdate(
|
||||
uint64_t pacingBurstSizeIn,
|
||||
std::chrono::microseconds pacingIntervalIn) override;
|
||||
void addPacingObservation(
|
||||
std::string actual,
|
||||
std::string expected,
|
||||
std::string conclusion) override;
|
||||
void addAppIdleUpdate(std::string idleEvent, bool idle) override;
|
||||
void addPacketDrop(size_t packetSizeIn, std::string dropReasonIn) override;
|
||||
void addDatagramReceived(uint64_t dataLen) override;
|
||||
void addLossAlarm(
|
||||
quic::PacketNum largestSent,
|
||||
uint64_t alarmCount,
|
||||
uint64_t outstandingPackets,
|
||||
std::string type) override;
|
||||
void addPacketsLost(
|
||||
quic::PacketNum largestLostPacketNum,
|
||||
uint64_t lostBytes,
|
||||
uint64_t lostPackets) override;
|
||||
void addTransportStateUpdate(std::string update) override;
|
||||
void addPacketBuffered(
|
||||
quic::ProtectionType protectionType,
|
||||
uint64_t packetSize) override;
|
||||
void addMetricUpdate(
|
||||
std::chrono::microseconds latestRtt,
|
||||
std::chrono::microseconds mrtt,
|
||||
std::chrono::microseconds srtt,
|
||||
std::chrono::microseconds ackDelay) override;
|
||||
void addStreamStateUpdate(
|
||||
quic::StreamId id,
|
||||
std::string update,
|
||||
folly::Optional<std::chrono::milliseconds> timeSinceStreamCreation)
|
||||
override;
|
||||
void addConnectionMigrationUpdate(bool intentionalMigration) override;
|
||||
void addPathValidationEvent(bool success) override;
|
||||
void addPriorityUpdate(
|
||||
quic::StreamId streamId,
|
||||
uint8_t urgency,
|
||||
bool incremental) override;
|
||||
void addL4sWeightUpdate(double l4sWeight, uint32_t newEct1, uint32_t newCe)
|
||||
override;
|
||||
void addNetworkPathModelUpdate(
|
||||
uint64_t inflightHi,
|
||||
uint64_t inflightLo,
|
||||
uint64_t bandwidthHiBytes,
|
||||
std::chrono::microseconds bandwidthHiInterval,
|
||||
uint64_t bandwidthLoBytes,
|
||||
std::chrono::microseconds bandwidthLoInterval) override;
|
||||
void setDcid(folly::Optional<quic::ConnectionId> connID) override;
|
||||
void setScid(folly::Optional<quic::ConnectionId> connID) override;
|
||||
|
||||
virtual void logTrace(std::unique_ptr<quic::QLogEvent> event) = 0;
|
||||
};
|
||||
|
||||
} // namespace quic
|
Loading…
x
Reference in New Issue
Block a user