Add IWP session stats to JSON API

pull/1088/head
Stephen Shelton 4 years ago
parent 0271f178d2
commit 2279ebeb40
No known key found for this signature in database
GPG Key ID: EE4BADACCE8B631C

@ -196,6 +196,7 @@ namespace llarp
{
msg.FlushUnAcked(util::memFn(&Session::EncryptAndSend, this), now);
}
m_Stats.totalInFlightTX++;
LogDebug("send message ", msgid);
return true;
}
@ -298,15 +299,25 @@ namespace llarp
util::StatusObject
Session::ExtractStatus() const
{
return {{"tx", m_CurrentTX},
{"rx", m_CurrentRX},
{"state", m_State},
const auto now = m_Parent->Now();
return {{"txRateCurrent", m_Stats.currentRateTX},
{"rxRateCurrent", m_Stats.currentRateRX},
{"rxPktsRcvd", m_Stats.totalPacketsRX},
{"txPktsAcked", m_Stats.totalAckedTX},
{"txPktsDropped", m_Stats.totalDroppedTX},
{"txPktsInFlight", m_Stats.totalInFlightTX},
{"state", toString(m_State)},
{"inbound", m_Inbound},
{"replayFilter", m_ReplayFilter.size()},
{"txMsgs", m_TXMsgs.size()},
{"rxMsgs", m_RXMsgs.size()},
{"txMsgQueueSize", m_TXMsgs.size()},
{"rxMsgQueueSize", m_RXMsgs.size()},
{"remoteAddr", m_RemoteAddr.ToString()},
{"remoteRC", m_RemoteRC.ExtractStatus()}};
{"remoteRC", m_RemoteRC.ExtractStatus()},
{"created", m_CreatedAt},
{"uptime", (now - m_CreatedAt)}};
}
bool
@ -328,8 +339,8 @@ namespace llarp
void
Session::ResetRates()
{
m_CurrentTX = m_TXRate;
m_CurrentRX = m_RXRate;
m_Stats.currentRateTX = m_TXRate;
m_Stats.currentRateRX = m_RXRate;
m_RXRate = 0;
m_TXRate = 0;
}
@ -350,6 +361,9 @@ namespace llarp
{
if(itr->second.IsTimedOut(now))
{
m_Stats.totalDroppedTX++;
m_Stats.totalInFlightTX--;
LogWarn("Dropped unacked packet to ", m_RemoteAddr);
itr->second.InformTimeout();
itr = m_TXMsgs.erase(itr);
}
@ -661,6 +675,8 @@ namespace llarp
auto itr = m_TXMsgs.find(acked);
if(itr != m_TXMsgs.end())
{
m_Stats.totalAckedTX++;
m_Stats.totalInFlightTX--;
itr->second.Completed();
m_TXMsgs.erase(itr);
}
@ -880,6 +896,9 @@ namespace llarp
Session::Recv_LL(ILinkSession::Packet_t data)
{
m_RXRate += data.size();
// TODO: differentiate between good and bad RX packets here
m_Stats.totalPacketsRX++;
switch(m_State)
{
case State::Initial:
@ -923,5 +942,25 @@ namespace llarp
}
return true;
}
std::string
Session::toString(State state)
{
switch(state)
{
case State::Initial:
return "Initial";
case State::Introduction:
return "Introduction";
case State::LinkIntro:
return "LinkIntro";
case State::Ready:
return "Ready";
case State::Closed:
return "Close";
default:
return "Invalid";
}
}
} // namespace iwp
} // namespace llarp

@ -143,7 +143,23 @@ namespace llarp
/// we are closed now
Closed
};
static std::string toString(State state);
State m_State;
struct Stats
{
// rate
uint64_t currentRateRX = 0;
uint64_t currentRateTX = 0;
uint64_t totalPacketsRX = 0;
uint64_t totalAckedTX = 0;
uint64_t totalDroppedTX = 0;
uint64_t totalInFlightTX = 0;
};
Stats m_Stats;
/// are we inbound session ?
const bool m_Inbound;
/// parent link layer
@ -165,12 +181,10 @@ namespace llarp
llarp_time_t m_LastTX = 0;
llarp_time_t m_LastRX = 0;
// accumulate for periodic rate calculation
uint64_t m_TXRate = 0;
uint64_t m_RXRate = 0;
uint64_t m_CurrentTX = 0;
uint64_t m_CurrentRX = 0;
llarp_time_t m_ResetRatesAt = 0;
uint64_t m_TXID = 0;

Loading…
Cancel
Save