Network: Each interface now keeps its own statistics

this allows more detailed analysis.
This commit is contained in:
Dylan K. Taylor 2019-04-18 19:57:40 +01:00
parent f933ce31dd
commit 7720a0534e
3 changed files with 51 additions and 13 deletions

View File

@ -68,4 +68,23 @@ interface AdvancedNetworkInterface extends NetworkInterface{
* @param string $regex * @param string $regex
*/ */
public function addRawPacketFilter(string $regex) : void; public function addRawPacketFilter(string $regex) : void;
/**
* Returns the number of bytes sent on this network interface since the last statistics reset.
*
* @return int
*/
public function getBytesSent() : int;
/**
* Returns the number of bytes received on this network interface since the last statistics reset.
*
* @return int
*/
public function getBytesReceived() : int;
/**
* Resets the upload/download statistics to zero.
*/
public function resetTrafficStats() : void;
} }

View File

@ -49,9 +49,6 @@ class Network{
/** @var int[] */ /** @var int[] */
private $bannedIps = []; private $bannedIps = [];
private $upload = 0;
private $download = 0;
/** @var string */ /** @var string */
private $name; private $name;
@ -67,22 +64,26 @@ class Network{
$this->logger = $logger; $this->logger = $logger;
} }
public function addStatistics(float $upload, float $download) : void{
$this->upload += $upload;
$this->download += $download;
}
public function getUpload() : float{ public function getUpload() : float{
return $this->upload; $result = 0;
foreach($this->advancedInterfaces as $interface){
$result += $interface->getBytesSent();
}
return $result;
} }
public function getDownload() : float{ public function getDownload() : float{
return $this->download; $result = 0;
foreach($this->advancedInterfaces as $interface){
$result += $interface->getBytesReceived();
}
return $result;
} }
public function resetStatistics() : void{ public function resetStatistics() : void{
$this->upload = 0; foreach($this->advancedInterfaces as $interface){
$this->download = 0; $interface->resetTrafficStats();
}
} }
/** /**

View File

@ -77,6 +77,11 @@ class RakLibInterface implements ServerInstance, AdvancedNetworkInterface{
/** @var SleeperNotifier */ /** @var SleeperNotifier */
private $sleeper; private $sleeper;
/** @var int */
private $sendBytes = 0;
/** @var int */
private $receiveBytes = 0;
public function __construct(Server $server){ public function __construct(Server $server){
$this->server = $server; $this->server = $server;
@ -221,7 +226,8 @@ class RakLibInterface implements ServerInstance, AdvancedNetworkInterface{
public function handleOption(string $option, string $value) : void{ public function handleOption(string $option, string $value) : void{
if($option === "bandwidth"){ if($option === "bandwidth"){
$v = unserialize($value); $v = unserialize($value);
$this->network->addStatistics($v["up"], $v["down"]); $this->sendBytes = $v["up"];
$this->receiveBytes = $v["down"];
} }
} }
@ -243,4 +249,16 @@ class RakLibInterface implements ServerInstance, AdvancedNetworkInterface{
$this->sessions[$sessionId]->updatePing($pingMS); $this->sessions[$sessionId]->updatePing($pingMS);
} }
} }
public function getBytesSent() : int{
return $this->sendBytes;
}
public function getBytesReceived() : int{
return $this->receiveBytes;
}
public function resetTrafficStats() : void{
$this->sendBytes = $this->receiveBytes = 0;
}
} }